Развертывание ИИ-модели в 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 – это менеджер пакетов для Kubernetes.
  • Оператор NVIDIA GPU – дополнение 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 в зависимости от того, какой тип экземпляра Compute Engine и графических процессоров вы используете.

  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. Создайте пул узлов с графическим процессором:
    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. Как настроить ключ NVIDIA NGC API

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

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

Это ключ, сгенерированный на этапе подготовки.

7. Как развернуть и протестировать NVIDIA NIM

  1. Получите диаграмму Helm для 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. Дальнейшие действия

Подробную информацию вы найдете в этих статьях: