よく使うMoE expertをVRAMへ、LocalLLaMAが見た27%高速化

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対象として見始めていることははっきりしている。