Llama 3 は、Meta のオープンソースの大規模言語モデル(LLM)です。このガイドでは、Saxml と Gemini Enterprise Agent Platform で、マルチホスト Tensor Processing Unit(TPU)を使用して Llama 3 LLM をサービングする方法について説明します。
このガイドでは、Llama 3 70B モデルの重みとトークナイザーをダウンロードし、TPU で Saxml を実行する Gemini Enterprise Agent Platform にデプロイします。
始める前に
モデルをダウンロードして Saxml に変換するには、M2 メモリ最適化 VM を使用することをおすすめします。これは、モデル変換プロセスに大量のメモリが必要であり、メモリが十分でないマシンタイプを選択すると失敗する可能性があるためです。
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Agent Platform and Artifact Registry APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Cloud de Confiance コンソールで Cloud Shell をアクティブにします。
Cloud de Confiance コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
- Artifact Registry のドキュメントに従って、Docker をインストールします。
- Gemini Enterprise Agent Platform 用の 16 個の TPU v5e チップに対して十分な割り当てがあることを確認します。
このチュートリアルでは、 Cloud de Confiance by S3NSの操作に Cloud Shell を使用していることを前提としています。Cloud Shell の代わりに別のシェルを使用する場合は、次の追加の構成を行います。
-
Google Cloud CLI をインストールします。
-
フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。
詳細については、 フェデレーション ID を使用して gcloud CLI にログインするをご覧ください。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
モデルのデプロイに Cloud Shell ではなく別のシェルを使用している場合は、Google Cloud CLI のバージョンが 475.0.0 以降であることを確認してください。Google Cloud CLI を更新するには、gcloud components update コマンドを実行します。
Vertex AI SDK を使用してモデルをデプロイする場合は、バージョン 1.50.0 以降であることを確認してください。
モデルへのアクセス権を取得して、モデルの重みをダウンロードする
次の手順は、M2 メモリ最適化 VM を持つ Agent Platform Workbench インスタンスに関するものです。Agent Platform Workbench インスタンスのマシンタイプの変更については、Agent Platform Workbench インスタンスのマシンタイプを変更するをご覧ください。
Llama モデルの同意ページに移動します。
Llama 3 を選択し、同意フォームに記入して、利用規約に同意します。
受信トレイに署名付き URL が記載されたメールをが届いているか確認します。
次のコマンドを実行して、GitHub から
download.shスクリプトをダウンロードします。wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh chmod +x download.shモデルの重みをダウンロードするには、GitHub からダウンロードした
download.shスクリプトを実行します。プロンプトが表示されたら、前のセクションで受信したメールの署名付き URL を入力します。
ダウンロードするモデルの入力を求めるメッセージが表示されたら、「
70B」と入力します。
モデルの重みを Saxml 形式に変換する
次のコマンドを実行して、Saxml をダウンロードします。
git clone https://github.com/google/saxml.git次のコマンドを実行して、Python 仮想環境を構成します。
python -m venv . source bin/activate次のコマンドを実行して依存関係をインストールします。
pip install --upgrade pip pip install paxml pip install praxis pip install torchモデルの重みを Saxml 形式に変換するには、次のコマンドを実行します。
python3 saxml/saxml/tools/convert_llama_ckpt.py \ --base PATH_TO_META_LLAMA3 \ --pax PATH_TO_PAX_LLAMA3 \ --model-size llama3_70b次のように置き換えます。
PATH_TO_META_LLAMA3: ダウンロードしたモデルの重みが格納されているディレクトリのパスPATH_TO_PAX_LLAMA3: 変換されたモデルの重みを保存するディレクトリのパス
変換されたモデルは
$PATH_TO_PAX_LLAMA3/checkpoint_00000000フォルダに配置されます。トークナイザー ファイルを元のディレクトリから
vocabsというサブフォルダに次のようにコピーします。cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model次のように、
$PATH_TO_PAX_LLAMA3フォルダに空のcommit_success.txtファイルを追加し、そのフォルダにmetadataサブフォルダとstateサブフォルダを追加します。touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt$PATH_TO_PAX_LLAMA3フォルダには、次のフォルダとファイルが含まれます。$PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
Cloud Storage バケットを作成する
変換されたモデルの重みを保存する Cloud Storage バケットを作成します。
Cloud Shell で、次のコマンドを実行します。ここで、PROJECT_ID はプロジェクト ID に置き換えます。
projectid=PROJECT_ID gcloud config set project ${projectid}バケットを作成するには、次のコマンドを実行します。
gcloud storage buckets create gs://WEIGHTS_BUCKET_NAMEWEIGHTS_BUCKET_NAME は、バケットに使用する名前に置き換えます。
モデルの重みを Cloud Storage バケットにコピーする
モデルの重みをバケットにコピーするには、次のコマンドを実行します。
gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive
モデルをアップロードする
ビルド済みの Saxml コンテナは us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest で入手できます。
ビルド済みの Saxml コンテナを使用して Model リソースを Gemini Enterprise Agent Platform にアップロードするには、次のように gcloud ai models upload コマンドを実行します。
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_DISPLAY_NAME \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
--artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
--container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=4x4' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-deployment-timeout-seconds=2700 \
--container-ports=8502 \
--project=PROJECT_ID
次のように置き換えます。
LOCATION: Gemini Enterprise Agent Platform を使用しているリージョン。TPU はus-west1でのみ使用できます。MODEL_DISPLAY_NAME: モデルの表示名PROJECT_ID: Cloud de Confiance by S3NS プロジェクトの ID
オンライン推論エンドポイントを作成する
エンドポイントを作成するには、次のコマンドを実行します。
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_DISPLAY_NAME \
--project=PROJECT_ID
ENDPOINT_DISPLAY_NAME は、エンドポイントの表示名に置き換えます。
エンドポイントにモデルをデプロイする
エンドポイントの準備が整ったら、モデルをエンドポイントにデプロイします。
このチュートリアルでは、4x4 トポロジを使用して 16 個の Cloud TPU v5e チップにシャーディングされた Llama 3 70B モデルをデプロイします。ただし、サポートされている次のマルチホスト Cloud TPU トポロジを指定できます。
| マシンタイプ | トポロジ | TPU チップの数 | ホストの数 |
|---|---|---|---|
ct5lp-hightpu-4t |
4x4 | 16 | 2 |
ct5lp-hightpu-4t |
4x8 | 32 | 4 |
ct5lp-hightpu-4t |
8x8 | 64 | 8 |
ct5lp-hightpu-4t |
8x16 | 128 | 16 |
ct5lp-hightpu-4t |
16x16 | 256 | 32 |
Saxml GitHub リポジトリで定義されている別の Llama モデルをデプロイする場合は、ターゲットとするデバイスの数に合わせてパーティション分割されていること、Cloud TPU にモデルを読み込むのに十分なメモリがあることを確認してください。
単一ホストの Cloud TPU にモデルをデプロイする方法については、モデルをデプロイするをご覧ください。
サポートされている Cloud TPU のタイプとリージョンの一覧については、Gemini Enterprise エージェント プラットフォームのロケーションをご覧ください。
オンライン推論エンドポイントのエンドポイント ID を取得します。
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")モデルのモデル ID を取得します。
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")エンドポイントにモデルをデプロイします。
gcloud ai endpoints deploy-model $ENDPOINT_ID \ --region=LOCATION \ --model=$MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --machine-type=ct5lp-hightpu-4t \ --tpu-topology=4x4 \ --traffic-split=0=100DEPLOYED_MODEL_NAME は、デプロイするモデルの名前に置き換えます。これは、モデルの表示名(MODEL_DISPLAY_NAME)と同じにすることもできます。
デプロイ オペレーションがタイムアウトする可能性があります。
deploy-modelコマンドは、オペレーションが完了したことを確認するために使用できるオペレーション ID を返します。レスポンスに"done": trueが表示されるまで、オペレーションのステータスをポーリングできます。次のコマンドを使用してステータスをポーリングします。gcloud ai operations describe \ --region=LOCATION \ OPERATION_IDOPERATION_ID を、前のコマンドで返されたオペレーション ID に置き換えます。
デプロイされたモデルからオンライン推論を取得する
Gemini Enterprise Agent Platform エンドポイントからオンライン推論を取得するには、gcloud ai endpoints predict コマンドを実行します。
次のコマンドを実行して、サンプルの推論リクエストを含む
request.jsonファイルを作成します。cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOFオンライン推論リクエストをエンドポイントに送信するには、次のコマンドを実行します。
gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
クリーンアップ
Gemini Enterprise Agent Platform の料金が発生しないように、このチュートリアルで作成した Cloud de Confiance リソースを削除します。
エンドポイントからモデルのデプロイを解除し、エンドポイントを削除するには、次のコマンドを実行します。
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)") DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \ --region=LOCATION \ --format="value(deployedModels.id)") gcloud ai endpoints undeploy-model $ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=$DEPLOYED_MODEL_ID gcloud ai endpoints delete $ENDPOINT_ID \ --region=LOCATION \ --quietモデルを削除するには、次のコマンドを実行します。
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)") gcloud ai models delete $MODEL_ID \ --region=LOCATION \ --quiet