ল্যাব 3: প্রোটোটাইপ টু প্রোডাকশন - আপনার ADK এজেন্টকে GPU দিয়ে ক্লাউড রানে স্থাপন করুন

1. ভূমিকা

ওভারভিউ

এই ল্যাবে, আপনি GPU-এক্সিলারেটেড জেমা ব্যাকএন্ড সহ একটি প্রোডাকশন-রেডি এজেন্ট ডেভেলপমেন্ট কিট (ADK) এজেন্ট স্থাপন করবেন। ফোকাস সমালোচনামূলক স্থাপনার ধরণগুলির উপর: GPU-সক্ষম ক্লাউড রান পরিষেবাগুলি সেট আপ করা, ADK এজেন্টগুলির সাথে মডেল ব্যাকএন্ড একীভূত করা এবং লোডের অধীনে অটোস্কেলিং আচরণ পর্যবেক্ষণ করা৷

আপনি কি করবেন

এই ল্যাবে, আপনি সমালোচনামূলক উৎপাদন স্থাপনার দিকগুলিতে ফোকাস করবেন:

  1. GPU সহ ক্লাউড রানে জেমা স্থাপন করুন - একটি উচ্চ-পারফরম্যান্স জেমা মডেল ব্যাকএন্ড সেট আপ করুন
  2. একটি ADK এজেন্টের সাথে জেমমা স্থাপনার সংহত করুন - আপনার এজেন্টকে GPU-এক্সিলারেটেড মডেলের সাথে সংযুক্ত করুন
  3. ADK ওয়েব ইন্টারফেসের সাথে পরীক্ষা করুন - আপনার কথোপকথন এজেন্ট সঠিকভাবে কাজ করে তা যাচাই করুন
  4. লোড টেস্টিং সম্পাদন করুন - ক্লাউড রান উভয় দৃষ্টান্ত কিভাবে লোডের অধীনে স্বয়ংক্রিয়-স্কেল হয় তা পর্যবেক্ষণ করুন

ব্যাপক এজেন্ট বিকাশের পরিবর্তে উৎপাদন স্থাপনার ধরণগুলির উপর জোর দেওয়া হয়।

আপনি কি শিখবেন

  • উৎপাদন ব্যবহারের জন্য ক্লাউড রানে GPU-এক্সিলারেটেড জেমা মডেল স্থাপন করুন
  • ADK এজেন্টদের সাথে বাহ্যিক মডেল স্থাপনা একত্রিত করুন
  • উত্পাদন-প্রস্তুত AI এজেন্ট স্থাপনা কনফিগার করুন এবং পরীক্ষা করুন
  • লোডের অধীনে ক্লাউড রান অটোস্কেলিং আচরণ বুঝুন
  • ট্র্যাফিক স্পাইকের সময় একাধিক ক্লাউড রান দৃষ্টান্তগুলি কীভাবে সমন্বয় করে তা পর্যবেক্ষণ করুন
  • কর্মক্ষমতা এবং স্বয়ংক্রিয় স্কেলিং যাচাই করতে লোড টেস্টিং প্রয়োগ করুন

2. প্রকল্প সেটআপ

  1. আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি Google অ্যাকাউন্ট তৈরি করতে হবে।
    • কাজের বা স্কুল অ্যাকাউন্টের পরিবর্তে একটি ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন। কর্মক্ষেত্র এবং স্কুল অ্যাকাউন্টগুলিতে বিধিনিষেধ থাকতে পারে যা আপনাকে এই ল্যাবের জন্য প্রয়োজনীয় APIগুলি সক্ষম করতে বাধা দেয়৷
  2. Google ক্লাউড কনসোলে সাইন-ইন করুন।
  3. ক্লাউড কনসোলে বিলিং সক্ষম করুন
    • এই ল্যাবটি সম্পূর্ণ করতে ক্লাউড সংস্থানগুলিতে $1 USD-এর কম খরচ হওয়া উচিত৷
    • আপনি আরও চার্জ এড়াতে সংস্থানগুলি মুছতে এই ল্যাবের শেষে পদক্ষেপগুলি অনুসরণ করতে পারেন৷
    • নতুন ব্যবহারকারীরা $300 USD ফ্রি ট্রায়ালের জন্য যোগ্য৷
  4. একটি নতুন প্রকল্প তৈরি করুন বা একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করতে বেছে নিন।

