3. Laboratuvar: Prototip Oluşturmadan Üretime Geçiş - ADK Aracınızı GPU ile Cloud Run'a Dağıtma

1. Giriş

Genel Bakış

Bu laboratuvarda, GPU hızlandırmalı Gemma arka ucuyla üretime hazır bir Agent Development Kit (ADK) aracısı dağıtacaksınız. Bu eğitimde, kritik dağıtım kalıplarına odaklanılmaktadır: GPU özellikli Cloud Run hizmetlerini ayarlama, model arka uçlarını ADK aracılarıyla entegre etme ve yük altındaki otomatik ölçeklendirme davranışını gözlemleme.

Yapacaklarınız

Bu laboratuvarda, önemli üretim dağıtımı yönlerine odaklanacaksınız:

  1. GPU ile Gemma'yı Cloud Run'a dağıtma: Yüksek performanslı bir Gemma modeli arka ucu oluşturun.
  2. Gemma dağıtımını bir ADK aracısıyla entegre edin: Aracınızı GPU hızlandırmalı modele bağlayın.
  3. ADK Web arayüzü ile test etme: Sohbet aracınızın doğru şekilde çalıştığını doğrulayın.
  4. Yük testi gerçekleştirme: Her iki Cloud Run örneğinin de yük altında otomatik olarak nasıl ölçeklendiğini gözlemleyin.

Burada kapsamlı aracı geliştirme yerine üretim dağıtım kalıplarına odaklanılır.

Neler öğreneceksiniz?

  • Üretimde kullanılmak üzere GPU hızlandırmalı Gemma modellerini Cloud Run'a dağıtma
  • Harici model dağıtımlarını ADK aracılarıyla entegre etme
  • Üretime hazır yapay zeka aracısı dağıtımlarını yapılandırma ve test etme
  • Yük altında Cloud Run'ın otomatik ölçeklendirme davranışını anlama
  • Trafik artışları sırasında birden fazla Cloud Run örneğinin nasıl koordineli çalıştığını gözlemleyin.
  • Performansı ve otomatik ölçeklendirmeyi doğrulamak için yük testi uygulama

2. Proje Ayarları

  1. Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.
    • İş veya okul hesabı yerine kişisel hesap kullanıyorsanız. İş ve okul hesaplarında, bu laboratuvar için gereken API'leri etkinleştirmenizi engelleyen kısıtlamalar olabilir.
  2. Google Cloud Console'da oturum açın.
  3. Cloud Console'da faturalandırmayı etkinleştirin.
    • Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
    • Daha fazla ödeme alınmaması için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
    • Yeni kullanıcılar 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
  4. Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.

3. Cloud Shell Düzenleyici'yi açma

  1. Doğrudan Cloud Shell Düzenleyici'ye gitmek için bu bağlantıyı tıklayın.
  2. Bugün herhangi bir noktada yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın. Cloud Shell'e yetki vermek için tıklayın.
  3. Terminal ekranın alt kısmında görünmüyorsa açın:
    • Görünüm'ü tıklayın.
    • Terminal'i tıklayın.Cloud Shell Düzenleyici'de yeni terminal açma
  4. Terminalde şu komutla projenizi ayarlayın:
    • Biçim:
      gcloud config set project [PROJECT_ID]
      
    • Örnek:
      gcloud config set project lab-project-id-example
      
    • Proje kimliğinizi hatırlamıyorsanız:
      • Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Cloud Shell Düzenleyici terminalinde proje kimliğini ayarlama
  5. Şu mesajı görmeniz gerekir:
    Updated property [core/project].
    
    WARNING simgesini görüyorsanız ve Do you want to continue (Y/n)? soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz. n tuşuna, Enter tuşuna basın ve gcloud config set project komutunu tekrar çalıştırmayı deneyin.

4. API'leri etkinleştirme ve varsayılan bölgeyi ayarlama

GPU destekli Cloud Run hizmetlerini dağıtabilmemiz için gerekli Google Cloud API'lerini etkinleştirmemiz ve proje ayarlarınızı yapılandırmamız gerekir.

  1. Terminalde API'leri etkinleştirin:
gcloud services enable \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  aiplatform.googleapis.com

Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın. Cloud Shell'e yetki vermek için tıklayın.

Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda aşağıdakine benzer bir başarılı mesajı oluşturması gerekir:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
  1. Varsayılan Cloud Run bölgenizi ayarlayın.
gcloud config set run/region europe-west1

5. Python projenizi hazırlama

Hem Gemma arka ucumuz hem de ADK aracısı hizmetlerimiz için temel yapıyı içeren başlangıç kodunu ayarlayalım.

  1. Başlangıç deposunu klonlayın:
    cd ~
    git clone https://github.com/amitkmaraj/accelerate-ai-lab3-starter.git
    cd accelerate-ai-lab3-starter
    
  2. Proje yapısını inceleyin:
    ls -R
    
    Aşağıdaki başlangıç yapısını görmeniz gerekir:
    accelerate-ai-lab3-starter/
    ├── README.md                    # Project overview
    ├── ollama-backend/              # Ollama backend (separate deployment)
    │   └── Dockerfile               # Backend container (🚧 to implement)
    └── adk-agent/                   # ADK agent (separate deployment)
        ├── pyproject.toml           # Python dependencies (✅ completed)
        ├── server.py                # FastAPI server (🚧 to implement)
        ├── Dockerfile               # Container config (🚧 to implement)
        ├── load_test.py             # Load testing (🚧 to implement)
        └── production_agent/        # Agent implementation
            ├── __init__.py         # Package init (✅ completed)
            └── agent.py            # Agent logic (🚧 to implement)
    

6. Mimarisine Genel Bakış

Uygulamadan önce iki hizmetli mimariyi anlayalım:

3. Laboratuvar: İki Hizmetli Mimari

Önemli analiz: Yük testi sırasında, her iki hizmetin de bağımsız olarak ölçeklendiğini gözlemlersiniz. GPU arka ucu (darboğaz hizmeti), çıkarım yükü için 1-3 örneğe ölçeklenirken ADK aracısı, istek işleme için 1 örnekte kalır.

7. Gemma arka ucunu GPU ile Cloud Run'a dağıtma

Lab 3 Gemma Hizmeti

İlk kritik adım, ADK aracınızın beyni olarak hizmet verecek GPU hızlandırmalı bir Gemma modeli dağıtmaktır. Ayrı bir ince ayar yapılmış modele ihtiyaç duyduğunuz veya izole ölçeklendirme gerektiren mimarilerde, bağlantısı kaldırılmış ve dağıtılmış bir LLM kullanmak avantajlı olabilir.

  1. Ollama arka uç dizinine gidin:
    cd ollama-backend
    
  2. Ollama Dockerfile'ı açın ve uygulayın:
    cloudshell edit Dockerfile
    
    TODO yorumunu aşağıdakilerle değiştirin:
    FROM ollama/ollama:latest
    
    # Listen on all interfaces, port 8080
    ENV OLLAMA_HOST 0.0.0.0:8080
    
    # 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
    
    # Store the model weights in the container image
    ENV MODEL gemma3:270m
    RUN ollama serve & sleep 5 && ollama pull $MODEL
    
    # Start Ollama
    ENTRYPOINT ["ollama", "serve"]
    
    🔧 Ne işe yarar?
    • Temel olarak resmi Ollama görüntüsünü kullanır.
    • OLLAMA_HOST ürününün herhangi bir IP adresinden gelen bağlantıları kabul etmesini sağlar.
    • 8080 numaralı bağlantı noktasını kullanıma açar
  3. GPU desteğiyle Gemma arka ucunu dağıtın:
gcloud run deploy ollama-gemma3-270m-gpu \
  --source . \
  --region europe-west1 \
  --concurrency 4 \
  --cpu 8 \
  --set-env-vars OLLAMA_NUM_PARALLEL=4 \
  --gpu 1 \
  --gpu-type nvidia-l4 \
  --max-instances 3 \
  --memory 16Gi \
  --allow-unauthenticated \
  --no-cpu-throttling \
  --no-gpu-zonal-redundancy \
  --timeout 600 \
  --labels dev-tutorial=codelab-agent-gpu

"Kaynak kodundan dağıtım için oluşturulan container'ları depolamak üzere bir Artifact Registry Docker deposu gerekir. [europe-west1] bölgesinde [cloud-run-source-deploy] adlı bir depo oluşturulacak." mesajını görürseniz devam edin.

