Данный репозиторий включает в себя примеры использования terraform для деплоя Managed Kubernetes с GPU нодами и с автоскейлингом. А также примеры настройки GPU нод с помощью GPU-operator
если вы хотите использовать зеркало, создайте отдельный конфигурационный файл ~/.terraformrc и добавьте в него блок:
provider_installation {
network_mirror {
url = "https://mirror.selectel.ru/3rd-party/terraform-registry/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
Подробнее о настройках зеркал в инструкции CLI Configuration File документации HashiCorp.
Если вы хотите хранить terraform state в selectel s3, то нужно создать backend.tfvars
и указать там
access_key = <s3_access_key>
secret_key = <secret_key>
Также создайте terraform.tfvars
файл, где укажите
# Данные для провайдера Selectel
# Задаются в личном кабинете my.selectel.ru
selectel_domain_name =
# Данные для провайдера Openstack
project_id =
selectel_user_name =
selectel_user_password =
cd terraform
terraform init -reconfigure -backend-config=backend.tfvars
terraform plan
terraform apply
Установите prometheus stack и gpu operator с нужными values
cd kubernetes
helm upgrade --install prometheus-stack prometheus-community/kube-prometheus-stack -f prometheus-stack/values.yaml
helm upgrade --install gpu-operator -n gpu-operator --create-namespace nvidia/gpu-operator -f gpu-operator/values.yaml
Если вы используете ноды с GPU архитектурой Ampere и выше, после установки GPU оператор вы можете включить поддержку MIG В values gpu operator добавим следующие поля
mig:
strategy: single
migManager:
enabled: true
config:
name: "default-mig-parted-config"
default: "all-disabled"
Далее после установки нового релиза вы можете залейблить ноду, где требуется конфигурация MIG
kubectl label node <node-name> nvidia.com/mig.config=all-2g.10gb --overwrite
Установим инференс с chatpgt2
kubectl apply -f common
Пробросим порт и перейдем в браузере по адресу localhost:8000/docs
kubectl port-forward svc/vllm-openai-svc 8000:8000 --address='0.0.0.0'
Поставим prometheus-adapter с нужной кастомной метрикой
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter -f vllm/prometheus-adapter.yaml
установим vllm с loadbalancer и публичным ip адресом
kubectl apply -f ha
Полезная информация про мониторинг vllm здесь Заимпортим в grafana дашборд И подадим нагрузку с помощью genai perf
docker run --net host -it -v /tmp:/workspace nvcr.io/nvidia/tritonserver:24.05-py3-sdk
genai-perf -m gpt2 --service-kind openai --endpoint v1/completions --concurrency 50 --url <loadbalancer_ip>:8000 --endpoint-type completions --num-prompts 100 --random-seed 123 --synthetic-input-tokens-mean 20 --synthetic-input-tokens-stddev 0 --tokenizer hf-internal-testing/llama-tokenizer --measurement-interval 1000 -p 100000
Если менять --concurrency от 50 до 100, то при этом average задержка будет варьироваться от 200мс до 400
В файле artifacts/gpt2-openai-completions-concurrency50/llm_inputs.json хранятся сгенерированные промты