HN に投稿: 5090 に最適なローカル LLM セットアップ(llama.cpp フォーク + turboquant)
この記事では、llama.cpp の TurboQuant フォークと YaRN スケーリングを使用して、単一の 32GB VRAM GPU(NVIDIA RTX 5090)上で Qwen 3.6 35B MoE モデルを 450,000 トークンのコンテキストウィンドウで実行するための構成とメモリキャリブレーションについて詳しく説明します。モデルの選択、量子化のトレードオフ、KV キャッシュ量子化、RoPE スケーリング、マルチモーダル設定、複製ガイド、VRAM ライフサイクル管理、パフォーマンス評価をカバーしています。
この記事では、llama.cpp の TurboQuant フォークと YaRN スケーリング技術を使用して、単一の 32GB VRAM を搭載した NVIDIA RTX 5090 上で Qwen 3.6 35B MoE モデルを実行し、最大 450,000 トークンのコンテキストウィンドウを実現する方法を詳しく説明します。このセットアップは Windows 上で完全に実装および動作していますが、コアパラメータは Linux システムにも同様に適用できます。
モデル選択と量子化のトレードオフ
選択したモデルは Qwen3.6-35B-A3B-Q6_K.gguf(28.5GB)です。このモデルは混合エキスパート(MoE)アーキテクチャを採用しており、トークンごとに約 3B のパラメータのみがアクティブになるため、速度と推論能力のバランスが取れています。量子化レベルは Q6_K を選択し、元の BF16 パープレキシティの 99% 以上を維持することで、複雑なコード生成における論理的な正確性と構文構造を確保しています。
メモリバジェットとコンテキストキャリブレーション
32GB の物理 VRAM のうち、モデルウェイトが 28.5GB、静的オーバーヘッドが約 0.8GB を占め、コンテキストに利用可能なのは約 2.7GB です。標準の FP16 KV キャッシュでは約 32K トークンしかサポートできません。450K コンテキストを実現するために、以下の 2 つの主要技術を適用します。
- KV キャッシュ量子化(TurboQuant):
--cache-type-k turbo3と--cache-type-v turbo3を使用して KV キャッシュを 3 ビットに圧縮し、キャッシュフットプリントを約 80% 削減します。これにより、450K コンテキストが残りの VRAM に収まります。この機能はコミュニティフォークTheTom/llama-cpp-turboquantに基づいています。
- RoPE スケーリング(YaRN):モデルのネイティブコンテキスト長は 262,144 トークンです。
--rope-scaling yarnと--rope-scale 1.72を適用して 450K に拡張します。ただし、ネイティブ範囲を超えると、検索精度と推論能力が大幅に低下し、パープレキシティが増加することに注意が必要です。
マルチモーダル設定
モデルは画像入力をサポートしており、対応するビジョンプロジェクター Qwen3.6-35B-A3B-mmproj-F16.gguf をダウンロードし、--mmproj 引数でロードする必要があります。llama.cpp の画像デコーダーは stb_image ライブラリを使用しており、PNG および JPEG 形式をサポートしますが、WebP はサポートしていません。
技術複製ガイド
モデルダウンロード用の Python スクリプトとサーバー起動引数の完全なセットを提供しています。--no-mmap でメモリマッピングを無効化し、モデルウェイトを連続して VRAM にロードすることを推奨します。--flash-attn でフラッシュアテンションを有効にし、-ngl 99 ですべてのレイヤーと出力テンソルを GPU にオフロードします。また、Go ベースの VRAM ライフサイクルマネージャを実装し、Web ダッシュボードからサーバーの起動・停止を制御して、VRAM を他のアプリケーションに解放できるようにしています。
パフォーマンス評価とコード生成
テストでは、モデルは Three.js を使用したインタラクティブな 3D シーンを生成し、コードは一度でコンパイルおよびレンダリングされました。OpenCode クライアントの modalities ブロックを設定することで、画像のドラッグ&ドロップが可能になり、マルチモーダルな開発支援が実現します。
結論
コンシューマー向けハードウェア上で 35B MoE モデルを 450K コンテキストで実行することは、ローカル推論最適化の進歩を示しています。ただし、このセットアップは 32GB VRAM の物理的限界で動作しており、動的メモリ割り当ての余裕はほとんどありません。さらに、YaRN によるコンテキスト拡張は、検索の忠実度と論理的推論の正確性を大幅に犠牲にします。重要なワークロードでは、コンテキストサイズをネイティブ範囲内に保つことが最も信頼性の高い方法であり、450K の制限は探索的な検索や広範な要約タスクに最適です。