⚙️ Temel yapılandırma açıklanıyor:

  • GPU: Çıkarım iş yükleri için mükemmel fiyat-performans oranı nedeniyle NVIDIA L4 seçilmiştir. L4, 24 GB GPU belleği ve optimize edilmiş tensör işlemleri sunar. Bu nedenle Gemma gibi 270 milyon parametreli modeller için idealdir.
  • Bellek: Model yükleme, CUDA işlemleri ve Ollama'nın bellek yönetimini gerçekleştirmek için 16 GB sistem belleği
  • CPU: Optimum G/Ç işleme ve ön işleme görevleri için 8 çekirdek
  • Eşzamanlılık: Örnek başına 4 istek, GPU bellek kullanımıyla işleme hızını dengeler.
  • Zaman aşımı: 600 saniye, ilk model yükleme ve kapsayıcı başlatma işlemlerini kapsar.

💰 Maliyet Değerlendirmesi: GPU örnekleri, yalnızca CPU içeren örneklerden önemli ölçüde daha pahalıdır (saat başına ~2-4 ABD doları ile saat başına ~0,10 ABD doları). --max-instances 1 ayarı, gereksiz GPU örneği ölçeklendirmesini önleyerek maliyetleri kontrol etmenize yardımcı olur.

  1. Dağıtımın tamamlanmasını bekleyin ve hizmet URL'sini not edin:
    export OLLAMA_URL=$(gcloud run services describe ollama-gemma3-270m-gpu \
        --region=europe-west1 \
        --format='value(status.url)')
    
    echo "🎉 Gemma backend deployed at: $OLLAMA_URL"
    

8. ADK aracısı entegrasyonunu uygulama

