見出し画像

自宅PCでクラスターを構築:コンシューマーGPUの枠を超え、大型LLMをローカルで動かす!

最近オープンになる大規模言語モデル(LLM)が、軒並みGPT-4レベルの性能となっています
Huggngfaceで無料でダウンロードできるのですが、問題は必要VRAM容量です

話題の、Command-r-Plusは、日本語性能について評価が高く、一部の性能はGPT-4並みと言われますが、さすがに大型で104Bパラメータもあるため、4bitに量子化しても60GB程度のVRAMが必要となります。

コンシューマークラスのGPUの最高峰、RTX4090は、VRAM24GBのため、command-r-plusをすべてGPUに載せて推論しようと考えると、3台のマルチGPUデスクトップが必要です

しかし、RTX4090は450W消費のGPUのため冷却機構が大きく、1デスクトップに3台収めるのは至難の業となります。

先日、水冷ラジエーター付きRTX4090で、マルチGPUデスクトップを作成しました。
水冷はPCIスロット部は2slot占拠のみですが、ラジエーターが大きくて1デスクトップにきれいにはいるのは2台でした

(比較的高価なRTX a6000クラスであれば、2slot厚で簡単なのですが、ここではコンシューマークラスのGPUでのスケールを考えていきます)

1デスクトップではVRAM搭載限界があるので、自然に考えるのは、PCを2台並列につないで両方のVRAM合算で推論できないかということです。

モデルパラレル

1つのGPUにのらない大型LLMをどうするかについて、モデルパラレルという並列化手法があり、上記に解説があります。

モデル並列には Tensor Parallel(テンソル並列)と Pipeline Parallel(パイプライン並列)の 2 種あり、今回Tensor Parallelに対応したvLLMを使用しました。

vLLM Distributed Inference and Serving

vLLMは、LLMの高速推論で有名ですが、実は、マルチマシンのTensor Parallelに対応しています。
vLLMは、rayに対応することで分散処理に対応しているようです。

推論環境の準備

コーディングは、vLLM、rayライブラリにお任せなので簡単です
環境構築のところで、少しコツがありそうなので、備忘録として記録します

できるだけ、クラスターを構成するPCが同一の環境のほうが、シンプルで苦労がないかと思います

PCとPC間接続

PC1: Ubuntu22.04  RTX4090 24GB 2台 192.x.x.1
PC2: Ubuntu22.04  RTX3090 24GB 2台 192.x.x.2
接続:両PCに10GbaseT LANポート、10G対応スイッチングハブ
ファイアウォールあれば空けておく

注: GPU数でLLMの要素が割り切れる必要があり、今のところ、GPU2、4、8台構成で考えたほうが良いです

各種ライブラリ

python3.9.19、vLLM 0.4、ray 2.11
両方のPCに仮想環境を設定し、インストールしておきます
python、rayですが、2つのPCで異なるバージョンを使用しているとエラーがでます

Ray runtime~推論環境立ち上げ

num-gpusでGPU指定しない場合にエラーがでました

# On head node
ray start --head --node-ip-address=<ray-head-address> --port=6379 --num-gpus=2

# On worker nodes
ray start --address=<ray-head-address> --num-gpus=2
pip install fastchat

python -m fastchat.serve.controller
#Command r bf16の場合
python -m fastchat.serve.vllm_worker --model-path CohereForAI/c4ai-command-r-v01 --dtype bfloat16 --max-model-len 2048 --tensor-parallel-size 4

#Mixtral-8x22 AWQの場合
python -m fastchat.serve.vllm_worker --model-path lightblue/Karasu-Mixtral-8x22B-v0.1-AWQ --dtype float16 --max-model-len 2048 --tensor-parallel-size 4  --quantization awq
pip install gradio

python -m fastchat.serve.gradio_web_server

分散推論の速度は?

Command-r bf16推論で、約20 token/秒
Mixtral-22x8 AWQ 4bit推論で、約16 token/秒

上記の速度がでました

vLLMのため、Batch inferenceすれば、もっとスループット出そうです
1ノードで処理する場合と比べ、分散処理では、2割程度の速度低下があるかもしれないですが、概ね満足な速度がでています

ローカルリモートデスクトップを切ったら10%程度速度アップしたので、やはりネットワーク環境の推論速度への影響大きそうです

ネットワーク使用量

推論中にどの程度のデータ送受信が行われているか観察しました
推論初期に180-250MB/sのピークがあり、推論中は45-55MB/sで安定しています。上下合わせて最大500MB/s弱です。

初期の遅延、latencyを待てるのであれば、1000BASETでも大きな推論速度低下なさそうです。

将来展望

今まで、自宅PCでのLLM推論は、GPUのVRAM容量、PCIスロット数で制限があり、大型LLMの推論は困難でした。
今回の実験で、複数PCでのモデル並列が自宅で可能となったので、理論的には、デスクトップを増やすことで巨大なLLMの推論が可能となります。
ぜひ、将来はローカルLlama-3-400Bを実現したいです。

また、GPU 8G等の1GPUのデスクトップやゲーミングノート等でも、寄せ集めればVRAM16~32GのLLM推論が可能となります。

今後知見が集まり、自宅クラスター向けモデル並列推論ライブラリが進化、もっと簡単に、柔軟に使用できるようになると良いですね!


この記事が気に入ったらサポートをしてみませんか?