Развертывание модели ИИ на GKE с помощью NVIDIA NIM

1. Введение

В этом практическом практикуме вы научитесь развертывать и управлять контейнерной моделью ИИ на базе Google Kubernetes Engine (GKE) с использованием возможностей микросервисов NVIDIA NIM™ .

Это руководство предназначено для разработчиков и специалистов по анализу данных, которые хотят:

  • Упростите развертывание логического вывода ИИ: узнайте, как использовать готовую NIM для более быстрого и простого развертывания моделей ИИ в рабочей среде GKE.
  • Оптимизируйте производительность на графических процессорах NVIDIA: получите практический опыт развертывания NIM, использующих NVIDIA TensorRT для оптимизированного вывода на графических процессорах в вашем кластере GKE.
  • Масштабирование рабочих нагрузок вывода ИИ: узнайте, как масштабировать развертывание NIM в зависимости от спроса, используя Kubernetes для автоматического масштабирования и управления вычислительными ресурсами.

2. Чему вы научитесь

К концу этого урока у вас будет опыт работы с:

  1. Развертывание NIM на GKE: разверните предварительно созданный NVIDIA NIM для различных задач вывода на вашем кластере GKE.
  2. Управление развертываниями NIM: используйте команды kubectl для управления, мониторинга и масштабирования развернутого NIM.
  3. Масштабирование рабочих нагрузок вывода: используйте функции Kubernetes для автоматического масштабирования развертываний NIM на основе требований трафика.

3. Изучите компоненты

Графические процессоры в Google Kubernetes Engine (GKE)

Графические процессоры позволяют ускорить выполнение определённых рабочих нагрузок на узлах, таких как машинное обучение и обработка данных. GKE предоставляет ряд вариантов конфигурации узлов, включая типы машин с графическими процессорами NVIDIA H100, L4 и A100 .

NVIDIA NIM

NVIDIA NIM — это набор простых в использовании микросервисов вывода, которые ускоряют развертывание базовых моделей в любом облаке или центре обработки данных и помогают обеспечить безопасность ваших данных.

NVIDIA AI Enterprise

NVIDIA AI Enterprise — это комплексная облачная программная платформа, которая ускоряет процессы обработки данных и оптимизирует разработку и развертывание производственных вторых пилотов и других приложений генеративного ИИ. Доступно через GCP Marketplace .

4. Предпосылки

  • Проект: Проект Google Cloud с включенным биллингом.
  • Разрешения: достаточные разрешения для создания кластеров GKE и других связанных ресурсов.
  • Helm : Helm — это менеджер пакетов для Kubernetes.
  • NVIDIA GPU Operator : дополнение Kubernetes, которое автоматизирует управление всеми программными компонентами NVIDIA, необходимыми для предоставления графического процессора.
  • Ключ API NVIDIA: перейдите по этой ссылке и следуйте инструкциям по созданию учётной записи и генерации ключа API. Для загрузки контейнера NIM потребуется ключ API.
  • Графические процессоры NVIDIA: один из перечисленных ниже графических процессоров должен подойти ( обратите внимание, что вы можете выполнить следующие шаги , чтобы запросить увеличение квоты, если у вас недостаточно графических процессоров ).
  • Необязательно - GCloud SDK :** Если вы не используете Cloud Shell на портале GCP, убедитесь, что у вас установлен и настроен Google Cloud SDK.
  • Необязательно - kubectl :** Если вы не используете Cloud Shell в портале GCP, убедитесь, что у вас установлен и настроен инструмент командной строки kubectl.

5. Создайте кластер GKE с графическими процессорами.

  1. Откройте Cloud Shell или ваш терминал.
  2. Укажите следующие параметры:
    export PROJECT_ID=<YOUR PROJECT ID>
    export REGION=<YOUR REGION>
    export ZONE=<YOUR ZONE>
    export CLUSTER_NAME=nim-demo
    export NODE_POOL_MACHINE_TYPE=g2-standard-16
    export CLUSTER_MACHINE_TYPE=e2-standard-4
    export GPU_TYPE=nvidia-l4
    export GPU_COUNT=1
    

