618ZXW

[vLLM Learning] ROCmを使ったインストール

vLLMは、大規模言語モデルの推論を高速化するために設計されたフレームワークです。KVキャッシュにおけるメモリの無駄をほぼゼロに抑え、メモリ管理のボトルネック問題を解決します。

vLLM の中国語ドキュメントとチュートリアルについては、こちらをご覧ください → https://vllm.hyper.ai/

vLLM は ROCm 6.1 を使用する AMD GPU をサポートします。

環境依存性

  • オペレーティングシステム: Linux
  • Python: 3.8 - 3.11
  • GPU: MI200s (GFX90A)、MI300 (GFX942)、Radeon RX 7900 シリーズ (GFX1100)
  • ROCm 6.1

インストールオプション:

Dockerを使用してソースからビルドする

ソースコードからビルドする

オプション 1: Docker を使用してソースからビルドする (推奨)

ソース コードから vLLM をビルドしてインストールできます。

まず、Dockerfile.rocm から Docker イメージをビルドし、そのイメージから Docker コンテナを起動します。

Dockerfile.rocm はデフォルトで ROCm 6.1 を使用しますが、古い vLLM ブランチでは ROCm 5.7 および 6.0 もサポートされています。このアプローチは非常に柔軟で、Docker イメージのビルドは以下のパラメータを使用してカスタマイズできます。

  • BASE_IMAGE: docker build を実行するときに使用するベース イメージ (具体的には ROCm ベース イメージ上の PyTorch) を指定します。
  • BUILD_FA: CK flash-attention をビルドするかどうかを指定します。デフォルト値は1です。Radeon RX 7900シリーズ(GFX1100)の場合、flash-attentionがこのゴールをサポートするには、0に設定する必要があります。
  • FX_GFX_ARCHS: CKフラッシュアテンションの構築に使用するGFXアーキテクチャを指定します(例:MI200およびMI300の場合は gfx90a;gfx942 )。デフォルトは gfx90a;gfx942 です
  • FA_BRANCH: ROCmのflash-attentionリポジトリでCK flash-attentionをビルドするために使用するブランチを指定します。デフォルトはae7928cです
  • BUILD_TRITON: Triton Flash-Attention をビルドするかどうかを指定します。デフォルト値は 1 です。

これらの値は、docker build を実行するときに --build-arg オプションを使用して渡すことができます。

ROCm 6.1 で MI200 および MI300 シリーズ用の vllm を構築するには、デフォルト値を使用できます。

 DOCKER_BUILDKIT=1 docker build -f Dockerfile.rocm -t vllm-rocm .

ROCm 6.1 で Radeon RX7900 シリーズ (gfx1100) 用の vllm をビルドするには、次のように BUILD_FA を指定する必要があります。

 DOCKER_BUILDKIT=1 docker build --build-arg BUILD_FA="0" -f Dockerfile.rocm -t vllm-rocm .

上記の Docker イメージ vllm-rocm を実行するには、次のコマンドを使用します。

 docker run -it \ --network=host \ --group-add=video \ --ipc=host \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ --device /dev/kfd \ --device /dev/dri \ -v <path/to/model>:/app/model \ vllm-rocm \ bash

ここで、<path/to/model> は、llama2 または llama3 モデルの重みなど、モデルが保存されている場所です。

オプション2: ソースコードからビルドする

依存関係をインストールします (環境または Docker に次のものがすでにインストールされている場合は、この手順をスキップできます)。

  • ROCm
  • パイトーチ
  • ヒップBLAS

PyTorch をインストールするには、rocm/pytorch:rocm6.1.2_ubuntu20.04_py3.9_pytorch_staging や rocm/pytorch-nightly などの新しい Docker イメージから開始できます。

あるいは、PyTorch ホイールを使って PyTorch をインストールすることもできます。PyTorch 入門ガイドの PyTorch インストールガイドをご参照ください。

  • ROCm用のTriton Flash Attentionをインストールする
    ROCm/triton の指示に従って、ROCm の Triton フラッシュ アテンションをインストールします (デフォルトの triton-mlir ブランチ)。
  • あるいは、CK flash Attention を使用する場合は、ROCm 用の flash Attention をインストールできます。
    ROCm/flash-attention の手順に従って、ROCmのFlash Attention (v2.5.9.post1) をインストールしてください。vLLM用のWheelsもこのリリースで利用可能です。

知らせ

  • flash-attention-2 をコンパイルするときには使用されないため、「ninja」バージョンを 1.10 にダウングレードする必要がある場合があります (例: pip install ninja==1.10.2.4** でインストールする)。

1. vLLM をビルドします。

 cd vllm pip install -U -r requirements-rocm.txt python setup.py develop # This may take 5-10 minutes. Currently, `pip install .`` does not work for ROCm installation python setup.pydevelop # 这可能需要5-10 分钟。目前,`pip install .`不适用于ROCm 安装

ヒント

たとえば、ROCM 6.1 上の vLLM v0.5.3 は、次の手順でビルドできます。

 pip install --upgrade pip # Install PyTorch # 安装PyTorch pip uninstall torch -y pip install --no-cache-dir --pre torch==2.5.0.dev20240726 --index-url https://download.pytorch.org/whl/nightly/rocm6.1 # Build & install AMD SMI # 构建并安装AMD SMI pip install /opt/rocm/share/amd_smi # Install dependencies # 安装依赖项pip install --upgrade numba scipy huggingface-hub[cli] pip install "numpy<2" pip install -r requirements-rocm.txt # Apply the patch to ROCM 6.1 (requires root permission) # 将补丁应用到ROCM 6.1(需要root 权限) wget -N https://github.com/ROCm/vllm/raw/fa78403/rocm_patch/libamdhip64.so.6 -P /opt/rocm/lib rm -f "$(python3 -c 'import torch; print(torch.__path__[0])')"/lib/libamdhip64.so* # Build vLLM for MI210/MI250/MI300. # 为MI210/MI250/MI300 构建vLLM。 export PYTORCH_ROCM_ARCH="gfx90a;gfx942" python3 setup.py develop

ヒント

  • デフォルトではTritonフラッシュアテンションが使用されます。ベンチマークを行う際は、パフォーマンスデータを収集する前にウォームアップステップを実行することをお勧めします。
  • Triton flash-attentionは現在、スライディングウィンドウアテンションをサポートしていません。半精度を使用する場合は、CK flash-attentionを使用してスライディングウィンドウをサポートしてください。
  • CK フラッシュ アテンションまたは PyTorch ナイーブ アテンションを使用するには、フラグ `export VLLM_USE_TRITON_FLASH_ATTN=0` を使用して、トリトン フラッシュ アテンションを無効にします。
  • 理想的には、PyTorch の ROCm のバ​​ージョンは、ROCm ドライバーのバージョンと一致する必要があります。

ヒント

MI300x (GFX942) をお使いの場合、最適なパフォーマンスを得るには、システムレベルおよびワークフローレベルのパフォーマンス最適化とチューニングの推奨事項について、MI300x チューニングガイドをご覧ください。vLLM の場合は、vLLM パフォーマンス最適化をご覧ください。