![見出し画像](https://assets.st-note.com/production/uploads/images/138094970/rectangle_large_type_2_bc1a73623dc0e9bf8799832ddb4cd53e.png?width=1200)
自宅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台でした
コンシューマー構成で最強を目指した
— AI𝕏サトシ⏩ (@AiXsatoshi) April 14, 2024
パーソナルLLM推論機の稼働開始しました!
メインパーツは中古、一応価格抑制
これ以上行くと1GPU 100万円単位となり、パーソナル推論機としては厳しいです
RTX4090 水冷 x2
DDR5 128GB
CPU 12700k SSD x4
ASUS ProArt Z790 Creator wifi
O11D EVO
電源1000w x2 pic.twitter.com/GVEUy6COmo
(比較的高価な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台構成で考えたほうが良いです
ネットワーク機器
10Gbase-T対応のスイッチングハブ、10G対応(Cat6a以上)を用意します
10G対応のスイッチングハブは高価ですが、今回比較的安価のBuffalo LXW-10G2/2G4にしました
各種ライブラリ
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弱です。
![](https://assets.st-note.com/img/1713755148696-iUWWHHsxMq.png?width=1200)
![](https://assets.st-note.com/img/1713755158180-elZAMgq5tX.png?width=1200)
初期の遅延、latencyを待てるのであれば、1000BASETでも大きな推論速度低下なさそうです。
将来展望
今まで、自宅PCでのLLM推論は、GPUのVRAM容量、PCIスロット数で制限があり、大型LLMの推論は困難でした。
今回の実験で、複数PCでのモデル並列が自宅で可能となったので、理論的には、デスクトップを増やすことで巨大なLLMの推論が可能となります。
ぜひ、将来はローカルLlama-3-400Bを実現したいです。
また、GPU 8G等の1GPUのデスクトップやゲーミングノート等でも、寄せ集めればVRAM16~32GのLLM推論が可能となります。
今後知見が集まり、自宅クラスター向けモデル並列推論ライブラリが進化、もっと簡単に、柔軟に使用できるようになると良いですね!
この記事が気に入ったらサポートをしてみませんか?