~2018年頃の古いノートPCがあって、Asus Zenbook UX430Uです。当時としてはかなり強力で、i7-8550U CPU @ 1.80GHz(物理コア4基とIntelのiGPU)、16GBのRAM、そして追加のNVIDIA MX150 GPU(VRAM 2GB)を搭載しています。GPUはCADアプリケーションやPhotoshopのフィルターのような用途を想定していたものだと思います。これは明らかにゲーミングノートPCではありません。私はiGPUのみを使う形で、CinnamonデスクトップのLinux Mintを利用しており、MX150は他の用途に空けています。
このマシンでLLMを動かすことになるとは思ってもいませんでしたが、時々MX150 GPUを使って小さなPyTorchやTensorFlowのモデルを学習させていました。CPUだけで使うより多分3倍速いです。ただ、1-bit Bonsai 8Bモデルがリリースされたときは、このGPUで動かせるか試さずにはいられませんでした。
そこでPrismMLのllama.cppフォークを取り、CUDA対応でコンパイルしていろいろ試しました。VRAMがこれだけ限られているので-fitオプションはあまり役に立たないとすぐ判断し、オフにすることにしました。代わりにCLIパラメータを手動で最適化しました。q8_0の量子化KVキャッシュを使い、少しでもVRAMを節約するために-np 1を選びました。llama-benchがうまく協力してくれなかったので、llama-serverを使いました。私のテスト手順は、まずllama-serverを起動し、小さなウォームアップ用クエリを送り、その後に約1000トークンのプロンプトを持つベンチマーク用クエリを投げる、というものです。ベンチマークを正確に行うのは難しかったです。というのもGPUがすぐに約80℃まで熱くなりサーマルスロットリングが始まるためで、性能が30〜40%低下します。各ランの間にマシンを少し冷まして数回試し、最も高い数値を報告しました。
デフォルトのubatchサイズ512の場合、クラッシュせずに収められた最大コンテキストは5632でした。PPで52 tpsを得られます。TGは最初は9 tpsですが、GPUが熱くなりすぎるとすぐに7〜8、場合によってはそれ以下まで落ちます。
以下が私のllama-serverコマンドです:llama-server -m Bonsai-8B.gguf -ctk q8_0 -ctv q8_0 -np 1 -fit off -ub 512 -c 5632
さらに他のubatchサイズも試し、収められる最大コンテキストを最適化しました。以下は要約です:
ubatch ctx pp tg comments 1024 1024 54 9 Only generated a few tokens before running out of context. 512 5632 52 8 256 7680 48 8 128 8704 41 8 PPの速度は、少なくとも256以上の値では、ubatchサイズの影響があまり大きくないように見えます。ubatchの“おいしいところ”と言えるのであれば、だいたい256〜512です。TGの速度は、サーマルスロットリングが効き始めるまでは常に約8 tpsです。ubatchサイズが1024だと、最大コンテキスト長は1024で、かなり役に立ちません。
ノートPCのバッテリーを満充電にした状態で、ベンチマーク実行中の消費電力もコンセント側から測りました。おおよそ45〜50Wでした。これはGPU、CPU、ディスプレイ、そしてマシンのその他すべての電力使用を含みます。つまりTGの速度が8 tpsなら、エネルギー使用量はトークンあたり約6ジュールです。これは特に効率が良いとは言えません。
これって何か筋が通っていますか?そうは思いません。2GBのVRAMだけで8BパラメータのLLMを動かせるのはちょっと面白いですが、少なくともこのMX150 GPUはLLM推論には適していません。「可能だからやってみよう」以外に、使うための良い理由を思いつきません。この手の速度なら、たぶんCPUだけを使ったほうが良いでしょう。おまけに、システムRAMにはさらにずっと長いコンテキストを収められる可能性があります。
これは私のr/LocalLLaMAでの最初の投稿でした。楽しんでいただけたなら幸いです。この投稿を書く間に、AIは傷ついていませんし、そもそも相談もされていません。
[link] [comments]




