みなさんreddit仲間! AMD GPUを持っていて、そこにローカルLLMを動かそうとしたことがあるなら、そのつらさが分かるはずです。ROCmはコンシューマ向けカードをサポートしていません。vLLMは動きません。llama.cppはVulkan経由でなんとか動くものの、GPUを後回しに扱っているような感じです――汎用シェーダで、アーキテクチャのチューニングがなく、実運用のためのサービング設計もない。
AMDのGPUは世の中に何百万台もあって、これを十分にうまくできるはずです。ハードウェアには帯域も計算能力も備わっています。問題はソフトウェア側にまだないことです。なので私はZigで作っています。
なぜZig、なぜ今:
Zigは意外なほど、この用途にぴったりでした。ホットパスはVulkan API呼び出し、GPUメモリ管理、コマンドバッファの記録――純粋なシステム系の仕事です。`@cImport`により、バインディングジェネレータなしでVulkanのC ABIに直接アクセスできます。`comptime`が量子化ごとのディスパッチテーブルを処理します。`errdefer`がGPUリソースの後片付けを筋の通った形に保ちます。そして`zig build`でGLSLシェーダのコンパイルをビルドステップとして組み込むので、`glslc`が自動で動き、SPIR-Vが`zig-out/`に出力されます。ワンコマンド、ワンバイナリ。
タイミングが良いのは、オープンモデルがついにローカルでサーブするのに十分な出来になってきたこと、AMDのRDNA4ハードウェアが本当に能力を持っていること(640 GB/sの帯域、協調マトリクスコア)、そしてZig/Vulkanの観点で、これらのGPU向けに特化して作っている人が他にいないことです。 u/tinygradは、AMDのコンシューマGPUでも学習で勝負できることを証明しました。これは、その賭けの同じ側面――推論の話です。
どこまでできているか:
エンジンはGGUFモデルを読み込み(Zigでネイティブにパース)、21 GBの重みをGPU VRAMにメモリマップし、MoEのエキスパートルーティングとSSMレイヤを備えた全40層のハイブリッドトランスフォーマを動かします。Qwen3.5-35Bで、認識できるほど正しい出力を生成します。現在、RDNA4で7.1 tok/s。遅いのは、GPUが遅いからではなく、レイヤごとのGPU同期オーバーヘッドのせいです(トークンあたり120回の往復)。対策は、デコードのグラフ全体を単一のコマンドバッファとして記録することで、私は今そこに取り組んでいます。
コードベースはZigが約5k行、GLSLが2k行です。実際に読んで追えるくらいの規模です。
[link] [comments]




