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

1. Введение

Обзор

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

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

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

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

Что вы узнаете

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

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

Обновите интерфейс командной строки gcloud

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

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

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

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

ollama pull gemma2:2b

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

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. Создайте изображение Олламы.

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

FROM 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 

# Store the model weights in the container image
ENV MODEL gemma2:2b
RUN ollama serve & sleep 5 && ollama pull $MODEL 

# Start Ollama
ENTRYPOINT ["ollama", "serve"]

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

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.

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

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

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

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

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
        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 в качестве входного контейнера внешнего интерфейса

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 .