Meskipun berbagai opsi penayangan model Vertex AI sudah cukup untuk banyak kasus penggunaan, Anda mungkin perlu menggunakan image container Anda sendiri untuk menayangkan model di Vertex AI. Dokumen ini menjelaskan cara menggunakan image container kustom vLLM untuk menayangkan model di Vertex AI di CPU, GPU, atau TPU. Untuk mengetahui informasi selengkapnya tentang model yang didukung vLLM, lihat vLLM dokumentasi.
Server vLLM API menerapkan protokol OpenAI API, tetapi tidak mendukung persyaratan permintaan dan respons Vertex AI. Oleh karena itu, Anda harus menggunakan Vertex AI Raw Inference Request untuk mendapatkan inferensi dari model yang di-deploy ke Vertex AI menggunakan Endpoint Prediksi. Untuk mengetahui informasi selengkapnya tentang metode Prediksi Mentah di Vertex AI Python SDK, lihat dokumentasi Python SDK.
Anda dapat mengambil model dari Hugging Face dan Cloud Storage. Pendekatan ini menawarkan fleksibilitas, yang memungkinkan Anda memanfaatkan hub model berbasis komunitas (Hugging Face) dan kemampuan transfer data dan keamanan Cloud Storage yang dioptimalkan untuk pengelolaan model internal atau versi yang disesuaikan.
vLLM mendownload model dari Hugging Face jika token akses Hugging Face diberikan. Jika tidak, vLLM mengasumsikan model tersedia di disk lokal. Image container kustom memungkinkan Vertex AI mendownload model dari Google Cloud selain Hugging Face.
Sebelum memulai
Di project Anda, aktifkan Vertex AI dan Artifact Registry API. Google Cloud
gcloud services enable aiplatform.googleapis.com \ artifactregistry.googleapis.comKonfigurasikan Google Cloud CLI dengan project ID Anda dan inisialisasi Vertex AI SDK.
PROJECT_ID = "PROJECT_ID" LOCATION = "LOCATION" import vertexai vertexai.init(project=PROJECT_ID, location=LOCATION)gcloud config set project {PROJECT_ID}Buat repositori Docker di Artifact Registry.
gcloud artifacts repositories create DOCKER_REPOSITORY \ --repository-format=docker \ --location=LOCATION \ --description="Vertex AI Docker repository"Opsional: Jika mendownload model dari Hugging Face, dapatkan token Hugging Face.
- Buat akun Hugging Face jika Anda belum memilikinya.
- Untuk model terbatas seperti Llama 3.2, minta dan terima akses di Hugging Face sebelum melanjutkan.
- Buat token akses: Buka Profil Anda > Setelan > Token Akses.
- Pilih Token Baru.
- Tentukan nama dan peran minimal Baca.
- Pilih Buat token.
- Simpan token ini untuk langkah-langkah deployment.
Menyiapkan file build container
Dockerfile berikut membangun image container kustom vLLM untuk GPU, TPU, dan CPU. Container kustom ini mendownload model dari Hugging Face atau Cloud Storage.
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
ENV DEBIAN_FRONTEND=noninteractive
# Install gcloud SDK
RUN apt-get update && \
apt-get install -y apt-utils git apt-transport-https gnupg ca-certificates curl \
&& echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \
&& curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg \
&& apt-get update -y && apt-get install google-cloud-cli -y \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /workspace/vllm
# Copy entrypoint.sh to the container
COPY ./entrypoint.sh /workspace/vllm/vertexai/entrypoint.sh
RUN chmod +x /workspace/vllm/vertexai/entrypoint.sh
ENTRYPOINT ["/workspace/vllm/vertexai/entrypoint.sh"]
Buat image container kustom menggunakan Cloud Build. File konfigurasi cloudbuild.yaml berikut menunjukkan cara membuat image untuk beberapa platform menggunakan Dockerfile yang sama.
steps:
- name: 'gcr.io/cloud-builders/docker'
automapSubstitutions: true
script: |
#!/usr/bin/env bash
set -euo pipefail
device_type_param=${_DEVICE_TYPE}
device_type=${device_type_param,,}
base_image=${_BASE_IMAGE}
image_name="vllm-${_DEVICE_TYPE}"
if [[ $device_type == "cpu" ]]; then
echo "Quietly building open source vLLM CPU container image"
git clone https://github.com/vllm-project/vllm.git
cd vllm && DOCKER_BUILDKIT=1 docker build -t $base_image -f docker/Dockerfile.cpu . -q
cd ..
fi
echo "Quietly building container image for: $device_type"
docker build -t $LOCATION-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/$image_name --build-arg BASE_IMAGE=$base_image . -q
docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/$image_name
substitutions:
_DEVICE_TYPE: gpu
_BASE_IMAGE: vllm/vllm-openai
_REPOSITORY: my-docker-repo
File ini tersedia di repositori GitHub googlecloudplatform/vertex-ai-samples. Buat clone repositori untuk menggunakannya:
git clone https://github.com/GoogleCloudPlatform/vertex-ai-samples.git
Membangun dan mengirim image container
Buat image container kustom menggunakan Cloud Build dengan mengirimkan file cloudbuild.yaml. Gunakan substitusi untuk menentukan jenis perangkat target, yang dapat berupa GPU, TPU, atau CPU, dan image dasar yang sesuai.
GPU
DEVICE_TYPE="gpu"
BASE_IMAGE="vllm/vllm-openai"
cd vertex-ai-samples/notebooks/official/prediction/vertexai_serving_vllm/cloud-build && \
gcloud builds submit \
--config=cloudbuild.yaml \
--region=LOCATION \
--timeout="2h" \
--machine-type=e2-highcpu-32 \
--substitutions=_REPOSITORY=DOCKER_REPOSITORY,_DEVICE_TYPE=$DEVICE_TYPE,_BASE_IMAGE=$BASE_IMAGE
TPU
DEVICE_TYPE="tpu"
BASE_IMAGE="vllm/vllm-tpu:nightly"
cd vertex-ai-samples/notebooks/official/prediction/vertexai_serving_vllm/cloud-build && \
gcloud builds submit \
--config=cloudbuild.yaml \
--region=LOCATION \
--timeout="2h" \
--machine-type=e2-highcpu-32 \
--substitutions=_REPOSITORY=DOCKER_REPOSITORY,_DEVICE_TYPE=$DEVICE_TYPE,_BASE_IMAGE=$BASE_IMAGE
CPU
DEVICE_TYPE="cpu"
BASE_IMAGE="vllm-cpu-base"
cd vertex-ai-samples/notebooks/official/prediction/vertexai_serving_vllm/cloud-build && \
gcloud builds submit \
--config=cloudbuild.yaml \
--region=LOCATION \
--timeout="2h" \
--machine-type=e2-highcpu-32 \
--substitutions=_REPOSITORY=DOCKER_REPOSITORY,_DEVICE_TYPE=$DEVICE_TYPE,_BASE_IMAGE=$BASE_IMAGE
Setelah build selesai, konfigurasikan Docker untuk melakukan autentikasi dengan Artifact Registry:
gcloud auth configure-docker LOCATION-docker.pkg.dev --quiet
Mengupload model ke Model Registry dan men-deploy
Upload model Anda ke Vertex AI Model Registry, buat endpoint, dan deploy model dengan menyelesaikan langkah-langkah berikut. Contoh ini menggunakan Llama 3.2 3B, tetapi Anda dapat mengadaptasinya untuk model lain.
Tentukan variabel model dan deployment. Tetapkan variabel
DOCKER_URIke image yang Anda buat pada langkah sebelumnya (misalnya, untuk GPU):DOCKER_URI = f"LOCATION-docker.pkg.dev/PROJECT_ID/DOCKER_REPOSITORY/vllm-gpu"Tentukan variabel untuk token Hugging Face dan properti model. Misalnya, untuk deployment GPU:
hf_token = "your-hugging-face-auth-token" model_name = "gpu-llama3_2_3B-serve-vllm" model_id = "meta-llama/Llama-3.2-3B" machine_type = "g2-standard-8" accelerator_type = "NVIDIA_L4" accelerator_count = 1Upload model ke Model Registry. Fungsi
upload_modelsedikit berbeda bergantung pada jenis perangkat karena argumen dan variabel lingkungan vLLM yang berbeda.from google.cloud import aiplatform def upload_model_gpu(model_name, model_id, hf_token, accelerator_count, docker_uri): vllm_args = [ "python3", "-m", "vllm.entrypoints.openai.api_server", "--host=0.0.0.0", "--port=8080", f"--model={model_id}", "--max-model-len=2048", "--gpu-memory-utilization=0.9", "--enable-prefix-caching", f"--tensor-parallel-size={accelerator_count}", ] env_vars = { "HF_TOKEN": hf_token, "LD_LIBRARY_PATH": "$LD_LIBRARY_PATH:/usr/local/nvidia/lib64", } model = aiplatform.Model.upload( display_name=model_name, serving_container_image_uri=docker_uri, serving_container_args=vllm_args, serving_container_ports=[8080], serving_container_predict_route="/v1/completions", serving_container_health_route="/health", serving_container_environment_variables=env_vars, serving_container_shared_memory_size_mb=(16 * 1024), # 16 GB serving_container_deployment_timeout=1800, ) return model def upload_model_tpu(model_name, model_id, hf_token, tpu_count, docker_uri): vllm_args = [ "python3", "-m", "vllm.entrypoints.openai.api_server", "--host=0.0.0.0", "--port=8080", f"--model={model_id}", "--max-model-len=2048", "--enable-prefix-caching", f"--tensor-parallel-size={tpu_count}", ] env_vars = {"HF_TOKEN": hf_token} model = aiplatform.Model.upload( display_name=model_name, serving_container_image_uri=docker_uri, serving_container_args=vllm_args, serving_container_ports=[8080], serving_container_predict_route="/v1/completions", serving_container_health_route="/health", serving_container_environment_variables=env_vars, serving_container_shared_memory_size_mb=(16 * 1024), # 16 GB serving_container_deployment_timeout=1800, ) return model def upload_model_cpu(model_name, model_id, hf_token, docker_uri): vllm_args = [ "python3", "-m", "vllm.entrypoints.openai.api_server", "--host=0.0.0.0", "--port=8080", f"--model={model_id}", "--max-model-len=2048", ] env_vars = {"HF_TOKEN": hf_token} model = aiplatform.Model.upload( display_name=model_name, serving_container_image_uri=docker_uri, serving_container_args=vllm_args, serving_container_ports=[8080], serving_container_predict_route="/v1/completions", serving_container_health_route="/health", serving_container_environment_variables=env_vars, serving_container_shared_memory_size_mb=(16 * 1024), # 16 GB serving_container_deployment_timeout=1800, ) return model # Example for GPU: vertexai_model = upload_model_gpu(model_name, model_id, hf_token, accelerator_count, DOCKER_URI)Buat endpoint
endpoint = aiplatform.Endpoint.create(display_name=f"model_name-endpoint")Deploy model ke endpoint. Deployment model mungkin memerlukan waktu 20 hingga 30 menit.
# Example for GPU: vertexai_model.deploy( endpoint=endpoint, deployed_model_display_name=model_name, machine_type=machine_type, accelerator_type=accelerator_type, accelerator_count=accelerator_count, traffic_percentage=100, deploy_request_timeout=1800, min_replica_count=1, max_replica_count=4, autoscaling_target_accelerator_duty_cycle=60, )Untuk TPU, hapus parameter
accelerator_typedanaccelerator_count, lalu gunakanautoscaling_target_request_count_per_minute=60. Untuk CPU, hapus parameteraccelerator_typedanaccelerator_count, lalu gunakanautoscaling_target_cpu_utilization=60.
Memuat model dari Cloud Storage
Container kustom mendownload model dari lokasi Cloud Storage, bukan mendownloadnya dari Hugging Face. Saat Anda menggunakan Cloud Storage:
- Tetapkan parameter
model_iddalam fungsiupload_modelke Cloud Storage URI, misalnya,gs://<var>my-bucket</var>/<var>my-models</var>/<var>llama_3_2_3B</var>. - Hapus variabel
HF_TOKENdarienv_varssaat Anda memanggilupload_model. - Saat Anda memanggil
model.deploy, tentukanservice_accountyang memiliki izin untuk membaca dari bucket Cloud Storage.
Membuat Akun Layanan IAM untuk akses Cloud Storage
Jika model Anda berada di Cloud Storage, buat akun layanan yang dapat digunakan endpoint Vertex Prediction untuk mengakses artefak model.
SERVICE_ACCOUNT_NAME = "vertexai-endpoint-sa"
SERVICE_ACCOUNT_EMAIL = f"SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
--display-name="Vertex AI Endpoint Service Account"
# Grant storage read permission
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
--role="roles/storage.objectViewer"
Saat Anda men-deploy, teruskan email akun layanan ke metode deploy:
service_account=<var>SERVICE_ACCOUNT_EMAIL</var>.
Mendapatkan prediksi menggunakan endpoint
Setelah Anda berhasil men-deploy model ke endpoint, verifikasi respons model menggunakan raw_predict.
import json
PROMPT = "Distance of moon from earth is "
request_body = json.dumps(
{
"prompt": PROMPT,
"temperature": 0.0,
},
)
raw_response = endpoint.raw_predict(
body=request_body, headers={"Content-Type": "application/json"}
)
assert raw_response.status_code == 200
result = json.loads(raw_response.text)
for choice in result["choices"]:
print(choice)
Contoh output:
{
"index": 0,
"text": "384,400 km. The moon is 1/4 of the earth's",
"logprobs": null,
"finish_reason": "length",
"stop_reason": null,
"prompt_logprobs": null
}
Langkah berikutnya
- Memilih opsi penayangan model terbuka
- Menggunakan model terbuka menggunakan Model as a Service (MaaS)
- Men-deploy model terbuka dari Model Garden
- Men-deploy model terbuka dengan container bawaan