RTX 6000 Pro GPU ile Cloud Run'da Gemma modeli kullanarak çıkarım çalıştırma

1. Giriş

Genel Bakış

Neler öğreneceksiniz?

  • Cloud Run RTX 6000 Pro GPU'da Gemma modeli dağıtma
  • Container başlatma sırasında Cloud Storage'dan eşzamanlı olarak model indirme

2. Kurulum ve Gereksinimler

Bu codelab boyunca kullanılacak ortam değişkenlerini ayarlayın:

export PROJECT_ID=<YOUR_PROJECT_ID>

export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab

# set the project
gcloud config set project $PROJECT_ID

Bu Codelab için gereken API'leri etkinleştirin

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

Codelab için bir klasör oluşturun.

mkdir codelab-rtx
cd codelab-rtx

Cloud Storage'dan makine öğrenimi modeli yüklemeyi optimize etmek için alt ağınızda Özel Google Erişimi'ni etkinleştirin. Cloud Storage'dan modelleri yükleme ile ilgili GPU en iyi uygulamaları dokümanı bölümünden daha fazla bilgi edinebilirsiniz.

gcloud compute networks subnets update default \
  --region=europe-west4 \
  --enable-private-ip-google-access

3. Cloud Storage'ı kurma

İlk olarak, model ağırlıklarını depolamak için bir Cloud Storage paketi oluşturun.

Benzersiz bir paket oluşturma

# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"

# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
    --location=$REGION \
    --uniform-bucket-level-access

4. Model Ağırlıklarını Alma

Ardından, Gemma 3 modelini yerel bir dizine indirin ve Cloud Storage paketinize yükleyin.

Ollama'yı yükleme

Ollama'yı yüklemek için bu komutu çalıştırabilirsiniz:

curl -fsSL https://ollama.com/install.sh | sh

Modeli İndir

İndirilen model için bir dizin oluşturun.

mkdir model-weights

Bu işlem için iki terminal sekmesi kullanacaksınız: biri Ollama sunucusunu çalıştırmak, diğeri ise modeli almak için.

Terminal 1 (Sunucu):

İndirilen modelin konumunu ileterek sunucuyu başlatın. Bu komut çalışmaya devam eder.

OLLAMA_MODELS=$(pwd)/model-weights ollama serve

Terminal 2 (İstemci): Yeni bir terminal sekmesi açın ve modeli indirin. İstemci, çalışan sunucuyla otomatik olarak iletişim kurar.

# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b

Terminal 1'e geri dönün: Terminal 2'deki indirme işlemi tamamlandıktan sonra Terminal 1'e dönün ve sunucuyu durdurmak için Ctrl+C tuşlarına basın.

Cloud Storage'a yükleme

Şimdi ağırlıkları paketinize yükleyin. gcloud storage Hızlı yükleme için paralel yüklemeleri otomatik olarak işler.

gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/

(İsteğe bağlı) Yerel ağırlıkları temizleme

Model artık Cloud Storage'da olduğundan yerel kopyayı kaldırın.

rm -rf model-weights

5. Hizmeti oluşturun

Öncelikle hizmet için bir klasör oluşturun.

mkdir rtx-service
cd rtx-service

Aşağıdaki içeriklerle Dockerfile oluşturun

FROM ollama/ollama:latest

# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://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 | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
    apt-get update && apt-get install -y google-cloud-cli && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Listen on all interfaces, port 11434
ENV OLLAMA_HOST 0.0.0.0:11434

# Store model weight files in /models
ENV OLLAMA_MODELS /models

# Reduce logging verbosity
ENV OLLAMA_DEBUG false

# Never unload model weights from the GPU
ENV OLLAMA_KEEP_ALIVE -1

# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]

Aşağıdaki içeriklere sahip entrypoint.sh adlı bir dosya oluşturun:

#!/bin/bash
set -e

# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS

# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
  echo "Downloading model weights from gs://$MODEL_BUCKET..."
  # gcloud storage handles concurrent downloads automatically
  gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
  echo "MODEL_BUCKET not set. Skipping download."
