Развертывание открытых моделей на GKE

1. Введение

Обзор

Цель этой лабораторной работы — предоставить вам практический опыт развертывания открытой модели в Google Cloud, начиная с простой локальной настройки и заканчивая развертыванием промышленного уровня на Google Kubernetes Engine (GKE) . Вы научитесь использовать различные инструменты, подходящие для каждого этапа жизненного цикла разработки.

Лаборатория следует следующему пути:

  • Быстрое прототипирование : сначала вы запустите модель с помощью Ollama локально, чтобы увидеть, насколько легко начать работу.
  • Развертывание производства : Наконец, вы развернете модель в GKE Autopilot, используя Ollama в качестве масштабируемого сервисного механизма.

Понимание открытых моделей

Под «открытой моделью» в наши дни обычно подразумевают генеративную модель машинного обучения, которая доступна для скачивания и использования всем желающим . Это означает, что архитектура модели и, что самое важное, её обученные параметры, или «веса», опубликованы.

Такая прозрачность обеспечивает ряд преимуществ по сравнению с закрытыми моделями, доступ к которым обычно осуществляется только через ограничительный API:

  • Понимание : разработчики и исследователи могут заглянуть «под капот», чтобы понять внутреннюю работу модели.
  • Настройка : пользователи могут адаптировать модель для конкретных задач с помощью процесса, называемого тонкой настройкой.
  • Инновации : это дает сообществу возможность создавать новые и инновационные приложения на основе существующих мощных моделей.

Вклад Google и семья Джемма

Компания Google уже много лет вносит основополагающий вклад в движение ИИ с открытым исходным кодом. Революционная архитектура Transformer, представленная в статье 2017 года «Внимание — всё, что вам нужно» , лежит в основе практически всех современных больших языковых моделей. За ней последовали знаковые открытые модели, такие как BERT, T5 и Flan-T5 с настраиваемыми инструкциями, каждая из которых раздвигала границы возможного и стимулировала исследования и разработки по всему миру.

Опираясь на богатую историю открытых инноваций, Google представила семейство моделей Gemma . Модели Gemma созданы на основе тех же исследований и технологий, что и мощные модели Gemini с закрытым исходным кодом, но доступны с открытыми весовыми коэффициентами. Для клиентов Google Cloud это обеспечивает мощное сочетание передовых технологий и гибкости открытого исходного кода, позволяя им контролировать жизненный цикл модели, интегрироваться с разнообразной экосистемой и реализовывать многооблачную стратегию.

В центре внимания Джемма 3

В этой лабораторной работе мы сосредоточимся на Gemma 3, новейшем и самом мощном поколении в этом семействе. Модели Gemma 3 лёгкие, но современные и разработаны для эффективной работы на одном графическом процессоре или даже на одном центральном процессоре.

  • Производительность и размер : модели Gemma 3 лёгкие, но при этом современные, разработаны для эффективной работы с одним графическим процессором или даже центральным процессором. Они обеспечивают превосходное качество и производительность на уровне SOTA для своего размера.
  • Модальность : они многомодальны, способны обрабатывать как текстовый ввод, так и ввод изображений для генерации текстового вывода.
  • Основные характеристики : Gemma 3 имеет большое контекстное окно объемом 128 КБ и поддерживает более 140 языков.
  • Примеры использования : эти модели хорошо подходят для решения различных задач, включая ответы на вопросы, подведение итогов и рассуждения.

Ключевая терминология

Работая с открытыми моделями, вы столкнетесь с несколькими распространенными терминами:

  • Предварительное обучение включает в себя обучение модели на большом и разнообразном наборе данных для изучения общих языковых закономерностей. Эти модели, по сути, представляют собой мощные системы автодополнения.
  • Настройка инструкций позволяет оптимизировать предварительно обученную модель для лучшего выполнения конкретных инструкций и подсказок. Такие модели «умеют общаться».
  • Варианты моделей : Открытые модели обычно выпускаются в нескольких размерах (например, Gemma 3 имеет версии параметров 1B, 4B, 12B и 27B) и вариантах, таких как настроенные на инструкции (-it), предварительно обученные или квантованные для эффективности.
  • Потребности в ресурсах : Большие языковые модели имеют большой объём и требуют значительных вычислительных ресурсов для размещения. Хотя их можно запускать локально, их развёртывание в облаке даёт существенные преимущества, особенно при оптимизации производительности и масштабируемости с помощью таких инструментов, как Ollama.