3. ক্লাউড শেল এডিটর খুলুন

  1. ক্লাউড শেল এডিটরে সরাসরি নেভিগেট করতে এই লিঙ্কে ক্লিক করুন
  2. আজ যেকোনো সময়ে অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যেতে অনুমোদন ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  3. যদি টার্মিনালটি স্ক্রিনের নীচে উপস্থিত না হয় তবে এটি খুলুন:
    • দেখুন ক্লিক করুন
    • টার্মিনাল ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন
  4. টার্মিনালে, এই কমান্ড দিয়ে আপনার প্রকল্প সেট করুন:
    • বিন্যাস:
      gcloud config set project [PROJECT_ID]
      
    • উদাহরণ:
      gcloud config set project lab-project-id-example
      
    • আপনি যদি আপনার প্রকল্প আইডি মনে করতে না পারেন:
      • আপনি আপনার সমস্ত প্রকল্প আইডি এর সাথে তালিকাভুক্ত করতে পারেন:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      ক্লাউড শেল এডিটর টার্মিনালে প্রজেক্ট আইডি সেট করুন
  5. আপনার এই বার্তাটি দেখতে হবে:
    Updated property [core/project].
    
    আপনি যদি একটি WARNING দেখতে পান এবং জিজ্ঞাসা করা হয় Do you want to continue (Y/n)? , তাহলে আপনি সম্ভবত প্রজেক্ট আইডি ভুলভাবে প্রবেশ করেছেন। n টিপুন, Enter টিপুন এবং আবার gcloud config set project কমান্ড চালানোর চেষ্টা করুন।

4. APIs সক্ষম করুন এবং ডিফল্ট অঞ্চল সেট করুন৷

আমরা GPU সমর্থন সহ ক্লাউড রান পরিষেবাগুলি স্থাপন করার আগে, আমাদের প্রয়োজনীয় Google ক্লাউড APIগুলি সক্ষম করতে হবে এবং আপনার প্রকল্প সেটিংস কনফিগার করতে হবে৷

  1. টার্মিনালে, APIs সক্ষম করুন:
gcloud services enable \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  aiplatform.googleapis.com

অনুমোদন করার জন্য অনুরোধ করা হলে, চালিয়ে যেতে অনুমোদন ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন

এই কমান্ডটি সম্পূর্ণ হতে কয়েক মিনিট সময় নিতে পারে, তবে এটি শেষ পর্যন্ত এটির মতো একটি সফল বার্তা তৈরি করবে:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
  1. আপনার ডিফল্ট ক্লাউড রান অঞ্চল সেট করুন।
gcloud config set run/region europe-west1

5. আপনার পাইথন প্রকল্প প্রস্তুত করুন

আসুন স্টার্টার কোড সেট আপ করি যা আমাদের জেমা ব্যাকএন্ড এবং ADK এজেন্ট উভয় পরিষেবার জন্য মৌলিক কাঠামো ধারণ করে।

  1. স্টার্টার সংগ্রহস্থল ক্লোন করুন:
    cd ~
    git clone https://github.com/amitkmaraj/accelerate-ai-lab3-starter.git
    cd accelerate-ai-lab3-starter
    
  2. প্রকল্পের কাঠামো পরীক্ষা করুন:
    ls -R
    
    আপনি নিম্নলিখিত স্টার্টার গঠন দেখতে হবে:
    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. আর্কিটেকচার ওভারভিউ

প্রয়োগ করার আগে, আসুন দুই-পরিষেবা আর্কিটেকচারটি বুঝতে পারি:

ল্যাব 3 দুই সার্ভিস আর্কিটেকচার

