1. Wprowadzenie
Przegląd
Usługa Cloud Run niedawno zyskała obsługę procesorów graficznych. Jest ona dostępna w ramach publicznej wersji przedpremierowej, do której można dołączyć po zapisaniu się na listę oczekujących. Jeśli chcesz wypróbować tę funkcję, wypełnij ten formularz, aby dołączyć do listy oczekujących. Cloud Run to platforma kontenerowa w Google Cloud, która ułatwia uruchamianie kodu w kontenerze bez konieczności zarządzania klastrem.
Obecnie udostępniamy procesory graficzne Nvidia L4 z 24 GB pamięci vRAM. Na każdą instancję Cloud Run przypada 1 procesor graficzny, a autoskalowanie Cloud Run nadal obowiązuje. Obejmuje to skalowanie w górę do 5 instancji (z możliwością zwiększenia limitu) oraz skalowanie w dół do 0 instancji w przypadku braku żądań.
Jednym z zastosowań procesorów graficznych jest uruchamianie własnych otwartych dużych modeli językowych (LLM). Z tego samouczka dowiesz się, jak wdrożyć usługę, która uruchamia LLM.
W tym ćwiczeniu dowiesz się, jak wdrożyć usługę z wieloma kontenerami, która używa Open WebUI jako kontenera wejściowego frontendu i Ollamy jako kontenera pomocniczego do udostępniania modelu Gemma 2 2B przechowywanego w zasobniku Cloud Storage w Google Cloud.
Czego się nauczysz
- Jak utworzyć usługę z wieloma kontenerami w Cloud Run
- Jak wdrożyć usługę Ollama jako kontener pomocniczy obsługujący model Gemma 2 2B
- Instrukcje: jak wdrożyć Open WebUI jako kontener Ingress frontendu
2. Ustawianie zmiennych środowiskowych i włączanie interfejsów API
Uaktualnianie gcloud CLI
Najpierw musisz zainstalować najnowszą wersję gcloud CLI. Aby zaktualizować interfejs wiersza poleceń, uruchom to polecenie:
gcloud components update
Konfigurowanie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać podczas naszych ćwiczeń z programowania.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
Włącz interfejsy API
Zanim zaczniesz korzystać z tego ćwiczenia w Codelabs, musisz włączyć kilka interfejsów API. W tym ćwiczeniu musisz użyć tych interfejsów API: Możesz włączyć te interfejsy API, uruchamiając to polecenie:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
Utwórz katalog dla tego ćwiczenia.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Tworzenie zasobnika GCS do przechowywania modelu Gemma 2 2B
Najpierw zainstaluj Ollamę, aby pobrać model. Spowoduje to pobranie modelu do katalogu /home/$USER/.ollama/models.
curl -fsSL https://ollama.com/install.sh | sh
Teraz uruchom Ollamę, wpisując
ollama serve
Ollama zaczyna nasłuchiwać na porcie 11434.
Otwórz drugie okno terminala, aby pobrać model Gemma 2 2B do
ollama pull gemma2:2b
(Opcjonalnie) Możesz wchodzić w interakcje z Gemma z poziomu wiersza poleceń, uruchamiając
ollama run gemma2:2b
Po zakończeniu rozmowy z Gammą możesz wyjść, wpisując
/bye
4. Tworzenie zasobnika Cloud Storage
Po pobraniu modelu możesz przenieść go do zasobnika GCS.
Najpierw utwórz zasobnik.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Teraz przenieś folder modeli do GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Tworzenie obrazu Ollamy
Utwórz plik Dockerfile o tej treści:
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
Utwórz repozytorium Artifact Registry do przechowywania obrazów usług.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Tworzenie obrazu kontenera dodatkowego 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. Tworzenie obrazu frontendu Open WebUI
W tej sekcji utworzysz kontener Ingress frontendu za pomocą Open WebUI.
Użyj Dockera, aby pobrać obraz Open WebUI.
docker pull ghcr.io/open-webui/open-webui:main
Następnie skonfiguruj Dockera tak, aby używał Twoich danych logowania w Google Cloud do uwierzytelniania w Artifact Registry. Dzięki temu będziesz mieć możliwość używania Dockera do przenoszenia obrazu do repozytorium Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Dodaj tag do obrazu, a następnie przenieś go do Artifact Registry.
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. Wdrażanie usługi z wieloma kontenerami w Cloud Run
Wdrażanie usługi z wieloma kontenerami za pomocą pliku YAML
Utwórz plik service.yaml o tej zawartości.
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
Zaktualizuj plik service.yaml, zastępując PROJECT_ID identyfikatorem projektu:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Wdróż w Cloud Run za pomocą tego polecenia.
gcloud beta run services replace service.yaml
Testowanie usługi Cloud Run
Teraz otwórz adres URL usługi w przeglądarce.
Po załadowaniu interfejsu w sekcji Wybierz model kliknij Gemma 2B.
Zadaj Gemmie pytanie, np. „Dlaczego niebo jest niebieskie?”.
8. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Zalecamy zapoznanie się z dokumentacją dotyczącą funkcji Cloud Run.
Omówione zagadnienia
- Jak utworzyć usługę z wieloma kontenerami w Cloud Run
- Jak wdrożyć usługę Ollama jako kontener pomocniczy obsługujący model Gemma 2 2B
- Instrukcje: jak wdrożyć Open WebUI jako kontener Ingress frontendu
9. Czyszczenie danych
Aby uniknąć przypadkowych opłat (np. jeśli usługi Cloud Run zostaną przypadkowo wywołane więcej razy niż miesięczna liczba wywołań Cloud Run w bezpłatnej wersji), możesz usunąć Cloud Run lub projekt utworzony w kroku 2.
Aby usunąć funkcję Cloud Run, otwórz konsolę Cloud Run pod adresem https://console.cloud.google.com/run i usuń usługę ollama-sidecar-codelab.
Jeśli zdecydujesz się usunąć cały projekt, otwórz stronę https://console.cloud.google.com/cloud-resource-manager, wybierz projekt utworzony w kroku 2 i kliknij Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w Cloud SDK. Listę wszystkich dostępnych projektów możesz wyświetlić, uruchamiając polecenie gcloud projects list.