১. ভূমিকা
সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি GPU-ত্বরিত Gemma ব্যাকএন্ড সহ একটি প্রোডাকশন-রেডি এজেন্ট ডেভেলপমেন্ট কিট (ADK) এজেন্ট ডেপ্লয় করবেন। এর মূল লক্ষ্য হলো কিছু গুরুত্বপূর্ণ ডেপ্লয়মেন্ট প্যাটার্ন: GPU-সক্ষম ক্লাউড রান সার্ভিস সেট আপ করা, ADK এজেন্টের সাথে মডেল ব্যাকএন্ড ইন্টিগ্রেট করা, এবং লোডের অধীনে অটোস্কেলিং আচরণ পর্যবেক্ষণ করা।
আপনি যা করবেন
এই ল্যাবে, আপনি প্রোডাকশন ডেপ্লয়মেন্টের গুরুত্বপূর্ণ দিকগুলোর উপর মনোযোগ দেবেন:
- GPU সহ ক্লাউড রানে জেমা স্থাপন করুন - একটি উচ্চ-পারফরম্যান্স জেমা মডেল ব্যাকএন্ড সেট আপ করুন
- জেমা ডেপ্লয়মেন্টকে একটি ADK এজেন্টের সাথে একীভূত করুন - আপনার এজেন্টকে GPU-ত্বরিত মডেলের সাথে সংযুক্ত করুন।
- ADK ওয়েব ইন্টারফেস দিয়ে পরীক্ষা করুন - আপনার কনভারসেশনাল এজেন্টটি সঠিকভাবে কাজ করছে কিনা তা যাচাই করুন।
- স্থিতিস্থাপকতা পরীক্ষা করুন - উভয় ক্লাউড রান ইনস্ট্যান্স কীভাবে লোড সামলায় তা পর্যবেক্ষণ করুন।
ব্যাপক এজেন্ট উন্নয়নের পরিবর্তে প্রোডাকশন ডেপ্লয়মেন্ট প্যাটার্নের উপর জোর দেওয়া হয়।
আপনি যা শিখবেন
- প্রোডাকশন ব্যবহারের জন্য GPU-ত্বরিত জেমা মডেলগুলো ক্লাউড রানে স্থাপন করুন
- ADK এজেন্টদের সাথে বাহ্যিক মডেল স্থাপনকে একীভূত করুন
- প্রোডাকশন-রেডি এআই এজেন্ট ডেপ্লয়মেন্ট কনফিগার এবং পরীক্ষা করুন
- লোডের অধীনে ক্লাউড রানের আচরণ বুঝুন
- ট্র্যাফিকের আকস্মিক বৃদ্ধির সময় একাধিক ক্লাউড রান ইনস্ট্যান্স কীভাবে সমন্বয় করে তা লক্ষ্য করুন।
- পারফরম্যান্স যাচাই করতে ইলাস্টিসিটি টেস্টিং প্রয়োগ করুন
২. প্রকল্প স্থাপন
- যদি আপনার আগে থেকে কোনো গুগল অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি গুগল অ্যাকাউন্ট তৈরি করতে হবে।
- কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন। কর্মক্ষেত্র এবং শিক্ষা প্রতিষ্ঠানে এমন কিছু সীমাবদ্ধতা থাকতে পারে, যার ফলে আপনি এই ল্যাবের জন্য প্রয়োজনীয় এপিআই (API) সক্রিয় করতে পারবেন না।
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন।
- ক্লাউড কনসোলে বিলিং চালু করুন ।
- এই ল্যাবটি সম্পন্ন করতে ক্লাউড রিসোর্সে ১ মার্কিন ডলারেরও কম খরচ হওয়া উচিত।
- পরবর্তী চার্জ এড়াতে, এই ল্যাবের শেষে দেওয়া ধাপগুলো অনুসরণ করে আপনি রিসোর্সগুলো মুছে ফেলতে পারেন।
- নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়ালের জন্য যোগ্য।
- একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন।
- প্রজেক্ট কোটা সংক্রান্ত কোনো ত্রুটি দেখলে, একটি নতুন প্রজেক্ট তৈরি করার জন্য বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন অথবা আগের প্রজেক্টটি মুছে ফেলুন।
৩. ক্লাউড শেল এডিটর খুলুন
- সরাসরি ক্লাউড শেল এডিটর- এ যেতে এই লিঙ্কে ক্লিক করুন।
- আজ যেকোনো সময়ে অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যাওয়ার জন্য 'অনুমোদন করুন' (Authorize) বোতামে ক্লিক করুন।

