TL;DRPallasは、AI…
TL;DR
Intel AI PCを複数台つなぎ、パイプライン並列でLLMを動かす手法を紹介。各PCにモデルの層を分割してINT4に圧縮し、OpenVINOで実行。beam_idx注入による最適化、マスクによるKVキャッシュ巻き戻し、マイクロバッチングの3技術で、2台構成で単体比1.79倍のスループットを達成。70Bモデルも4台で対話速度を実現。
解説
ねえ智也くん、このブログのタイトル見た?「Intel AI PC複数台で70B LLMを動かす」って、すごくない?70Bって超大規模モデルでしょ?普通のPCじゃ無理だと思ってた。
うん、確かに普通は無理だね。でも、複数台のPCをパイプライン並列でつなげば、なんとか動かせるんだよ。
パイプライン並列?それってどういう仕組みなの?
簡単に言うと、モデルの層を分割して、各PCに一部分ずつ担当させるんだ。例えば、最初のPCが最初の数層を処理して、次のPCに渡す、みたいな感じ。
なるほど!それで各PCの負担が減るんだね。でも、モデルが大きいとメモリに載らないんじゃない?
そこがポイントで、各PCでモデルをINT4に圧縮してるんだ。精度は少し落ちるけど、メモリ使用量が大幅に減るから、70Bでも動くようになる。
INT4って4ビット量子化のこと?それで精度は大丈夫なの?
完全に無損失とはいかないけど、実用上は十分な精度が出るらしいよ。それに、OpenVINOっていうIntelの推論最適化ツールを使って、効率的に実行してるんだ。
へえ、OpenVINOね。でも、パイプライン並列って、データの受け渡しがボトルネックにならない?
そこを解決するために、いくつか工夫してるんだ。まず、beam_idx注入っていうテクニックで、ビームサーチの状態を効率的に管理してる。
ビームサーチ?生成のときに使うあれ?
そう。それから、マスクによるKVキャッシュ巻き戻しっていう方法で、キャッシュの管理を最適化してる。
KVキャッシュ?なんだか難しそう…。
KVキャッシュは、生成のときに過去のトークンの情報を保持しておくためのものだよ。それを効率的にリセットすることで、メモリを節約してるんだ。
なるほど。で、もう一つはマイクロバッチング?
うん。入力を小さなバッチに分けて、パイプラインを詰めて処理することで、アイドル時間を減らしてるんだ。
それで、実際どれくらい速くなったの?
2台構成で、1台のときの1.79倍のスループットを達成したらしいよ。
1.79倍か~、でも2台で2倍にならないのはなぜ?
通信オーバーヘッドとか、パイプラインの待ち時間があるからね。それでも、70Bモデルを4台で動かせば、実用的な対話速度が出るらしい。
4台で70Bが動くなら、個人でも大規模モデルを試せるってこと?すごいね!
そうだね。でも、まだ課題もあるよ。例えば、スケーラビリティが完全に線形じゃないし、量子化による精度低下も無視できない。
ああ、確かに。でも、この技術が進めば、もっと手軽にLLMが使えるようになるかもね。
そうだね。特に、エッジデバイスでの利用が広がるかもしれない。
でもさ、複数台つなぐって、設定が大変そう…。私には無理かも。
確かに、初心者にはハードルが高いかもね。でも、このブログでは実装手順も詳しく説明してるから、頑張ればできるかもよ。
ふふ、智也くんが手伝ってくれるなら挑戦してみようかな。でも、その前にまずは1台で動かすところから始めないとね!
そうだね。まずは基本から。焦らずいこう。