8GBのVRAMで35Bクラスのモデルを動かせるかどうかは、モデルの総パラメータ数だけでは決まらない。モデル構造、量子化形式、推論フレームワークのスケジューリング方式も重要になる。
今回の構成の中心は、Qwen3.6-35B-A3BのようなMoEモデルのGGUF量子化版を使い、llama.cppのCUDAアクセラレーション、CPU Offload、MoEパラメータ調整、KV Cache量子化を組み合わせて、VRAM負荷をGPUとシステムメモリの間で分散することにある。これにより、RTX 3070 8GBのような旧世代GPUでも、35Bクラスのローカルマルチモーダルモデルを動かせる可能性が出てくる。
先に明確にしておきたい点がある。これは「8GBのVRAMに35Bモデル全体を完全に載せる」という意味ではない。より正確には、GPUに向いた計算部分をGPUが担当し、一部のエキスパート層やキャッシュ負荷をシステムメモリが受け持つ、という理解になる。実際の体験は、メモリ容量、CPU性能、モデルの量子化形式、コンテキスト長、パラメータ設定に左右される。
テスト環境
この種の構成はシステムメモリにかなり敏感だ。参考環境は次のとおり。
- CPU:Intel Core i7-12700クラス
- GPU:NVIDIA RTX 3070 8GB
- メモリ:64GB
- OS:Windows 11
- 推論フレームワーク:llama.cpp CUDA版
- モデル形式:GGUF
16GBまたは32GBメモリでも完全に試せないわけではないが、35B MoEモデルはロード時や長文コンテキスト推論時にメモリ圧迫が起きやすい。安定して使うなら、64GBメモリのほうが安心だ。
なぜ8GB VRAMでも35Bを動かせる可能性があるのか
Qwen3.6-35B-A3Bの鍵はMoEアーキテクチャにある。総パラメータ規模は35Bだが、各推論ステップですべてのパラメータが同時に有効化されるわけではなく、一部のエキスパートパラメータだけが有効になる。
これにより二つの結果が生まれる。
- モデルファイル全体は依然として大きく、十分なディスク容量とシステムメモリが必要になる。
- 1回の推論で実際に使われる計算量は、完全な35B Denseモデルより低い。
llama.cppのCPU OffloadとMoE関連パラメータは、VRAMの最低ラインをさらに下げられる。GPUは主にAttentionと効果の大きい計算を担当し、CPUとシステムメモリが一部のエキスパート層の重みを担当する。その代わり、速度、応答遅延、安定性はGPU型番だけでなく、マシン全体の構成により強く依存する。
llama.cppを準備する
Windowsユーザーは、llama.cppのプリビルドCUDA版を直接ダウンロードできる。注意点は三つある。
- GPUドライバは十分に新しくし、CUDA実行環境がダウンロードしたllama.cppパッケージと合っていることを確認する。
- ダウンロード後は、中国語や特殊文字を含まないパスに置くと、バッチスクリプトから呼び出しやすい。
- モデルファイルは
modelsディレクトリにまとめ、コマンド内のパスが長くなりすぎないようにする。
AMD、Intel GPU、またはCPUのみの環境では、Vulkan、HIP、SYCL、CPU版も選べる。ただし、パラメータと性能は異なる。この記事ではNVIDIA GPU上のCUDAルートに絞る。
モデルとマルチモーダル投影ファイルをダウンロードする
今回使用するモデルは次のとおり。
Qwen3.6-35B-A3B-UD-Q4_K_M.gguf
量子化形式はQ4_K_Mを選ぶ。これは主に精度、サイズ、速度のバランスを取るためだ。VRAMが少ないマシンでは、最初から高精度版を試すのはおすすめしない。ロード失敗やシステムの頻繁なページングが起きる可能性が高くなる。
画像理解を使う場合は、マルチモーダル投影ファイルも同時に用意する必要がある。例:
mmproj-BF16.gguf
このファイルは非常に重要だ。メインモデルだけをダウンロードした場合、通常はテキスト推論しかできない。mmprojがないと、Web UIで画像アップロード機能が正常に使えなかったり、アップロード後に視覚理解が動かなかったりする。
ディレクトリ構造はシンプルにしておくとよい。
|
|
RTX 3070 8GB向け起動パラメータ
以下はRTX 3070 8GB向けの起動スクリプト例だ。パスは自分のllama.cppディレクトリに合わせて変更する。
|
|
起動後、ブラウザで次のアドレスにアクセスする。
|
|
ページが開き、モデルが正常に応答すれば、サービスは起動できている。初回ロードは遅いことがある。ロード中に何度も複数インスタンスを起動すると、メモリを使い切りやすいので避ける。
主要パラメータの意味
-ngl 99は、GPUに載せられる層をできるだけGPUへ置く指定だ。実際にどれだけ載るかは、モデル構造、量子化形式、VRAM使用量に左右される。
--n-cpu-moe 999は、MoEエキスパート層をより多くCPU側に回し、VRAM負荷を下げるための指定だ。小VRAM環境で大きなMoEモデルを動かすための重要なパラメータの一つである。
--flash-attn onはFlash Attentionを有効にし、Attention計算の負荷を下げる助けになる。利用できるかどうかは、現在のllama.cppバージョンとGPUの対応状況に依存する。
-c 32768はコンテキスト長を設定する。長いコンテキストはKV Cache負荷を大きく増やす。起動に失敗する、または推論が非常に遅い場合は、まず8192または16384へ下げるとよい。
--cache-type-k q4_0と--cache-type-v q4_0はKV Cacheを量子化し、メモリとVRAMを節約する。ただし、出力品質や速度にわずかな影響が出る可能性がある。
-b 512と-ub 128はバッチ処理関連のパラメータだ。小VRAM環境では、最初から攻めたバッチ設定にしないほうがよい。
よくある問題
起動時にVRAM不足が出る場合は、まずコンテキスト長を下げる。たとえば-c 32768を-c 8192に変更し、その後-bと-ubを小さくして試す。
画像アップロードボタンが使えない場合は、まず--mmprojのパスが正しいか、使用しているmmprojがモデルと一致しているかを確認する。
モデルロード後の応答が遅い場合、GPUがまったく動いていないとは限らない。多くの重みやエキスパート層をCPUとシステムメモリが担当している可能性がある。タスクマネージャーでGPU、CPU、メモリ、ディスク使用率を確認し、ボトルネックを判断する。
出力形式が崩れる場合は、--jinjaが有効になっているかを確認し、現在のモデルが対応するチャットテンプレートを必要としているかも確認する。
サービス起動後にブラウザで開けない場合は、--hostと--portの設定を確認し、8080番ポートが他のプログラムに使われていないかを見る。
誰に向いているか
この構成は、RTX 3070、RTX 4060 Laptop、RTX 3060 8GBのような8GB VRAM機をすでに持っていて、より大きなMoEモデルを試したいユーザーに向いている。
最高速度を求める人には向いていない。小VRAMで35B MoEを動かすことは、本質的にはメモリとCPUでVRAM要件を下げることだ。動くことと、十分に快適であることは別の話である。
日常的な高頻度チャットが目的なら、7B、8B、14Bモデルのほうが快適かもしれない。より大きなMoEモデル、マルチモーダル能力、ローカルデプロイの限界を試したいなら、RTX 3070 8GBと64GBメモリの組み合わせにはまだ試す価値がある。
まとめ
RTX 3070 8GBでQwen3.6-35B-A3Bを動かせる理由は、VRAMが突然増えたからではない。MoEアーキテクチャ、GGUF量子化、llama.cpp CPU Offload、KV Cache最適化が組み合わさって、必要条件を下げているからだ。
この構成で最も注目すべき点は、古いGPUでもローカル大規模モデル実験に参加できることだ。速度と安定性のトレードオフを受け入れれば、8GB VRAMのマシンも小型モデル専用の入門機ではなく、ローカルAIモデルのテスト環境になり得る。
参考資料:
- 原文リンク:https://www.freedidi.com/24267.html