Как запустить пакетный вывод в заданиях Cloud Run

1. Введение

Обзор

В этом практическом занятии вы будете использовать задания Cloud Run для выполнения пакетного вывода результатов с помощью Llama 3.2-1b LLM и vLLM от Meta, работающих на базе GPU заданий Cloud Run. Результаты будут записываться непосредственно в Cloud Storage с помощью монтирования томов Cloud Run .

Что вы узнаете

  • Как выполнить пакетный вывод данных с использованием графического процессора в Cloud Run Jobs
  • Как записывать данные в Cloud Storage с помощью монтирования томов Cloud Run

2. Прежде чем начать

Включить API

Прежде чем начать использовать этот практический пример, активируйте следующие API, выполнив следующие команды:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

Квота графического процессора

Запросите увеличение квоты для поддерживаемого региона . Квота называется nvidia_l4_gpu_allocation_no_zonal_redundancy и находится в разделе Cloud Run Admin API.

Примечание: Если вы используете новый проект, между включением API и отображением квот на этой странице может пройти несколько минут.

Обнимающее лицо

В этом практическом задании используется модель, размещенная на платформе Hugging Face . Чтобы получить эту модель, запросите токен доступа пользователя Hugging Face с разрешением «Чтение». Вы будете ссылаться на него позже как YOUR_HF_TOKEN .

Для использования модели вам также потребуется согласиться с условиями использования: https://huggingface.co/meta-llama/Llama-3.2-1B

3. Настройка и требования

В этом разделе приведены инструкции по настройке следующих ресурсов:

  • Учетная запись службы IAM и связанные с ней разрешения IAM.
  • Секретный ключ Secret Manager для хранения вашего токена Hugging Face.
  • Для хранения результатов ваших вычислений используйте корзину в облачном хранилище.

Для настройки необходимых ресурсов выполните следующие шаги:

  1. Установите переменные среды для этого практического занятия:
    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}
    
  2. Создайте учетную запись службы, выполнив следующую команду:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
    
  3. Используйте Secret Manager для хранения токена доступа Hugging Face:
    gcloud secrets create $SECRET_ID \
          --replication-policy="automatic"
    
    printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
    
  4. Предоставьте своей учетной записи пользователя роль «Управитель секретов, ответственный за доступ к секретам»:
    gcloud secrets add-iam-policy-binding $SECRET_ID \
      --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role='roles/secretmanager.secretAccessor'
    
  5. Создайте хранилище (bucket) для размещения вашей доработанной модели:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
    
  6. Предоставьте вашей служебной учетной записи доступ к хранилищу:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
      --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role=roles/storage.objectAdmin
    
  7. Создайте репозиторий Artifact Registry для хранения образа контейнера. Если вы ранее использовали развертывание из источника Cloud Run в своем проекте, пропустите этот шаг.
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

4. Создайте задание Cloud Run.

В этом разделе вы создадите код, который будет выполнять следующие действия:

  • Импортирует модель ламы из Hugging Face.
  • Выполняет пакетный вывод данных для модели. В этом процессе используется один графический процессор L4.
  • Результаты записываются на локальный диск. Запись осуществляется в облачное хранилище через смонтированные тома.

Чтобы создать задание Cloud Run и Dockerfile, выполните следующие шаги:

  1. Создайте директорию для размещения кода, отвечающего за тонкую настройку:
    mkdir codelab-inference-job
    cd codelab-inference-job
    
  2. Создайте файл с именем 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.")
    
  3. Создайте 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. Развернуть и выполнить задание.

На этом шаге вы создадите задание Cloud Run с помощью команды развертывания источника Cloud Run, а затем выполните его. Этот шаг также включает в себя установку флагов монтирования тома Cloud Run для сохранения результатов.

  1. Создайте задание Cloud Run:
    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
    
    Эта команда собирает образ из исходного кода и развертывает задание. Выполнение займет некоторое время.
  2. Выполнить задание:
    gcloud run jobs execute inference-job --region $REGION --async
    
    Выполнение задачи займет несколько минут. Вы можете проверить ее статус, используя ссылку, указанную в выводе последней команды.

Подтверждение успеха

Чтобы убедиться в успешном выполнении задания, просмотрите журналы выполнения задания, как в выводе последней команды.

Проверьте результаты в хранилище Cloud Storage:

В консоли:

  1. Перейдите в раздел «Облачное хранилище» .
  2. Выберите сегмент, начинающийся с inference-codelab .
  3. Выберите output.txt .
  4. Нажмите «Аутентифицированный URL» , чтобы просмотреть содержимое в браузере.

Содержимое файла должно представлять собой четыре запроса и их результаты.

6. Поздравляем!

Поздравляем с завершением практического занятия!

Мы рекомендуем ознакомиться с документацией Cloud Run .

Что мы рассмотрели

  • Как выполнить пакетный вывод данных с использованием графического процессора в Cloud Run Jobs
  • Как записывать данные в Cloud Storage с помощью монтирования томов Cloud Run

7. Уборка

Чтобы удалить задание Cloud Run, перейдите в консоль Cloud Run по адресу https://console.cloud.google.com/run и удалите задание inference-job .

Чтобы удалить весь проект, перейдите в раздел «Управление ресурсами» , выберите проект, созданный на шаге 2, и нажмите «Удалить». Если вы удалите проект, вам потребуется изменить проекты в вашем Cloud SDK. Вы можете просмотреть список всех доступных проектов, выполнив gcloud projects list .