মূল অন্তর্দৃষ্টি : লোড পরীক্ষার সময়, আপনি স্বাধীনভাবে উভয় পরিষেবার স্কেলিং পর্যবেক্ষণ করবেন - GPU ব্যাকএন্ড (বটলনেক পরিষেবা) অনুমান লোডের জন্য 1-3 দৃষ্টান্তে স্কেল করে, যখন ADK এজেন্ট অনুরোধ পরিচালনার জন্য 1 দৃষ্টান্তে থাকে।

7. GPU সহ ক্লাউড রানে জেমা ব্যাকএন্ড স্থাপন করুন

ল্যাব 3 জেমা পরিষেবা

প্রথম গুরুত্বপূর্ণ পদক্ষেপটি হল একটি GPU-এক্সিলারেটেড জেমা মডেল স্থাপন করা, যা আপনার ADK এজেন্টের মস্তিষ্ক হিসেবে কাজ করবে। একটি ডিকপলড, ডিপ্লোয়ড এলএলএম থাকা আর্কিটেকচারে অনুকূল হতে পারে যেখানে আপনার একটি আলাদা ফাইন-টিউনড মডেল প্রয়োজন, বা বিচ্ছিন্ন স্কেলিং প্রয়োজন।

  1. ওল্লামা ব্যাকএন্ড ডিরেক্টরিতে নেভিগেট করুন:
    cd ollama-backend
    
  2. ওল্লামা ডকারফাইল খুলুন এবং বাস্তবায়ন করুন:
    cloudshell edit Dockerfile
    
    TODO মন্তব্যটি এর সাথে প্রতিস্থাপন করুন:
    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"]
    
    🔧 এটি কি করে:
    • ভিত্তি হিসেবে অফিসিয়াল ওল্লামা ইমেজ ব্যবহার করে
    • যেকোনো IP ঠিকানা থেকে সংযোগ গ্রহণ করতে OLLAMA_HOST সেট করে
    • পোর্ট 8080 প্রকাশ করে
  3. GPU সমর্থন সহ জেমা ব্যাকএন্ড স্থাপন করুন:
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

আপনি যদি একটি "উৎস থেকে স্থাপনার জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি ডকার সংগ্রহস্থলের প্রয়োজন হয় যাতে নির্মিত কন্টেইনারগুলি সংরক্ষণ করা যায়৷ [europe-west1] অঞ্চলে [Cloud-run-source-deploy] নামে একটি সংগ্রহস্থল তৈরি করা হবে৷" বার্তা, চালিয়ে যান।

⚙️ মূল কনফিগারেশন ব্যাখ্যা করা হয়েছে:

  • GPU : NVIDIA L4 এর চমৎকার মূল্য-কর্মক্ষমতা অনুপাতের জন্য বেছে নেওয়া হয়েছে অনুমান কাজের চাপের জন্য। L4 24GB GPU মেমরি এবং অপ্টিমাইজড টেনসর অপারেশন প্রদান করে, এটি জেমার মত 270M প্যারামিটার মডেলের জন্য আদর্শ করে তোলে
  • মেমরি : মডেল লোডিং, CUDA অপারেশন এবং ওল্লামার মেমরি ব্যবস্থাপনা পরিচালনার জন্য 16GB সিস্টেম মেমরি
  • CPU : সর্বোত্তম I/O হ্যান্ডলিং এবং প্রিপ্রসেসিং কাজগুলির জন্য 8 কোর
  • সঙ্গতি : প্রতি উদাহরণে 4টি অনুরোধ জিপিইউ মেমরি ব্যবহারের সাথে থ্রুপুট ব্যালেন্স করে
  • সময়সীমা : 600 সেকেন্ড প্রাথমিক মডেল লোডিং এবং কন্টেইনার স্টার্টআপ মিটমাট করে

