Развертывание модели ИИ на 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. Ключ API потребуется для загрузки контейнера NIM.
  • Видеокарты NVIDIA: Одна из перечисленных ниже видеокарт должна подойти ( Обратите внимание, что вы можете выполнить следующие шаги , чтобы запросить увеличение квоты, если у вас недостаточно видеокарт ).
  • Дополнительно - Google Cloud 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 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. Что дальше?

Для получения более подробной информации ознакомьтесь со следующими статьями: