Лабораторная работа 3: От прототипа к производству — развертывание агента ADK в облаке с использованием графического процессора

1. Введение

Обзор

В этой лабораторной работе вы развернёте готовый к использованию агент Agent Development Kit (ADK) с бэкендом Gemma с графическим ускорением. Основное внимание уделено критически важным шаблонам развёртывания: настройке сервисов Cloud Run с поддержкой GPU, интеграции бэкендов моделей с агентами ADK и наблюдению за поведением автоматического масштабирования под нагрузкой.

Что ты будешь делать?

В этой лабораторной работе вы сосредоточитесь на важнейших аспектах развертывания производства:

  1. Развертывание Gemma в облаке с использованием графического процессора — настройка высокопроизводительной серверной части модели Gemma
  2. Интегрируйте развертывание Gemma с агентом ADK — подключите свой агент к модели с ускорением на GPU.
  3. Тестирование с помощью веб-интерфейса ADK — проверка корректности работы вашего диалогового агента.
  4. Проведите нагрузочное тестирование — посмотрите, как оба экземпляра Cloud Run автоматически масштабируются под нагрузкой.

Основное внимание уделяется шаблонам развертывания производства, а не обширной разработке агентов.

Чему вы научитесь

  • Развертывание моделей Gemma с ускорением на GPU в Cloud Run для использования в производственной среде
  • Интеграция внешних развертываний моделей с агентами ADK
  • Настройте и протестируйте готовые к использованию развертывания агентов ИИ
  • Понимание поведения автомасштабирования Cloud Run под нагрузкой
  • Наблюдайте, как несколько экземпляров Cloud Run координируют работу во время пиков трафика.
  • Примените нагрузочное тестирование для проверки производительности и автоматического масштабирования

2. Настройка проекта

  1. Если у вас еще нет учетной записи Google, вам необходимо ее создать .
    • Используйте личную учётную запись вместо рабочей или учебной. Рабочие и учебные учётные записи могут иметь ограничения, которые не позволят вам включить API, необходимые для этой лабораторной работы.
  2. Войдите в Google Cloud Console .
  3. Включите выставление счетов в Cloud Console.
    • Выполнение этой лабораторной работы обойдется менее чем в 1 доллар США в виде облачных ресурсов.
    • Вы можете следовать инструкциям в конце этой лабораторной работы, чтобы удалить ресурсы и избежать дальнейших расходов.
    • Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
  4. Создайте новый проект или выберите повторное использование существующего проекта.

3. Откройте редактор Cloud Shell

  1. Нажмите эту ссылку, чтобы перейти непосредственно в редактор Cloud Shell.
  2. Если сегодня в какой-либо момент вам будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить. Нажмите, чтобы авторизовать Cloud Shell
  3. Если терминал не отображается внизу экрана, откройте его:
    • Нажмите «Просмотр»
    • Нажмите «Терминал» Откройте новый терминал в Cloud Shell Editor
  4. В терминале настройте свой проект с помощью этой команды:
    • Формат:
      gcloud config set project [PROJECT_ID]
      
    • Пример:
      gcloud config set project lab-project-id-example
      
    • Если вы не можете вспомнить идентификатор своего проекта:
      • Вы можете вывести список всех идентификаторов своих проектов с помощью:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Установить идентификатор проекта в терминале Cloud Shell Editor
  5. Вы должны увидеть это сообщение:
    Updated property [core/project].
    
    Если вы видите WARNING и вопрос Do you want to continue (Y/n)? , вероятно, вы неправильно ввели идентификатор проекта. Нажмите n , затем Enter и попробуйте снова выполнить команду gcloud config set project .

4. Включите API и установите регион по умолчанию

Прежде чем мы сможем развернуть службы Cloud Run с поддержкой GPU, нам необходимо включить требуемые API Google Cloud и настроить параметры вашего проекта.

  1. В терминале включите API:
gcloud services enable \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  aiplatform.googleapis.com

Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить. Нажмите, чтобы авторизовать Cloud Shell

Выполнение этой команды может занять несколько минут, но в конечном итоге должно выдать сообщение об успешном выполнении, похожее на это:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
  1. Установите регион Cloud Run по умолчанию.
gcloud config set run/region europe-west1

5. Подготовьте свой проект Python

Давайте настроим стартовый код, содержащий базовую структуру для нашего бэкэнда Gemma и служб агентов 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. Развертывание Gemma Backend в облаке с использованием графического процессора

Лаборатория 3 Джемма Сервис

Первый критически важный шаг — развёртывание модели Gemma с графическим ускорением, которая послужит мозгом вашего агента ADK. Наличие развёрнутой, изолированной модели LLM может быть полезным в архитектурах, где требуется отдельная, точно настроенная модель или изолированное масштабирование.

  1. Перейдите в внутренний каталог Ollama:
    cd ollama-backend
    
  2. Откройте и реализуйте Dockerfile Ollama:
    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"]
    
    🔧 Что это делает:
    • Использует официальное изображение Ollama в качестве основы
    • Настраивает OLLAMA_HOST на прием подключений с любого IP-адреса
    • Открывает порт 8080
  3. Разверните бэкэнд Gemma с поддержкой 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

