見出し画像

【llama.cpp】CPUとRAM、どっちが重要?

  • llama.cppのCPUオンリーの推論について

  • CPUでもテキスト生成自体は意外にスムーズ。なのに、最初にコンテキストを読み込むのがGPUと比べて遅いのが気になる。

  • ちょっと調べたところ、以下のポストが非常に詳しかった。

CPUにおけるLLama.cppの高速化(超抄訳)

この記事は特定の環境(AMD Ryzen 9 7950X3D)での検証結果をもとにしており、一般化できる部分とそうでない部分があることにあらかじめご注意ください。

もっとも重要な点は、プロンプト処理速度(プロンプトの追加から出力開始までの速度)テキスト生成速度(そのあとの出力速度)では、スピードに影響する要因が違うということです。

プロンプト処理速度(prompt eval time)は:
- CPUのコア数・周波数によって決まります。RAMの速度は関係ありません。
- モデルのパラメータ数が2倍になると、プロンプト処理速度はおよそ2倍遅くなります。
- しかしパラメータ数が同じならば、モデルのファイルサイズ(量子化による圧縮度)は必ずしも影響しません。例えば、Q3_KとQ5_Kではファイルサイズが大きく異なりますが、同じパラメータ数ならばプロンプト処理速度は同程度です。

テキスト生成速度(eval time)は:
- キャッシュやRAMの速度によって決まります。CPU性能はほとんど関係ありません。
- モデルファイルサイズが2倍になると、テキスト生成速度は2倍遅くなります。
- ここではパラメータ数ではなくファイルサイズが重要です。同じパラメータ数でも、より圧縮度の高い量子化モデルを使えば、それだけテキスト生成速度は速くなります。

つまり、あなたのLLMの使い方によって重視すべき要素が変化します。

- 例えば、LLMに長大なコンテキストを与えてYES/NOで回答を求めるような用途では、プロンプト処理速度/CPU性能/モデルパラメータ数が重要です。

- 逆に、プロンプトは短いけれども長い文章の出力を求めるような用途では、テキスト生成速度/RAM性能/ファイルサイズがより重要になります。

  • 「CPU推論のボトルネックはCPUじゃなくてメモリの性能」と聞くものの、最初のプロンプト処理の速さはCPU次第らしい。

    • GPUと差がつきやすいのはこっち。メモリに余裕があるなら読み込んだままにしておけばいいだけ、という気もする。

  • このポストは6か月前のものなので、llama.cppのアップデートにより事情が変わっている部分はありそう。

  • 例えばスレッド数(-t)を調整してプロンプト処理が速くなったという記述があるが、いまllama.cppのREADMEを見ると-tは物理コア数に一致させておくよう推奨されている。

    • 自分の環境(8 core, hyperthreading)だと-t 8でも-t 14でも特に変化なし。

  • あと、同じllama.cppをローダーに使っていてもUIによってプロンプト処理速度が違うという話も見かけた。