1. Введение
В этой практической работе рассказывается, как развернуть контейнерную модель ИИ в Google Kubernetes Engine (GKE) и управлять ею с помощью микросервисов NVIDIA NIM™.
Это руководство предназначено для разработчиков и специалистов по обработке данных, которые хотят:
- Упростите развертывание ИИ-моделей. Узнайте, как использовать готовый NIM для быстрого и простого развертывания ИИ-моделей в GKE.
- Оптимизация производительности на графических процессорах NVIDIA. Получите практический опыт развертывания NIM, использующих NVIDIA TensorRT для оптимизированного вывода на графических процессорах в кластере GKE.
- Масштабирование рабочих нагрузок для логического вывода ИИ. Узнайте, как масштабировать развертывание NIM в зависимости от спроса, используя Kubernetes для автомасштабирования и управления вычислительными ресурсами.
2. Что вы узнаете
В этом руководстве вы научитесь:
- Развертывание NIM в GKE. Разверните предварительно созданный NVIDIA NIM для различных задач логического вывода в кластере GKE.
- Управление развертываниями NIM. Используйте команды kubectl, чтобы управлять развертываниями NIM, отслеживать их и масштабировать.
- Масштабирование рабочих нагрузок для логического вывода. Используйте функции 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 с графическими процессорами
- Откройте Cloud Shell или терминал.
- Укажите следующие параметры:
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 и графических процессоров вы используете.
- Создайте кластер GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1 - Создайте пул узлов с графическим процессором:
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
- Получите диаграмму 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 - Создайте пространство имен NIM:
kubectl create namespace nim - Настройте секреты:
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 - Настройка конфигурации 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 - Запуск развертывания NIM:
Проверьте, запущен ли контейнер NIM:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nimkubectl get pods -n nim - Тестирование развертывания NIM.
После того как мы убедимся, что сервис NIM развернут успешно, мы можем отправлять запросы на вывод, чтобы узнать, какие отзывы мы получим от сервиса NIM. Для этого мы включим переадресацию портов в сервисе, чтобы получить доступ к NIM с локального хоста через порт 8000: Затем можно открыть ещё один терминал или вкладку в облачной оболочке и попробовать следующий запрос:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim Если вы получили ответ от сервиса 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 }'
8. Очистка
Удалите кластер GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. Дальнейшие действия
Подробную информацию вы найдете в этих статьях: