14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vLLMを用いたモデル並列化手法の性能評価

14
Posted at

はじめに

記事を開いていただきありがとうございます。三菱電機の佐々木です。

本記事では、LLM推論エンジンvLLMがサポートするモデル並列化手法であるテンソル並列、パイプライン並列、およびエキスパート並列について、複数GPUを搭載した単一ホスト環境で性能評価した結果を紹介します。

vLLMとは

vLLMは、LLMの推論エンジンとして機能するOSSです。カリフォルニア大学バークレー校で開発され、現在はOSSコミュニティ主導で開発が進められています。メンテナにはRed Hatのエンジニアが多く在籍しており、同社はvLLMをベースとしたRed Hat AI Inference Serverという製品をリリースしています。Red Hatが支援している背景から、vLLMはエンタープライズ環境での利用に適したOSSであると言えるかもしれません。機能面では、多数のユーザーが同時にアクセスするサーバ環境を想定し、推論性能を最適化するための機能が多く実装されています。代表的な機能として、OSの仮想メモリの概念を応用し、GPUメモリを効率的に管理するPagedAttentionが挙げられます。

モデル並列化

モデル並列化とは、LLMのパラメータや計算処理を分割し、複数のGPUに分散配置して並列実行する技術です。単一GPUのメモリ容量を超える大きなLLMを実行する場合や、複数GPUの計算リソースを有効活用して推論性能を改善する場合に使用されます。

主要なモデル並列化手法として、テンソル並列、パイプライン並列、およびエキスパート並列の3つの手法が挙げられます。以下では、BentoMLが公開しているLLM Inference Handbookに掲載されている概念図を引用し、各手法の概要を説明します。

テンソル並列

テンソル並列は、LLMの各レイヤのパラメータを分割し、複数のGPUに分散配置することで、同一レイヤの計算処理を並列実行する手法です。この手法では、1つのレイヤの計算処理を複数のGPUで分担するため、推論性能の改善が期待できます。ただし、各GPUの計算結果を集約するためにGPU間通信が頻繁に発生することから、高帯域なGPU間通信インタフェースが不可欠となります。そのため、高速な内部バスを介して接続された、複数GPU搭載の単一ホスト環境に適した手法です。

テンソル並列.png
図:テンソル並列(出典:LLM Inference Handbook

引用した概念図ではLLMの1つのレイヤを4つに分割し、4基のGPUに分散配置して並列実行するテンソル並列の様子が示されています。

パイプライン並列

パイプライン並列は、LLMのレイヤを複数のグループに分割し、複数のGPUに分散配置して、前段のGPUの出力を次段のGPUに順次転送しながら並列実行する手法です。この手法では、次段のGPUが前段の処理完了を待つ必要があり、GPUリソースの使用率が低下する場合があります。しかし、GPU間通信はレイヤ間の入出力に限定されるため、通信量を抑制することができます。そのため、高速な外部ネットワークを介して接続された、GPU搭載の複数ホスト環境に適した手法です。

パイプライン並列.png
図:パイプライン並列(出典:LLM Inference Handbook

引用した概念図ではLLMの5つのレイヤで構成されるグループに分割し、4基のGPUに分散配置して並列実行するパイプライン並列の様子が示されています。

エキスパート並列

エキスパート並列は、MoE(Mixture of Expert)モデルで使用されるモデル並列化手法です。この手法では、全エキスパートを全GPUに複製するのではなく、各エキスパートを複数のGPUに分散配置します。各GPUは、自身に割り当てられたエキスパートのみを保持し、ルーターによって振り分けられたトークンを処理します。LLM全体を全GPUに複製する場合と比較して、GPUメモリ使用量を削減することができます。しかし、各トークンを対応するエキスパートが配置されたGPUへ転送する必要があるため、GPU間通信量が増加するという問題があります。

MoEモデルとは
MoEモデルは、LLMの一部をエキスパートと呼ばれる複数の小さなサブネットワークに分割し、入力トークンごとに適切なエキスパートのみを選択して処理するモデルアーキテクチャです。従来の密なLLMのようにすべてのネットワークを活性化させる必要はなく、特定のエキスパートのみを活性化することで、推論時の計算コストを抑制することができます。

エキスパート並列.png
図:エキスパート並列(出典:LLM Inference Handbook

引用した概念図ではLLMの6つのエキスパートを2基のGPUに分散配置して並列実行するエキスパート並列の様子が示されています。

上記のモデル並列化手法を組み合わせたハイブリッド並列も存在します。具体的には、複数GPU搭載の複数ホスト環境では、単一ホスト内の高帯域なGPU間通信に適したテンソル並列と、複数ホスト間の相対的に低帯域なGPU間通信に適したパイプライン並列を併用する構成が一般的です。ハイブリッド並列ではこのように各手法の特性を踏まえ、適材適所で使用することで、大規模LLMの推論を効率化することができます。

評価環境

評価環境のハードウェア構成、ソフトウェア構成、およびパラメータ構成を以下に示します。

ハードウェア構成
CPU Intel(R) Xeon(R) w5-2555X 14コア/28スレッド 4.8 GHz
メモリ Kingston 9965788-101.A00G 64 GB x 4
GPU NVIDIA RTX 6000 Ada 48 GB x 4
バスインターフェース PCIe 4.0 x 16
ソフトウェア構成
OS Ubuntu 24.04.3 LTS
LLM推論エンジン vllm/vllm-openai:v0.11.0(コンテナ)
LLM openai/gpt-oss-120b(MoEモデル)
ベンチマークツール vLLM Benchmark CLI
データセット ShareGPT(1024データ)
メトリクス収集ツール nvidia-smi
パラメータ構成
コンテキストウィンドウ(--max_model_len) 128k
最大リクエスト数(--max-num-seqs) 256
最大トークン数(--max-num-batched-tokens) 2048
GPUメモリ使用率(--gpu_memory_utilization) 0.9
自動プレフィックスキャッシュ(--enable-prefix-caching) 有効
テンソル並列度(--tensor-parallel-size) 2または4
パイプライン並列度(--pipeline-parallel-size) 2または4
エキスパート並列(--enable-expert-parallel) 有効

vLLMのエキスパート並列は、内部でテンソル並列およびデータ並列を組み合わせて実装されています。本評価では、テンソル並列度を1に設定し、データ並列度(--data-parallel-size)を2または4に設定しています。

以下は、vLLMをテンソル並列度2で起動する際のコマンド例です。

docker run --runtime nvidia --gpus '"device=0,1"' -v ~/.cache/huggingface:/root/.cache/huggingface --name vllm0 --ipc=host --network host vllm/vllm-openai:v0.11.0 --model openai/gpt-oss-120b --port 8000 --max_model_len 131072 --max-num-seqs 256 --max-num-batched-tokens 2048 --gpu_memory_utilization 0.9 --enable-prefix-caching --tensor-parallel-size 2

評価指標

本評価では、LLM推論エンジンの性能指標として一般的な以下のスループットおよびレイテンシのメトリクスを採用しています。

  • スループット

    • RPS(Requests Per Second):1秒間に処理されるリクエスト数
    • TPS(Tokens Per Second):1秒間に生成されるトークン数
  • レイテンシ

    • TTFT(Time to First Token):リクエスト送信から最初のトークンが出力されるまでの時間
    • ITL(Inter-Token Latency):トークンが出力されてから次のトークンが出力されるまでの時間間隔

評価結果

各モデル並列化手法およびそれらの並列度を変更した場合の性能測定結果を以下に示します。

モデル並列化性能測定結果_1.png

なお、上記エキスパート並列の測定結果において、同時リクエスト数が1の場合のみvLLMが途中でエラー終了する事象が発生したため、測定結果は途中までのデータとなっています。現時点では原因は特定できていませんが、本測定は旧バージョンのvLLMを使用して実施したものであり、最新バージョンでは問題が修正されている可能性があります。

手法の比較

テンソル並列が最大のスループットおよび最小のレイテンシを示しました。次いでエキスパート並列が良好な性能を示し、パイプライン並列は他手法と比較して低い性能となりました。この結果から、並列実行性が高い手法ほど高性能となる傾向が確認されました。

手法間の性能比較
基準 比較対象 RPS/TPS TTFT ITL
パイプライン並列 テンソル並列 約1.4〜1.8倍 約21〜46%減 約31〜43%減
エキスパート並列 テンソル並列 約1.1〜1.7倍 約31〜59%減 約7〜42%減

並列度の比較

テンソル並列およびエキスパート並列では、並列度の増加に伴いスループットが向上し、レイテンシも低減しました。これは、GPU数の増加に伴い同時に利用できる計算リソースが拡張されたことが要因であると考えられます。一方で、パイプライン並列では、並列度を増加させても性能の向上は限定的でした。これは、順次処理を行う性質上、各GPU間で待機時間が発生し、計算リソースの利用率が低下するためであると考えられます。

並列度間の性能比較
基準 比較対象 RPS/TPS TTFT ITL
テンソル
並列度2
テンソル
並列度4
約1.1〜1.5倍 約17〜25%減 約10〜32%減
パイプライン
並列度2
パイプライン
並列度4
約1.0〜1.2倍 約1%増〜11%減 約0〜15%減
エキスパート
並列度2
エキスパート
並列度4
約1.0〜1.4倍 約37%増〜40%減 約2%増〜30%減

vLLMのエキスパート並列は、現時点では実験的機能として位置づけられており、性能の安定性に課題があるようです。また、本測定では旧バージョンを使用しているため、最新バージョンでは性能が安定している可能性があります。


補足として、同時リクエスト数16の性能測定中に、各GPUのGPU使用率、GPUメモリ使用率、PCIeデータ受信量、およびPCIeデータ送信量を収集し、それらの平均値を算出した結果を以下に示します。

モデル並列化性能測定結果_2.png

上記の結果から、モデル並列化の説明時に述べた各手法の特性がリソース利用に反映されていることが確認されます。

さいごに

本記事では高速推論エンジンvLLMがサポートするモデル並列化手法であるテンソル並列、パイプライン並列、およびエキスパート並列の性能評価結果を紹介しました。

評価の結果、複数GPU搭載の単一ホスト環境では、テンソル並列が最も高スループットかつ低レイテンシを示しました。また、並列度を高めることで性能が向上する傾向が確認されました。これは、テンソル並列が各レイヤの計算処理をGPU間で分担し、同時に並列実行できる手法であるため、各GPUの計算リソースを有効活用できることが要因であると考えられます。

一方で、GPUのスペック、GPU間通信インターフェース(PCIeやNVLink)、モデルの構造などの条件によって性能は変動することが予想されます。したがって、実環境で実際に性能評価を行い、性能要件に合致するモデル並列化手法を選定することが重要となります。

今回は、vLLM単体での性能評価を行いました。次回機会があれば、vLLMと親和性が高いLLMキャッシュエンジンLMCacheを使用し、CPUメモリやローカルディスクへキャッシュデータをオフロードした場合の性能評価結果について紹介する予定です。

14
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?