GLM-4.7をローカルで実行: Z.aiのThinking Modelを最適化
- Aisha Washington

- 6月6日
- 読了時間: 6分
更新日:6月17日

Z.aiのGLM-4.7のリリースは、オープンウェイトの「思考モデル」の新たなベンチマークを設定し、SWE-bench(73.8%)とTerminal Bench 2.0(41.0%)で最先端のスコアを誇っています。しかし、ベースモデルは巨大であり、3550億パラメータの巨人で、400GBのディスク容量が必要です。ほとんどの人にとって、これは手に負えません。
しかし、状況は変わりました。UnslothのDynamic 2.0量子化のおかげで、あなたは今、GLM-4.7をローカルで実行できます 約135GBに圧縮され、推論能力の損失は最小限です。llama.cppで特定のMixture-of-Experts(MoE)オフロード戦略を活用することで、このモデルはハイエンドワークステーションや特定のGPU+RAM構成で利用可能になりました。
このガイドでは、このモデルを使いこなすために必要な正確なフラグ、正規表現コマンド、およびハードウェア設定について詳しく説明します。
Field Notes: ハードウェアの現実とUnslothソリューション

To GLM-4.7 をローカルで実行するには、そのアーキテクチャを理解する必要があります。これはMoE(Mixture of Experts)モデルです。密なモデルとは異なり、すべてのトークンに対してすべてのパラメータを使用しません。このアーキテクチャにより、GPU(VRAM)とCPU(System RAM)間の負荷分散方法を知っていれば、積極的な最適化が可能になります。
検証済みハードウェアティア
1. 「ゴールデン」コンシューマーセットアップ (2ビットダイナミック)
ハードウェア: 1x 24GB GPU (RTX 3090/4090) + 128GB DDR4/DDR5 RAM。
モデル: Unsloth Dynamic 2-bit (UD-Q2_K_XL)。
パフォーマンス: 使用可能。GPU上でアクティブな処理を維持しながら、「エキスパート」レイヤーをシステムRAMに移動するために、MoEオフローディング(下記参照)を使用する必要があります。
2. ハイフィディリティセットアップ (4ビット)
ハードウェア: 1x 40GB+ GPU (A6000/Mac Studio) + 205GB+ システムRAM。
モデル: Q4_K_XL または Q4_K_M。
パフォーマンス: 205GB のユニファイドメモリ(VRAM+RAM の合計)があれば、毎秒約 5 トークン(t/s)を期待できます。205GB 未満の場合、スワップにより大幅な速度低下に直面します。
3. Mac Silicon のティア
要件: 192GB のユニファイドメモリが、まともなパフォーマンスを得るための現実的な最低ラインです。理想的には、205GB 以上あれば 4 ビット量子化モデルが十分に機能します。
llama.cpp のための重要な設定
コマンドを実行する前に、必ず守らなければならない 2 つの設定があります。これらを無視すると、無意味な出力やチャットループの破損が発生します。
1. --jinja フラグ
Standard llama.cpp builds may struggle with GLM's specific chat templates. You must append the --jinja flag to your launch command. This forces the engine to use the Jinja2 template embedded in the model, ensuring the conversation history and "thinking" tags are parsed correctly.
2. Temperature Sensitivity
GLM-4.7 is a "thinking" model that behaves differently depending on the task.
Default / Agent / Multi-turn: Set Temperature = 1.0 and Top_p = 0.95. This is the sweet spot for general reasoning.
Benchmarks / Strict Coding: Set Temperature = 0.7 and Top_p = 1.0. Use this for SWE-bench style tasks where precision outweighs creativity.
The Secret Sauce: MoE Offloading Strategies
これはこのガイドの最も重要な部分です。24GBのカードでこれを実行しようとしている場合、すべてのレイヤーを単純にGPUにロードすることはできません(-ngl 99)。MoEの「エキスパート」レイヤーをシステムRAMに選択的にオフロードする必要があります。
llama.cppでは、正規表現を使用して-ot(オーバーライドテンソル)フラグでこれを実現できます。
戦略A:最大オフロード(最低VRAM)これにより、すべてのMoEレイヤーがCPU RAMに移動します。24GBのカードではこれが最も安全な選択肢です。
codeBash
-ot ".ffn_.*_exps.=CPU"戦略B:バランスオフロード(中VRAM)VRAMに余裕がある場合は、Up/Downプロジェクションレイヤーのみをオフロードできます。
codeBash
-ot ".ffn_(up|down)_exps.=CPU"戦略C: ハイブリッドオフロード (カスタム)特定の深さ(例: レイヤー6以降)からオフロードを開始することもでき、初期レイヤーはGPUに残して速度を維持します。
codeBash
-ot "\.(6|7|8|9|[0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"GLM-4.7を実行するためのステップバイステップガイド

メモリ分割を最も細かく制御するには、llama.cppの使用をお勧めします。
1. 依存関係のインストール
大量ダウンロードのための転送ツールを準備します。
codeBash
pip install huggingface_hub hf_transfer2. モデルのダウンロード
推奨するのは UD-Q2_K_XL バージョンです。これはサイズ(135GB)と、MMLUでSOTAパフォーマンスを維持するUnslothの「Dynamic 2.0」精度とのバランスが取れています。
codePython
import os
from huggingface_hub import snapshot_download
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # レート制限を回避するために0に設定
snapshot_download(
repo_id = "unsloth/GLM-4.7-GGUF",
local_dir = "unsloth/GLM-4.7-GGUF",
allow_patterns = ["*UD-Q2_K_XL*"]
)3. 起動コマンド
Linux/WSL環境向けの堅牢なコマンドを以下に示します(24GB GPU + 128GB RAMのセットアップを想定)。
codeBash
./llama-cli \
--model unsloth/GLM-4.7-GGUF/UD-Q2_K_XL/GLM-4.7-UD-Q2_K_XL-00001-of-00003.gguf \
--n-gpu-layers 99 \
--jinja \
--threads 32 \
--ctx-size 16384 \
--flash-attn \
--temp 1.0 \
--top-p 0.95 \
-ot ".ffn_.*_exps.=CPU"注: --n-gpu-layers 99 を設定しても、-ot フラグが大規模エキスパートレイヤーに対してこれを上書きし、CPU に強制的に配置しますが、アテンションヘッドは GPU に保持されます。
高度なチューニング: 長いコンテキストと Ollama のセットアップ
コンテキストの圧縮 (KVキャッシュ量子化)
GLM-4.7は128kのコンテキストウィンドウをサポートしています, しかしそれはRAMを大量に消費します。より長いドキュメントを収容するには、KおよびVキャッシュを量子化する必要があります。 `--cache-type-k q4_1` および `--cache-type-v q4_1` を追加すると、精度の低下はほとんどなく、メモリオーバーヘッドを大幅に削減できます。
注意:V-cache で Flash Attention を使用するには、`llama.cpp` を `-DGGML_CUDA_FA_ALL_QUANTS=ON` でコンパイルする必要があります。
Ollama での実行
Unsloth は Ollama 用に特定のクオンツを最適化しました。
1ビットネイティブ:UD-TQ1 quant はネイティブで実行されます。
codeBash
OLLAMA_MODELS=unsloth ollama run hf.co/unsloth/GLM-4.7-GGUF:TQ1_0
2ビットの回避策:Ollama でより大きな 2 ビット quant を実行するには、まず llama-gguf-split を使用して GGUF チャンクをマージし、次に Modelfile またはパスを使用して Ollama を単一ファイルにポイントする必要があります。
FAQ: GLM-4.7 のトラブルシューティング
Q: "chat template" または不正な生成に関するエラーが発生します。
A:--jinja フラグを忘れています。GLM-4.7 は llama.cpp でこの特定のフラグを必要としますシステムプロンプトとターンテーキングを正しく処理するため。
Q: 生成速度が非常に遅い(1 t/s未満)のですが。
A:ハードドライブ(SSD/NVMe)へのスワップが発生している可能性が高いです。VRAMと物理RAMの合計がモデルサイズ(2ビットの場合は135GB)を超えていることを確認してください。ディスクスワップに依存している場合、パフォーマンスは著しく低下します。
Q: Mac Studioで4ビットバージョンを使用できますか?
A:はい、ただし192GBのメモリ構成(M2/M3 Ultra)が必要です。128GBの場合は、Dynamic 2-bit(UD-Q2_K_XL)バージョンを使用する必要があります。
Q: 最もVRAMを節約できる正規表現は何ですか?
A: `-ot ".ffn_.*_exps.=CPU"` を使用してください。これは すべてエキスパートレイヤーをCPUに移動し、モデルの「バックボーン」のみをGPUに残します。
Q: 2ビット量子化はモデルを愚かにしますか?
A: UnslothのDynamic 2.0メソッドではそうなりません。彼らは「賢い」レイヤーをより高い精度で維持することを優先します。ベンチマークによると、2ビットバージョンは、古い静的量子化メソッドとは異なり、コーディングおよび論理タスクにおいてフルプレシジョンモデルとほぼ同等のパフォーマンスを示します。


