1. Wprowadzenie
Omówienie
W tym ćwiczeniu użyjesz zadań Cloud Run do wykonywania zbiorczego wnioskowania za pomocą modelu Llama 3.2-1b LLM firmy Meta i vLLM, który korzysta z karty graficznej w zadaniach Cloud Run. Wyniki zostaną zapisane bezpośrednio w Cloud Storage za pomocą montowania woluminów Cloud Run.
Czego się nauczysz
- Jak przeprowadzić zbiorcze wnioskowanie za pomocą usługi Cloud Run Jobs GPU
- Jak zapisywać w Cloud Storage za pomocą zamontowanych woluminów Cloud Run
2. Zanim zaczniesz
Włącz interfejsy API
Zanim zaczniesz korzystać z tego ćwiczenia, włącz te interfejsy API:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
Limit GPU
Poproś o zwiększenie limitu w obsługiwanym regionie. Limit to nvidia_l4_gpu_allocation_no_zonal_redundancy
w Cloud Run Admin API.
Uwaga: jeśli używasz nowego projektu, może minąć kilka minut od włączenia interfejsu API do pojawienia się limitów na tej stronie.
Hugging Face
To ćwiczenie korzysta z modelu hostowanego w Hugging Face. Aby uzyskać ten model, poproś o token dostępu użytkownika Hugging Face z uprawnieniem „Czytaj”. Zasobnik ten będzie później nazywany YOUR_HF_TOKEN
.
Aby korzystać z modelu, musisz też zaakceptować warunki użytkowania: https://huggingface.co/meta-llama/Llama-3.2-1B.
3. Konfiguracja i wymagania
Ta sekcja zawiera instrukcje konfigurowania tych zasobów:
- Konto usługi uprawnień i powiązane z nim uprawnienia.
- obiekt tajny menedżera obiektów tajnych do przechowywania tokenu Hugging Face.
- Zasobnik Cloud Storage do przechowywania wyników wnioskowania.
Aby skonfigurować wymagane zasoby:
- Ustaw zmienne środowiskowe na potrzeby tego ćwiczenia:
export PROJECT_ID=<your_project_id> export REGION=<your_region> export HF_TOKEN=<YOUR_HF_TOKEN> export SERVICE_ACCOUNT=inference-service-account export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com export SECRET_ID=hugging-face-token export BUCKET_NAME=inference-codelab-${PROJECT_ID}
- Utwórz konto usługi, uruchamiając:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab"
- Aby przechowywać token dostępu Hugging Face, użyj usługi Secret Manager:
gcloud secrets create $SECRET_ID \ --replication-policy="automatic" printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
- Przypisz do konta usługi rolę uzyskujący dostęp do obiektów tajnych w Menedżerze obiektów tajnych:
gcloud secrets add-iam-policy-binding $SECRET_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role='roles/secretmanager.secretAccessor'
- Utwórz zasobnik do hostowania modelu dostrojonego:
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- Przyznaj swojemu kontu usługi dostęp do zasobnika:
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectAdmin
- Utwórz repozytorium Artifact Registry, w którym będziesz przechowywać obraz kontenera. Jeśli wdrożenia źródła Cloud Run były już używane w Twoim projekcie, pomiń ten krok.
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location=$REGION \ --project=$PROJECT_ID
4. Tworzenie zadania Cloud Run
W tej sekcji utworzysz kod, który:
- Importuje model Llama z Hugging Face.
- Wykonywanie zbiorczego wnioskowania na modelu. W tym procesie zadanie używa jednego procesora graficznego L4.
- Zapisywanie wyników na dysku lokalnym. Jest on zapisywany w Cloud Storage przez podłączanie woluminów.
Aby utworzyć zadanie Cloud Run i plik Dockerfile, wykonaj te czynności:
- Utwórz katalog na kod zadania dokładnego dostrajania:
mkdir codelab-inference-job cd codelab-inference-job
- Utwórz plik o nazwie
main.py
.# SPDX-License-Identifier: Apache-2.0 from vllm import LLM, SamplingParams # Sample prompts. prompts = [ "Cloud Run is", "The future of AI is", "The capital of Germany is", "python as a programming language is", ] # Create a sampling params object. sampling_params = SamplingParams(temperature=0.8, top_p=0.95) # Create an LLM. llm = LLM(model="meta-llama/Llama-3.2-1B") # Generate texts from the prompts. The output is a list of RequestOutput objects # that contain the prompt, generated text, and other information. outputs = llm.generate(prompts, sampling_params) # Save the outputs to disk with open("/results/output.txt", "w") as f: for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n") print(f"Wrote {len(outputs)} to disk.")
- Utwórz
Dockerfile
:FROM python:3.12 ADD main.py . RUN python -m pip install --upgrade pip setuptools RUN pip install vllm CMD ["python", "./main.py"]
5. Wdrażanie i wykonywanie zadania
W tym kroku utworzysz zadanie Cloud Run za pomocą wdrożenia źródła Cloud Run, a następnie je wykonasz. Ten krok obejmuje też flagi montowania woluminu Cloud Run do przechowywania wyników.
- Utwórz zadanie Cloud Run:
To polecenie tworzy obraz na podstawie źródła i wdraża zadanie. Może to zająć trochę czasu.gcloud beta run jobs deploy inference-job \ --region $REGION \ --source . \ --gpu=1 \ --set-secrets HF_TOKEN=${SECRET_ID}:latest \ --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \ --add-volume-mount volume=results,mount-path=/results \ --service-account $SERVICE_ACCOUNT_EMAIL
- Wykonaj zadanie:
Wykonanie zadania zajmie kilka minut. Stan możesz sprawdzić, korzystając z linku podanego w wyjściu ostatniego polecenia.gcloud run jobs execute inference-job --region $REGION --async
Potwierdzenie powodzenia
Aby sprawdzić, czy zadanie zostało wykonane, wyświetl jego dzienniki, korzystając z wyników ostatniego polecenia.
Sprawdź wyniki w zasobniku Cloud Storage:
W konsoli:
- Otwórz Cloud Storage.
- Wybierz zasobnik rozpoczynający się od
inference-codelab
. - Wybierz
output.txt
. - Kliknij Uwierzytelniony adres URL, aby wyświetlić zawartość w przeglądarce.
Treść pliku powinna zawierać 4 prompty i ich wyniki.
6. Gratulacje!
Gratulujemy ukończenia ćwiczeń.
Zalecamy zapoznanie się z dokumentacją Cloud Run.
Omówione zagadnienia
- Jak przeprowadzić zbiorcze wnioskowanie za pomocą usługi Cloud Run Jobs GPU
- Jak zapisywać w Cloud Storage za pomocą zamontowanych woluminów Cloud Run
7. Czyszczenie danych
Aby usunąć zadanie Cloud Run, otwórz Cloud Console Cloud Run na stronie https://console.cloud.google.com/run i usuń zadanie inference-job
.
Aby usunąć cały projekt, kliknij Zarządzaj zasobami, wybierz projekt utworzony w kroku 2 i kliknij Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w Cloud SDK. Aby wyświetlić listę wszystkich dostępnych projektów, uruchom gcloud projects list
.