1. Wprowadzenie
Przegląd
Cloud Run niedawno dodał obsługę GPU. 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, gdy nie ma żadnych żądań.
Jednym z zastosowań procesorów GPU 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.
Usługa jest usługą backendu, która uruchamia vLLM, czyli silnik wnioskowania dla systemów produkcyjnych. W tym ćwiczeniu z programowania używamy modelu Gemma 2 od Google z 2 miliardami parametrów, który został dostosowany do wykonywania instrukcji.
Czego się nauczysz
- Jak korzystać z GPU w Cloud Run.
- Jak używać Hugging Face do pobierania modelu.
- Jak wdrożyć w Cloud Run model Gemma 2 2b od Google dostosowany do instrukcji, używając vLLM jako silnika wnioskowania.
- Jak wywołać usługę backendu, aby dokończyć zdanie.
2. Konfiguracja i wymagania
Wymagania wstępne
- Jesteś zalogowany(-a) w konsoli Google Cloud.
- Usługa Cloud Run została już wdrożona. Na początek możesz na przykład skorzystać z przewodnika szybkiego startu dotyczącego wdrażania usługi internetowej z kodu źródłowego.
- Musisz mieć konto Hugging Face i zaakceptować licencję Gemma 2 2b na stronie https://huggingface.co/google/gemma-2-2b-it. W przeciwnym razie nie będziesz mieć możliwości pobrania modelu.
- Utworzono token dostępu, który ma dostęp do modelu google/gemma-2-2b-it.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.
Udostępnienie Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość zadań w tym laboratorium możesz wykonać w przeglądarce.
Po połączeniu z Cloud Shell zobaczysz, że jesteś uwierzytelniony, a identyfikator projektu jest ustawiony na identyfikator Twojego projektu.
- Aby potwierdzić, że masz autoryzację, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz ustawić go za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Włączanie interfejsów API i ustawianie zmiennych środowiskowych
Włącz interfejsy API
Zanim zaczniesz korzystać z tego samouczka, musisz włączyć kilka interfejsów API. W tym samouczku 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 \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Konfigurowanie zmiennych środowiskowych
Możesz ustawić zmienne środowiskowe, których będziesz używać podczas naszych ćwiczeń z programowania.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. Tworzenie konta usługi
To konto usługi służy do tworzenia usługi Cloud Run i uzyskiwania dostępu do obiektu tajnego z usługi Secret Manager.
Najpierw utwórz konto usługi, uruchamiając to polecenie:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
Po drugie, przypisz do konta usługi rolę użytkownika Vertex AI.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Teraz utwórz w usłudze Secret Manager obiekt tajny o nazwie HF_TOKEN dla tokena dostępu Hugging Face. Cloud Build używa konta usługi, aby uzyskać dostęp do tego obiektu tajnego w czasie kompilacji i pobrać model Gemma 2 (2B) z Hugging Face. Więcej informacji o sekretach i Cloud Build znajdziesz tutaj.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Podczas tworzenia obrazu przyznaj domyślnemu kontu usługi Compute dostęp do obiektu tajnego HF_TOKEN w usłudze Secret Manager.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Tworzenie obrazu w Artifact Registry
Najpierw utwórz repozytorium w Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Następnie utwórz Dockerfile
, który będzie zawierać obiekt tajny z usługi Secret Manager. Więcej informacji o fladze Docker buildx –secrets znajdziesz tutaj.
FROM vllm/vllm-openai:latest ENV HF_HOME=/model-cache RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \ huggingface-cli download google/gemma-2-2b-it ENV HF_HUB_OFFLINE=1 ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \ --port ${PORT:-8000} \ --model ${MODEL_NAME:-google/gemma-2-2b-it} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
Teraz utwórz plik cloudbuild.yaml.
steps: - name: 'gcr.io/cloud-builders/docker' id: build entrypoint: 'bash' secretEnv: ['HF_TOKEN'] args: - -c - | SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN . availableSecrets: secretManager: - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest' env: 'HF_TOKEN' images: ["${_IMAGE}"] substitutions: _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it' options: dynamicSubstitutions: true machineType: "E2_HIGHCPU_32"
Na koniec prześlij kompilację.
gcloud builds submit --config=cloudbuild.yaml
Proces kompilacji może potrwać około 8 minut.
6. Wdrażanie usługi
Możesz teraz wdrożyć obraz w Cloud Run. Wdrożenie potrwa około 5 minut. Musisz zwiększyć początkowe opóźnienie kontroli stanu o kilka minut, aby dać obrazowi więcej czasu na wczytanie. W przeciwnym razie kontrola stanu zwróci błąd „Deadline Exceeded” (Przekroczono termin).
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. Testowanie usługi
Po wdrożeniu możesz użyć usługi serwera proxy deweloperskiego Cloud Run, która automatycznie dodaje token tożsamości, lub bezpośrednio wywołać adres URL usługi.
Korzystanie z usługi serwera proxy Cloud Run Dev
Aby użyć usługi serwera proxy deweloperskiego Cloud Run, wykonaj te czynności:
Najpierw uruchom to polecenie:
gcloud run services proxy $SERVICE_NAME --region us-central1
Następnie wywołaj usługę za pomocą polecenia curl.
curl -X POST http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Bezpośrednie używanie adresu URL usługi
Najpierw pobierz adres URL wdrożonej usługi.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Wywołanie usługi
curl -X POST $SERVICE_URL/v1/completions \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Wyniki
Powinny pojawić się wyniki podobne do tych:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Zalecamy zapoznanie się z dokumentacją Cloud Run.
Omówione zagadnienia
- Jak korzystać z GPU w Cloud Run.
- Jak używać Hugging Face do pobierania modelu.
- Jak wdrożyć model Gemma 2 (2B) od Google w Cloud Run za pomocą vLLM jako silnika wnioskowania.
- Jak wywołać usługę backendu, aby dokończyć zdanie.
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ąć usługę Cloud Run, otwórz konsolę Cloud Run w Cloud Console na stronie https://console.cloud.google.com/run i usuń usługę vllm-gemma-2-2b
. Możesz też usunąć vllm-gemma-2-2b
konto usługi.
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
.