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

1. ভূমিকা

সংক্ষিপ্ত বিবরণ

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

তুমি কি করবে

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

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

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

তুমি কি শিখবে

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

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

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

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

  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 কমান্ডটি চালানোর চেষ্টা করুন।

৪. API গুলি সক্ষম করুন এবং ডিফল্ট অঞ্চল সেট করুন

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

  1. টার্মিনালে, API গুলি সক্রিয় করুন:
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

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

আসুন স্টার্টার কোড সেট আপ করি যাতে আমাদের জেমা ব্যাকএন্ড এবং 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)
        ├── elasticity_test.py       # Elasticity testing (🚧 to implement)
        └── production_agent/        # Agent implementation
            ├── __init__.py          # Package init (✅ completed)
            └── agent.py             # Agent logic (🚧 to implement)
    

৬. স্থাপত্যের সংক্ষিপ্ত বিবরণ

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

ল্যাব ৩ টু সার্ভিস আর্কিটেকচার

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

৭. জিপিইউ দিয়ে ক্লাউড রানে জেমা ব্যাকএন্ড স্থাপন করুন

ল্যাব ৩ জেমা সার্ভিস

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

  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 সাপোর্ট সহ Gemma ব্যাকএন্ড স্থাপন করুন:
gcloud run deploy ollama-gemma3-270m-gpu \
  --source . \
  --region europe-west1 \
  --concurrency 7 \
  --cpu 8 \
  --set-env-vars OLLAMA_NUM_PARALLEL=4 \
  --gpu 1 \
  --gpu-type nvidia-l4 \
  --max-instances 1 \
  --memory 16Gi \
  --allow-unauthenticated \
  --no-cpu-throttling \
  --no-gpu-zonal-redundancy \
  --timeout 600 \
  --labels dev-tutorial=codelab-agent-gpu

যদি আপনি "Deploying from source" বার্তাটি পান, তাহলে তৈরি কন্টেইনার সংরক্ষণের জন্য একটি Artifact Registry Docker সংগ্রহস্থল প্রয়োজন। [europe-west1] অঞ্চলে [cloud-run-source-deploy] নামে একটি সংগ্রহস্থল তৈরি করা হবে।" বার্তাটি পান, তাহলে চালিয়ে যান।

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

  • GPU : NVIDIA L4 কে ইনফারেন্স ওয়ার্কলোডের জন্য চমৎকার মূল্য-কর্মক্ষমতা অনুপাতের জন্য বেছে নেওয়া হয়েছে। L4 24GB GPU মেমরি এবং অপ্টিমাইজড টেনসর অপারেশন প্রদান করে, যা এটিকে Gemma এর মতো 270M প্যারামিটার মডেলের জন্য আদর্শ করে তোলে।
  • মেমোরি : মডেল লোডিং, CUDA অপারেশন এবং ওল্লামার মেমোরি ব্যবস্থাপনা পরিচালনা করার জন্য ১৬ গিগাবাইট সিস্টেম মেমোরি।
  • সিপিইউ : সর্বোত্তম আই/ও হ্যান্ডলিং এবং প্রিপ্রসেসিং কাজের জন্য ৮টি কোর
  • কনকারেন্সি : প্রতি উদাহরণে ৭টি অনুরোধ GPU মেমরি ব্যবহারের সাথে থ্রুপুট ভারসাম্য করে
  • টাইমআউট : প্রাথমিক মডেল লোডিং এবং কন্টেইনার স্টার্টআপের জন্য 600 সেকেন্ড সময় লাগে

💰 খরচ বিবেচনা : GPU ইনস্ট্যান্সগুলি শুধুমাত্র CPU-এর ইনস্ট্যান্সের তুলনায় উল্লেখযোগ্যভাবে বেশি ব্যয়বহুল (~$2-4/hour বনাম ~$0.10/hour)। --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"
    