Если вы получили сообщение «Для развертывания из источника требуется репозиторий Artifact Registry Docker для хранения созданных контейнеров. Будет создан репозиторий с именем [cloud-run-source-deploy] в регионе [europe-west1]», продолжайте.

⚙️ Объяснение конфигурации клавиш:

  • Графический процессор : NVIDIA L4 выбрана за превосходное соотношение цены и производительности для задач логического вывода. L4 обеспечивает 24 ГБ графической памяти и оптимизированные тензорные операции, что делает её идеальной для моделей с 270 млн параметров, таких как Gemma.
  • Память : 16 ГБ системной памяти для обработки загрузки моделей, операций CUDA и управления памятью Ollama
  • ЦП : 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, который подключится к развернутому бэкэнду 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")
    
    # 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
    
    🔧 Что это делает:
    • Подключается к развернутому бэкэнду Gemma через LiteLlm
    • Создает простой диалоговый агент
    • Настраивает интеграцию с Google Cloud
  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")
    
    🔧 Что это делает:
    • Создает сервер FastAPI с интеграцией ADK
    • Включает веб-интерфейс для тестирования
    • Предоставляет конечные точки проверки работоспособности
  4. Откройте и реализуйте Dockerfile:
    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 : Современный менеджер пакетов Python, который в 10-100 раз быстрее, чем pip. Он использует глобальный кэш и параллельные загрузки, что значительно сокращает время сборки контейнера.
    • Python 3.13-slim : последняя версия Python с минимальными системными зависимостями, уменьшающая размер контейнера и поверхность атаки.
    • Многоэтапная сборка : копирование uv из официального образа гарантирует получение последней оптимизированной версии бинарного файла.

9. Настройте среду и разверните агента

Теперь мы настроим агент ADK для подключения к вашему развернутому бэкенду Gemma и развернем его как службу Cloud Run. Это включает в себя настройку переменных среды и развёртывание агента с правильной конфигурацией.

  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
    

Понимание переменных среды в Cloud Run

Переменные среды — это пары «ключ-значение», которые настраивают приложение во время выполнения. Они особенно полезны для:

  • Конечные точки 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 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 запросов на экземпляр
  • Память : 4 ГБ для агента ADK
  • Окружение : подключается к вашему бэкэнду Gemma

