TL;DR

Intel AI PCを複数台つなぎ、パイプライン並列でLLMを動かす手法を紹介。各PCにモデルの層を分割してINT4に圧縮し、OpenVINOで実行。beam_idx注入による最適化、マスクによるKVキャッシュ巻き戻し、マイクロバッチングの3技術で、2台構成で単体比1.79倍のスループットを達成。70Bモデルも4台で対話速度を実現。

解説

AMI SURPRISED

ねえ智也くん、このブログのタイトル見た?「Intel AI PC複数台で70B LLMを動かす」って、すごくない?70Bって超大規模モデルでしょ?普通のPCじゃ無理だと思ってた。

TOMOYA NEUTRAL

うん、確かに普通は無理だね。でも、複数台のPCをパイプライン並列でつなげば、なんとか動かせるんだよ。

AMI CURIOUS

パイプライン並列?それってどういう仕組みなの?

TOMOYA NEUTRAL

簡単に言うと、モデルの層を分割して、各PCに一部分ずつ担当させるんだ。例えば、最初のPCが最初の数層を処理して、次のPCに渡す、みたいな感じ。

AMI CURIOUS

なるほど!それで各PCの負担が減るんだね。でも、モデルが大きいとメモリに載らないんじゃない?

TOMOYA NEUTRAL

そこがポイントで、各PCでモデルをINT4に圧縮してるんだ。精度は少し落ちるけど、メモリ使用量が大幅に減るから、70Bでも動くようになる。

AMI SURPRISED

INT4って4ビット量子化のこと?それで精度は大丈夫なの?

TOMOYA NEUTRAL

完全に無損失とはいかないけど、実用上は十分な精度が出るらしいよ。それに、OpenVINOっていうIntelの推論最適化ツールを使って、効率的に実行してるんだ。

AMI CURIOUS

へえ、OpenVINOね。でも、パイプライン並列って、データの受け渡しがボトルネックにならない?

TOMOYA NEUTRAL

そこを解決するために、いくつか工夫してるんだ。まず、beam_idx注入っていうテクニックで、ビームサーチの状態を効率的に管理してる。

AMI CURIOUS

ビームサーチ?生成のときに使うあれ?

TOMOYA NEUTRAL

そう。それから、マスクによるKVキャッシュ巻き戻しっていう方法で、キャッシュの管理を最適化してる。

AMI CONFUSED

KVキャッシュ?なんだか難しそう…。

TOMOYA NEUTRAL

KVキャッシュは、生成のときに過去のトークンの情報を保持しておくためのものだよ。それを効率的にリセットすることで、メモリを節約してるんだ。

AMI CURIOUS

なるほど。で、もう一つはマイクロバッチング?

TOMOYA NEUTRAL

うん。入力を小さなバッチに分けて、パイプラインを詰めて処理することで、アイドル時間を減らしてるんだ。

AMI CURIOUS

それで、実際どれくらい速くなったの?

TOMOYA HAPPY

2台構成で、1台のときの1.79倍のスループットを達成したらしいよ。

AMI CURIOUS

1.79倍か~、でも2台で2倍にならないのはなぜ?

TOMOYA NEUTRAL

通信オーバーヘッドとか、パイプラインの待ち時間があるからね。それでも、70Bモデルを4台で動かせば、実用的な対話速度が出るらしい。

AMI EXCITED

4台で70Bが動くなら、個人でも大規模モデルを試せるってこと?すごいね!

TOMOYA NEUTRAL

そうだね。でも、まだ課題もあるよ。例えば、スケーラビリティが完全に線形じゃないし、量子化による精度低下も無視できない。

AMI HAPPY

ああ、確かに。でも、この技術が進めば、もっと手軽にLLMが使えるようになるかもね。

TOMOYA NEUTRAL

そうだね。特に、エッジデバイスでの利用が広がるかもしれない。

AMI SAD

でもさ、複数台つなぐって、設定が大変そう…。私には無理かも。

TOMOYA NEUTRAL

確かに、初心者にはハードルが高いかもね。でも、このブログでは実装手順も詳しく説明してるから、頑張ればできるかもよ。

AMI HAPPY

ふふ、智也くんが手伝ってくれるなら挑戦してみようかな。でも、その前にまずは1台で動かすところから始めないとね!

TOMOYA NEUTRAL

そうだね。まずは基本から。焦らずいこう。