Cloud Run işlerinde toplu çıkarım çalıştırma

1. Giriş

Genel Bakış

Bu codelab'de, Cloud Run Jobs GPU tarafından desteklenen Meta'nın Llama 3.2-1b LLM ve vLLM'yi kullanarak toplu çıkarım çalıştırmak için Cloud Run işlerini kullanacaksınız. Sonuçları Cloud Run birim bağlamalarını kullanarak doğrudan Cloud Storage'a yazarsınız.

Neler öğreneceksiniz?

  • Cloud Run Jobs GPU'yu kullanarak toplu çıkarım yapma
  • Cloud Run birim bağlamalarını kullanarak Cloud Storage'a yazma

2. Başlamadan önce

API'leri etkinleştir

Bu kod laboratuvarını kullanmaya başlamadan önce aşağıdaki API'leri etkinleştirmek için:

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

GPU Kotası

Desteklenen bir bölge için kota artışı isteğinde bulunun. Cloud Run Admin API kapsamındaki kota nvidia_l4_gpu_allocation_no_zonal_redundancy'tür.

Not: Yeni bir proje kullanıyorsanız API'nin etkinleştirilmesi ile kotaların bu sayfada görünmesi arasında birkaç dakika geçebilir.

Kucak açan yüz

Bu codelab'de, Hugging Face'ta barındırılan bir model kullanılır. Bu modeli almak için "Okuma" izniyle Hugging Face kullanıcı erişim jetonunu isteyin. Buna daha sonra YOUR_HF_TOKEN olarak referans vereceksiniz.

Modeli kullanmak için kullanım şartlarını da kabul etmeniz gerekir: https://huggingface.co/meta-llama/Llama-3.2-1B

3. Kurulum ve Gereksinimler

Bu bölümde aşağıdaki kaynakları ayarlamayla ilgili talimatlar yer almaktadır:

  • IAM hizmet hesabı ve ilişkili IAM izinleri.
  • Hugging Face jetonunuzu depolamak için Secret Manager gizli anahtarı.
  • Çıkarsama sonucunuzu depolamak için bir Cloud Storage paketi.

Gerekli kaynakları ayarlamak için aşağıdaki adımları uygulayın:

  1. Bu codelab için ortam değişkenlerini ayarlayın:
    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. Aşağıdaki komutu çalıştırarak hizmet hesabını oluşturun:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
    
  3. Hugging Face erişim jetonunu depolamak için Secret Manager'ı kullanın:
    gcloud secrets create $SECRET_ID \
          --replication-policy="automatic"
    
    printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
    
  4. Hizmet hesabınıza Secret Manager Gizli Anahtar Erişeni rolünü verin:
    gcloud secrets add-iam-policy-binding $SECRET_ID \
      --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role='roles/secretmanager.secretAccessor'
    
  5. İnce ayarlanmış modelinizi barındıracak bir paket oluşturun:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
    
  6. Hizmet hesabınıza pakete erişim izni verin:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
      --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role=roles/storage.objectAdmin
    
  7. Container görüntüsünü depolamak için bir Artifact Registry deposu oluşturun. Projenizde daha önce Cloud Run kaynak dağıtımlarını kullandıysanız bu adımı atlayın.
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

4. Cloud Run işini oluşturma

Bu bölümde, aşağıdakileri yapan kodu oluşturacaksınız:

  • Hugging Face'tan Llama modelini içe aktarır.
  • Modelde toplu çıkarım gerçekleştirir. İş bu işlem için tek bir L4 GPU kullanır.
  • Sonuçları yerel diske yazar. Bu veriler, birim bağlama işlemleri aracılığıyla Cloud Storage'a yazılır.

Cloud Run işini ve Dockerfile dosyasını oluşturmak için aşağıdaki adımları uygulayın:

  1. İnce ayar iş kodunuzu barındıracak bir dizin oluşturun:
    mkdir codelab-inference-job
    cd codelab-inference-job
    
  2. main.py adlı bir dosya oluşturun
    # 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. Dockerfile oluşturun:
    FROM python:3.12
    ADD main.py .
    RUN python -m pip install --upgrade pip setuptools
    RUN pip install vllm
    CMD ["python", "./main.py"]
    

5. İşi dağıtma ve yürütme

Bu adımda, Cloud Run kaynak dağıtımını kullanarak Cloud Run işini oluşturup yürüteceksiniz. Bu adımda, sonuçları depolamak için Cloud Run birim bağlama işaretleri de yer alır.

  1. Cloud Run işini oluşturun:
    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
    
    Bu komut, resmi kaynaktan oluşturur ve işi dağıtır. Bu işlemin tamamlanması biraz zaman alacaktır.
  2. İşi yürütün:
    gcloud run jobs execute inference-job --region $REGION --async
    
    İşin tamamlanması birkaç dakika sürer. Son komutun çıktısında verilen bağlantıyı kullanarak durumu kontrol edebilirsiniz.

Başarıyı onaylama

İşinizin başarıyla yürütüldüğünü onaylamak için son komutun çıkışında olduğu gibi işin günlüklerini görüntüleyin.

Sonuçları Cloud Storage paketinde kontrol edin:

Konsolda:

  1. Cloud Storage'a gidin.
  2. inference-codelab ile başlayan paketi seçin.
  3. output.txt seçeneğini belirleyin.
  4. İçerikleri tarayıcıda görüntülemek için Kimliği Doğrulanmış URL'yi tıklayın.

Dosyanın içeriği dört istem ve bunların çıkışları olmalıdır.

6. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

Cloud Run belgelerini incelemenizi öneririz.

İşlediğimiz konular

  • Cloud Run Jobs GPU'yu kullanarak toplu çıkarım yapma
  • Cloud Run birim bağlamalarını kullanarak Cloud Storage'a yazma

7. Temizleme

Cloud Run işini silmek için https://console.cloud.google.com/run adresindeki Cloud Run Cloud Console'a gidin ve inference-job işini silin.

Projenin tamamını silmek için Kaynakları Yönet'e gidin, 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.