Почему GKE подходит для обслуживания открытых моделей?

Эта лабораторная работа поможет вам пройти путь от простого локального выполнения модели до полномасштабного развертывания в производственной среде на Google Kubernetes Engine (GKE). Хотя такие инструменты, как Ollama, отлично подходят для быстрого создания прототипов, производственные среды предъявляют высокие требования, для удовлетворения которых GKE идеально подходит.

Для крупномасштабных приложений ИИ вам нужна не просто работающая модель, а отказоустойчивая, масштабируемая и эффективная обслуживающая инфраструктура. GKE обеспечивает такую ​​основу. Вот когда и почему стоит выбрать GKE:

  • Упрощённое управление с помощью Autopilot : GKE Autopilot управляет базовой инфраструктурой автоматически. Вы сосредотачиваетесь на настройке приложений, а Autopilot автоматически выделяет ресурсы и масштабирует узлы.
  • Высокая производительность и масштабируемость : обрабатывайте требовательный и переменчивый трафик с помощью автоматического масштабирования GKE. Это гарантирует вашему приложению высокую пропускную способность с низкой задержкой, масштабируясь по мере необходимости.
  • Эффективность затрат при масштабировании : эффективное управление ресурсами. GKE позволяет масштабировать рабочие нагрузки до нуля, избегая расходов на простаивающие ресурсы, а также использовать виртуальные машины Spot для значительного снижения затрат на рабочие нагрузки вывода без сохранения состояния.
  • Портативность и богатая экосистема : избавьтесь от привязки к поставщику благодаря портативному развертыванию на базе Kubernetes. GKE также предоставляет доступ к обширной экосистеме Cloud Native (CNCF) для лучших в своем классе инструментов мониторинга, регистрации и безопасности.

Короче говоря, вы переходите на GKE, когда ваше ИИ-приложение готово к производству и требует платформы, рассчитанной на серьезный масштаб, производительность и эксплуатационную зрелость.

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

В этой лабораторной работе вы научитесь выполнять следующие задачи:

  • Запустите открытую модель локально с помощью Ollama.
  • Разверните открытую модель в Google Kubernetes Engine (GKE) Autopilot с Ollama для обслуживания.
  • Понять переход от локальных фреймворков разработки к архитектуре обслуживания производственного уровня на GKE.

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

Аккаунт Google

Если у вас еще нет личного аккаунта Google, вам необходимо создать аккаунт Google .

Используйте личный аккаунт вместо рабочего или школьного.

Войдите в Google Cloud Console.

Войдите в Google Cloud Console, используя личный аккаунт Google.

Включить биллинг

Настройте личный платежный аккаунт

Если вы настраиваете оплату с использованием кредитов Google Cloud, вы можете пропустить этот шаг.

Чтобы настроить персональную учетную запись для выставления счетов, перейдите сюда и включите выставление счетов в Cloud Console.

Некоторые заметки:

  • Выполнение этой лабораторной работы обойдется менее чем в 1 доллар США в виде облачных ресурсов.
  • Вы можете следовать инструкциям в конце этой лабораторной работы, чтобы удалить ресурсы и избежать дальнейших расходов.
  • Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Создать проект (необязательно)

Если у вас нет текущего проекта, который вы хотели бы использовать для этого ярлыка, создайте новый проект здесь .

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
      
      Установить идентификатор проекта в терминале Cloud Shell Editor
  5. Вы должны увидеть это сообщение:
    Updated property [core/project].
    

4. Запустите Джемму с Олламой

Ваша первая цель — как можно быстрее запустить Gemma 3 в среде разработки. Вы будете использовать Ollama — инструмент, который значительно упрощает локальный запуск больших языковых моделей. Это задание покажет вам самый простой способ начать экспериментировать с открытой моделью.