🔒 Примечание по безопасности : в этой лабораторной работе для простоты используется --allow-unauthenticated . В рабочей среде реализуйте корректную аутентификацию с помощью:

  • Аутентификация между сервисами Cloud Run с использованием учетных записей сервисов
  • Политики управления идентификацией и доступом (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"

✅ Лучшие практики использования переменных среды , основанные на документации по переменным среды Cloud Run :

  1. Избегайте зарезервированных переменных : не устанавливайте PORT (Cloud Run устанавливает его автоматически) или переменные, начинающиеся с X_GOOGLE_
  2. Используйте описательные имена : добавляйте префиксы к переменным, чтобы избежать конфликтов (например, GEMMA_MODEL_NAME вместо MODEL ).
  3. Экранирование запятыми : если ваши значения содержат запятые, используйте другой разделитель: --set-env-vars "^@^KEY1=value1,value2@KEY2=..."
  4. Обновление или замена : используйте --update-env-vars для добавления/изменения определенных переменных, не затрагивая другие.

Как установить переменные в Cloud Run :

  • Из файла : gcloud run deploy SERVICE_NAME --env-vars-file .env --labels dev-tutorial codelab-adk (загружает несколько переменных из файла)
  • Несколько флагов : повторите --set-env-vars для сложных значений, которые нельзя разделить запятыми.

10. Тестирование с помощью веб-интерфейса ADK

После развертывания обеих служб пришло время проверить, может ли ваш агент ADK успешно взаимодействовать с серверной частью Gemma, работающей на графическом процессоре, и отвечать на запросы пользователей.

  1. Проверьте конечную точку работоспособности:
    curl $AGENT_URL/health
    
    Вы должны увидеть:
    { "status": "healthy", "service": "production-adk-agent" }
    
  2. Для взаимодействия с агентом введите URL-адрес вашего production-adk-agent в новой вкладке браузера. Должен появиться веб-интерфейс ADK.
  3. Проверьте своего агента с помощью следующих примеров разговоров:
    • «Чем обычно питаются красные панды в дикой природе?»
    • «Можете ли вы рассказать мне интересный факт о снежных барсах?»
    • «Почему лягушки-дротики так ярко окрашены?»
    • «Где в зоопарке я могу найти нового детеныша кенгуру?»
    👀 На что обратить внимание:
    • Агент отвечает, используя вашу развернутую модель Gemma. Вы можете убедиться в этом, просматривая журналы развернутой службы Gemma. Мы сделаем это в следующем разделе.
    • Ответы генерируются серверной частью с ускорением на 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")
    
    🔧 Что это делает:
    • Создание сеанса : использует правильный формат API ADK с POST-запросом к /apps/production_agent/users/{user_id}/sessions/{session_id} . После создания session_id и user_id можно отправить запрос агенту.
    • Формат сообщения : соответствует спецификации ADK с app_name , user_id , session_id и структурированным объектом new_message
    • Конечная точка разговора : использует конечную точку /run для сбора всех событий одновременно (рекомендуется для нагрузочного тестирования)
    • Реалистичная нагрузка : создает разговорную нагрузку с более коротким временем ожидания для запуска автоматического масштабирования.
    📚 Более подробную информацию о конечных точках API ADK и шаблонах тестирования см. в Руководстве по тестированию ADK .
  2. Установка зависимостей:
    uv sync
    
  3. Locust — это инструмент нагрузочного тестирования с открытым исходным кодом на основе Python, предназначенный для тестирования производительности и нагрузочного тестирования веб-приложений и других систем. Его ключевая особенность заключается в том, что тестовые сценарии и поведение пользователей определяются с помощью стандартного кода Python, что обеспечивает высокую гибкость и выразительность по сравнению с инструментами, использующими графические интерфейсы или предметно-ориентированные языки. Мы будем использовать Locust для моделирования пользовательского трафика к нашим сервисам. Запустите нагрузочный тест.
    # 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. Наблюдайте за поведением AutoScaling

Во время нагрузочного теста вы сможете наблюдать за автоматическим масштабированием Cloud Run в действии. Здесь вы увидите ключевые архитектурные преимущества разделения агента ADK и бэкэнда на базе графического процессора.

Во время нагрузочного теста отслеживайте масштабирование обеих служб Cloud Run в вашей консоли.

  1. В Cloud Console перейдите к:
    • Cloud Run → production-adk-agent → Метрики
    • Cloud Run → ollama-gemma3-270m-gpu → Metrics

👀 На что следует обратить внимание:

🤖 Служба агентов ADK:

  • Должен оставаться стабильным в 1 момент времени, пока трафик увеличивается
  • Резкий рост использования ЦП и памяти при высоком трафике
  • Эффективно управляет сеансами и маршрутизирует запросы

🎮 Gemma Backend Service (узкое место):

  • Масштабируется от 1 до 3 экземпляров в зависимости от потребности в выводе
  • Использование графического процессора значительно увеличивается под нагрузкой
  • Эта служба становится узким местом из-за интенсивного использования графического процессора для вывода модели.
  • Время вывода модели остается неизменным благодаря ускорению на GPU

💡 Ключевые выводы:

  • Бэкэнд GPU является узким местом и масштабируется более агрессивно (1–3 экземпляра)
  • Агент ADK остается последовательным
  • Обе службы масштабируются независимо друг от друга в зависимости от индивидуальных характеристик нагрузки.
  • Автомасштабирование помогает поддерживать производительность в условиях изменяющейся нагрузки

13. Заключение

Поздравляем! Вы успешно развернули готовый к использованию агент ADK с бэкендом Gemma с графическим ускорением и наблюдаете автоматическое масштабирование.

✅ Чего вы достигли

  • ✅ Развернули серверную часть модели Gemma с графическим ускорением в Cloud Run
  • ✅ Создан и развернут агент ADK, который интегрируется с бэкэндом Gemma.
  • ✅ Протестировал агента с помощью веб-интерфейса ADK
  • ✅ Наблюдаемое поведение автоматического масштабирования в двух скоординированных сервисах Cloud Run

💡 Ключевые выводы из этой лаборатории

  1. 🎮 Ускорение графического процессора : графический процессор NVIDIA L4 значительно повышает производительность вывода моделей.
  2. 🔗 Координация услуг : две службы Cloud Run могут работать вместе без сбоев.
  3. 📈 Независимое масштабирование : каждый сервис масштабируется в зависимости от индивидуальных характеристик нагрузки.
  4. 🚀 Готовность к эксплуатации : архитектура эффективно обрабатывает реальные модели дорожного движения.

🔄 Дальнейшие шаги

  • Экспериментируйте с различными схемами нагрузки и наблюдайте за поведением масштабирования.
  • Попробуйте разные размеры модели Gemma (соответственно настройте память и графический процессор)
  • Реализовать мониторинг и оповещение для производственных развертываний
  • Изучите возможности многорегионального развертывания для обеспечения глобальной доступности

🧹 Уборка

Чтобы избежать дополнительных расходов, удалите ресурсы после завершения работы:

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

📖 Ресурсы