よく使うMoE expertをVRAMへ、LocalLLaMAが見た27%高速化
Original: Hot Experts in your VRAM! Dynamic expert cache in llama.cpp for 27% faster CPU +GPU token generation with Qwen3.5-122B-A10B compared to layer-based single-GPU partial offload View original →
r/LocalLLaMAの“Hot Experts”投稿は、大きなMoE modelをconsumer machineで動かす時の具体的な詰まりを扱った。投稿者はQwen3.5-122B-A10BをRTX 4090 24GB、Ryzen 9 7950X、96GB RAMで試し、all-CPU expertsの15 tok/s台はstreaming responseではつらいと説明した。そこで、よく使われるexpertだけをVRAMに置くdynamic cacheを作った。
仕組みはわかりやすい。直近N tokensでどのexpertsが多くrouteされたかを追跡し、その“hot”なexpertsをVRAM cacheに置く。残りはsystem RAMに置いたままにする。一定間隔でcacheを組み替え、tensor転送のcostよりGPU上で処理するbenefitが大きいという賭けをする。codeは llama.cpp fork として公開されている。
数字はかなり具体的だ。all-CPU experts baselineではtoken generationが約15.65 tok/s。22.6GB VRAMを使うlayer-based offloadでは約17.87 tok/s。22.2GB VRAMを使うhot expert cacheでは、generation runが22.26、22.97、22.77 tok/sだった。投稿者はall-CPU baseline比で44.8%、同程度のVRAM commitmentのlayer-based offload比で26.8%高速とまとめた。
コメント欄はすぐ検証の話になった。llama-serverのfit optionやMoE関連flagを先に試すべきではないか、non-consecutive layer placementでgraph splitが増えるのではないか、imatrixで重要expertをstaticに選ぶ手もあるのではないか、といった指摘が出た。PowerInferのような既存projectとの近さに触れる声もあり、prefillとgenerationのlatencyを分けて見たいという実務的な反応もあった。
この実験の意味は、Qwen3.5-122Bの一つの速度だけではない。MoE inferenceでは毎tokenすべてのparameterを使わないため、どのexpertを速いmemoryへ置くかがperformanceそのものになる。unified memoryではないPCでは、PCIeとsystem RAMの往復は現実のcostだ。Hot expert cacheがmainlineに入るかはまだわからないが、local LLM communityがmemory hierarchyを本格的なtuning対象として見始めていることははっきりしている。
Related Articles
LocalLLaMAが反応したのは、「LLMが自分のruntimeを速くする」という冗談のような仕組みに、具体的なbenchmark数字が付いていたからだ。投稿者はllm-server v2の--ai-tuneがllama-server helpをcontextとして読み、flag組み合わせを試して最速configをcacheすると説明し、Qwen3.5-27B Q4_K_Mは18.5 tok/sから40.05 tok/sへ伸びたと共有した。
LocalLLAMAユーザーが、llama.cppのMTP機能を使い、12GB VRAMのGPUでQwen3.6 35B A3Bモデルを毎秒80トークン超・128Kコンテキストで動かす設定を公開した。
LocalLLaMAコミュニティユーザーがRTX 4070 Super 12GBでQwen3.6 35B A3BモデルをIk_llama.cppフォークを使用して110トークン/秒で実行することに成功しました。CPU オフロード最適化に優れたこのフォークは標準llama.cppより大幅に高いパフォーマンスを示しました。