- যদি স্ক্রিনের নিচে টার্মিনালটি দেখা না যায়, তাহলে এটি খুলুন:
- ভিউ ক্লিক করুন
- টার্মিনালে ক্লিক করুন

- টার্মিনালে এই কমান্ডটি দিয়ে আপনার প্রজেক্ট সেট করুন:
- বিন্যাস:
gcloud config set project [PROJECT_ID] - উদাহরণ:
gcloud config set project lab-project-id-example - যদি আপনি আপনার প্রজেক্ট আইডি মনে করতে না পারেন:
- আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
- বিন্যাস:
- আপনি এই বার্তাটি দেখতে পাবেন:
যদি আপনি একটিUpdated property [core/project].
WARNINGদেখতে পান এবং আপনাকেDo you want to continue (Y/n)?জিজ্ঞাসা করা হয়, তাহলে সম্ভবত আপনি প্রজেক্ট আইডি ভুলভাবে প্রবেশ করিয়েছেন।nচাপুন,Enterচাপুন এবংgcloud config set projectকমান্ডটি আবার চালানোর চেষ্টা করুন।
৪. এপিআই সক্রিয় করুন এবং ডিফল্ট অঞ্চল সেট করুন
GPU সাপোর্ট সহ ক্লাউড রান সার্ভিসগুলো ডেপ্লয় করার আগে, আমাদের প্রয়োজনীয় গুগল ক্লাউড এপিআইগুলো এনাবল করতে হবে এবং আপনার প্রোজেক্ট সেটিংস কনফিগার করতে হবে।
- টার্মিনালে, এপিআইগুলো সক্রিয় করুন:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। 
এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
- আপনার ডিফল্ট ক্লাউড রান অঞ্চল সেট করুন।
gcloud config set run/region europe-west4
৫. আপনার পাইথন প্রজেক্ট প্রস্তুত করুন।
চলুন স্টার্টার কোডটি তৈরি করে নিই, যাতে আমাদের জেমা ব্যাকএন্ড এবং এডিকে এজেন্ট সার্ভিস উভয়েরই মৌলিক কাঠামো থাকবে।
- স্টার্টার রিপোজিটরি ক্লোন করুন:
cd ~ npx -y giget@latest gh+git:GoogleCloudPlatform/devrel-demos/agents/accelerate-ai-with-cloud-run/accelerate-ai-lab3-starter accelerate-ai-lab3-starter cd accelerate-ai-lab3-starter - প্রকল্পের কাঠামো পরীক্ষা করুন:
আপনার নিম্নলিখিত প্রারম্ভিক কাঠামোটি দেখা উচিত:ls -Raccelerate-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 এজেন্টের মস্তিষ্ক হিসেবে কাজ করবে। যেসব আর্কিটেকচারে আপনার একটি পৃথক সূক্ষ্মভাবে টিউন করা মডেল বা বিচ্ছিন্ন স্কেলিং প্রয়োজন, সেখানে একটি বিচ্ছিন্ন ও স্থাপিত LLM সুবিধাজনক হতে পারে।
- ওলামা ব্যাকএন্ড ডিরেক্টরিতে যান:
cd ollama-backend - Ollama Dockerfile-টি খুলুন এবং প্রয়োগ করুন:
TODO কমেন্টটি এর সাথে প্রতিস্থাপন করুন:cloudshell edit Dockerfile 🔧 এটি যা করে: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"]- অফিসিয়াল ওলামা ছবিটিকে ভিত্তি হিসেবে ব্যবহার করে
- যেকোনো আইপি ঠিকানা থেকে সংযোগ গ্রহণ করার জন্য
OLLAMA_HOSTসেট করে। - পোর্ট ৮০৮০ উন্মুক্ত করে
- GPU সাপোর্ট সহ জেমা ব্যাকএন্ড ডিপ্লয় করুন:
gcloud run deploy ollama-gemma3-270m-gpu \
--source . \
--region europe-west4 \
--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
আপনি যদি "সোর্স থেকে ডিপ্লয় করার জন্য বিল্ট কন্টেইনারগুলো সংরক্ষণের জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি ডকার রিপোজিটরি প্রয়োজন। [europe-west4] অঞ্চলে [cloud-run-source-deploy] নামের একটি রিপোজিটরি তৈরি করা হবে।" বার্তাটি পান, তাহলে চালিয়ে যান।
⚙️ কী কনফিগারেশনের ব্যাখ্যা:
- জিপিইউ : ইনফারেন্স ওয়ার্কলোডের জন্য এর চমৎকার মূল্য-কর্মক্ষমতা অনুপাতের কারণে এনভিডিয়া এল৪ (NVIDIA L4) বেছে নেওয়া হয়েছে। এল৪ (L4) ২৪ জিবি জিপিইউ মেমরি এবং অপ্টিমাইজড টেনসর অপারেশন প্রদান করে, যা এটিকে জেমার (Gemma) মতো ২৭০ মিলিয়ন প্যারামিটার মডেলের জন্য আদর্শ করে তোলে।
- মেমরি : মডেল লোডিং, CUDA অপারেশন এবং Ollama-র মেমরি ম্যানেজমেন্ট পরিচালনার জন্য ১৬ জিবি সিস্টেম মেমরি।
- সিপিইউ : সর্বোত্তম আই/ও হ্যান্ডলিং এবং প্রিপ্রসেসিং কাজের জন্য ৮টি কোর
- কনকারেন্সি : প্রতি ইনস্ট্যান্সে ৭টি অনুরোধ জিপিইউ মেমরি ব্যবহারের সাথে থ্রুপুটের ভারসাম্য বজায় রাখে।
- টাইমআউট : ৬০০ সেকেন্ড, যা প্রাথমিক মডেল লোডিং এবং কন্টেইনার চালু করার জন্য ব্যবহৃত হয়।
💰 খরচের বিবেচনা : জিপিইউ ইনস্ট্যান্সগুলো শুধুমাত্র সিপিইউ ইনস্ট্যান্সের চেয়ে উল্লেখযোগ্যভাবে বেশি ব্যয়বহুল (~$২-৪/ঘণ্টা বনাম ~$০.১০/ঘণ্টা)। --max-instances 1 সেটিংটি অপ্রয়োজনীয় জিপিইউ ইনস্ট্যান্স স্কেলিং প্রতিরোধ করে খরচ নিয়ন্ত্রণে সাহায্য করে।
- ডেপ্লয়মেন্ট সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন এবং সার্ভিস URL-টি নোট করে রাখুন:
export OLLAMA_URL=$(gcloud run services describe ollama-gemma3-270m-gpu \ --region=europe-west4 \ --format='value(status.url)') echo "🎉 Gemma backend deployed at: $OLLAMA_URL"
৮. ADK এজেন্ট ইন্টিগ্রেশন বাস্তবায়ন করুন
এবার চলুন একটি ন্যূনতম ADK এজেন্ট তৈরি করি যা আপনার ডেপ্লয় করা Gemma ব্যাকএন্ডের সাথে সংযোগ স্থাপন করবে।
- ADK এজেন্ট ডিরেক্টরিতে যান:
cd ../adk-agent - এজেন্ট কনফিগারেশনটি খুলুন এবং প্রয়োগ করুন:
সমস্ত TODO কমেন্ট এই ন্যূনতম বাস্তবায়ন দিয়ে প্রতিস্থাপন করুন:cloudshell edit production_agent/agent.py 🔧 এটি যা করে: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-west4") # 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 ব্যাকএন্ডের সাথে সংযোগ স্থাপন করে।
- একটি সাধারণ কথোপকথন এজেন্ট তৈরি করে
- গুগল ক্লাউড ইন্টিগ্রেশন কনফিগার করে
- FastAPI সার্ভারটি খুলুন এবং প্রয়োগ করুন:
সমস্ত TODO মন্তব্য প্রতিস্থাপন করুন:cloudshell edit server.py 🔧 এটি যা করে: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 সার্ভার তৈরি করে
- পরীক্ষার জন্য ওয়েব ইন্টারফেস সক্রিয় করে।
- স্বাস্থ্য পরীক্ষার শেষবিন্দু সরবরাহ করে
- Dockerfile-টি খুলুন এবং প্রয়োগ করুন:
সমস্ত TODO মন্তব্য প্রতিস্থাপন করুন:cloudshell edit Dockerfile প্রযুক্তিগত বিকল্পগুলির ব্যাখ্যা: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 কপি করলে আমরা সর্বশেষ অপ্টিমাইজ করা বাইনারিটি পাই।
৯. পরিবেশ কনফিগার করুন এবং এজেন্ট স্থাপন করুন
এখন আমরা আপনার ডেপ্লয় করা জেমা ব্যাকএন্ডের সাথে সংযোগ স্থাপন করতে এবং এটিকে একটি ক্লাউড রান পরিষেবা হিসাবে ডেপ্লয় করতে ADK এজেন্ট কনফিগার করব। এর জন্য এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করতে হবে এবং সঠিক কনফিগারেশন সহ এজেন্টটি ডেপ্লয় করতে হবে।
- আপনার পরিবেশ কনফিগারেশন সেট আপ করুন:
cat << EOF > .env GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project) GOOGLE_CLOUD_LOCATION=europe-west4 GEMMA_MODEL_NAME=gemma3:270m OLLAMA_API_BASE=$OLLAMA_URL EOF
ক্লাউড রানে এনভায়রনমেন্ট ভেরিয়েবল বোঝা
এনভায়রনমেন্ট ভেরিয়েবল হলো কী-ভ্যালু পেয়ার যা রানটাইমে আপনার অ্যাপ্লিকেশনকে কনফিগার করে। এগুলি বিশেষত নিম্নলিখিত ক্ষেত্রে উপযোগী:
- এপিআই এন্ডপয়েন্ট এবং সার্ভিস ইউআরএল (যেমন আমাদের ওলামা ব্যাকএন্ড)
- যে কনফিগারেশনটি বিভিন্ন এনভায়রনমেন্টের (ডেভ, স্টেজিং, প্রোড) মধ্যে পরিবর্তিত হয়
- সংবেদনশীল ডেটা যা হার্ডকোড করা উচিত নয়
ADK এজেন্ট স্থাপন করুন:
export PROJECT_ID=$(gcloud config get-value project)
gcloud run deploy production-adk-agent \
--source . \
--region europe-west4 \
--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-west4 \
--set-env-vars GEMMA_MODEL_NAME=gemma3:270m \
--set-env-vars OLLAMA_API_BASE=$OLLAMA_URL \
--labels dev-tutorial=codelab-agent-gpu
⚙️ মূল কনফিগারেশন:
- অটোস্কেলিং : ১টি ইনস্ট্যান্সে স্থির (হালকা অনুরোধ পরিচালনা)
- একযোগে কাজ করার ক্ষমতা : প্রতি ইনস্ট্যান্সে ৫০টি অনুরোধ
- ADK এজেন্টের জন্য মেমরি : ৪ জিবি
- পরিবেশ : আপনার জেমা ব্যাকএন্ডের সাথে সংযোগ স্থাপন করে
🔒 নিরাপত্তা সতর্কতা : এই ল্যাবে সরলতার জন্য --allow-unauthenticated ব্যবহার করা হয়েছে। প্রোডাকশনে, নিম্নলিখিত পদ্ধতি ব্যবহার করে সঠিক অথেনটিকেশন প্রয়োগ করুন:
- সার্ভিস অ্যাকাউন্ট ব্যবহার করে ক্লাউড রান সার্ভিস-টু-সার্ভিস অথেন্টিকেশন
- পরিচয় এবং অ্যাক্সেস ব্যবস্থাপনা (IAM) নীতিমালা
- বাহ্যিক অ্যাক্সেসের জন্য এপিআই কী বা ওঅথ
- অ্যাক্সেস নিয়ন্ত্রণের জন্য
gcloud run services add-iam-policy-bindingব্যবহার করার কথা বিবেচনা করুন।
আপনার এজেন্ট পরিষেবা URL পান:
export AGENT_URL=$(gcloud run services describe production-adk-agent \
--region=europe-west4 \
--format='value(status.url)')
echo "🎉 ADK Agent deployed at: $AGENT_URL"
✅ ক্লাউড রান এনভায়রনমেন্ট ভেরিয়েবল ডকুমেন্টেশন অনুসারে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহারের সেরা অনুশীলন :
- সংরক্ষিত ভেরিয়েবল পরিহার করুন :
PORTসেট করবেন না (যদি এনভায়রনমেন্ট ভেরিয়েবল পরিবর্তন করার প্রয়োজন হয়, তবে এর পরিবর্তে –port ফ্ল্যাগ ব্যবহার করুন) অথবাX_GOOGLE_দিয়ে শুরু হওয়া ভেরিয়েবল সেট করবেন না। - বর্ণনামূলক নাম ব্যবহার করুন : দ্বন্দ্ব এড়াতে আপনার ভেরিয়েবলের আগে উপসর্গ যোগ করুন (যেমন,
MODELএর পরিবর্তেGEMMA_MODEL_NAME)। - কমা এস্কেপ করুন : যদি আপনার ভ্যালুগুলিতে কমা থাকে, তাহলে একটি ভিন্ন ডিলিমিটার ব্যবহার করুন:
--set-env-vars "^@^KEY1=value1,value2@KEY2=..." - আপডেট বনাম প্রতিস্থাপন : অন্য ভেরিয়েবলগুলোকে প্রভাবিত না করে নির্দিষ্ট ভেরিয়েবল যোগ বা পরিবর্তন করতে
--update-env-varsব্যবহার করুন।
ক্লাউড রানে কীভাবে ভেরিয়েবল সেট করবেন :
- ফাইল থেকে :
gcloud run deploy SERVICE_NAME --env-vars-file .env --labels dev-tutorial codelab-adk(একটি ফাইল থেকে একাধিক ভেরিয়েবল লোড করে) - একাধিক ফ্ল্যাগ : কমা দিয়ে আলাদা করা যায় না এমন জটিল মানের জন্য
--set-env-varsপুনরাবৃত্তি করুন।
১০. ADK ওয়েব ইন্টারফেস দিয়ে পরীক্ষা করুন
উভয় সার্ভিস ডেপ্লয় করা হয়ে গেলে, এখন যাচাই করার সময় এসেছে যে আপনার ADK এজেন্ট GPU-অ্যাক্সিলারেটেড Gemma ব্যাকএন্ডের সাথে সফলভাবে যোগাযোগ করতে এবং ব্যবহারকারীর কোয়েরির উত্তর দিতে পারছে কি না।
- স্বাস্থ্যগত ফলাফল পরীক্ষা করুন:
আপনার দেখা উচিত:curl $AGENT_URL/health{ "status": "healthy", "service": "production-adk-agent" } - আপনার
production-adk-agentএর URL-টি একটি নতুন ব্রাউজার ট্যাবে প্রবেশ করিয়ে আপনার এজেন্টের সাথে ইন্টারঅ্যাক্ট করুন। আপনি ADK ওয়েব ইন্টারফেসটি দেখতে পাবেন। - এই নমুনা কথোপকথনগুলো দিয়ে আপনার এজেন্টকে পরীক্ষা করুন:
- বন্য পরিবেশে লাল পান্ডারা সাধারণত কী খায়?
- আপনি কি আমাকে তুষার চিতা সম্পর্কে একটি মজার তথ্য বলতে পারেন?
- বিষাক্ত ডার্ট ব্যাঙগুলো এত উজ্জ্বল রঙের হয় কেন?
- চিড়িয়াখানায় নতুন ক্যাঙ্গারু বাচ্চাটিকে আমি কোথায় খুঁজে পাব?
- এজেন্টটি আপনার ডেপ্লয় করা জেমা মডেল ব্যবহার করে সাড়া দেয়। আপনার ডেপ্লয় করা জেমা সার্ভিসের লগগুলো পর্যবেক্ষণ করে আপনি এটি যাচাই করতে পারেন। আমরা পরবর্তী অংশে এটি করব।
- GPU-ত্বরিত ব্যাকএন্ড দ্বারা প্রতিক্রিয়াগুলি তৈরি করা হয়।
- ওয়েব ইন্টারফেসটি একটি পরিচ্ছন্ন চ্যাট অভিজ্ঞতা প্রদান করে।