fi

# Start Ollama
exec ollama serve

6. Cloud Run'a dağıt

Bu bölümde, hizmeti gcloud run deploy kullanarak dağıtacaksınız. Bu komut, container'ınızı kaynaktan oluşturur ve gerekli GPU ve ağ yapılandırmalarıyla Cloud Run'a dağıtır.

Hizmet hesabı oluşturma

Bu uygulama için özel bir hizmet hesabı oluşturun ve yalnızca gerekli izinleri verin.

# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
    --display-name="RTX Codelab Identity"

# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
    --member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
     --role="roles/compute.networkUser"

# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
 --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
 --role="roles/compute.networkUser"

Ağ Yapılandırması

Büyük modelleri indirirken optimum performans için Direct VPC Egress'i kullanın. Bu sayede kapsayıcı, genel interneti ve NAT ağ geçitlerini atlayarak Google özel ağı üzerinden Cloud Storage'a erişebilir. gcloud run deploy komutunda aşağıdaki işaretler kullanılır:

  • --network: default VPC'ye bağlanır (bu ağın mevcut olduğundan ve bölgenizde Özel Google Erişimi'nin etkin olduğu bir alt ağa sahip olduğundan emin olun).
  • --subnet: Bölgenizdeki belirli alt ağ (varsayılan ağ kullanılıyorsa genellikle default).
  • --vpc-egress: Tüm çıkış trafiğini VPC üzerinden yönlendirmek için all-traffic olarak ayarlayın.

Dağıtım Komutu

gcloud beta run deploy $SERVICE_NAME \
    --source . \
    --region $REGION \
    --project $PROJECT_ID \
    --no-allow-unauthenticated \
    --port 11434 \
    --service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
    --cpu 20 --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
    --network default \
    --subnet default \
    --vpc-egress all-traffic \
    --no-gpu-zonal-redundancy

7. Hizmeti test etme

Dağıtıldıktan sonra Ollama API'yi kullanarak Gemma 3 modelinizle etkileşim kurabilirsiniz.

Hizmet URL'sini alma

Dağıtılan Cloud Run hizmetinizin URL'sini alın.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"

Çıkarım Çalıştırma

curl kullanarak modele bir istem gönderin. Tek bir JSON nesnesinde tam yanıtı almak için "stream": false, yalnızca metni ayıklamak için jq değerini ayarlayabilirsiniz.

Not: Daha büyük bir model (ör. gemma3:27b) kullanıyorsanız aşağıdaki JSON'da model adını değiştirmeniz gerekir.

curl -s "$SERVICE_URL/api/generate" \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gemma3:1b",
  "prompt": "Why is the sky blue?",
  "stream": false
}' | jq -r '.response'

8. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Cloud Run belgelerini incelemenizi öneririz.

İşlediğimiz konular

  • Cloud Run RTX 6000 Pro GPU'da Gemma modeli dağıtma
  • Container başlatma sırasında Cloud Storage'dan eşzamanlı olarak model indirme

9. Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız projeyi veya tek tek kaynakları silebilirsiniz.

1. seçenek: Kaynakları silme

Cloud Run hizmetini silme

gcloud run services delete $SERVICE_NAME \
      --region $REGION \
      --quiet

Hizmet Hesabını Silme

gcloud iam service-accounts delete \
      rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
      --quiet

Cloud Storage paketini silme

gcloud storage rm --recursive gs://$MODEL_BUCKET

Container görüntüsünü silme

Bu derleme, Artifact Registry'de bir container görüntüsü oluşturdu. Resmin adını bulup silebilirsiniz.

Tam adı (genellikle gcr.io/PROJECT_ID/SERVICE_NAME) bulmak için resimleri listeleyin.

gcloud container images list --filter="name:$SERVICE_NAME"

Resmi silin (IMAGE_NAME yerine yukarıdaki sonucu girin).

gcloud container images delete <IMAGE_NAME> --force-delete-tags

2. seçenek: Projeyi silme

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ızda projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.