1. Wprowadzenie
Omówienie
Cloud Run niedawno dodał obsługę karty graficznej. Jest ona dostępna w ramach publicznej wersji przedpremierowej na liście oczekujących. Jeśli chcesz wypróbować tę funkcję, wypełnij ten formularz, aby wpisać się na listę oczekujących. Cloud Run to platforma kontenerów w Google Cloud, która ułatwia uruchamianie kodu w kontenerze bez konieczności zarządzania klastrem.
Obecnie dostępne są procesory graficzne Nvidia L4 z 24 GB pamięci RAM. Na każdą instancję Cloud Run przypada 1 GPU, a automatyczne skalowanie Cloud Run nadal działa. Obejmuje to skalowanie do 5 instancji (z możliwością zwiększenia limitu) oraz skalowanie w dół do zera, gdy nie ma żądań.
Jednym z zastosowań kart graficznych jest uruchamianie własnych dużych modeli językowych (LLM). Ten samouczek przedstawia proces wdrażania usługi obsługującej LLM.
W tym laboratorium kodu wdrożysz usługę wielokontenerową, która używa Open WebUI jako kontenera wejściowego frontendu i używa Ollama w kontenerze pobocznym, aby udostępnić model Gemma 2 2B przechowywany w zasobniku Google Cloud Storage.
Czego się nauczysz
- Jak utworzyć usługę z wieloma kontenerami w Cloud Run
- Jak wdrożyć Ollama jako model pomocniczy do modelu Gemma 2 2B
- Jak wdrożyć Open WebUI jako kontener ruchu przychodzącego frontendu
2. Ustawianie zmiennych środowiskowych i Włączanie interfejsów API
Uaktualnij interfejs wiersza poleceń gcloud
Najpierw musisz mieć zainstalowaną najnowszą wersję interfejsu wiersza poleceń gcloud. Interfejs wiersza poleceń możesz zaktualizować, uruchamiając to polecenie:
gcloud components update
Konfigurowanie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać w tym ćwiczeniu.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
Włącz interfejsy API
Zanim zaczniesz korzystać z tego ćwiczenia, musisz włączyć kilka interfejsów API. To ćwiczenie w Codelabs wymaga używania poniższych 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 na potrzeby tego ćwiczenia w Codelabs.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Utwórz zasobnik GCS do przechowywania modelu Gemma 2 2B
Najpierw zainstaluj Ollama, aby pobrać model. Spowoduje to pobranie modelu do katalogu /home/$USER/.ollama/models.
curl -fsSL https://ollama.com/install.sh | sh
Teraz uruchom ollama przez uruchomienie
ollama serve
Ollama zaczyna nasłuchiwać na porcie 11434.
Otwórz drugie okno terminala, aby pobrać model Gemma 2 2B.
ollama pull gemma2:2b
(Opcjonalnie) Możesz użyć Gemma w wierszu poleceń, uruchamiając polecenie
ollama run gemma2:2b
Gdy skończysz rozmawiać z Gemini, możesz zamknąć czat, wpisując
/bye
4. Tworzenie zasobnika na dane
Po pobraniu modelu możesz go przenieść do zasobnika GCS.
Najpierw utwórz zasób.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Teraz przenieś folder models do GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Utwórz obraz Ollama
Utwórz plik dockerfile o następującej zawartości
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"]
Utwórz repozytorium Artifact Registry, aby przechowywać obrazy usługi.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Utwórz obraz pomocniczy 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 ruchu przychodzącego frontendu za pomocą Open WebUI.
Użyj Dockera, aby ściągnąć obraz Open WebUI.
docker pull ghcr.io/open-webui/open-webui:main
Następnie skonfiguruj Dockera tak, aby używał Twoich danych logowania do Google Cloud do uwierzytelniania w Artifact Registry. Dzięki temu możesz użyć Dockera do przesłania obrazu do repozytorium Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Dodaj tag do obrazu, a następnie prześlij 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 obsługi wielu kontenerów w Cloud Run
Wdróż usługę obsługi wielu kontenerów za pomocą pliku yaml
Utwórz service.yaml
o poniższej 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 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 parametr 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 zakończeniu wczytywania interfejsu w sekcji Wybierz model wybierz Gemma 2 2B.
Teraz 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ę wielu kontenerów w Cloud Run
- Jak wdrożyć Ollama jako model pomocniczy do modelu Gemma 2 2B
- Jak wdrożyć Open WebUI jako kontener ruchu przychodzącego frontendu
9. Czyszczenie danych
Aby uniknąć niezamierzonych opłat (na przykład jeśli usługi Cloud Run zostaną nieumyślnie wywoływane więcej razy niż miesięczny przydział wywołań Cloud Run na poziomie bezpłatnym), możesz usunąć Cloud Run albo projekt utworzony w kroku 2.
Aby usunąć funkcję Cloud Run, otwórz konsolę Cloud Run na stronie https://console.cloud.google.com/run i usuń usługę ollama-sidecar-codelab
.
Jeśli zdecydujesz się usunąć cały projekt, możesz otworzyć stronę https://console.cloud.google.com/cloud-resource-manager, wybrać projekt utworzony w kroku 2 i kliknąć Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w pakiecie SDK Cloud. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom polecenie gcloud projects list
.