Как использовать Ollama в качестве вспомогательного устройства с графическими процессорами Cloud Run и Open WebUI в качестве входного контейнера внешнего интерфейса.

1. Введение

Обзор

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

Сегодня мы предлагаем графические процессоры Nvidia L4 с 24 ГБ видеопамяти. На один экземпляр Cloud Run приходится один графический процессор, и функция автоматического масштабирования Cloud Run по-прежнему действует. Это включает в себя масштабирование до 5 экземпляров (с возможностью увеличения квоты), а также масштабирование до нуля экземпляров при отсутствии запросов.

Одним из вариантов использования графических процессоров является запуск собственных открытых больших языковых моделей (LLM). В этом руководстве вы узнаете, как развернуть службу, запускающую LLM.

В этой лабораторной работе вы развернете многоконтейнерную службу, которая использует Open WebUI в качестве входного контейнера frontend и использует Ollama в качестве вспомогательного компонента для обслуживания модели Gemma 2 2B, хранящейся в контейнере Google Cloud Storage.

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

  • Как создать многоконтейнерный сервис в Cloud Run
  • Как использовать Ollama в качестве коляски для модели Gemma 2 2B
  • Как развернуть Open WebUI в качестве фронтенд-контейнера Ingress

2. Установите переменные среды и включите API

Обновление gcloud CLI

Для начала вам потребуется установить последнюю версию интерфейса командной строки gcloud. Обновить интерфейс командной строки можно, выполнив следующую команду:

gcloud components update

Настройка переменных среды

Вы можете задать переменные среды, которые будут использоваться в этой лабораторной работе.

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=us-central1
gcloud config set project $PROJECT_ID

Включить API

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

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com

Создайте каталог для этой лабораторной работы.

mkdir ollama-sidecar-codelab
cd ollama-sidecar-codelab

3. Создайте контейнер GCS для хранения модели Gemma 2 2B.

Сначала установите Ollama, чтобы загрузить модель. Модель будет загружена в /home/$USER/.ollama/models.

curl -fsSL https://ollama.com/install.sh | sh

Теперь запустите олламу, выполнив

ollama serve

Ollama начинает прослушивание порта 11434.

Откройте второе окно терминала, чтобы загрузить модель Gemma 2 2B.

ollama pull gemma2:2b

(Необязательно) Вы можете взаимодействовать с Gemma из командной строки, выполнив команду

ollama run gemma2:2b

Когда вы закончите общение с Джеммой, вы можете выйти, набрав

/bye

4. Создайте хранилище

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

Сначала создадим ведро.

gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab

Теперь переместите папку с моделями в GCS.

gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab

5. Создайте изображение Олламы

Создайте dockerfile со следующим содержимым

FROM --platform=linux/amd64 ollama/ollama

# Listen on all interfaces, port 11434
ENV OLLAMA_HOST 0.0.0.0:11434

# 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

Создайте репозиторий Artifact Registry для хранения образов ваших служб.

gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
    --location=us-central1 --description="Ollama + OpenWebUI website demo" \
    --project=$PROJECT_ID

Создайте изображение коляски ollama

gcloud builds submit \
   --tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
   --machine-type e2-highcpu-32

6. Создайте образ интерфейса Open WebUI.

В этом разделе вы создадите входной контейнер frontend с помощью Open WebUI.

Используйте Docker, чтобы загрузить образ Open WebUI.

docker pull ghcr.io/open-webui/open-webui:main

Затем настройте Docker на использование ваших учётных данных Google Cloud для аутентификации в Artifact Registry. Это позволит вам использовать Docker для отправки образа в репозиторий Artifact Registry.

gcloud auth configure-docker us-central1-docker.pkg.dev

Отметьте свое изображение и отправьте его в Реестр артефактов.

docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui

docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui

7. Разверните многоконтейнерную службу в Cloud Run.

Используйте yaml-файл для развертывания многоконтейнерной службы.

Создайте service.yaml со следующим содержимым.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: ollama-sidecar-codelab
  labels:
    cloud.googleapis.com/location: us-central1
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/maxScale: '5'
        run.googleapis.com/cpu-throttling: 'false'
        run.googleapis.com/startup-cpu-boost: 'true'
        run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
    spec:
      containerConcurrency: 80
      timeoutSeconds: 300
      containers:
      - name: openwebui
        image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
        ports:
        - name: http1
          containerPort: 8080
        env:
        - name: OLLAMA_BASE_URL
          value: http://localhost:11434
        - name: WEBUI_AUTH
          value: 'false'
        resources:
          limits:
            memory: 1Gi
            cpu: 2000m
        volumeMounts:
        - name: in-memory-1
          mountPath: /app/backend/data
        startupProbe:
          timeoutSeconds: 240
          periodSeconds: 240
          failureThreshold: 1
          tcpSocket:
            port: 8080
      - name: ollama-sidecar
        image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
        env:
          - name: OLLAMA_MODELS
            value: /root/.ollama/models
        resources:
          limits:
            cpu: '6'
            nvidia.com/gpu: '1'
            memory: 16Gi
        volumeMounts:
        - name: gcs-1
          mountPath: /root/.ollama
        startupProbe:
          timeoutSeconds: 1
          periodSeconds: 10
          failureThreshold: 3
          tcpSocket:
            port: 11434
      volumes:
      - name: gcs-1
        csi:
          driver: gcsfuse.run.googleapis.com
          volumeAttributes:
            bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
      - name: in-memory-1
        emptyDir:
          medium: Memory
          sizeLimit: 10Gi
      nodeSelector:
        run.googleapis.com/accelerator: nvidia-l4

Обновите service.yaml, заменив PROJECT_ID на идентификатор вашего проекта:

sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml

Выполните развертывание в Cloud Run с помощью следующей команды.

gcloud beta run services replace service.yaml

Протестируйте сервис Cloud Run

Теперь откройте URL-адрес сервиса в вашем веб-браузере.

После завершения загрузки пользовательского интерфейса в разделе « Выберите модель» выберите Gemma 2 2B .

Теперь задайте Джемме вопрос, например: «Почему небо голубое?»

8. Поздравляем!

Поздравляем с завершением лабораторной работы!

Рекомендуем ознакомиться с документацией по функциям Cloud Run.

Что мы рассмотрели

  • Как создать многоконтейнерный сервис в Cloud Run
  • Как использовать Ollama в качестве коляски для модели Gemma 2 2B
  • Как развернуть Open WebUI в качестве фронтенд-контейнера Ingress

9. Уборка

Чтобы избежать непреднамеренных расходов (например, если сервисы Cloud Run будут непреднамеренно вызваны большее количество раз, чем ваш ежемесячный лимит вызовов Cloud Run на бесплатном уровне ), вы можете либо удалить Cloud Run, либо удалить проект, созданный на шаге 2.

Чтобы удалить функцию Cloud Run, перейдите в облачную консоль Cloud Run по адресу https://console.cloud.google.com/run и удалите службу ollama-sidecar-codelab .

Если вы решите удалить весь проект, перейдите по ссылке https://console.cloud.google.com/cloud-resource-manager , выберите проект, созданный на шаге 2, и нажмите «Удалить». После удаления проекта вам потребуется изменить проекты в Cloud SDK. Список всех доступных проектов можно просмотреть, выполнив gcloud projects list .