2023年6月9日金曜日

Stable Diffusionをする

 おじさん、特にStable Diffusionには興味ないんですが、c++用のAIライブラリをmake使わずにひたすらいろいろなプラットフォーム用移植する勉強の一環で、Stable DiffusionのC++版をスクラッチでフルビルドしてみました。


論文:High-Resolution Image Synthesis with Latent Diffusion Models", Rombach, R., Blattmann, A., Lorenz, D., Esser, P., Ommer, B. (CVPR'22)

https://arxiv.org/abs/2112.10752


論文解説

https://zenn.dev/tomo_makes/books/4ed97f06d02a38/viewer/142053


ソース

https://github.com/EdVince/Stable-Diffusion-NCNN


ncnnという中国語?のライブラリを使わないといけないのね。

txt2imgとかimg2imgとかいろんなものが含まれています。

これ本当に動くのかなぁ。





---------------------------------


----------------[  init   ]---------------- 6.21G / 6.22G

----------------[ prompt  ]---------------- 6.22G / 6.22G

----------------[ encoder ]---------------- 6.41G / 6.41G

----------------[diffusion]----------------

step: 1/37      102223.67ms

step: 2/37


---------------------------------


うーん、これWindowsでCPUのみで行うと、1stepに100秒かかります。

これ結果出すのに1時間かかるね。


なんかテストは少女を生成しないといけないようなので、生成してみました。

---------------------------------


---------------------------------

できた!



2023年6月2日金曜日

日本語の大規模言語モデルRinnaを動かす

おじさん1日1AIをしています。

毎日AIの勉強を一つします。

毎日2、3時間くらいで、調べて、データ作成して、ビルドして、実験して、かなり大変。

誰かおじさんに働かなくて良いだけのお金くれないかなぁ。

そうしたらおじさんAIの研究をします。


最近LoRAで日本語にファインチューニングした言語モデルが増えてきました。

そのおかげで、おじさんのように、GPUなしのC++で大規模言語モデルの学習やファインチューニングをしようとしている人も増えてきました。


https://zenn.dev/syoyo/articles/946c17666e10fb


ついにおじさんのやり方がが主流になるときが。

でもおじさん夜な夜な適当に勉強しているので、みんなに先を越されている・・・。

なるほど、最近ファインチューニング関係の論文が凄いのね。


QLoRA

https://github.com/artidoro/qlora/tree/main

https://zenn.dev/syoyo/articles/6918defde8a807

QLoRAだと微分値を求めるところが少なくGPU一枚でファインチューニングできるらしい


Fine-Tuning Language Models with Just Forward Passes

https://github.com/princeton-nlp/MeZO

https://arxiv.org/abs/2305.17333

フォワードのみだからC++で簡単にファインチューニングできる?



上記のサイトによると昨日、日本語のRinnaのモデルがC++で動くようになったらしいので、さっそくおじさんもGPUなしPCでやってみました。

---------------------

redpajama.exe -m "C:\trash\pytorch\redpajama.cpp-master\examples\redpajama\scripts\output_dir\ggml-japanese-gpt-neox-3.6b-instruction-ppo-f16.bin" -p "こんにちは"

main: seed = 1685673288

gptneox.cpp: loading model from C:\trash\pytorch\redpajama.cpp-master\examples\redpajama\scripts\output_dir\ggml-japanese-gpt-neox-3.6b-instruction-ppo-f16.bin

gptneox.cpp: can't use mmap because tensors are not aligned; convert to new format to avoid this

gptneox_model_load_internal: format     = ggmf v1 (old version with no mmap support)

gptneox_model_load_internal: n_vocab    = 32000

gptneox_model_load_internal: n_ctx      = 512

gptneox_model_load_internal: n_embd     = 2816

gptneox_model_load_internal: n_head     = 22

gptneox_model_load_internal: n_layer    = 36

gptneox_model_load_internal: n_rot      = 128

gptneox_model_load_internal: use_parallel_residual = 0

gptneox_model_load_internal: ftype      = 1 (mostly F16)

gptneox_model_load_internal: n_parts    = 1

gptneox_model_load_internal: model size = 12B

gptneox_model_load_internal: ggml ctx size = 7048095.00 KiB

gptneox_model_load_internal: mem required  = 8930.91 MiB (+ 1608.00 MiB per state)

..................................................................................................

.

.

gptneox_init_from_file: kv self size  =  198.00 MiB


system_info: n_threads = 4 / 4 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 0 | ARM_FMA = 0 | F16C = 0 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 0 | VSX = 0 |

sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.800000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000

generate: n_ctx = 512, n_batch = 512, n_predict = 128, n_keep = 0



こんにちは。今日は曇りがちな天気でした。昨日は、家族とテニスをしたり、外でバーベキューをしたりしました。テニスはとても楽しかったです。また、海に行ったり、公園に行って散歩したりもしました。とてもリラックスできました。今日は、自宅でゆっくり過ごしています。ゲームやビデオを観たりして、楽しんでいます。明日は、家族と一緒にドライブに行く予定です。とても楽しみにしています。良い一日を過ごしてくださいね。



gptneox_print_timings:        load time =  8633.80 ms

gptneox_print_timings:      sample time =   127.78 ms /   128 runs   (    1.00 ms per run)

gptneox_print_timings: prompt eval time =  5968.87 ms /     4 tokens ( 1492.22 ms per token)

gptneox_print_timings:        eval time = 197970.49 ms /   127 runs   ( 1558.82 ms per run)

gptneox_print_timings:       total time = 206822.82 ms

---------------------


なんというきれいな日本語