💰 খরচ বিবেচনা : GPU দৃষ্টান্তগুলি শুধুমাত্র CPU-এর দৃষ্টান্তগুলির তুলনায় উল্লেখযোগ্যভাবে বেশি ব্যয়বহুল (~$2-4/ঘন্টা বনাম ~$0.10/ঘন্টা)। --max-instances 1 সেটিং অপ্রয়োজনীয় GPU ইনস্ট্যান্স স্কেলিং প্রতিরোধ করে খরচ নিয়ন্ত্রণ করতে সাহায্য করে।

  1. স্থাপনা সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন এবং পরিষেবা URL টি নোট করুন:
    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 এজেন্ট ইন্টিগ্রেশন বাস্তবায়ন করুন

এখন আসুন একটি ন্যূনতম ADK এজেন্ট তৈরি করি যা আপনার নিয়োজিত জেমা ব্যাকএন্ডের সাথে সংযোগ করে।

  1. ADK এজেন্ট ডিরেক্টরিতে নেভিগেট করুন:
    cd ../adk-agent
    
  2. এজেন্ট কনফিগারেশন খুলুন এবং বাস্তবায়ন করুন:
    cloudshell edit production_agent/agent.py
    
    এই ন্যূনতম বাস্তবায়নের সাথে সমস্ত TODO মন্তব্য প্রতিস্থাপন করুন:
    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
    
    🔧 এটি কি করে:
    • LiteLlm এর মাধ্যমে আপনার নিয়োজিত Gemma ব্যাকএন্ডের সাথে সংযোগ করে
    • একটি সাধারণ কথোপকথন এজেন্ট তৈরি করে
    • Google ক্লাউড ইন্টিগ্রেশন কনফিগার করে
  3. ফাস্টএপিআই সার্ভার খুলুন এবং প্রয়োগ করুন:
    cloudshell edit server.py
    
    সমস্ত TODO মন্তব্য এর সাথে প্রতিস্থাপন করুন:
    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")
    
    🔧 এটি কি করে:
    • ADK ইন্টিগ্রেশন সহ একটি FastAPI সার্ভার তৈরি করে
    • পরীক্ষার জন্য ওয়েব ইন্টারফেস সক্ষম করে
    • স্বাস্থ্য পরীক্ষা শেষ পয়েন্ট প্রদান করে
  4. ডকারফাইল খুলুন এবং বাস্তবায়ন করুন:
    cloudshell edit Dockerfile
    
    সমস্ত TODO মন্তব্য এর সাথে প্রতিস্থাপন করুন:
    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"]
    
    প্রযুক্তি পছন্দ ব্যাখ্যা করা হয়েছে:
    • uv : আধুনিক পাইথন প্যাকেজ ম্যানেজার যা পিপের চেয়ে 10-100x দ্রুত। এটি একটি গ্লোবাল ক্যাশে এবং সমান্তরাল ডাউনলোড ব্যবহার করে, উল্লেখযোগ্যভাবে কন্টেইনার তৈরির সময় হ্রাস করে
    • পাইথন 3.13-স্লিম : ন্যূনতম সিস্টেম নির্ভরতা সহ সর্বশেষ পাইথন সংস্করণ, কন্টেইনারের আকার এবং আক্রমণের পৃষ্ঠকে হ্রাস করে
    • মাল্টি-স্টেজ বিল্ড : এর অফিসিয়াল ইমেজ থেকে ইউভি অনুলিপি করা নিশ্চিত করে যে আমরা সর্বশেষ অপ্টিমাইজড বাইনারি পেতে পারি

9. পরিবেশ কনফিগার করুন এবং এজেন্ট স্থাপন করুন

এখন আমরা ADK এজেন্টকে কনফিগার করব আপনার মোতায়েন করা জেমা ব্যাকএন্ডের সাথে সংযোগ করতে এবং এটিকে ক্লাউড রান পরিষেবা হিসাবে স্থাপন করব৷ এর মধ্যে এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করা এবং সঠিক কনফিগারেশন সহ এজেন্ট স্থাপন করা জড়িত।

  1. আপনার পরিবেশ কনফিগারেশন সেট আপ করুন:
    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
    

ক্লাউড রানে পরিবেশের ভেরিয়েবল বোঝা