১১. একটি ইলাস্টিসিটি টেস্ট বাস্তবায়ন ও পরিচালনা করুন

আপনার প্রোডাকশন ডেপ্লয়মেন্ট বাস্তব ট্র্যাফিক কীভাবে সামলায় তা বোঝার জন্য, আমরা একটি ইলাস্টিসিটি টেস্ট পরিচালনা করব যা একটি উচ্চতর "সিমুলেটেড" প্রোডাকশন ওয়ার্কলোডের সাথে সিস্টেমটির খাপ খাইয়ে নেওয়ার ক্ষমতা পরীক্ষা করবে।
- ইলাস্টিসিটি টেস্টিং স্ক্রিপ্টটি খুলুন এবং প্রয়োগ করুন:
TODO কমেন্টটি এর সাথে প্রতিস্থাপন করুন:cloudshell edit elasticity_test.py 🔧 এটি যা করে: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")- সেশন তৈরি : এর জন্য সঠিক ADK API ফরম্যাট ব্যবহার করে
/apps/production_agent/users/{user_id}/sessions/{session_id}-এ POST রিকোয়েস্ট পাঠাতে হয়। একটিsession_idএবংuser_idতৈরি করার পর এজেন্টের কাছে রিকোয়েস্ট পাঠানো যায়। - বার্তার ফরম্যাট : ADK স্পেসিফিকেশন অনুযায়ী
app_name,user_id,session_idএবং স্ট্রাকচার্ডnew_messageঅবজেক্ট ব্যবহার করে। - কথোপকথন এন্ডপয়েন্ট : একবারে সমস্ত ইভেন্ট সংগ্রহ করার জন্য
/runএন্ডপয়েন্ট ব্যবহার করে (লোড টেস্টিং-এর জন্য প্রস্তাবিত) - বাস্তবসম্মত লোড : অপেক্ষার সময় কমিয়ে কথোপকথনের লোড তৈরি করে।
- সেশন তৈরি : এর জন্য সঠিক ADK API ফরম্যাট ব্যবহার করে
- নির্ভরতা ইনস্টল করুন:
uv sync - লোকাস্ট হলো একটি ওপেন-সোর্স, পাইথন-ভিত্তিক লোড টেস্টিং টুল, যা ওয়েব অ্যাপ্লিকেশন এবং অন্যান্য সিস্টেমের পারফরম্যান্স ও লোড টেস্টিংয়ের জন্য ডিজাইন করা হয়েছে। এর মূল বৈশিষ্ট্য হলো, টেস্ট সিনারিও এবং ব্যবহারকারীর আচরণ সাধারণ পাইথন কোড ব্যবহার করে সংজ্ঞায়িত করা হয়, যা গ্রাফিক্যাল ইউজার ইন্টারফেস বা ডোমেইন-স্পেসিফিক ল্যাঙ্গুয়েজের উপর নির্ভরশীল টুলগুলোর তুলনায় অধিক নমনীয়তা এবং প্রকাশভঙ্গি প্রদান করে। আমরা আমাদের সার্ভিসগুলোতে ব্যবহারকারীর ট্র্যাফিক সিমুলেট করতে লোকাস্ট ব্যবহার করব। টেস্টটি চালান।
পরীক্ষার প্যারামিটারগুলো পরিবর্তন করে ফলাফল পর্যবেক্ষণ করুন। 📊 স্থিতিস্থাপকতা পরীক্ষার প্যারামিটারসমূহ:uv run locust -f elasticity_test.py \ -H $AGENT_URL \ --headless \ -t 60s \ -u 20 \ -r 5- সময়কাল : ৬০ সেকেন্ড
- ব্যবহারকারী : ২০ জন যুগপৎ ব্যবহারকারী
- স্পন রেট : প্রতি সেকেন্ডে ৫ জন ব্যবহারকারী
- লক্ষ্য : উভয় সার্ভিসে অটোস্কেলিং চালু করা।
১২. অটোস্কেলিং আচরণ পর্যবেক্ষণ করুন
ইলাস্টিসিটি টেস্টটি চলার সময়, আপনি ক্লাউড রানের উচ্চতর ওয়ার্কলোড সমর্থনের বিষয়টি বাস্তবে পর্যবেক্ষণ করতে পারবেন। এখানেই আপনি জিপিইউ ব্যাকএন্ড থেকে এডিকে এজেন্টকে আলাদা করার মূল স্থাপত্যগত সুবিধাগুলো দেখতে পাবেন।
ইলাস্টিসিটি টেস্ট চলাকালীন, আপনার কনসোলে পর্যবেক্ষণ করুন যে উভয় ক্লাউড রান পরিষেবা কীভাবে ট্র্যাফিক পরিচালনা করে।
- ক্লাউড কনসোলে , এখানে যান:
- ক্লাউড রান → প্রোডাকশন-এডিকে-এজেন্ট → মেট্রিক্স
- ক্লাউড রান → ollama-gemma3-270m-gpu → মেট্রিক্স
👀 যা লক্ষ্য করবেন:
🤖 এডিকে এজেন্ট সার্ভিস:
- ট্র্যাফিক বাড়লেও ১টি ইনস্ট্যান্সে স্থির থাকা উচিত।
- অতিরিক্ত ট্র্যাফিকের সময় সিপিইউ এবং মেমরির ব্যবহার হঠাৎ বেড়ে যায়।
- সেশন ম্যানেজমেন্ট এবং অনুরোধ রাউটিং দক্ষতার সাথে পরিচালনা করে।
🎮 জেমা ব্যাকএন্ড সার্ভিস (বাধা):
- ট্র্যাফিক বাড়লেও ১টি ইনস্ট্যান্সে স্থির থাকা উচিত।
- লোডের অধীনে জিপিইউ ব্যবহার উল্লেখযোগ্যভাবে বৃদ্ধি পায়।
- GPU-নিবিড় মডেল ইনফারেন্সের কারণে এই পরিষেবাটি একটি প্রতিবন্ধকতা হয়ে দাঁড়ায়।
- GPU অ্যাক্সিলারেশনের কারণে মডেল ইনফারেন্স টাইম সামঞ্জস্যপূর্ণ থাকে।
💡 মূল তথ্য:
- উভয় পরিষেবাই স্থিতিশীল থাকে এবং এর ক্ষমতা বৃদ্ধি পায় না, কারণ আমরা আমাদের সর্বোচ্চ ইনস্ট্যান্স
1এ সেট করেছি। - উভয় পরিষেবা তাদের স্বতন্ত্র লোড বৈশিষ্ট্যের উপর ভিত্তি করে স্বাধীনভাবে স্কেল করে।
- জিপিইউ বিভিন্ন লোড পরিস্থিতিতে পারফরম্যান্স বজায় রাখতে সাহায্য করে।
১৩. উপসংহার
অভিনন্দন! আপনি একটি সিমুলেটেড প্রোডাকশন ওয়ার্কলোড পরীক্ষা করার সময় GPU-ত্বরিত Gemma ব্যাকএন্ড সহ একটি প্রোডাকশন-উপযোগী ADK এজেন্ট সফলভাবে স্থাপন করেছেন।
✅ আপনি যা সম্পন্ন করেছেন
- ✅ ক্লাউড রান-এ একটি GPU-ত্বরিত জেমা মডেল ব্যাকএন্ড স্থাপন করা হয়েছে
- ✅ জেমা ব্যাকএন্ডের সাথে সমন্বিত একটি ADK এজেন্ট তৈরি ও স্থাপন করা হয়েছে
- ✅ ADK ওয়েব ইন্টারফেস ব্যবহার করে এজেন্টটি পরীক্ষা করা হয়েছে
- ✅ দুটি সমন্বিত ক্লাউড রান পরিষেবা জুড়ে স্বয়ংক্রিয় স্কেলিং আচরণ পর্যবেক্ষণ করা হয়েছে
💡 এই ল্যাব থেকে প্রাপ্ত গুরুত্বপূর্ণ তথ্য
- 🎮 জিপিইউ অ্যাক্সিলারেশন : এনভিডিয়া এল৪ জিপিইউ মডেল ইনফারেন্স পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত করে।
- 🔗 পরিষেবা সমন্বয় : দুটি ক্লাউড রান পরিষেবা নির্বিঘ্নে একসাথে কাজ করতে পারে
- 📈 স্বতন্ত্র স্কেলিং : প্রতিটি পরিষেবা তার নিজস্ব লোড বৈশিষ্ট্যের উপর ভিত্তি করে স্কেল করে।
- 🚀 প্রোডাকশন প্রস্তুতি : আর্কিটেকচারটি বাস্তব জগতের ট্র্যাফিক প্যাটার্ন কার্যকরভাবে সামাল দেয়
🔄 পরবর্তী পদক্ষেপ
- বিভিন্ন লোড প্যাটার্ন নিয়ে পরীক্ষা করুন এবং স্কেলিং আচরণ পর্যবেক্ষণ করুন।
- বিভিন্ন জেমা মডেলের আকার ব্যবহার করে দেখুন (সেই অনুযায়ী মেমরি এবং জিপিইউ সমন্বয় করুন)।
- প্রোডাকশন ডেপ্লয়মেন্টের জন্য মনিটরিং এবং অ্যালার্টিং ব্যবস্থা বাস্তবায়ন করুন।
- বিশ্বব্যাপী প্রাপ্যতার জন্য বহু-অঞ্চলীয় স্থাপনা অন্বেষণ করুন
🧹 পরিষ্কার করা
চার্জ এড়ানোর জন্য, কাজ শেষ হলে রিসোর্সগুলো মুছে ফেলুন:
gcloud run services delete production-adk-agent --region=europe-west4
gcloud run services delete ollama-gemma3-270m-gpu --region=europe-west4
📖 সম্পদ
- স্টার্টার রিপোজিটরি
- সম্পূর্ণ সমাধান
- গুগল এডিকে ডকুমেন্টেশন
- ADK টেস্টিং গাইড - ADK API এন্ডপয়েন্ট এবং টেস্টিং প্যাটার্নের সম্পূর্ণ রেফারেন্স
- ক্লাউড রানে লোড টেস্টিং
- এজেন্ট ডেভেলপমেন্ট কিট (ADK) ডকুমেন্টেশন
- ক্লাউড রান জিপিইউ ডকুমেন্টেশন
- ওলামা মডেল লাইব্রেরি
- গুগল ক্লাউড ট্রেস ডকুমেন্টেশন
- ক্লাউড রান নিরাপত্তার সর্বোত্তম অনুশীলন
- ইউভি পাইথন প্যাকেজ ম্যানেজার
- পঙ্গপাল লোড টেস্টিং ফ্রেমওয়ার্ক