Cara menjalankan inferensi batch pada tugas Cloud Run

1. Pengantar

Ringkasan

Dalam codelab ini, Anda akan menggunakan tugas Cloud Run untuk menjalankan inferensi batch menggunakan LLM Llama 3.2-1b Meta dan vLLM yang didukung oleh GPU Tugas Cloud Run. Anda akan menulis hasilnya langsung ke Cloud Storage menggunakan mount volume Cloud Run.

Yang akan Anda pelajari

  • Cara melakukan inferensi batch menggunakan GPU Tugas Cloud Run
  • Cara menulis ke Cloud Storage menggunakan pemasangan volume Cloud Run

2. Sebelum memulai

Mengaktifkan API

Sebelum Anda dapat mulai menggunakan codelab ini, aktifkan API berikut dengan menjalankan:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

Kuota GPU

Meminta penambahan kuota untuk region yang didukung. Kuotanya adalah nvidia_l4_gpu_allocation_no_zonal_redundancy, di bagian Cloud Run Admin API.

Catatan: Jika Anda menggunakan project baru, mungkin perlu waktu beberapa menit antara mengaktifkan API dan menampilkan kuota di halaman ini.

Wajah Memeluk

Codelab ini menggunakan model yang dihosting di Hugging Face. Untuk mendapatkan model ini, minta token akses pengguna Hugging Face dengan izin "Baca". Anda akan mereferensikannya nanti sebagai YOUR_HF_TOKEN.

Anda juga harus menyetujui persyaratan penggunaan untuk menggunakan model: https://huggingface.co/meta-llama/Llama-3.2-1B

3. Penyiapan dan Persyaratan

Bagian ini berisi petunjuk untuk menyiapkan resource berikut:

  • Akun layanan IAM dan izin IAM terkait.
  • Secret Secret Manager untuk menyimpan token Hugging Face Anda.
  • Bucket Cloud Storage untuk menyimpan hasil inferensi Anda.

Untuk menyiapkan resource yang diperlukan, ikuti langkah-langkah berikut:

  1. Tetapkan variabel lingkungan untuk codelab ini:
    export PROJECT_ID=<your_project_id>
    export REGION=<your_region>
    export HF_TOKEN=<YOUR_HF_TOKEN>
    
    export SERVICE_ACCOUNT=inference-service-account
    export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
    export SECRET_ID=hugging-face-token
    export BUCKET_NAME=inference-codelab-${PROJECT_ID}
    
  2. Buat akun layanan dengan menjalankan:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
    
  3. Gunakan Secret Manager untuk menyimpan token akses Hugging Face:
    gcloud secrets create $SECRET_ID \
          --replication-policy="automatic"
    
    printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
    
  4. Berikan peran Secret Manager Secret Accessor ke akun layanan Anda:
    gcloud secrets add-iam-policy-binding $SECRET_ID \
      --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role='roles/secretmanager.secretAccessor'
    
  5. Buat bucket untuk menghosting model yang telah di-fine-tune:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
    
  6. Berikan akses akun layanan Anda ke bucket:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
      --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role=roles/storage.objectAdmin
    
  7. Buat repositori Artifact Registry untuk menyimpan image container. Jika Anda telah menggunakan deployment sumber Cloud Run sebelumnya di project, lewati langkah ini.
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

4. Membuat tugas Cloud Run

Di bagian ini, Anda akan membuat kode yang melakukan hal berikut:

  • Mengimpor model Llama dari Hugging Face
  • Melakukan inferensi batch pada model. Tugas ini menggunakan satu GPU L4 untuk proses ini.
  • Menulis hasil ke disk lokal. Data ini ditulis ke Cloud Storage melalui pemasangan volume.

Untuk membuat tugas Cloud Run dan Dockerfile, ikuti langkah-langkah berikut:

  1. Buat direktori untuk menghosting kode tugas penyesuaian Anda:
    mkdir codelab-inference-job
    cd codelab-inference-job
    
  2. Buat file bernama main.py
    # SPDX-License-Identifier: Apache-2.0
    from vllm import LLM, SamplingParams
    
    # Sample prompts.
    prompts = [
        "Cloud Run is",
        "The future of AI is",
        "The capital of Germany is",
        "python as a programming language is",
    ]
    # Create a sampling params object.
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
    
    # Create an LLM.
    llm = LLM(model="meta-llama/Llama-3.2-1B")
    # Generate texts from the prompts. The output is a list of RequestOutput objects
    # that contain the prompt, generated text, and other information.
    outputs = llm.generate(prompts, sampling_params)
    
    # Save the outputs to disk
    with open("/results/output.txt", "w") as f:
        for output in outputs:
            prompt = output.prompt
            generated_text = output.outputs[0].text
            f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n")
    
    print(f"Wrote {len(outputs)} to disk.")
    
  3. Buat Dockerfile:
    FROM python:3.12
    ADD main.py .
    RUN python -m pip install --upgrade pip setuptools
    RUN pip install vllm
    CMD ["python", "./main.py"]
    

5. Men-deploy dan menjalankan tugas

Pada langkah ini, Anda akan membuat tugas Cloud Run menggunakan deployment sumber Cloud Run, lalu menjalankannya. Langkah ini juga mencakup flag pemasangan volume Cloud Run untuk menyimpan hasil.

  1. Buat Tugas Cloud Run:
    gcloud beta run jobs deploy inference-job \
      --region $REGION \
      --source . \
      --gpu=1 \
      --set-secrets HF_TOKEN=${SECRET_ID}:latest \
      --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \
      --add-volume-mount volume=results,mount-path=/results \
      --service-account $SERVICE_ACCOUNT_EMAIL
    
    Perintah ini mem-build image dari sumber dan men-deploy tugas. Proses ini akan memerlukan waktu beberapa saat.
  2. Jalankan tugas:
    gcloud run jobs execute inference-job --region $REGION --async
    
    Tugas ini memerlukan waktu beberapa menit hingga selesai. Anda dapat memeriksa statusnya menggunakan link yang diberikan dalam output perintah terakhir.

Mengonfirmasi keberhasilan

Untuk mengonfirmasi bahwa tugas Anda berhasil dieksekusi, lihat log tugas seperti dalam output perintah terakhir.

Periksa hasilnya di bucket Cloud Storage:

Di konsol:

  1. Buka Cloud Storage.
  2. Pilih bucket yang diawali dengan inference-codelab.
  3. Pilih output.txt.
  4. Klik Authenticated URL untuk melihat konten di browser.

Konten file harus berupa empat perintah dan output-nya.

6. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Sebaiknya tinjau dokumentasi Cloud Run.

Yang telah kita bahas

  • Cara melakukan inferensi batch menggunakan GPU Tugas Cloud Run
  • Cara menulis ke Cloud Storage menggunakan pemasangan volume Cloud Run

7. Pembersihan

Untuk menghapus tugas Cloud Run, buka Konsol Cloud Cloud Run di https://console.cloud.google.com/run, lalu hapus tugas inference-job.

Untuk menghapus seluruh project, buka Manage Resources, pilih project yang Anda buat di Langkah 2, lalu pilih Delete. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.