Обратите внимание, что вам, возможно, придется изменить значения NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE и GPU_TYPE в зависимости от типа вычислительного экземпляра и используемых графических процессоров.

  1. Создать кластер GKE:
    gcloud container clusters create ${CLUSTER_NAME} \
        --project=${PROJECT_ID} \
        --location=${ZONE} \
        --release-channel=rapid \
        --machine-type=${CLUSTER_MACHINE_TYPE} \
        --num-nodes=1
    
  2. Создать пул узлов GPU:
    gcloud container node-pools create gpupool \
        --accelerator type=${GPU_TYPE},count=${GPU_COUNT},gpu-driver-version=latest \
        --project=${PROJECT_ID} \
        --location=${ZONE} \
        --cluster=${CLUSTER_NAME} \
        --machine-type=${NODE_POOL_MACHINE_TYPE} \
        --num-nodes=1
    

6. Настройте API-ключ NVIDIA NGC

Ключ API NGC позволяет вам загружать пользовательские изображения из NVIDIA NGC. Чтобы указать ключ:

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

Это ключ, который был сгенерирован в рамках предварительных условий.

7. Развертывание и тестирование NVIDIA NIM

  1. Получить диаграмму NIM LLM Helm:
    helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY
    
  2. Создайте пространство имен NIM:
    kubectl create namespace nim
    
  3. Настроить секреты:
    kubectl create secret docker-registry registry-secret --docker-server=nvcr.io --docker-username='$oauthtoken'     --docker-password=$NGC_CLI_API_KEY -n nim
    
    kubectl create secret generic ngc-api --from-literal=NGC_API_KEY=$NGC_CLI_API_KEY -n nim
    
  4. Настройка конфигурации NIM:
    cat <<EOF > nim_custom_value.yaml
    image:
      repository: "nvcr.io/nim/meta/llama3-8b-instruct" # container location
      tag: 1.0.0 # NIM version you want to deploy
    model:
      ngcAPISecret: ngc-api  # name of a secret in the cluster that includes a key named NGC_CLI_API_KEY and is an NGC API key
    persistence:
      enabled: true
    imagePullSecrets:
      -   name: registry-secret # name of a secret used to pull nvcr.io images, see https://kubernetes.io/docs/tasks/    configure-pod-container/pull-image-private-registry/
    EOF
    
  5. Запуск развертывания NIM:
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    Убедитесь, что модуль NIM запущен:
    kubectl get pods -n nim
    
  6. Тестирование развертывания NIM:
    Убедившись, что наша служба NIM успешно развернута, мы можем отправлять запросы на вывод данных, чтобы увидеть, какой тип обратной связи мы получим от службы NIM. Для этого мы включаем переадресацию портов на службе, чтобы иметь доступ к NIM с нашего локального хоста через порт 8000:
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    Далее мы можем открыть другой терминал или вкладку в облачной оболочке и попробовать следующий запрос:
    curl -X 'POST' \
      'http://localhost:8000/v1/chat/completions' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "messages": [
        {
          "content": "You are a polite and respectful chatbot helping people plan a vacation.",
          "role": "system"
        },
        {
          "content": "What should I do for a 4 day vacation in Spain?",
          "role": "user"
        }
      ],
      "model": "meta/llama3-8b-instruct",
      "max_tokens": 128,
      "top_p": 1,
      "n": 1,
      "stream": false,
      "stop": "\n",
      "frequency_penalty": 0.0
    }'
    
    Если вы получили сообщение об успешном завершении чата от службы NIM, это означает, что служба работает так, как и ожидалось!

8. Уборка

Удалить кластер GKE:

gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE

9. Что дальше?

Более подробную информацию можно найти в следующих статьях: