v6e TPU での vLLM 推論
このチュートリアルでは、v6e TPU で vLLM 推論を実行する方法について説明します。また、Meta Llama-3.1-8B モデルのベンチマーク スクリプトを実行する方法も示します。
v6e TPU で vLLM を使用するには、vLLM クイックスタートをご覧ください。
GKE を使用している場合は、GKE チュートリアルもご覧ください。
始める前に
HuggingFace リポジトリの Llama3 ファミリー モデルを使用するには、同意契約に署名する必要があります。meta-llama/Llama-3.1-8B に移動し、同意契約に記入して、承認されるまで待ちます。
4 個のチップを搭載した TPU v6e をプロビジョニングする準備を行います。
Cloud TPU 環境を設定するガイドに沿って、 Google Cloud プロジェクトを設定して、Google Cloud CLI の構成を行い、Cloud TPU API を有効にして、Cloud TPU を使用するためのアクセス権があることを確認します。
Google Cloud で認証し、Google Cloud CLI のデフォルトのプロジェクトとゾーンを構成します。
gcloud auth login gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
容量を確保する
TPU 容量を確保する準備ができたら、Cloud TPU 割り当てで Cloud TPU 割り当ての詳細を確認してください。容量の確保についてご不明な点がございましたら、Cloud TPU のセールスチームまたはアカウント チームにお問い合わせください。
Cloud TPU 環境をプロビジョニングする
TPU VM は、GKE、GKE と XPK、またはキューに格納されたリソースとしてプロビジョニングできます。
前提条件
- プロジェクトに十分な
TPUS_PER_TPU_FAMILY
割り当てがあることを確認します。これは、Google Cloud プロジェクト内でアクセスできるチップの最大数を指します。 - プロジェクトの次の TPU 割り当てが十分にあることを確認します。
- TPU VM の割り当て
- IP アドレスの割り当て
- Hyperdisk Balanced の割り当て
- ユーザー プロジェクトの権限
- GKE と XPK を使用している場合は、XPK の実行に必要な権限について、ユーザーまたはサービス アカウントに対する Google Cloud コンソールの権限をご覧ください。
TPU v6e をプロビジョニングする
gcloud alpha compute tpus queued-resources create QUEUED_RESOURCE_ID \ --node-id TPU_NAME \ --project PROJECT_ID \ --zone ZONE \ --accelerator-type v6e-4 \ --runtime-version v2-alpha-tpuv6e \ --service-account SERVICE_ACCOUNT
コマンドフラグの説明
変数 | 説明 |
NODE_ID | キューに格納されたリソース リクエストの割り当て時に作成される TPU のユーザー割り当て ID。 |
PROJECT_ID | Google Cloud プロジェクト名。既存のプロジェクトを使用するか、新しいプロジェクトを作成します。 |
ZONE | サポートされているゾーンについては、TPU のリージョンとゾーンのドキュメントをご覧ください。 |
ACCELERATOR_TYPE | サポートされているアクセラレータ タイプについては、アクセラレータの種類のドキュメントをご覧ください。 |
RUNTIME_VERSION | v2-alpha-tpuv6e
|
SERVICE_ACCOUNT | サービス アカウントのメールアドレス。Google Cloud コンソール -> [IAM] -> [サービス アカウント] で確認できます。 例: |
list
コマンドまたは describe
コマンドを使用して、キューに格納されたリソースのステータスをクエリします。
gcloud alpha compute tpus queued-resources describe QUEUED_RESOURCE_ID \ --project PROJECT_ID --zone ZONE
キューに格納されたリソース リクエストのステータスの一覧については、キューに格納されたリソースのドキュメントをご覧ください。
SSH を使用して TPU に接続する
gcloud compute tpus tpu-vm ssh TPU_NAME
依存関係をインストールする
Miniconda のディレクトリを作成します。
mkdir -p ~/miniconda3
Miniconda インストーラ スクリプトをダウンロードします。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
Miniconda をインストールします。
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
Miniconda インストーラ スクリプトを削除します。
rm -rf ~/miniconda3/miniconda.sh
Miniconda を
PATH
変数に追加します。export PATH="$HOME/miniconda3/bin:$PATH"
~/.bashrc
を再読み込みして、PATH
変数に変更を適用します。source ~/.bashrc
Conda 環境を作成します。
conda create -n vllm python=3.11 -y conda activate vllm
vLLM リポジトリのクローンを作成し、
vllm
ディレクトリに移動します。git clone https://github.com/vllm-project/vllm.git && cd vllm
既存の torch パッケージと torch-xla パッケージをクリーンアップします。
pip uninstall torch torch-xla -y
他のビルド依存関係をインストールします。
pip install -r requirements/tpu.txt VLLM_TARGET_DEVICE="tpu" python -m pip install --editable . sudo apt-get install libopenblas-base libopenmpi-dev libomp-dev
モデルへのアクセス権を取得する
Hugging Face トークンをまだ生成していない場合は、新しいトークンを生成します。
[Your Profile] > [Settings] > [Access Tokens] の順に移動します。
[Create new token] を選択します。
任意の名前と、少なくとも
Read
権限を持つロールを指定します。[Generate a token] を選択します。
生成されたトークンをクリップボードにコピーし、環境変数として設定して、huggingface-cli で認証します。
export TOKEN=YOUR_TOKEN git config --global credential.helper store huggingface-cli login --token $TOKEN
vLLM サーバーを起動する
次のコマンドは、モデルの重みを Hugging Face Model Hub から TPU VM の /tmp
ディレクトリにダウンロードし、一連の入力シェイプを事前コンパイルして、モデルのコンパイルを ~/.cache/vllm/xla_cache
に書き込みます。
詳細については、vLLM のドキュメントをご覧ください。
cd ~/vllm
vllm serve "meta-llama/Llama-3.1-8B" --download_dir /tmp --swap-space 16 --disable-log-requests --tensor_parallel_size=4 --max-model-len=2048 &> serve.log &
vLLM ベンチマークを実行する
vLLM ベンチマーク スクリプトを実行します。
export MODEL="meta-llama/Llama-3.1-8B" pip install pandas pip install datasets python benchmarks/benchmark_serving.py \ --backend vllm \ --model $MODEL \ --dataset-name random \ --random-input-len 1820 \ --random-output-len 128 \ --random-prefix-len 0
クリーンアップ
TPU を削除します。
gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \ --project PROJECT_ID \ --zone ZONE \ --force \ --async