Şimdi de dağıtılan Gemma arka ucunuza bağlanan minimum bir ADK aracısı oluşturalım.

  1. ADK temsilcisi dizinine gidin:
    cd ../adk-agent
    
  2. Aracı yapılandırmasını açın ve uygulayın:
    cloudshell edit production_agent/agent.py
    
    Tüm TODO yorumlarını bu minimum uygulamayla değiştirin:
    import os
    from pathlib import Path
    
    from dotenv import load_dotenv
    from google.adk.agents import Agent
    from google.adk.models.lite_llm import LiteLlm
    import google.auth
    
    # Load environment variables
    root_dir = Path(__file__).parent.parent
    dotenv_path = root_dir / ".env"
    load_dotenv(dotenv_path=dotenv_path)
    
    # Configure Google Cloud
    try:
        _, project_id = google.auth.default()
        os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
    except Exception:
        pass
    
    os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "europe-west1")
    
    # Configure model connection
    gemma_model_name = os.getenv("GEMMA_MODEL_NAME", "gemma3:270m")
    
    # Production Gemma Agent - GPU-accelerated conversational assistant
    gemma_agent = Agent(
       model=LiteLlm(model=f"ollama_chat/{gemma_model_name}"),
       name="gemma_agent",
       description="A production-ready conversational assistant powered by GPU-accelerated Gemma.",
       instruction="""You are 'Gem', a friendly, knowledgeable, and enthusiastic zoo tour guide.
       Your main goal is to make a zoo visit more fun and educational for guests by answering their questions.
    
       You can provide general information and interesting facts about different animal species, such as:
       - Their natural habitats and diet. 🌲🍓
       - Typical lifespan and behaviors.
       - Conservation status and unique characteristics.
    
       IMPORTANT: You do NOT have access to any tools. This means you cannot look up real-time, specific information about THIS zoo. You cannot provide:
       - The names or ages of specific animals currently at the zoo.
       - The exact location or enclosure for an animal.
       - The daily schedule for feedings or shows.
    
       Always answer based on your general knowledge about the animal kingdom. Keep your tone cheerful, engaging, and welcoming for visitors of all ages. 🦁✨""",
       tools=[],  # Gemma focuses on conversational capabilities
    )
    
    # Set as root agent
    root_agent = gemma_agent
    
    🔧 Ne işe yarar?
    • LiteLlm aracılığıyla dağıtılan Gemma arka ucunuza bağlanır.
    • Basit bir konuşma aracısı oluşturur
    • Google Cloud entegrasyonunu yapılandırır.
  3. FastAPI sunucusunu açın ve uygulayın:
    cloudshell edit server.py
    
    Tüm TODO yorumlarını şu yorumla değiştirin:
    import os
    from dotenv import load_dotenv
    from fastapi import FastAPI
    from google.adk.cli.fast_api import get_fast_api_app
    
    # Load environment variables
    load_dotenv()
    
    AGENT_DIR = os.path.dirname(os.path.abspath(__file__))
    app_args = {"agents_dir": AGENT_DIR, "web": True}
    
    # Create FastAPI app with ADK integration
    app: FastAPI = get_fast_api_app(**app_args)
    
    # Update app metadata
    app.title = "Production ADK Agent - Lab 3"
    app.description = "Gemma agent with GPU-accelerated backend"
    app.version = "1.0.0"
    
    @app.get("/health")
    def health_check():
        return {"status": "healthy", "service": "production-adk-agent"}
    
    @app.get("/")
    def root():
        return {
            "service": "Production ADK Agent - Lab 3",
            "description": "GPU-accelerated Gemma agent",
            "docs": "/docs",
            "health": "/health"
        }
    
    if __name__ == "__main__":
        import uvicorn
        uvicorn.run(app, host="0.0.0.0", port=8080, log_level="info")
    
    🔧 Ne işe yarar?
    • ADK entegrasyonuyla FastAPI sunucusu oluşturur.
    • Test için web arayüzünü etkinleştirir.
    • Durum denetimi uç noktaları sağlar
  4. Dockerfile'ı açın ve uygulayın:
    cloudshell edit Dockerfile
    
    Tüm TODO yorumlarını şu yorumla değiştirin:
    FROM python:3.13-slim
    
    # Copy uv from the official image
    COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
    
    # Install system dependencies
    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
    
    # Set working directory
    WORKDIR /app
    
    # Copy all files
    COPY . .
    
    # Install Python dependencies
    RUN uv sync
    
    # Expose port
    EXPOSE 8080
    
    # Run the application
    CMD ["uv", "run", "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]
    
    Teknoloji seçenekleri açıklanıyor:
    • uv: pip'ten 10-100 kat daha hızlı olan modern Python paket yöneticisi. Küresel bir önbellek ve paralel indirmeler kullanarak kapsayıcı derleme sürelerini önemli ölçüde kısaltır.
    • Python 3.13-slim: En son Python sürümü, minimum sistem bağımlılıklarıyla container boyutunu ve saldırı yüzeyini azaltır.
    • Çok aşamalı derleme: uv'yi resmi görüntüsünden kopyalamak, en yeni optimize edilmiş ikili programı elde etmemizi sağlar.

9. Ortamı Yapılandırma ve Aracıyı Dağıtma

Şimdi ADK aracısını, dağıtılan Gemma arka ucunuza bağlanacak şekilde yapılandırıp Cloud Run hizmeti olarak dağıtacağız. Bu işlem, ortam değişkenlerinin ayarlanmasını ve aracının doğru yapılandırmayla dağıtılmasını içerir.

  1. Ortam yapılandırmanızı ayarlayın:
    cat << EOF > .env
    GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
    GOOGLE_CLOUD_LOCATION=europe-west1
    GEMMA_MODEL_NAME=gemma3:270m
    OLLAMA_API_BASE=$OLLAMA_URL
    EOF
    

Cloud Run'daki ortam değişkenlerini anlama

Ortam değişkenleri, uygulamanızı çalışma zamanında yapılandıran anahtar/değer çiftleridir. Bu reklamlar özellikle şu durumlarda yararlıdır:

  • API uç noktaları ve hizmet URL'leri (ör. Ollama arka ucumuz)
  • Ortamlar (geliştirme, hazırlama, üretim) arasında değişen yapılandırma
  • Sabit kodlanmaması gereken hassas veriler

ADK aracısını dağıtın:

export PROJECT_ID=$(gcloud config get-value project)

gcloud run deploy production-adk-agent \
   --source . \
   --region europe-west1 \
   --allow-unauthenticated \
   --memory 4Gi \
   --cpu 2 \
   --max-instances 1 \
   --concurrency 10 \
   --timeout 300 \
   --set-env-vars GOOGLE_CLOUD_PROJECT=$PROJECT_ID \
   --set-env-vars GOOGLE_CLOUD_LOCATION=europe-west1 \
   --set-env-vars GEMMA_MODEL_NAME=gemma3:270m \
   --set-env-vars OLLAMA_API_BASE=$OLLAMA_URL \
   --labels dev-tutorial=codelab-agent-gpu

⚙️ Anahtar yapılandırması:

  • Otomatik ölçeklendirme: 1 örnekte sabitlenmiştir (basit istek işleme)
  • Eşzamanlılık: Örnek başına 10 istek
  • Bellek: ADK aracısı için 4 GB
  • Ortam: Gemma arka ucunuza bağlanır.

🔒 Güvenlik Notu: Bu laboratuvarda basitlik için --allow-unauthenticated kullanılır. Üretimde, aşağıdakileri kullanarak uygun kimlik doğrulama uygulayın:

  • Hizmet hesaplarıyla Cloud Run hizmetler arası kimlik doğrulaması
  • Kimlik ve Erişim Yönetimi (IAM) politikaları
  • Harici erişim için API anahtarları veya OAuth
  • Erişimi kontrol etmek için gcloud run services add-iam-policy-binding kullanmayı düşünün.

Temsilci hizmeti URL'nizi alın:

export AGENT_URL=$(gcloud run services describe production-adk-agent \
    --region=europe-west1 \
    --format='value(status.url)')

echo "🎉 ADK Agent deployed at: $AGENT_URL"

Cloud Run ortam değişkenleri belgelerine dayalı ✅ Ortam değişkenleriyle ilgili en iyi uygulamalar:

  1. Ayrılmış değişkenlerden kaçının: PORT (Cloud Run bunu otomatik olarak ayarlar) veya X_GOOGLE_ ile başlayan değişkenleri ayarlamayın.
  2. Açıklayıcı adlar kullanın: Çakışmaları önlemek için değişkenlerinize önek ekleyin (ör. MODEL yerine GEMMA_MODEL_NAME)
  3. Virgüllerden kaçma: Değerleriniz virgül içeriyorsa farklı bir ayırıcı kullanın: --set-env-vars "^@^KEY1=value1,value2@KEY2=..."
  4. Güncelleme ve Değiştirme: Diğer değişkenleri etkilemeden belirli değişkenleri eklemek/değiştirmek için --update-env-vars simgesini kullanın.

Cloud Run'da değişkenleri ayarlama:

  • Dosyadan: gcloud run deploy SERVICE_NAME --env-vars-file .env --labels dev-tutorial codelab-adk (bir dosyadan birden fazla değişken yükler)
  • Birden fazla işaret: Virgülle ayrılamayan karmaşık değerler için --set-env-vars öğesini tekrarlayın.

10. ADK Web Arayüzü ile test etme

Her iki hizmet de dağıtıldıktan sonra ADK aracınızın GPU hızlandırmalı Gemma arka ucuyla başarıyla iletişim kurabildiğini ve kullanıcı sorgularına yanıt verebildiğini doğrulamanız gerekir.

  1. Durum bitiş noktasını test edin:
    curl $AGENT_URL/health
    
    Şunları görürsünüz:
    { "status": "healthy", "service": "production-adk-agent" }
    
  2. production-adk-agent URL'nizi yeni bir tarayıcı sekmesine girerek temsilcinizle etkileşimde bulunun. ADK web arayüzünü görürsünüz.
  3. Temsilcinizi aşağıdaki örnek görüşmelerle test edin:
    • "Kızıl pandalar genellikle doğada ne yer?"
    • "Kar leoparları hakkında ilginç bir bilgi verebilir misin?"
    • "Neden zehirli ok kurbağaları bu kadar parlak renklidir?"
    • "Hayvanat bahçesinde yeni doğan kanguruyu nerede bulabilirim?"
    👀 Gözlemlenecekler:
    • Temsilci, dağıtılmış Gemma modelinizi kullanarak yanıt verir. Dağıtılan Gemma hizmetinizin günlüklerini inceleyerek bunu doğrulayabilirsiniz. Bu işlemi bir sonraki bölümde yapacağız.
    • Yanıtlar, GPU hızlandırmalı arka uç tarafından oluşturulur.
    • Web arayüzü, temiz bir sohbet deneyimi sunar.

Lab 3 ADK Testing

11. Yük Testini Uygulama ve Çalıştırma

3. Laboratuvar: Yük Testi

Üretim dağıtımınızın gerçek dünya trafiğini nasıl işlediğini anlamak için hem ADK aracısında hem de GPU arka uç hizmetlerinde otomatik ölçeklendirmeyi tetikleyecek kapsamlı bir yük testi uygulayacağız.

  1. Yük testi komut dosyasını açıp uygulayın:
    cloudshell edit load_test.py
    
    TODO yorumunu aşağıdakilerle değiştirin:
    import random
    import uuid
    from locust import HttpUser, task, between
    
    class ProductionAgentUser(HttpUser):
        """Load test user for the Production ADK Agent."""
    
        wait_time = between(1, 3)  # Faster requests to trigger scaling
    
        def on_start(self):
            """Set up user session when starting."""
            self.user_id = f"user_{uuid.uuid4()}"
            self.session_id = f"session_{uuid.uuid4()}"
    
            # Create session for the Gemma agent using proper ADK API format
            session_data = {"state": {"user_type": "load_test_user"}}
    
            self.client.post(
                f"/apps/production_agent/users/{self.user_id}/sessions/{self.session_id}",
                headers={"Content-Type": "application/json"},
                json=session_data,
            )
    
        @task(4)
        def test_conversations(self):
            """Test conversational capabilities - high frequency to trigger scaling."""
            topics = [
                "What do red pandas typically eat in the wild?",
                "Can you tell me an interesting fact about snow leopards?",
                "Why are poison dart frogs so brightly colored?",
                "Where can I find the new baby kangaroo in the zoo?",
                "What is the name of your oldest gorilla?",
                "What time is the penguin feeding today?"
            ]
    
            # Use proper ADK API format for sending messages
            message_data = {
                "app_name": "production_agent",
                "user_id": self.user_id,
                "session_id": self.session_id,
                "new_message": {
                    "role": "user",
                    "parts": [{
                        "text": random.choice(topics)
                    }]
                }
            }
    
            self.client.post(
                "/run",
                headers={"Content-Type": "application/json"},
                json=message_data,
            )
    
        @task(1)
        def health_check(self):
            """Test the health endpoint."""
            self.client.get("/health")
    
    🔧 Ne işe yarar?
    • Oturum oluşturma: /apps/production_agent/users/{user_id}/sessions/{session_id} için POST ile uygun ADK API biçimini kullanır. session_id ve user_id oluşturulduktan sonra aracıya istek gönderilebilir.
    • Mesaj Biçimi: app_name, user_id, session_id ve yapılandırılmış new_message nesnesiyle ADK spesifikasyonuna uygundur.
    • Conversation Endpoint: Tüm etkinlikleri tek seferde toplamak için /run uç noktasını kullanır (yük testi için önerilir).
    • Gerçekçi Yük: Otomatik ölçeklendirmeyi tetiklemek için daha kısa bekleme süreleriyle sohbet yükü oluşturur.
    📚 ADK API uç noktaları ve test kalıpları hakkında daha fazla bilgi için ADK Test Kılavuzu'na bakın.
  2. Bağımlılıkları yükleyin:
    uv sync
    pip install locust
    
  3. Locust, web uygulamalarının ve diğer sistemlerin performans ve yük testi için tasarlanmış, Python tabanlı açık kaynaklı bir yük testi aracıdır. Temel özelliği, test senaryolarının ve kullanıcı davranışının standart Python kodu kullanılarak tanımlanmasıdır. Bu sayede, grafik kullanıcı arayüzlerine veya alana özgü dillere dayanan araçlara kıyasla yüksek esneklik ve ifade gücü sunar. Hizmetlerimize yönelik kullanıcı trafiğini simüle etmek için Locust'u kullanacağız.Yük testini çalıştırın.
    # Run a load test to trigger autoscaling
    locust -f load_test.py \
       -H $AGENT_URL \
       --headless \
       -t 50s \
       -u 3 \
       -r 1
    
    Testteki parametreleri değiştirmeyi deneyin ve çıkışı gözlemleyin. ollama-gemma3-270m-gpu değerinin 2-3 örneğe yükseldiğini görürsünüz. 📊 Yük testi parametreleri:
    • Süre: 50 saniye
    • Kullanıcılar: 3 eşzamanlı kullanıcı
    • Oluşturma hızı: Saniyede 1 kullanıcı
    • Hedef: Her iki hizmette de otomatik ölçeklendirmeyi tetikleyin.

12. Otomatik ölçeklendirme davranışını gözlemleme

Yük testi çalışırken Cloud Run'ın otomatik ölçeklendirme özelliğini gözlemleyebilirsiniz. ADK aracısını GPU arka ucundan ayırmanın temel mimari avantajlarını burada görebilirsiniz.

Yük testi sırasında, konsolunuzda Cloud Run hizmetlerinin nasıl ölçeklendiğini izleyin.

  1. Cloud Console'da şu bölüme gidin:
    • Cloud Run → production-adk-agent → Metrikler
    • Cloud Run → ollama-gemma3-270m-gpu → Metrikler

👀 Gözlemlemeniz gerekenler:

🤖 ADK Agent Service:

  • Trafik artarken 1 örnekte sabit kalmalıdır.
  • Yüksek trafik sırasında CPU ve bellek kullanımında ani artış
  • Oturum yönetimini ve istek yönlendirmeyi verimli bir şekilde gerçekleştirir.

🎮 Gemma Arka Uç Hizmeti (Darboğaz):

  • Çıkarım talebine göre 1 ila 3 örnek arasında ölçeklendirilir.
  • Yük altında GPU kullanımı önemli ölçüde artıyor
  • Bu hizmet, GPU yoğun model çıkarımı nedeniyle darboğaz haline gelir.
  • GPU hızlandırma sayesinde model çıkarım süreleri tutarlı kalır.

💡 Önemli Analizler:

  • GPU arka ucu darboğazdır ve daha agresif bir şekilde ölçeklenir (1-3 örnek).
  • ADK aracısı tutarlı kalır
  • Her iki hizmet de kendi yük özelliklerine göre bağımsız olarak ölçeklenir.
  • Otomatik ölçeklendirme, farklı yük koşullarında performansı korumaya yardımcı olur.

13. Sonuç

Tebrikler! GPU hızlandırmalı Gemma arka ucuyla üretime hazır bir ADK aracısını başarıyla dağıttınız ve otomatik ölçeklendirme davranışını gözlemlediniz.

✅ Başarılarınız

  • ✅ Cloud Run'da GPU hızlandırmalı bir Gemma modeli arka ucu dağıtıldı
  • ✅ Gemma arka ucuyla entegre olan bir ADK aracısı oluşturup dağıtma
  • ✅ ADK web arayüzünü kullanarak aracıyı test etme
  • ✅ İki koordineli Cloud Run hizmetinde otomatik ölçeklendirme davranışı gözlemlendi.

💡 Bu laboratuvarda öne çıkan önemli noktalar

  1. 🎮 GPU Hızlandırma: NVIDIA L4 GPU, model çıkarım performansını önemli ölçüde artırır.
  2. 🔗 Hizmet Koordinasyonu: İki Cloud Run hizmeti sorunsuz bir şekilde birlikte çalışabilir.
  3. 📈 Bağımsız Ölçeklendirme: Her hizmet, kendi yük özelliklerine göre ölçeklendirilir.
  4. 🚀 Üretime Hazır Olma Durumu: Mimaride gerçek dünyadaki trafik kalıpları etkili bir şekilde ele alınır.

🔄 Sonraki adımlar

  • Farklı yükleme kalıplarıyla denemeler yapın ve ölçeklendirme davranışını gözlemleyin
  • Farklı Gemma modeli boyutlarını deneyin (belleği ve GPU'yu buna göre ayarlayın)
  • Üretim dağıtımları için izleme ve uyarı oluşturma işlevlerini uygulama
  • Global kullanılabilirlik için çok bölgeli dağıtımları keşfedin

🧹 Temizleme

Ücretlendirilmemek için işiniz bittiğinde kaynakları silin:

gcloud run services delete production-adk-agent --region=europe-west1
gcloud run services delete ollama-gemma3-270m-gpu --region=europe-west1

📖 Kaynaklar