1. Wprowadzenie
Przegląd
Czego się nauczysz
- Wdrażanie modelu Gemma na GPU RTX 6000 Pro w Cloud Run
- Jak pobrać model z Cloud Storage równolegle podczas uruchamiania kontenera
2. Konfiguracja i wymagania
Ustaw zmienne środowiskowe, które będą używane w tym module:
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab
# set the project
gcloud config set project $PROJECT_ID
Włączanie interfejsów API potrzebnych w tym ćwiczeniu z programowania
gcloud services enable artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com
Tworzenie folderu z ćwiczeniami z programowania
mkdir codelab-rtx
cd codelab-rtx
Włącz prywatny dostęp do Google w podsieci, aby zoptymalizować wczytywanie modeli ML z Cloud Storage. Więcej informacji znajdziesz w sekcji dokumentu dotyczącego sprawdzonych metod korzystania z procesorów graficznych na temat wczytywania modeli z Cloud Storage.
gcloud compute networks subnets update default \
--region=europe-west4 \
--enable-private-ip-google-access
3. Konfigurowanie Cloud Storage
Najpierw utwórz zasobnik Cloud Storage, w którym będą przechowywane wagi modelu.
Tworzenie unikalnego zasobnika
# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"
# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
--location=$REGION \
--uniform-bucket-level-access
4. Pobieranie wag modelu
Następnie pobierz model Gemma 3 do katalogu lokalnego i prześlij go do zasobnika Cloud Storage.
Instalowanie Ollamy
Aby zainstalować Ollamę, możesz uruchomić to polecenie:
curl -fsSL https://ollama.com/install.sh | sh
Pobierz model
Utwórz katalog dla pobranego modelu.
mkdir model-weights
W tym procesie użyjesz 2 kart terminala: jednej do uruchomienia serwera Ollama i drugiej do pobrania modelu.
Terminal 1 (serwer):
Uruchom serwer, przekazując lokalizację pobranego modelu. To polecenie będzie nadal wykonywane.
OLLAMA_MODELS=$(pwd)/model-weights ollama serve
Terminal 2 (klient): otwórz nową kartę terminala i pobierz model. Klient automatycznie komunikuje się z działającym serwerem.
# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b
Wróć do terminala 1: gdy pobieranie w terminalu 2 się zakończy, wróć do terminala 1 i naciśnij Ctrl+C, aby zatrzymać serwer.
Przesyłanie do Cloud Storage
Teraz prześlij wagi do zasobnika. gcloud storage automatycznie obsługuje równoległe przesyłanie, aby przyspieszyć ten proces.
gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/
(Opcjonalnie) Czyszczenie lokalnych wag
Model jest już w Cloud Storage, więc usuń lokalną kopię.
rm -rf model-weights
5. Tworzenie usługi
Najpierw utwórz folder dla usługi.
mkdir rtx-service
cd rtx-service
Utwórz plik Dockerfile o tej treści:
FROM ollama/ollama:latest
# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
apt-get update && apt-get install -y google-cloud-cli && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# 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
# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]
Utwórz plik o nazwie entrypoint.sh z tą zawartością:
#!/bin/bash
set -e
# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS
# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
echo "Downloading model weights from gs://$MODEL_BUCKET..."
# gcloud storage handles concurrent downloads automatically
gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
echo "MODEL_BUCKET not set. Skipping download."
fi
# Start Ollama
exec ollama serve
6. Wdrożenie w Cloud Run
W tej sekcji wdrożysz usługę za pomocą gcloud run deploy. To polecenie skompiluje kontener ze źródła i wdroży go w Cloud Run z niezbędnymi konfiguracjami procesora graficznego i sieci.
Utwórz konto usługi
Utwórz dla tej aplikacji dedykowane konto usługi i przyznaj mu tylko wymagane uprawnienia.
# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
--display-name="RTX Codelab Identity"
# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
Konfiguracja sieci
Aby uzyskać optymalną wydajność podczas pobierania dużych modeli, użyj bezpośredniej sieci VPC w ruchu wychodzącym. Umożliwia to kontenerowi dostęp do Cloud Storage za pomocą prywatnej sieci Google, z pominięciem publicznego internetu i bram NAT. W poleceniu gcloud run deploy używane są te flagi:
--network: łączy się z siecią VPCdefault(upewnij się, że ta sieć istnieje i ma podsieć w Twoim regionie z włączonym prywatnym dostępem do Google).--subnet: konkretna podsieć w Twoim regionie (zwykledefault, jeśli używasz sieci domyślnej).--vpc-egress: ustaw wartośćall-traffic, aby wymusić kierowanie całego ruchu wychodzącego przez VPC.
Polecenie wdrożenia
gcloud beta run deploy $SERVICE_NAME \
--source . \
--region $REGION \
--project $PROJECT_ID \
--no-allow-unauthenticated \
--port 11434 \
--service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--cpu 20 --memory 80Gi \
--gpu 1 \
--gpu-type nvidia-rtx-pro-6000 \
--set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
--network default \
--subnet default \
--vpc-egress all-traffic \
--no-gpu-zonal-redundancy
7. Testowanie usługi
Po wdrożeniu możesz korzystać z modelu Gemma 3 za pomocą interfejsu Ollama API.
Pobieranie adresu URL usługi
Pobierz adres URL wdrożonej usługi Cloud Run.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"
Uruchom wnioskowanie
Wyślij prompt do modelu za pomocą curl. Możesz ustawić "stream": false, aby uzyskać pełną odpowiedź w jednym obiekcie JSON, a jq, aby wyodrębnić tylko tekst.
Uwaga: jeśli używasz większego modelu, np. gemma3:27b, musisz zmienić nazwę modelu w poniższym pliku JSON.
curl -s "$SERVICE_URL/api/generate" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:1b",
"prompt": "Why is the sky blue?",
"stream": false
}' | jq -r '.response'
8. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Zalecamy zapoznanie się z dokumentacją Cloud Run.
Omówione zagadnienia
- Wdrażanie modelu Gemma na GPU RTX 6000 Pro w Cloud Run
- Jak pobrać model z Cloud Storage równolegle podczas uruchamiania kontenera
9. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt lub poszczególne zasoby.
Opcja 1. Usuwanie zasobów
Usuwanie usługi Cloud Run
gcloud run services delete $SERVICE_NAME \
--region $REGION \
--quiet
Usuwanie konta usługi
gcloud iam service-accounts delete \
rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--quiet
Usuwanie zasobnika Cloud Storage
gcloud storage rm --recursive gs://$MODEL_BUCKET
Usuwanie obrazu kontenera
Ta kompilacja utworzyła obraz kontenera w Artifact Registry. Możesz znaleźć nazwę obrazu i go usunąć.
Wyświetl listę obrazów, aby znaleźć dokładną nazwę (zwykle gcr.io/ID_PROJEKTU/NAZWA_USŁUGI).
gcloud container images list --filter="name:$SERVICE_NAME"
Usuń obraz (zastąp IMAGE_NAME wynikiem z powyższego kroku).
gcloud container images delete <IMAGE_NAME> --force-delete-tags
Opcja 2. Usuwanie projektu
Aby usunąć cały projekt, otwórz stronę Zarządzaj zasobami, 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.