Ollama — это бесплатный инструмент с открытым исходным кодом, позволяющий пользователям запускать генеративные модели (большие языковые модели, модели «визуализация-язык» и другие) локально на своих компьютерах. Ollama упрощает доступ к этим моделям и взаимодействие с ними, делая их более доступными и позволяя пользователям работать с ними конфиденциально.

Установите и запустите Ollama

Теперь вы готовы установить Ollama, загрузить модель Gemma 3 и взаимодействовать с ней из командной строки.

  1. В терминале Cloud Shell загрузите и установите Ollama:
    curl -fsSL https://ollama.com/install.sh | sh
    
    Эта команда загружает Ollama, устанавливает его и запускает службу Ollama.
  2. Запустите службу Ollama в фоновом режиме:
    ollama serve &
    
  3. Загрузите (извлеките) модель Gemma 3 1B с помощью Ollama:
    ollama pull gemma3:1b
    
  4. Запустите модель локально:
    ollama run gemma3:1b
    
    Команда ollama run выводит приглашение ( >>> ), позволяющее вам задать вопросы модели.
  5. Проверьте модель, задав вопрос. Например, введите « Why is the sky blue? и нажмите клавишу ENTER. Вы должны увидеть ответ, подобный следующему:
    >>> Why is the sky blue?
    Okay, let's break down why the sky is blue – it's a fascinating phenomenon related to how light interacts with the Earth's atmosphere.
    Here's the explanation:
    
    **1. Sunlight and Colors:**
    
    * Sunlight appears white, but it's actually made up of all the colors of the rainbow (red, orange, yellow, green, blue, indigo, and violet).
    Think of a prism splitting sunlight.
    
    **2. Rayleigh Scattering:**
    
    * As sunlight enters the Earth's atmosphere...
    ...
    
  6. Чтобы выйти из командной строки Ollama в Терминале, введите /bye и нажмите ENTER.

Используйте OpenAI SDK с Ollama

Теперь, когда сервис Ollama запущен, вы можете взаимодействовать с ним программно. Для этого вам понадобится OpenAI Python SDK, совместимый с API, предоставляемым Ollama.

  1. В терминале Cloud Shell создайте и активируйте виртуальную среду с помощью uv. Это гарантирует отсутствие конфликтов между зависимостями вашего проекта и системным Python.
    uv venv --python 3.14
    source .venv/bin/activate
    
  2. В терминале установите OpenAI SDK:
    uv pip install openai
    
  3. Создайте новый файл с именем ollama_chat.py , введя в терминал:
    cloudshell edit ollama_chat.py
    
  4. Вставьте следующий код Python в файл ollama_chat.py . Этот код отправляет запрос на локальный сервер Ollama.
    from openai import OpenAI
    
    client = OpenAI(
        base_url = 'http://localhost:11434/v1',
        api_key='ollama', # required by OpenAI SDK, but not used by Ollama
    )
    
    response = client.chat.completions.create(
        model="gemma3:1b",
        messages=[
            {
                "role": "user",
                "content": "Why is the sky blue?"
            },
        ],
    )
    print(response.choices[0].message.content)
    
  5. Запустите скрипт в терминале:
    python3 ollama_chat.py
    
    Через несколько секунд вы увидите ответ, аналогичный тому, который вы получили из командной строки.
  6. Чтобы попробовать потоковый режим, создайте еще один файл с именем ollama_stream.py , выполнив в терминале следующее:
    cloudshell edit ollama_stream.py
    
  7. Вставьте следующий текст в файл ollama_stream.py . Обратите внимание на параметр stream=True в запросе. Это позволяет модели возвращать токены сразу после их генерации.
    from openai import OpenAI
    
    client = OpenAI(
        base_url = 'http://localhost:11434/v1',
        api_key='ollama',
    )
    
    stream = client.chat.completions.create(
        model="gemma3:1b",
        messages=[
            {
                "role": "user",
                "content": "Why is the sky blue?"
            },
        ],
        stream=True
    )
    for chunk in stream:
        if chunk.choices[0].delta.content is not None:
            print(chunk.choices[0].delta.content, end="", flush=True)
    print()
    
  8. Запустите скрипт потоковой передачи в терминале:
    python3 ollama_stream.py
    
    Ответ теперь будет отображаться токен за токеном.

Потоковая передача данных — полезная функция для создания комфортного пользовательского опыта в интерактивных приложениях, таких как чат-боты. Вместо того, чтобы заставлять пользователя ждать, пока будет сгенерирован весь ответ, потоковое вещание отображает ответ токен за токеном по мере его формирования. Это обеспечивает мгновенную обратную связь и делает приложение гораздо более отзывчивым.

Чему вы научились: запуск открытых моделей с помощью Ollama

Вы успешно запустили открытую модель с помощью Ollama. Вы увидели, насколько просто загрузить мощную модель, такую ​​как Gemma 3, и взаимодействовать с ней как через интерфейс командной строки, так и программно на Python. Этот рабочий процесс идеально подходит для быстрого прототипирования и локальной разработки. Теперь у вас есть прочная основа для изучения более сложных вариантов развертывания.

5. Развертывание Gemma с Ollama на GKE Autopilot

Для производственных рабочих нагрузок, требующих упрощения операций и масштабируемости, платформа Google Kubernetes Engine (GKE) — оптимальный выбор. В этом задании вы развернёте Gemma с помощью Ollama в кластере GKE Autopilot.

GKE Autopilot — это режим работы GKE, в котором Google управляет конфигурацией вашего кластера, включая узлы, масштабирование, безопасность и другие предустановленные параметры. Он создаёт по-настоящему «бессерверный» опыт Kubernetes, идеально подходящий для выполнения рабочих нагрузок вывода без управления базовой вычислительной инфраструктурой.

Подготовка среды GKE

Для выполнения последней задачи развертывания в Kubernetes вам необходимо подготовить кластер GKE Autopilot.

  1. В терминале Cloud Shell задайте переменные среды для вашего проекта и нужного региона.
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=europe-west1
    
    gcloud config set compute/region $REGION
    
  2. Включите API GKE для своего проекта, выполнив в терминале следующую команду:
    gcloud services enable container.googleapis.com
    
  3. Создайте кластер GKE Autopilot, выполнив в терминале следующее:
    gcloud container clusters create-auto gemma-cluster \
      --region $REGION \
      --release-channel rapid
    
  4. Получите учетные данные для нового кластера, выполнив в терминале следующую команду:
    gcloud container clusters get-credentials gemma-cluster \
      --region $REGION
    

Развертывание Олламы и Джеммы

Теперь, когда у вас есть кластер GKE Autopilot, вы можете развернуть сервер Ollama. Autopilot автоматически выделит вычислительные ресурсы (ЦП и память) в соответствии с требованиями, указанными в манифесте развертывания.

  1. Создайте новый файл с именем gemma-deployment.yaml , выполнив в терминале следующее:
    cloudshell edit gemma-deployment.yaml
    
  2. Вставьте следующую конфигурацию YAML в файл gemma-deployment.yaml . Эта конфигурация определяет развертывание, использующее официальный образ Ollama для работы на ЦП.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ollama-gemma
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ollama-gemma
      template:
        metadata:
          labels:
            app: ollama-gemma
        spec:
          containers:
          - name: ollama-gemma-container
            image: ollama/ollama:0.12.10
            resources:
              requests:
                cpu: "8"
                memory: "8Gi"
                ephemeral-storage: "10Gi"
              limits:
                cpu: "8"
                memory: "8Gi"
                ephemeral-storage: "10Gi"
            # We use a script to start the server and pull the model
            command: ["/bin/bash", "-c"]
            args:
            - |
              ollama serve &
              OLLAMA_PID=$!
              echo "Waiting for Ollama server to start..."
              sleep 5
              echo "Pulling Gemma model..."
              ollama pull gemma3:1b
              echo "Model pulled. Ready to serve."
              wait $OLLAMA_PID
            ports:
            - containerPort: 11434
            env:
            - name: OLLAMA_HOST
              value: "0.0.0.0"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: llm-service
    spec:
      selector:
        app: ollama-gemma
      type: ClusterIP
      ports:
      - protocol: TCP
        port: 8000
        targetPort: 11434
    
    Вот объяснение конфигурации автопилота:
    • image: ollama/ollama:latest : это указывает на официальный образ Ollama Docker.
    • resources : мы явно запрашиваем 8 виртуальных ЦП и 8 ГБ памяти. GKE Autopilot использует эти значения для обеспечения базовых вычислений. Поскольку мы не используем графические процессоры, модель будет работать на центральном процессоре. 8 ГБ памяти достаточно для хранения модели Gemma 1B и её контекста.
    • command/args : Мы переопределяем команду запуска, чтобы обеспечить загрузку модели при запуске модуля. Скрипт запускает сервер в фоновом режиме, дожидается его готовности, загрузку модели gemma3:1b и затем поддерживает работу сервера.
    • OLLAMA_HOST : установка значения 0.0.0.0 гарантирует, что Ollama будет прослушивать все сетевые интерфейсы внутри контейнера, что сделает его доступным для службы Kubernetes.
  3. В терминале примените манифест развертывания к вашему кластеру:
    kubectl apply -f gemma-deployment.yaml
    
    Автопилоту потребуется несколько минут для подготовки ресурсов и запуска модуля. Вы можете отслеживать процесс с помощью:
    kubectl get pods --watch
    
    Подождите, пока статус модуля не станет Running , а READY не станет 1/1 прежде чем продолжить.

Тестирование конечной точки GKE

Ваш сервис Ollama теперь запущен в кластере GKE Autopilot. Чтобы протестировать его из терминала Cloud Shell, используйте kubectl port-forward .

  1. Откройте новую вкладку терминала Cloud Shell (щёлкните по значку «+» в окне терминала). Команда port-forward — это блокирующий процесс, поэтому для неё требуется отдельный сеанс терминала.
  2. В новом терминале выполните следующую команду для переадресации локального порта (например, 8000 ) на порт службы ( 8000 ):
    kubectl port-forward service/llm-service 8000:8000
    
    Вы увидите вывод, указывающий на начало пересылки. Оставьте терминал запущенным.
  3. Вернитесь к исходному терминалу .
  4. Отправьте запрос на ваш локальный порт 8000 Сервер Ollama предоставляет API, совместимый с OpenAI, и благодаря переадресации порта вы теперь можете получить к нему доступ по адресу http://127.0.0.1:8000 .
    curl http://127.0.0.1:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "gemma3:1b",
    "messages": [
    {"role": "user", "content": "Explain why the sky is blue."}
    ]
    }'
    
    Служба вернет JSON-ответ с информацией о завершении модели.

6. Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этой лабораторной работе, выполните следующие действия для удаления кластера GKE.

  1. В терминале Cloud Shell удалите кластер GKE Autopilot:
    gcloud container clusters delete gemma-cluster \
      --region $REGION --quiet
    
    Эта команда удалит кластер и все связанные с ним ресурсы.

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

Отличная работа! В этой лабораторной работе вы рассмотрели несколько ключевых методов развёртывания открытых моделей в Google Cloud. Вы начали с простоты и скорости локальной разработки с помощью Ollama. Наконец, вы развернули Gemma в масштабируемой среде производственного уровня с помощью Google Kubernetes Engine Autopilot и фреймворка Ollama.

Теперь вы обладаете знаниями, необходимыми для развертывания открытых моделей на базе Google Kubernetes Engine для ресурсоемких масштабируемых рабочих нагрузок без необходимости управления базовой инфраструктурой.

Резюме

В этой лабораторной работе вы узнали:

  • Что такое открытые модели и почему они важны.
  • Как запустить открытую модель локально с помощью Ollama.
  • Как развернуть открытую модель на автопилоте Google Kubernetes Engine (GKE) с использованием Ollama для вывода.

Узнать больше