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 : 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 с графическими процессорами.
- Откройте 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 в зависимости от типа вычислительного экземпляра и используемых графических процессоров.
- Создать кластер GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1
- Создать пул узлов 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
- Получить диаграмму 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
- Создайте пространство имен 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 nim
kubectl 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. Что дальше?
Более подробную информацию можно найти в следующих статьях: