📝

古いパソコンで、Llama4 Scoutを動かす

に公開

古いパソコンで、Llama4 Scoutを動かす。

記事を見て、私のパソコンでも、実用的な速度で、llama4を動かせるのではないかと思い実験してみました。

llama4 scoutとは

  • unslothより
    「Llama 4 Scout(170億パラメータ、16個のエキスパート構成)は、1000万トークンというコンテキストウィンドウを備えており、同規模のモデルの中では最も優れています。」

モデルの大きさは、109Bととんでもなく巨大であり、デビュー当初はGPU1枚(H100)で動かせるとのうたい文句からデビューしたせいで、かなり世間から叩かれていた記憶があります。
 しかし、近頃そのMoEアーキテクチャの作りから、GPUオンリーで動作させる方針から、GPUに共有パートを載せてそれ以外をコンピュータRAMなどに乗せることでH100を用いなくても高速に生成できるようになるという手法が流行っています。
今回はその手法を用いて、私のLLMを動かすには低スペックな環境でこのAIの動作を行いたいと思います。

環境

パソコン

  • windows11
  • Ryzen 7 3700X (8core 16thread)
  • 2070super (vRam:8G)
  • Ram:64G(16*4 DDR-4:3200Hz)
  • Nvme SSD 2t

ソフトウェア・モデル

手順

  1. llama.cppの環境構築を済ます
    • まず、llama.cppの環境構築を済ましてください
    • 参考
  2. modelをダウンロードしてくる
    • 任意のフォルダーに任意の量子化のllama4 scoutモデルを入れます
  3. llama.cppを用いて動かす。
    それぞれの要素は環境に合わせて変更する
     llama-server -m .\llama\models\Unsloth\Llama-4-Scout-17B-16E-Instruct-GGUF\Llama-4-Scout-17B-16E-Instruct-UD-Q3_K_XL.gguf -ngl 999 -ot ".*ffn_.*_exps.*=CPU"
    

補足説明

llama.cppの実行コマンドについてclaude 3.7 sonnetさんに解説してもらった

このコマンド「llama-server -m .\llama\models\Unsloth\Llama-4-Scout-17B-16E-Instruct-GGUF\Llama-4-Scout-17B-16E-Instruct-UD-Q3_K_XL.gguf -ngl 999 -ot ".ffn_._exps.*=CPU"」の各要素について説明します:

  1. llama-server

    • LLamaサーバーを起動するための基本コマンドです。
    • これはLLaMa言語モデルを実行するためのインターフェースです。
  2. -m .\llama\models\Unsloth\Llama-4-Scout-17B-16E-Instruct-GGUF\Llama-4-Scout-17B-16E-Instruct-UD-Q3_K_XL.gguf

    • -mフラグはモデルファイルのパスを指定します
    • このパスはGGUF(GPT-Generated Unified Format)形式の量子化されたモデルファイルを指しています
    • 具体的にはLlama-4-Scout 17Bモデルで、Q3_K_XL量子化(モデルサイズを縮小しながら合理的なパフォーマンスを維持する圧縮技術)が適用されています
  3. -ngl 999

    • -nglは「number of GPU layers」(GPUレイヤーの数)を意味します
    • 999に設定することで、「可能な限り多くのレイヤーをGPUで処理する」という指示になります
    • これにより、モデルの可能な限り多くの部分をGPUにオフロードして、より高速な推論を実現します
  4. -ot ".*ffn_.*_exps.*=CPU"

    • -otは「override tensor」(テンソルのオーバーライド)を意味します
    • パラメータ".*ffn_.*_exps.*=CPU"は、特定のテンソル操作を対象とする正規表現パターンです
    • これは特定のフィードフォワードネットワーク(ffn)の指数関数演算をGPUではなくCPUで実行するよう強制しています
    • これはおそらく、GPUよりもCPUの方が効率的に実行できる特定の演算についてのパフォーマンス最適化です

このコマンドは、Llama-4-Scout 17Bモデルを使用してLlamaサーバーを起動し、モデルの大部分にGPUアクセラレーションを使用しようとしていますが、フィードフォワードニューラルネットワークレイヤーの特定の指数関数演算はCPUで実行するよう指示しています。このような構成は通常、特定のハードウェア能力とモデル特性に基づいてパフォーマンスを最適化するために使用されます。

大体あってると思いますが、自身はありません。勉強不足ですいませんm(__)m

結果

prompt eval time =    1290.41 ms /    15 tokens (   86.03 ms per token,    11.62 tokens per second)
       eval time =   40817.20 ms /   194 tokens (  210.40 ms per token,     4.75 tokens per second)
      total time =   42107.61 ms /   209 tokens
srv  update_slots: all slots are idle

約"5token/s"となかなかの数値になった
次はmaverickを動かしてみたい。

参考

Discussion