এনভায়রনমেন্ট ভেরিয়েবল হল মূল-মানের জোড়া যা রানটাইমে আপনার অ্যাপ্লিকেশন কনফিগার করে। তারা এর জন্য বিশেষভাবে দরকারী:

  • API এন্ডপয়েন্ট এবং সার্ভিস ইউআরএল (যেমন আমাদের ওল্লামা ব্যাকএন্ড)
  • পরিবেশের মধ্যে পরিবর্তন হওয়া কনফিগারেশন (dev, staging, prod)
  • সংবেদনশীল ডেটা যা হার্ডকোড করা উচিত নয়

ADK এজেন্ট স্থাপন করুন:

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

⚙️ মূল কনফিগারেশন:

  • অটোস্কেলিং : 1 দৃষ্টান্তে স্থির (হালকা অনুরোধ হ্যান্ডলিং)
  • সঙ্গতি : প্রতি উদাহরণে 10টি অনুরোধ
  • মেমরি : ADK এজেন্টের জন্য 4GB
  • পরিবেশ : আপনার জেমা ব্যাকএন্ডের সাথে সংযোগ করে

🔒 নিরাপত্তা নোট : এই ল্যাবটি সরলতার জন্য --allow-unauthenticated ব্যবহার করে। উত্পাদনে, ব্যবহার করে সঠিক প্রমাণীকরণ প্রয়োগ করুন:

  • পরিষেবা অ্যাকাউন্টের সাথে ক্লাউড রান সার্ভিস-টু-সার্ভিস প্রমাণীকরণ
  • আইডেন্টিটি অ্যান্ড অ্যাকসেস ম্যানেজমেন্ট (IAM) নীতি
  • বাহ্যিক অ্যাক্সেসের জন্য API কী বা OAuth
  • অ্যাক্সেস নিয়ন্ত্রণ করতে gcloud run services add-iam-policy-binding ব্যবহার করার কথা বিবেচনা করুন

আপনার এজেন্ট পরিষেবা URL পান:

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

echo "🎉 ADK Agent deployed at: $AGENT_URL"

ক্লাউড রান এনভায়রনমেন্ট ভেরিয়েবল ডকুমেন্টেশনের উপর ভিত্তি করে এনভায়রনমেন্ট ভেরিয়েবলের সেরা অনুশীলন :

  1. সংরক্ষিত ভেরিয়েবল এড়িয়ে চলুন : PORT (ক্লাউড রান এটি স্বয়ংক্রিয়ভাবে সেট করে) বা X_GOOGLE_ দিয়ে শুরু হওয়া ভেরিয়েবল সেট করবেন না
  2. বর্ণনামূলক নাম ব্যবহার করুন : বিরোধ এড়াতে আপনার ভেরিয়েবলের উপসর্গ দিন (যেমন, MODEL এর পরিবর্তে GEMMA_MODEL_NAME )
  3. এস্কেপ কমা : যদি আপনার মানগুলিতে কমা থাকে, তাহলে একটি ভিন্ন ডিলিমিটার ব্যবহার করুন: --set-env-vars "^@^KEY1=value1,value2@KEY2=..."
  4. আপডেট বনাম প্রতিস্থাপন : অন্যদের প্রভাবিত না করে নির্দিষ্ট ভেরিয়েবল যোগ/পরিবর্তন করতে --update-env-vars ব্যবহার করুন

ক্লাউড রানে ভেরিয়েবল কীভাবে সেট করবেন :

  • ফাইল থেকে : gcloud run deploy SERVICE_NAME --env-vars-file .env --labels dev-tutorial codelab-adk (একটি ফাইল থেকে একাধিক ভেরিয়েবল লোড করে)
  • একাধিক পতাকা : জটিল মানগুলির জন্য --set-env-vars পুনরাবৃত্তি করুন যা কমা দ্বারা পৃথক করা যায় না

10. ADK ওয়েব ইন্টারফেস দিয়ে পরীক্ষা করুন

