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:defaultVPC'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 genellikledefault).--vpc-egress: Tüm çıkış trafiğini VPC üzerinden yönlendirmek içinall-trafficolarak 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.