1. Wprowadzenie
Przegląd
W tym laboratorium użyjesz zadań Cloud Run do uruchamiania wnioskowania wsadowego za pomocą modelu LLM Llama 3.2-1b od Mety i vLLM zasilanych przez procesor GPU zadań Cloud Run. Wyniki zapiszesz bezpośrednio w Cloud Storage za pomocą montowania woluminów Cloud Run.
Czego się nauczysz
- Jak przeprowadzać wnioskowanie wsadowe za pomocą GPU w Cloud Run Jobs
- Jak zapisywać dane w Cloud Storage za pomocą montowania woluminów Cloud Run
2. Zanim zaczniesz
Włącz interfejsy API
Zanim zaczniesz korzystać z tego laboratorium, włącz te interfejsy API, uruchamiając to polecenie:
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 wynosi nvidia_l4_gpu_allocation_no_zonal_redundancy w sekcji Cloud Run Admin API.
Uwaga: jeśli używasz nowego projektu, może minąć kilka minut od włączenia interfejsu API do momentu, w którym limity pojawią się na tej stronie.
Hugging Face
W tym ćwiczeniu w Codelabs używamy modelu hostowanego na platformie Hugging Face. Aby uzyskać ten model, poproś o token dostępu użytkownika Hugging Face z uprawnieniami do odczytu. Będzie on dalej występować jako 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
W tej sekcji znajdziesz instrukcje konfigurowania tych zasobów:
- Konto usługi uprawnień i powiązane z nim uprawnienia.
- Secret Manager secret (obiekt tajny usługi Secret Manager) do przechowywania tokena Hugging Face.
- Zasobnik Cloud Storage, w którym będą przechowywane wyniki wnioskowania.
Aby skonfigurować wymagane zasoby, wykonaj te czynności:
- Ustaw zmienne środowiskowe na potrzeby tych ćwiczeń z programowania:
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 to polecenie:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab" - Użyj Secret Managera do przechowywania tokena dostępu Hugging Face:
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ącego 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 dostrojonego modelu:
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME} - Przyznaj 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 zapiszesz obraz kontenera. Jeśli w projekcie były już wcześniej używane wdrożenia z kodu źródłowego w Cloud Run, 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 wykonuje te czynności:
- Importuje model Llama z Hugging Face.
- Przeprowadza wnioskowanie zbiorcze na modelu. Zadanie wykorzystuje w tym procesie pojedynczy procesor graficzny L4.
- Zapisuje wyniki na dysku lokalnym. Dane te są zapisywane w Cloud Storage za pomocą zamontowanych woluminów.
Aby utworzyć zadanie Cloud Run i plik Dockerfile, wykonaj te czynności:
- Utwórz katalog na kod zadania 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 ze źródła i wdraża zadanie. Może to trochę potrwać.gcloud 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 danych wyjściowych ostatniego polecenia.gcloud run jobs execute inference-job --region $REGION --async
Potwierdzanie powodzenia
Aby sprawdzić, czy zadanie zostało wykonane, wyświetl logi zadania, tak jak w danych wyjściowych 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. - Aby wyświetlić zawartość w przeglądarce, kliknij Uwierzytelniony adres URL.
Plik powinien zawierać 4 prompty i ich wyniki.
6. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Zalecamy zapoznanie się z dokumentacją Cloud Run.
Omówione zagadnienia
- Jak przeprowadzać wnioskowanie wsadowe za pomocą GPU w Cloud Run Jobs
- Jak zapisywać dane w Cloud Storage za pomocą montowania woluminów Cloud Run
7. Czyszczenie danych
Aby usunąć zadanie Cloud Run, otwórz Cloud Run w konsoli Google Cloud pod adresem https://console.cloud.google.com/run i usuń zadanie inference-job.
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.