উভয় পরিষেবা স্থাপনের সাথে, এটি যাচাই করার সময় এসেছে যে আপনার ADK এজেন্ট সফলভাবে GPU-অ্যাক্সিলারেটেড জেমা ব্যাকএন্ডের সাথে যোগাযোগ করতে পারে এবং ব্যবহারকারীর প্রশ্নের উত্তর দিতে পারে।

  1. স্বাস্থ্যের শেষ পয়েন্ট পরীক্ষা করুন:
    curl $AGENT_URL/health
    
    আপনি দেখতে হবে:
    { "status": "healthy", "service": "production-adk-agent" }
    
  2. একটি নতুন ব্রাউজার ট্যাবে আপনার production-adk-agent URL প্রবেশ করে আপনার এজেন্টের সাথে যোগাযোগ করুন। আপনি ADK ওয়েব ইন্টারফেস দেখতে হবে.
  3. এই নমুনা কথোপকথনের মাধ্যমে আপনার এজেন্ট পরীক্ষা করুন:
    • "লাল পান্ডা সাধারণত বন্যতে কি খায়?"
    • "তুমি কি আমাকে তুষার চিতা সম্পর্কে একটি মজার তথ্য বলতে পারবে?"
    • "কেন বিষ ডার্ট ব্যাঙ এত উজ্জ্বল রঙের হয়?"
    • "চিড়িয়াখানায় নতুন বাচ্চা ক্যাঙ্গারু কোথায় পাব?"
    👀 যা পর্যবেক্ষণ করবেন:
    • এজেন্ট আপনার নিয়োজিত জেমা মডেল ব্যবহার করে প্রতিক্রিয়া জানায়। আপনি আপনার নিয়োজিত জেমা পরিষেবার লগগুলি পর্যবেক্ষণ করে এটি যাচাই করতে পারেন। আমরা পরবর্তী বিভাগে এটি করব
    • প্রতিক্রিয়াগুলি GPU-এক্সিলারেটেড ব্যাকএন্ড দ্বারা তৈরি করা হয়
    • ওয়েব ইন্টারফেস একটি পরিষ্কার চ্যাট অভিজ্ঞতা প্রদান করে

ল্যাব 3 ADK টেস্টিং

11. লোড টেস্টিং বাস্তবায়ন এবং চালান

ল্যাব 3 লোড টেস্টিং

