1. Wprowadzenie
Omówienie
W Cloud Run dodano ostatnio obsługę GPU. Jest dostępna publicznie w 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. W każdej instancji Cloud Run jest jeden GPU, a autoskalowanie Cloud Run nadal obowiązuje. 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 przypadków użycia GPU jest uruchamianie własnych otwartych dużych modeli językowych (LLM). Ten samouczek przedstawia proces wdrażania usługi obsługującej LLM.
Jest to usługa backendu, która uruchamia vLLM – mechanizm wnioskowania dla systemów produkcyjnych. W ramach tego ćwiczenia w Codelabs korzystamy z opracowanej przez Google aplikacji Gemma 2 z 2 miliardami parametrów dostrojonym modelem dostrojonym w postaci instrukcji.
Czego się nauczysz
- Jak używać GPU w Cloud Run.
- Jak użyć Hugging Face, aby pobrać model.
- Wdrażanie w Cloud Run modelu Google Gemma 2 2b dostrojonego zgodnie z instrukcjami przy użyciu LLM jako silnika wnioskowania.
- Jak wywołać usługę backendu, aby dokończyć zdanie.
2. Konfiguracja i wymagania
Wymagania wstępne
- Jesteś zalogowany w konsoli Google Cloud.
- Masz już wdrożoną usługę Cloud Run. Możesz na przykład zapoznać się z krótkim wprowadzeniem do wdrażania usługi sieciowej z kodu źródłowego.
- masz konto Hugging Face i akceptujesz licencję Gemma 2 2b na stronie https://huggingface.co/google/gemma-2-2b-it; w przeciwnym razie nie będzie można pobrać modelu.
- Udało Ci się utworzyć token dostępu z dostępem 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 tej usługi. Jeśli wyświetlił się ekran pośredni, kliknij Dalej.
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma 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 ramach tego ćwiczenia z programowania można wykonać w przeglądarce.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest uwierzytelniony, a projekt jest ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt:
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Włączanie interfejsów API i ustawianie zmiennych środowiskowych
Włącz interfejsy API
Zanim zaczniesz korzystać z tego ćwiczenia z programowania, 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 \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Skonfiguruj zmienne środowiskowe
Możesz ustawić zmienne środowiskowe, które będą używane podczas tego ćwiczenia 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 secrete manager"
Następnie 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 obiekt tajny w usłudze Secret Manager o nazwie HF_TOKEN dla swojego tokena dostępu Hugging Face. Cloud Build wykorzystuje konto usługi do uzyskiwania dostępu do tego obiektu tajnego w czasie kompilacji i pobiera model Gemma 2 (2B) z Hugging Face. Więcej informacji o obiektach tajnych i Cloud Build znajdziesz tutaj.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
I przyznaj kontu usługi dostęp do obiektu tajnego HF_TOKEN w usłudze Secret Manager.
gcloud secrets add-iam-policy-binding HF_TOKEN \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --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 obiekt Dockerfile
, który będzie zawierał obiekt tajny z usługi Secret Manager. Więcej informacji o flagi Dockera Buildx – obiektów tajnych 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
Kompilacja może potrwać ok. 8 minut.
6. Wdrażanie usługi
Teraz możesz wdrożyć obraz w Cloud Run.
gcloud beta run deploy $SERVICE_NAME \ --image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 --gpu-type=nvidia-l4 \ --region us-central1 \ --no-allow-unauthenticated \ --max-instances 5 \ --no-cpu-throttling
Wdrożenie może potrwać do 5 minut.
7. Testowanie usługi
Po wdrożeniu możesz skorzystać z usługi deweloperskiej serwera proxy Cloud Run, która automatycznie doda token identyfikatora za Ciebie, lub bezpośrednio skręcić adres URL usługi.
Korzystanie z usługi proxy programisty w Cloud Run
Aby skorzystać z usługi serwera proxy dla programistów w Cloud Run, możesz wykonać te czynności:
Najpierw uruchom następujące polecenie
gcloud run services proxy $SERVICE_NAME --region us-central1
Następnie zwiń usługę
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)')
Zwiń usługę
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
Wyniki powinny wyglądać podobnie 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 ćwiczeń z programowania.
Zalecamy zapoznanie się z dokumentacją Cloud Run.
Omówione zagadnienia
- Jak używać GPU w Cloud Run.
- Jak użyć Hugging Face, aby pobrać model.
- Jak wdrożyć w Cloud Run model Google Gemma 2 (2B) z wykorzystaniem LLM jako silnika wnioskowania.
- Jak wywołać usługę backendu, aby dokończyć zdanie.
9. Czyszczenie danych
Aby uniknąć niezamierzonych opłat (na przykład jeśli usługi Cloud Run były wywoływane więcej razy niż przez miesięczny przydział wywołań Cloud Run na poziomie bezpłatnym), możesz usunąć Cloud Run albo projekt utworzony w kroku 2.
Aby usunąć usługę Cloud Run, otwórz konsolę Cloud Run na stronie https://console.cloud.google.com/run i usuń usługę vllm-gemma-2-2b
. Możesz też usunąć konto usługi vllm-gemma-2-2b
.
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
.