
2026/07/09 17:05
Show HN:私の低速な PC で GLM 5.2 を動かしている
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Colibrìは、ランタイム依存関係ゼロの純 C 言語で書かれた軽量な C エンジンであり、約 25 GB の RAM を搭載する汎用ハードウェア上で、740 億パラメータの GLM-5.2 モデルをローカルに実行することを可能にする。これは、ディスクストリーミング技術を採用することで実現しており、メモリ内に密度の高いコア(〜17B パラメータ)と頻繁に使用されるエキスパートのみを保持し、残りの約 21,504 のルーティング済みエキスパートをディスクからストリーミング処理する。このエンジンは、DeepSeek-V3 スタイルのルーティング、MLA アテンション、圧縮された KV キャッシュ、そして Native MTP 推論的デコード(int8 専用ヘッド)を含む GLM-5.2 の MoE アーキテクチャをネイティブでサポートしている。AVX2 インタージェンタートド積の最適化済みカーネルを採用し、使用パターンを学習して自動的にメモリピン固定を行う自動メモリ管理システムを活用することで、初期のコールドスタート後(最初の推論時にトークンあたり約 11 GB のディスク読み込み)のレイテンシを最小化している。プロジェクトには純 C ランタイムと、コンバージョン専用で Python のみが必要となるオフライン FP8→int4 変換スクリプトが含まれており、Linux/WSL2 および設定可能な環境パラメータに対応する。Apache 2.0(エンジン用)と MIT(ウェイト用)のハイブリッドライセンスの下にあり、研究者が消費者向け NVMe ドライブまたは高エンドハードウェア上においてローカルで最先端モデルを実行できるよう、完全なポートabilityを備えている。システムの性能に応じて、約 0.1 トークン/秒から 15 トークン/秒以上の速度を実現する。
(注:改善されたバージョンは、元のサマリーの流れを保ちつつ、量子化、推論的デコード、コールドスタートのメカニズム、ライセンスの詳細に関する不足していた技術的な specifics を統合しています。)
本文
極小エンジン、巨大モデル:市販マシンでの GLM-5.2 (744B MoE) 動作方法
約 25GB のメモリを持つ市販の PC 上で、パラメータ 744 億(744B)を持つ GLM-5.2 MoE モデル を動作させます。 これを実現するには、依存関係を一切持たない 純粋な C ランゲージを使用し、ディスクから「エキスパート」をストリーミングして読み込む方式を採用しています。
概要とコンセプト
- 基本原理: 744B パラメータを持つモデルでも、トークンごとの活性化は約 40B パラメータのみ です。
- メモリ戦略:
- RAM 常駐部(〜9.9GB): アテンション、共有エキスパート、埋め込みなど密度の高い部分(計 17B)を
量化して保持します。int4 - ディスク常駐部(〜370GB): ルーターされたエキスパート(21,504 個)はディスク上へ格納し、必要に応じてストリーミング読み込みます。
- RAM 常駐部(〜9.9GB): アテンション、共有エキスパート、埋め込みなど密度の高い部分(計 17B)を
- 構成: 単一の C ファイル(約 1,300 行)とヘッダーのみで動作します。BLAS や Python、GPU は使用しません。
実装済み機能
以下の機能により、高品質な推論を確保しています。
- 忠実な GLM-5.2 サポート: トランスフォーマーのオラクル(教師モデル)とのトークンごとの完全一致を検証(ティーチャ・フォーシングで検証)。
- MLA アテンション & 圧縮 KV キャッシュ:
- 浮動小数点精度を大幅に削減し、メモリ使用量を約 57 倍小型化。
- GLM-5.2 の特性に合わせて最適化された実装。
- DeepSeek-V3 スタイルのルーター:
ルーターと共有エキスパートの実装。sigmoid - ネイティブ MTP(マルチトークン予測)推論:
- GLM-5.2 独自の MTP ヘッダーをメインモデルでバッチ処理し検証。
- int8 でなければならず、コンバーターが自動的に変換を行います。
- 重要:
では受容率が低下(0–4%)しますが、int4
では 39–59% の受容率を得られ、バッチ処理あたり 2.2–2.8 トークンの生成を実現します(ロスレス)。int8
- 真のサンプリング: テンペラメント+核(Nucleus)サンプリングを実装。int4 量化に合わせてデフォルト値が調整済み。
- 高性能計算カーネル:
を使用したAVX2
マトリックス乗算で、1.4–2.5 倍の高速化を実現(測定値:119 GFLOP/s)。int8 - MLA 重みの吸収: トークンごとの k/v 再構築を行わず、クエリが kv を直接吸収する手法を採用。検証済みで正確性が保たれます。
- 非同期エキスパートリードアヘッド: 乗算中に次のブロックを読み込む(
)仕組みを実装。WILLNEED - RAM 安全性: エキスパートキャッシュを
に基づき自動サイズ調整し、OOM(メモリエリア不足)を防止します。MemAvailable - オフライン FP8→int4 コンバーター: ダウンロードした 756GB の FP8 チェックポイントを一度にディスク上に保存する必要なく、段階的に変換可能(再開可能)。
システム要件と性能測定基準
開発マシンは WSL2(12 コア、25GB RAM、VHDX 経由の NVMe) で動作しています。
- 常駐 RAM: 密度の高い部分のみで約 9.9 GB
- ロード時間: 約 30 秒
- チャット時のピーク RSS: 自動上限設定により約 20 GB
- Cold decode コスト: 初期ロード時はディスク読み取りが必要(約 11GB/トークン)。キャッシュが暖まると大幅に低下します。
SSDに関する注記
- ストリーミングは読み取り専用のため、SSD に摩耗を与えることはほぼありません。
- 懸念点: システム RAM が不足してスワップが発生する場合はドライブが摩耗します(適切な
を設定してください)。また、長時間稼働による熱管理も必要です。--ram budget
モデルのダウンロードとセットアップ
事前変換済み GLM-5.2 int4 モデルは Hugging Face で入手可能です。
-
リポジトリの取得:
COLI_MODEL=/path/to/GLM-5.2-colibri-int4 ./coli chatこのコマンドにより、FP8 → int4 の変換工程をスキップできます。
-
モデル側での操作(ワンコマンド): GLM-5.2-FP8 シャードをダウンロードし、int4 コンテナに変換、MTP ヘッダーへ変換する一連の流れを提供します。途中の処理は中断・再開可能です。
# 準備 cd c ./setup.sh # gcc/OpenMP チェック、ビルド、自己テスト # モデル変換(約 400GB の空き領域が必要) ./coli convert --model /nvme/glm52_i4 # チャット実行 COLI_MODEL=/nvme/glm52_i4 ./coli chat
有用な設定項目(フラグ)
: トークンサンプリングの温度(デフォルト:0.7 + 核 0.90)。--temp T
: 適応的エキスパート top-p(ディスク読み取りを 30–40% 削減)。--topp 0.7
: 回答あたりの最大トークン数。--ngen N
: 学習キャッシュの自動ピンを無効化。AUTOPIN=0
: GLM-5.2 の推論ブロックを有効化。THINK=1
: MTP 下書き深さ。DRAFT=n
: ティーチャ・フォーシング検証(品質確認用)。TF=1
学習キャッシュの仕組み: エンジンは
.coli_usage ファイルにどのエキスパートが使用されたかを記録し、起動時に最もホットなエキスパートを RAM にピン(固定)します。「使うほど速くなります」。
より高性能なマシン向けのテストとベンチマーク
エンジンには以下のようなノブ(調整要素)があり、お使いのマシンに合わせて性能を引き出せます。
- Linux / WSL2: gcc with OpenMP
- CPU: AVX2 対応 (≥16GB RAM 推奨)
- ストレージ: ローカル NVMe (
モウント必須)ext4
テスト手順
-
ディスク性能測定 (
):iobenchgcc -O2 -fopenmp iobench.c -o iobench # バッファ付き測定(8 スレッド) ./iobench /path/to/glm52_i4/out-00069.safetensors 19 64 8 0 # O_DIRECT メモリ確保測定 ./iobench /path/to/glm52_i4/out-00069.safetensors 19 64 8 1 -
チャット実行と統計監視:
COLI_MODEL=/path/to/glm52_i4 ./coli chat -
エキスパートピン設定: 最もホットなエキスパートを RAM に固定します。自由に使える RAM に合わせて
を調整してください。PIN_GBSTATS=stats.txt ./coli chat PIN=stats.txt PIN_GB=20 ./coli chat -
品質ベンチマーク:
./coli bench
粗い見積もり(ハードウェア依存)
| マシン構成 | 予想性能 (トークン/秒) | 備考 |
|---|---|---|
| 開発マシン (WSL2, VHDX ~1 GB/s, 25GB RAM) | ~0.05–0.1 | Cold スタート時のベースライン |
| ネイティブ Linux / PCIe4 NVMe (~3–5 GB/s, 32GB RAM) | ~0.5–1 | キャッシュが暖まった後 |
| PCIe5 NVMe / RAID0 (~8–12 GB/s, 64GB RAM) | ~2–4 | ホットエキスパート約 40GB をピン可能 |
| 高負荷 RAM (128–256GB) + AVX2/AVX-512 カーネル | ~5–15 | インタラクティブ使用、マトリックス乗算に制約あり |
重要: これらは見積もりです。数値は実際の測定結果としてください。
コミュニティによるベンチマーク(実測値)
以下は
setup.sh、gcc 13、greedy decoding、MTP 有効化条件下での測定値です。
| マシン | ディスク性能 (iobench) | 設定 | 測定結果 (トークン/秒) | 補足 |
|---|---|---|---|---|
| Intel Core Ultra 7 270K+ (WSL2, 24 GB RAM, NVMe VHDX) | バッファ 1.96 GB/s · O_DIRECT 2.74 GB/s | デフォルト | 0.07 | RAM 制限によりディスクより遅い |
| — | — | | 0.11 | ディスク読み取りを削減、速度向上 |
| Apple M5 Max (macOS, 128 GB Unified, Internal SSD) | O_DIRECT 14.2 GB/s | デフォルト、MTP オフ | 1.06 | ラップトップで 1 トークン/秒を実現 |
解説:
- RAM が少ないマシン(例:24GB)では、RAM の上限がボトルネックとなり、ディスク性能をフル活用できません。
を設定すると、エンドツーエンドの速度向上で約 1.6 倍 の改善が見られました。--topp 0.7- M5 Max の結果は、ラップトップ SSD でも高速な推論が可能であることを示しています。
品質ベンチマーク調査募集中
int4 量化による精度損失の実測データが必要です(現在はハルネス接続済み)。より高速なマシンでの測定を歓迎します。
cd c ./coli bench # hellaswag, arc_challenge, mmlu —— 各 40 問 ./coli bench hellaswag --limit 200 # 1 つのタスクでより多くの問題数を実行 ./coli bench mmlu arc_challenge --ram 100 # タスク選択と RAM ベット設定
- 公開スコア: フルプレシジョン GLM-5.2 のスコアは約 85–95% です。int4 コンテナが数ポイント以内なら量化は検証済みです。
プロジェクトへの支援
開発およびテストはすべてラップトップ(12 コア・25GB RAM)上で実施されています。より良いテストハードウェアでの貢献を歓迎します。
- ⭐ リポジトリのスター
- 🐛 ベンチマーク報告: 自社のハードウェアからの数値を含んだ Issue の作成
- 💬 開発支援: GitHub Issues からのご連絡や寄付
リポジトリ構成
: エンジン本体(GLM-5.2 フォワード、ストリーミング MoE、MTP など)c/glm.c
: safetensors リーダー(メモリ効率化実装)c/st.h
: C 言語実装の BPE トークナイザーc/tok.h
: CLI ツール(chat / run / bench / convert / info)c/coli
: ディスクマイクロベンチマークツールc/iobench.c
: FP8 から int4 へのコンバーターc/convert_fp8_to_int4.py
: 検証用オラクル生成器c/make_glm_oracle.py
なぜ「colibrì(ヒョウモンドリ)」なのか
コリービリは、空中でホバリングしながら一日に千の花を訪れる鳥です。 このエンジンは、25GB の RAM と 12 コアの CPU という限られたリソースと「ディスクへの忍耐」を糧にして、7440 億パラメータの巨大モデルを生き永らえさせる仕組みです。
ライセンス
Apache 2.0 ライセンスです。GLM-5.2 の重みは Z.ai より MIT ライセンス下で提供されています。