আপনার প্রোডাকশন ডিপ্লোয়মেন্ট কীভাবে বাস্তব-বিশ্বের ট্র্যাফিক পরিচালনা করে তা বোঝার জন্য, আমরা ব্যাপক লোড টেস্টিং প্রয়োগ করব যা ADK এজেন্ট এবং GPU ব্যাকএন্ড পরিষেবা উভয় জুড়েই অটোস্কেলিং ট্রিগার করবে।

  1. লোড টেস্টিং স্ক্রিপ্ট খুলুন এবং বাস্তবায়ন করুন:
    cloudshell edit load_test.py
    
    TODO মন্তব্যটি এর সাথে প্রতিস্থাপন করুন:
    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")
    
    🔧 এটি কি করে:
    • সেশন তৈরি : POST-এর সাথে সঠিক ADK API ফর্ম্যাট ব্যবহার করে /apps/production_agent/users/{user_id}/sessions/{session_id} । একটি session_id এবং user_id তৈরি করার পরে, এজেন্টের কাছে একটি অনুরোধ করা যেতে পারে।
    • বার্তা বিন্যাস : app_name , user_id , session_id , এবং কাঠামোবদ্ধ new_message অবজেক্ট সহ ADK স্পেসিফিকেশন অনুসরণ করে
    • কথোপকথন এন্ডপয়েন্ট : একযোগে সমস্ত ইভেন্ট সংগ্রহ করার জন্য এন্ডপয়েন্ট ব্যবহার করে /run (লোড পরীক্ষার জন্য প্রস্তাবিত)
    • বাস্তবসম্মত লোড : স্বয়ংক্রিয় স্কেলিং ট্রিগার করার জন্য অপেক্ষাকৃত কম সময়ের সাথে কথোপকথনমূলক লোড তৈরি করে
    📚 ADK API এন্ডপয়েন্ট এবং টেস্টিং প্যাটার্ন সম্পর্কে আরো বিস্তারিত জানার জন্য, ADK টেস্টিং গাইড দেখুন
  2. নির্ভরতা ইনস্টল করুন:
    uv sync
    
  3. পঙ্গপাল হল একটি ওপেন সোর্স, পাইথন-ভিত্তিক লোড টেস্টিং টুল যা ওয়েব অ্যাপ্লিকেশন এবং অন্যান্য সিস্টেমের কর্মক্ষমতা এবং লোড পরীক্ষার জন্য ডিজাইন করা হয়েছে। এর মূল বৈশিষ্ট্য হল যে পরীক্ষার পরিস্থিতি এবং ব্যবহারকারীর আচরণ স্ট্যান্ডার্ড পাইথন কোড ব্যবহার করে সংজ্ঞায়িত করা হয়, গ্রাফিকাল ইউজার ইন্টারফেস বা ডোমেন-নির্দিষ্ট ভাষার উপর নির্ভর করে এমন সরঞ্জামগুলির তুলনায় উচ্চ নমনীয়তা এবং অভিব্যক্তি প্রদান করে। আমরা আমাদের পরিষেবাগুলিতে ব্যবহারকারীর ট্র্যাফিক অনুকরণ করতে পঙ্গপাল ব্যবহার করব৷ লোড পরীক্ষা চালান৷
    # Run a load test to trigger autoscaling
    uv run locust -f load_test.py \
       -H $AGENT_URL \
       --headless \
       -t 50s \
       -u 3 \
       -r 1
    
    পরীক্ষায় পরামিতি পরিবর্তন করার চেষ্টা করুন এবং আউটপুট পর্যবেক্ষণ করুন। আপনি ollama-gemma3-270m-gpu 2-3 দৃষ্টান্তে স্পাইক লক্ষ্য করবেন। 📊 লোড পরীক্ষার পরামিতি:
    • সময়কাল : 50 সেকেন্ড
    • ব্যবহারকারী : 3 সমসাময়িক ব্যবহারকারী
    • স্পন হার : প্রতি সেকেন্ডে 1 জন ব্যবহারকারী
    • লক্ষ্য : উভয় পরিষেবাতেই অটোস্কেলিং ট্রিগার করুন

12. স্বয়ংক্রিয় স্কেলিং আচরণ পর্যবেক্ষণ করুন

লোড পরীক্ষা চলার সাথে সাথে, আপনি ক্লাউড রানের স্বয়ংক্রিয় স্কেলিং অ্যাকশনে পর্যবেক্ষণ করতে সক্ষম হবেন। এখানে আপনি GPU ব্যাকএন্ড থেকে ADK এজেন্টকে আলাদা করার মূল স্থাপত্য সুবিধাগুলি দেখতে পাবেন।

লোড পরীক্ষার সময়, আপনার কনসোলে উভয় ক্লাউড রান পরিষেবা কীভাবে স্কেল করে তা নিরীক্ষণ করুন।

  1. ক্লাউড কনসোলে , এখানে নেভিগেট করুন:
    • ক্লাউড রান → উত্পাদন-এডিকে-এজেন্ট → মেট্রিক্স
    • ক্লাউড রান → ollama-gemma3-270m-gpu → মেট্রিক্স

👀 আপনার যা পর্যবেক্ষণ করা উচিত:

🤖 ADK এজেন্ট পরিষেবা:

  • ট্রাফিক বৃদ্ধির সময় 1 দৃষ্টান্তে স্থির থাকা উচিত
  • উচ্চ ট্রাফিকের সময় সিপিইউ এবং মেমরির ব্যবহার বৃদ্ধি পায়
  • সেশন ম্যানেজমেন্ট এবং অনুরোধ রাউটিং দক্ষতার সাথে পরিচালনা করে