৮. ADK এজেন্ট ইন্টিগ্রেশন বাস্তবায়ন করুন

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

  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")
    api_base = os.getenv("OLLAMA_API_BASE", "localhost:10010")  # Location of Ollama server
    
    # Production Gemma Agent - GPU-accelerated conversational assistant
    production_agent = Agent(
       model=LiteLlm(model=f"ollama_chat/{gemma_model_name}", api_base=api_base),
       name="production_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 = production_agent
    
    🔧 এর কাজ কী:
    • LiteLlm এর মাধ্যমে আপনার মোতায়েন করা Gemma ব্যাকএন্ডের সাথে সংযোগ স্থাপন করে
    • একটি সহজ কথোপকথন এজেন্ট তৈরি করে
    • গুগল ক্লাউড ইন্টিগ্রেশন কনফিগার করে
  3. FastAPI সার্ভারটি খুলুন এবং বাস্তবায়ন করুন:
    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 : আধুনিক পাইথন প্যাকেজ ম্যানেজার যা pip এর চেয়ে ১০-১০০ গুণ দ্রুত। এটি একটি গ্লোবাল ক্যাশে এবং সমান্তরাল ডাউনলোড ব্যবহার করে, যা কন্টেইনার তৈরির সময় উল্লেখযোগ্যভাবে হ্রাস করে।
    • পাইথন ৩.১৩-স্লিম : ন্যূনতম সিস্টেম নির্ভরতা সহ সর্বশেষ পাইথন সংস্করণ, কন্টেইনারের আকার এবং আক্রমণ পৃষ্ঠ হ্রাস করে
    • মাল্টি-স্টেজ বিল্ড : এর অফিসিয়াল ইমেজ থেকে uv কপি করলে আমরা সর্বশেষ অপ্টিমাইজড বাইনারি পাবো তা নিশ্চিত হয়।

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 এন্ডপয়েন্ট এবং পরিষেবা URL গুলি (যেমন আমাদের Ollama ব্যাকএন্ড)
  • পরিবেশের মধ্যে পরিবর্তিত কনফিগারেশন (ডেভেলপার, স্টেজিং, প্রোড)
  • সংবেদনশীল তথ্য যা হার্ডকোড করা উচিত নয়

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 50 \
   --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

⚙️ কী কনফিগারেশন:

  • অটোস্কেলিং : ১টি ক্ষেত্রে স্থির (হালকা অনুরোধ পরিচালনা)
  • সমান্তরাল : প্রতি উদাহরণে ৫০টি অনুরোধ
  • মেমোরি : 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 (যদি আপনার env var পরিবর্তন করতে হয়, তাহলে –port ফ্ল্যাগ ব্যবহার করুন) অথবা X_GOOGLE_ দিয়ে শুরু হওয়া ভেরিয়েবল সেট করবেন না।
  2. বর্ণনামূলক নাম ব্যবহার করুন : দ্বন্দ্ব এড়াতে আপনার ভেরিয়েবলের উপসর্গ লিখুন (যেমন, MODEL এর পরিবর্তে GEMMA_MODEL_NAME )
  3. Escape commas : যদি আপনার মানগুলিতে কমা থাকে, তাহলে একটি ভিন্ন ডিলিমিটার ব্যবহার করুন: --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 পুনরাবৃত্তি করুন

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

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

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

ল্যাব ৩ এডিকে পরীক্ষা

১১. একটি স্থিতিস্থাপকতা পরীক্ষা বাস্তবায়ন এবং পরিচালনা করুন

ল্যাব 3 স্থিতিস্থাপকতা পরীক্ষা

আপনার উৎপাদন স্থাপনা বাস্তব-বিশ্বের ট্র্যাফিক কীভাবে পরিচালনা করে তা বোঝার জন্য, আমরা একটি স্থিতিস্থাপকতা পরীক্ষা বাস্তবায়ন করব যা সিস্টেমের উচ্চতর "সিমুলেটেড" উৎপাদন কাজের চাপের সাথে খাপ খাইয়ে নেওয়ার ক্ষমতা পরীক্ষা করবে।

  1. স্থিতিস্থাপকতা পরীক্ষার স্ক্রিপ্টটি খুলুন এবং বাস্তবায়ন করুন:
    cloudshell edit elasticity_test.py
    
    TODO মন্তব্যটি দিয়ে প্রতিস্থাপন করুন:
    import random
    import uuid
    from locust import HttpUser, task, between
    
    class ProductionAgentUser(HttpUser):
        """Elasticity 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": "elasticity_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."""
            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")
    
    🔧 এর কাজ কী:
    • সেশন তৈরি : /apps/production_agent/users/{user_id}/sessions/{session_id} তে POST সহ সঠিক ADK API ফর্ম্যাট ব্যবহার করে। একটি session_id এবং user_id তৈরি করার পরে, এজেন্টের কাছে একটি অনুরোধ করা যেতে পারে।
    • মেসেজ ফরম্যাট : app_name , user_id , session_id এবং স্ট্রাকচার্ড new_message অবজেক্ট সহ ADK স্পেসিফিকেশন অনুসরণ করে।
    • কথোপকথনের শেষ বিন্দু : একসাথে সমস্ত ইভেন্ট সংগ্রহ করার জন্য /run শেষ বিন্দু ব্যবহার করে (লোড পরীক্ষার জন্য প্রস্তাবিত)
    • বাস্তবসম্মত লোড : অপেক্ষার সময় কমিয়ে কথোপকথনের লোড তৈরি করে
    📚 ADK API এন্ডপয়েন্ট এবং পরীক্ষার ধরণ সম্পর্কে আরও বিস্তারিত জানার জন্য, ADK টেস্টিং গাইড দেখুন
  2. নির্ভরতা ইনস্টল করুন:
    uv sync
    
  3. Locust হল একটি ওপেন-সোর্স, পাইথন-ভিত্তিক লোড টেস্টিং টুল যা ওয়েব অ্যাপ্লিকেশন এবং অন্যান্য সিস্টেমের কর্মক্ষমতা এবং লোড পরীক্ষার জন্য ডিজাইন করা হয়েছে। এর মূল বৈশিষ্ট্য হল পরীক্ষার পরিস্থিতি এবং ব্যবহারকারীর আচরণ স্ট্যান্ডার্ড পাইথন কোড ব্যবহার করে সংজ্ঞায়িত করা হয়, যা গ্রাফিক্যাল ইউজার ইন্টারফেস বা ডোমেন-নির্দিষ্ট ভাষার উপর নির্ভরশীল টুলের তুলনায় উচ্চ নমনীয়তা এবং অভিব্যক্তি প্রদান করে। আমরা আমাদের পরিষেবাগুলিতে ব্যবহারকারীর ট্র্যাফিক অনুকরণ করতে Locust ব্যবহার করব। পরীক্ষাটি চালান।
    uv run locust -f elasticity_test.py \
       -H $AGENT_URL \
       --headless \
       -t 60s \
       -u 20 \
       -r 5
    
    পরীক্ষার প্যারামিটারগুলি পরিবর্তন করার চেষ্টা করুন এবং আউটপুট পর্যবেক্ষণ করুন। 📊 স্থিতিস্থাপকতা পরীক্ষার প্যারামিটার:
    • সময়কাল : ৬০ সেকেন্ড
    • ব্যবহারকারী : ২০ জন একযোগে ব্যবহারকারী
    • স্পন রেট : প্রতি সেকেন্ডে ৫ জন ব্যবহারকারী
    • লক্ষ্য : উভয় পরিষেবাতেই অটোস্কেলিং ট্রিগার করুন

১২. অটোস্কেলিং আচরণ পর্যবেক্ষণ করুন

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

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

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

👀 আপনার যা লক্ষ্য করা উচিত:

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

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

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

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

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

  • উভয় পরিষেবাই সামঞ্জস্যপূর্ণ থাকে এবং স্কেল বৃদ্ধি পায় না, কারণ আমরা আমাদের সর্বোচ্চ উদাহরণ 1 এ সেট করি
  • উভয় পরিষেবাই তাদের পৃথক লোড বৈশিষ্ট্যের উপর ভিত্তি করে স্বাধীনভাবে স্কেল করে।
  • জিপিইউ বিভিন্ন লোড পরিস্থিতিতে কর্মক্ষমতা বজায় রাখতে সাহায্য করে

১৩. উপসংহার

অভিনন্দন! আপনি একটি সিমুলেটেড প্রোডাকশন ওয়ার্কলোড পরীক্ষা করার সময় GPU-অ্যাক্সিলারেটেড Gemma ব্যাকএন্ড সহ একটি প্রোডাকশন-রেডি ADK এজেন্ট সফলভাবে স্থাপন করেছেন।

✅ তুমি যা অর্জন করেছো

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

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

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

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

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

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

চার্জ এড়াতে, কাজ শেষ হয়ে গেলে রিসোর্সগুলি মুছে ফেলুন:

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

📖 সম্পদ