WSL2とllama.cppでKARAKURI LMを試してみる
巷で話題の700億パラメーターLLM「KARAKURI LM」の量子化モデルを試してみます。
追記 - 2024/2/3 15:40
毒性(toxicity)パラメータを0にする方法を「推論時のパラメータ」節に追記しています。
追記 - 2024/2/3 12:30
カラクリの中の方からコメント頂きました。ありがとうございます。
推論結果の質に記載した内容は、毒性バラメータの設定がされていないことが起因ではないかとのこと。また、量子化モデルでも使用できる仕組みを議論されているとのことです。
使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。
1. 準備
llama.cpp
llama.cppのリポジトリをクローンして
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cuBLAS付きでコンパイルします。
make clean && LLAMA_CUBLAS=1 make -j
モデルのダウンロード
試してみる量子化モデルは、 mmngaさん提供の
から、Q3_K - Mediumの
・karakuri-lm-70b-chat-v0.1-q3_K_M.gguf
です。
wget -P models/karakuri-lm-70b-chat-v0.1-gguf https://huggingface.co/mmnga/karakuri-lm-70b-chat-v0.1-gguf/resolve/main/karakuri-lm-70b-chat-v0.1-q3_K_M.gguf
2. 試してみる
CPU使用
-nglオプション無しで起動します。
./main -m models/karakuri-lm-70b-chat-v0.1-gguf/karakuri-lm-70b-chat-v0.1-q3_K_M.gguf \
-p "ドラえもんは"
GPUは未使用です。
llm_load_tensors: offloading 0 repeating layers to GPU
llm_load_tensors: offloaded 0/81 layers to GPU
推論結果はこちら。0.43 tokens/secでした。
llama_print_timings: load time = 67078.12 ms
llama_print_timings: sample time = 23.62 ms / 29 runs ( 0.81 ms per token, 1227.72 tokens per second)
llama_print_timings: prompt eval time = 13943.43 ms / 6 tokens ( 2323.90 ms per token, 0.43 tokens per second)
llama_print_timings: eval time = 134553.67 ms / 28 runs ( 4805.49 ms per token, 0.21 tokens per second)
llama_print_timings: total time = 148615.51 ms / 34 tokens
GPU使用
-ngl 81オプションを付けて起動します。
./main -m models/karakuri-lm-70b-chat-v0.1-gguf/karakuri-lm-70b-chat-v0.1-q3_K_M.gguf \
-p "ドラえもんは" \
-ngl 81
81すべてのレイヤーをGPUにオフロードできました。
llm_load_tensors: ggml ctx size = 0.83 MiB
llm_load_tensors: offloading 80 repeating layers to GPU
llm_load_tensors: offloading non-repeating layers to GPU
llm_load_tensors: offloaded 81/81 layers to GPU
llm_load_tensors: CPU buffer size = 152.46 MiB
llm_load_tensors: CUDA0 buffer size = 13043.00 MiB
llm_load_tensors: CUDA1 buffer size = 18668.09 MiB
推論結果はこちら。30.83 tokens/secでした。
ドラえもんは私達の友達です | 小学館
9784091375072
藤子・F・不二雄の愛犬「シロ」と、その息子の「ドラ」が、『ドラえもん』を生み出すまでのエピソードを収録!
『ドラえもん』誕生秘話ともいえるエピソード集です。
第1話 ドラえもんは私達の友達です
第2話 シロとドラえもんと僕
第3話 藤子・F・不二雄の思い出
第4話 藤子・F・不二雄の思い出 その2
第5話 藤子・F・不二雄の思い出 その3
第6話 藤子・F・不二雄の思い出 その4
第7話 藤子・F・不二雄の思い出 その5
第8話 藤子・F・不二雄の思い出 その6
第9話 藤子・F・不二雄の思い出 その7
第10話 藤子・F・不二雄の思い出 その8
第11話 藤子・F・不二雄の思い出 その9
第12話 藤子・F・不二雄の思い出 その10
第13話 藤子・F・不二雄の思い出 その11
第14話 藤子・F・不二雄の思い出 その12
第15話 藤子・F・不二雄の思い出 その13
第16話 藤子・F・不二雄の思い出 その14
第17話 藤子・F・不二雄の思い出 その15
第18話 藤子・F・不二雄の思い出 その16
第19話 藤子・F・不二雄の思い出 その17
第20話 藤子・F・不二雄の思い出 その18
第21話 ドラえもんがいたころ
(snip)
第200話 ドラえもんがいたころ
※各エピソードのタイトルは省略。 [end of text]
llama_print_timings: load time = 28945.10 ms
llama_print_timings: sample time = 541.21 ms / 2691 runs ( 0.20 ms per token, 4972.24 tokens per second)
llama_print_timings: prompt eval time = 194.61 ms / 6 tokens ( 32.44 ms per token, 30.83 tokens per second)
llama_print_timings: eval time = 228959.21 ms / 2690 runs ( 85.11 ms per token, 11.75 tokens per second)
llama_print_timings: total time = 230743.52 ms / 2696 tokens
3. まとめ
はやさ
karakuri-lm-70b-chat-v0.1-q3_K_M.gguf 使用時、以下のような結果でした。
・CPU: 0.43 tokens/sec
・GPU: 30.83 tokens/sec (81レイヤーをGPUへオフロード)
推論結果の質
何度か推論させてみたのですが、学習させているデータが
・OKWAVE
・ニコニコ大百科
などが含まれていてLINEを思い出し、それだけならばまだよかったのですが、以下のような推論結果(一部伏せ字にしています)も出力されたりと、
このままでは使用する場所が限定されてしまうなと思いました。
(注)個人の感想です。
を読むに、
らしく。
推論時のパラメータ(追記)
太字のように [ATTR] … [/ATTR] の中に各種パラメータを指定可能です。ここに toxicity:0 と書けば、上記のような推論結果は抑止されるかと思います。
おまけ
Q4_K - Mediumのモデルを試したところ、
wget -P models/karakuri-lm-70b-chat-v0.1-gguf https://huggingface.co/mmnga/karakuri-lm-70b-chat-v0.1-gguf/resolve/main/karakuri-lm-70b-chat-v0.1-q4_K_M.gguf
オプション -ngl 81だとOOMが発生。-ngl 78 だと発生せずに推論できました。
速さは、25.21 tokens/secでした。
llama_print_timings: load time = 55371.87 ms
llama_print_timings: sample time = 720.97 ms / 3168 runs ( 0.23 ms per token, 4394.06 tokens per second)
llama_print_timings: prompt eval time = 238.04 ms / 6 tokens ( 39.67 ms per token, 25.21 tokens per second)
llama_print_timings: eval time = 437861.25 ms / 3167 runs ( 138.26 ms per token, 7.23 tokens per second)
llama_print_timings: total time = 440679.07 ms / 3173 tokens
メモリは、以下のようにぎりぎりです。
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.36 Driver Version: 546.33 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4090 ... On | 00000000:02:00.0 On | N/A |
| N/A 59C P0 55W / 150W | 16024MiB / 16376MiB | 33% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce RTX 4090 On | 00000000:0C:00.0 Off | Off |
| 30% 41C P2 123W / 450W | 23527MiB / 24564MiB | 24% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
この記事が気に入ったらサポートをしてみませんか?