🎮 জেমা ব্যাকএন্ড পরিষেবা (বাটলনেক):

  • অনুমানের চাহিদার উপর ভিত্তি করে 1 থেকে 3টি দৃষ্টান্তের স্কেল
  • GPU ব্যবহার লোডের অধীনে উল্লেখযোগ্যভাবে বৃদ্ধি পায়
  • GPU-নিবিড় মডেল অনুমানের কারণে এই পরিষেবাটি বাধা হয়ে দাঁড়ায়
  • GPU ত্বরণের কারণে মডেল অনুমানের সময়গুলি সামঞ্জস্যপূর্ণ থাকে

💡 মূল ​​অন্তর্দৃষ্টি:

  • GPU ব্যাকএন্ড হল বাধা এবং আরও আক্রমনাত্মকভাবে স্কেল করে (1-3 দৃষ্টান্ত)
  • ADK এজেন্ট ধারাবাহিক থাকে
  • উভয় পরিষেবাই তাদের স্বতন্ত্র লোড বৈশিষ্ট্যের উপর ভিত্তি করে স্বাধীনভাবে স্কেল করে
  • অটোস্কেলিং বিভিন্ন লোড অবস্থার অধীনে কর্মক্ষমতা বজায় রাখতে সাহায্য করে

13. উপসংহার

অভিনন্দন! আপনি GPU-এক্সিলারেটেড জেমা ব্যাকএন্ড সহ একটি প্রোডাকশন-রেডি ADK এজেন্ট সফলভাবে মোতায়েন করেছেন এবং অটোস্কেলিং আচরণ পর্যবেক্ষণ করেছেন।

✅ আপনি যা সম্পন্ন করেছেন

  • ✅ ক্লাউড রানে একটি GPU-এক্সিলারেটেড জেমা মডেল ব্যাকএন্ড স্থাপন করা হয়েছে
  • ✅ একটি ADK এজেন্ট তৈরি এবং মোতায়েন করা হয়েছে যা Gemma ব্যাকএন্ডের সাথে একত্রিত হয়
  • ✅ ADK ওয়েব ইন্টারফেস ব্যবহার করে এজেন্ট পরীক্ষা করা হয়েছে
  • ✅ দুটি সমন্বিত ক্লাউড রান পরিষেবা জুড়ে অটোস্কেলিং আচরণ পর্যবেক্ষণ করা হয়েছে

💡 এই ল্যাব থেকে মূল অন্তর্দৃষ্টি

  1. 🎮 GPU ত্বরণ : NVIDIA L4 GPU মডেলের অনুমান কার্যক্ষমতাকে উল্লেখযোগ্যভাবে উন্নত করে
  2. 🔗 পরিষেবা সমন্বয় : দুটি ক্লাউড রান পরিষেবা একত্রে নির্বিঘ্নে কাজ করতে পারে
  3. 📈 স্বাধীন স্কেলিং : প্রতিটি পরিষেবা তার স্বতন্ত্র লোড বৈশিষ্ট্যের উপর ভিত্তি করে স্কেল করে
  4. 🚀 উত্পাদন প্রস্তুতি : আর্কিটেকচারটি বাস্তব-বিশ্বের ট্র্যাফিক প্যাটার্নগুলি কার্যকরভাবে পরিচালনা করে

🔄 পরবর্তী পদক্ষেপ

  • বিভিন্ন লোড প্যাটার্নের সাথে পরীক্ষা করুন এবং স্কেলিং আচরণ পর্যবেক্ষণ করুন
  • বিভিন্ন জেমা মডেলের আকার ব্যবহার করে দেখুন (তদনুসারে মেমরি এবং GPU সামঞ্জস্য করুন)
  • উত্পাদন স্থাপনার জন্য পর্যবেক্ষণ এবং সতর্কতা প্রয়োগ করুন
  • বিশ্বব্যাপী প্রাপ্যতার জন্য বহু-অঞ্চলের স্থাপনার অন্বেষণ করুন

🧹 পরিষ্কার করুন

চার্জ এড়াতে, আপনার হয়ে গেলে সংস্থানগুলি মুছুন:

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

📖 সম্পদ