Код содержит манифесты для построения лаборатории подбора инфраструктуры для LLM. Подробнее узнать можно из доклада конференции Я про бэкенд.
С помощью terraform вы сможете воссоздать инфраструктуру в k8s для тестирования различных GPU (например в облаке Selectel).
Далее в блоке kubernetes вы найдете манифесты, необходимые для воссоздания лаборатории.
Полная установка также доступна в скрипте. Предварительно настройте окружение (см. следующий пункт) и выполните команду.
./infra-install.sh allДанная инструкция подходит к облаку Selectel, но концептуально можно воссоздать в любом другом облаке.
- Скопируйте
.envrcв.envrc.local:cp terraform/.envrc terraform/.envrc.local
- Заполните все переменные в
.envrc.localсвоими значениями (см. шаблон в.envrc). - Примените переменные окружения:
cd terraform source .envrc.local
-
flavor_id для GPU-нод задаются в файле
vars.tfvars:gpu_az_flavors = { a = ["3041"] b = ["3800", "3103", "3073"] c = [] }
Ключ — буква зоны доступности (a, b, c), значение — список flavor_id.
-
Найти нужные flavor_id можно через OpenStack CLI:
openstack flavor list --long | grep 5000(или подставьте нужное название/тип GPU)
-
Дополнительно в
vars.tfvarsможно задать другие параметры инфраструктуры:sfs_size = 1024 # размер NFS хранилища в GB k8s_version = "v1.26.1" # версия Kubernetes
- Проверьте план:
terraform plan -var-file=vars.tfvars
- Примените изменения:
terraform apply -var-file=vars.tfvars
- Будет создан кластер Kubernetes с GPU-нодами по flavor_id из
vars.tfvars. - Также создастся SFS (NFS) для шаринга данных между подами.
- kubeconfig для доступа к кластеру будет выведен в output (
terraform output kubeconfig). - Адрес SFS — в output
sfs_address.
После создания инфраструктуры с помощью Terraform, необходимо настроить кластер Kubernetes для работы с GPU и запуска тестов производительности.
Сохраните kubeconfig из output Terraform:
terraform output kubeconfig > ~/.kube/configПроверьте доступ к кластеру:
kubectl get nodesДобавьте необходимые чарты
helm repo add nvidia https://nvidia.github.io/gpu-operator
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add argo https://argoproj.github.io/argo-helm
helm repo add vllm https://vllm-project.github.io/production-stack
helm repo update
GPU Operator устанавливает драйверы NVIDIA и необходимые компоненты для работы с GPU:
helm upgrade --install gpu-operator -n gpu-operator --create-namespace nvidia/gpu-operator -f kubernetes/1-gpu-operator/values.yamlДождитесь установки всех компонентов:
kubectl get pods -n gpu-operatorПримените PV и PVC для NFS, сгенерированные Terraform:
kubectl apply -f kubernetes/nfs-pv-pvc.yamlСоздайте секрет с токеном доступа к Hugging Face:
kubectl create secret generic hf-token-secret --from-literal=hf-token='ваш_токен_hugging_face'Установите vLLM stack с настройками для выбранных GPU:
helm upgrade --install vllm vllm/vllm-stack -f kubernetes/3-vllm/production-stack-values.yamlВ файле production-stack-values.yaml можно настроить параметры запуска моделей, распределение GPU и другие настройки.
Важно: для каждой модели необходимо задать размеры (ресурсы) нод/запросы пода в values vLLM. В kubernetes/3-vllm/production-stack-values.yaml укажите для соответствующего профиля модели:
requestCPU— сколько CPU запрашивает подrequestMemory— объём памяти, например"8Gi"requestGPU— количество GPU, например1
Эти параметры определяют необходимый размер ноды и планирование на GPU. Подбирайте значения под конкретную модель, иначе под может не уместиться на доступные ноды или не получит требуемые ресурсы.
Установите Argo Workflows для управления тестами производительности:
helm upgrade --install argo-workflows argo/argo-workflows -n argo --create-namespace -f kubernetes/4-argoworkflows/values.yamlДля доступа к UI Argo Workflows:
kubectl port-forward svc/argo-workflows-server -n argo 2746:2746Затем откройте в браузере: http://localhost:2746
Для получения токена доступа:
kubectl -n argo create token argo-workflows-serverТакже добавьте префикс Bearer к токену при авторизации в UI Argo Workflows.
Примените шаблоны для запуска тестов genai-perf (шаблоны позволяют использовать разные режимы genai):
kubectl apply -f kubernetes/5-genai-perf/model-test/templatesТакже вы можете добавить примеры кастомных промптов через configmap
kubectl apply -f kubernetes/5-genai-perf/model-test/configmapsДля конфигурации genai perf стоит ознакомиться с документацией.
kubectl create -f kubernetes/5-genai-perf/model-test/genai-perf-rtx4090-analyze-concurrencyТестирование на 1 и 5 rps
kubectl create -f kubernetes/5-genai-perf/model-test/genai-perf-rtx4090-profile-rate-1.yaml
kubectl create -f kubernetes/5-genai-perf/model-test/genai-perf-rtx4090-profile-rate-5.yamlТестирование с данными из configmap
kubectl create -f kubernetes/5-genai-perf/model-test/genai-perf-rtx4090-profile-with-data.yamlОтслеживайте статус выполнения через Argo UI или командой:
kubectl get workflowsДля просмотра логов конкретного workflow:
kubectl logs -l workflows.argoproj.io/workflow=имя_workflowУстановите JupyterLab для доступа к результатам тестов:
kubectl apply -f kubernetes/2-jupyterlab/jupyterlab-deployment.yamlДля доступа к JupyterLab:
kubectl port-forward svc/jupyterlab 8888:8888Результаты тестов genai-perf сохраняются в NFS хранилище и доступны через JupyterLab. Путь к результатам:
/work/genaiperf-{модель}-{gpu}/
В этой директории можно найти:
- Графики производительности
- Логи тестов
- Метрики и статистика
Также в Argoworkflows можно просматривать и сравнивать разные запуски тестов.
Для тестирования новых моделей создайте новые workflow-файлы на основе существующих шаблонов, изменив параметры:
- Название модели
- URL сервиса
- Тип GPU
- Параметры тестов
Шаблоны в директории kubernetes/5-genai-perf/templates/ можно модифицировать для добавления новых параметров или изменения логики тестирования.

