Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы отправите задание RayJob, которое запускает пакетный инференс vLLM в автономном режиме с использованием адаптера LoRA, созданного в примере обучения LLM. Задача считывает тестовый сплит Viggo и адаптер LoRA из Хранилище BLOB-объектов Azure, генерирует предсказания на одном GPU и загружает результаты.
Important
Программное обеспечение с открытым кодом упоминается во всей документации и примерах AKS. Программное обеспечение, которое вы развертываете, не подпадает под действие соглашений об уровне обслуживания AKS, ограниченной гарантии и поддержки Azure. При использовании технологии с открытым исходным кодом вместе с AKS ознакомьтесь с вариантами поддержки, доступными от соответствующих сообществ и обслуживающих проектов для разработки плана.
Корпорация Майкрософт несет ответственность за создание пакетов с открытым кодом, которые мы развертываем в AKS. Эта ответственность включает полное управление процессами сборки, сканирования, подписывания, проверки и исправления ошибок, а также контроль над двоичными файлами в образах контейнеров. Для получения дополнительной информации см. Управление уязвимостями в AKS и Покрытие поддержки AKS.
Предварительные условия
- Инфраструктура, развернутая в соответствии с разделом «Развертывание инфраструктуры для Ray и Kueue в AKS».
- Очереди Kueue, настроенные в соответствии с Настройка очередей Kueue для рабочих нагрузок Ray в AKS.
- По крайней мере один GPU A100, доступный в кластере.
- Обучение LLM завершено в соответствии с обучением LLM с помощью Ray в AKS — адаптер LoRA должен находиться в хранилище BLOB-объектов по адресу
llm-pipeline/lora/. -
envsubstустановлен (gettextпакет в Linux,brew install gettextв macOS).
Настройка переменных среды
Перейдите к примеру пакетного вывода в клонированном репозитории и настройте необходимые переменные среды:
cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/batch-inference
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example
Note
Если вы настроили очереди групп (параметр B), установите export QUEUE_NAME=team-a или export QUEUE_NAME=team-b перед выполнением source env.example.
QUEUE_NAME=default по умолчанию работает только с конфигурацией с одной очередью (вариант A).
Отправка рабочей нагрузки
Отправьте RayJob для пакетного вывода:
./submit.sh
Скрипт создает ConfigMap из скрипта вывода, отрисовывает шаблон манифеста с помощью envsubstи применяет его. Kueue признает задание, если 1 GPU доступен в настроенной очереди.
Tip
Запустите ./submit.sh --dry-run, чтобы проверить сгенерированный манифест, не применяя его к кластеру.
Мониторинг прогресса
Найдите и экспортируйте имя задания, если вы находитесь в новой оболочке:
export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)
Отслеживайте состояние RayJob и допуск Kueue:
kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w
Ожидаемые выходные данные после завершения задания:
NAME JOB STATUS DEPLOYMENT STATUS START TIME END TIME AGE
batch-inference-xxxxxxxxxx SUCCEEDED Complete 2026-01-01T00:00:00Z 2026-01-01T00:09:00Z 9m
NAME QUEUE RESERVED IN ADMITTED FINISHED AGE
rayjob-batch-inference-xxxxxxxxxx-xxxxx default cluster-queue True True 9m
Хвост журналов рабочих ролей:
kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100
Проверка результатов
Список файлов прогнозов в хранилище BLOB-объектов:
az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
Ожидаемые выходные данные:
Name Blob Type Blob Tier Length Content Type
--------------------------------------------------- ----------- ----------- -------- ------------------------
inference/<job-name>/metrics.json BlockBlob Hot 128 application/octet-stream
inference/<job-name>/predictions.jsonl BlockBlob Hot 411777 application/octet-stream
Скачайте и проверьте прогнозы:
az storage blob download -c llm-pipeline \
-n "inference/${JOB_NAME}/predictions.jsonl" \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
--file /tmp/predictions.jsonl
head -1 /tmp/predictions.jsonl | python3 -m json.tool
Ожидаемые выходные данные:
{
"input": "I'm wondering, have you played any games you found genuinely shocking?",
"expected": "request(specifier[shocking])",
"generated": "request_explanation"
}
Справочник по конфигурации
| Переменная | По умолчанию | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(обязательно) | Учетная запись хранения из модуля 1 |
JOB_NAME |
batch-inference-<timestamp> |
Уникальное имя RayJob |
QUEUE_NAME |
default |
Имя Kueue LocalQueue |
LLM_DATA_CONTAINER |
llm-pipeline |
Контейнер BLOB-объектов с данными теста viggo |
LLM_LORA_CONTAINER |
llm-pipeline |
BLOB-контейнер с адаптерами LoRA |
CONFIGMAP_NAME |
batch-inference-scripts |
Имя ConfigMap, содержащего скрипт инференса |
Очистите ресурсы
Удалите RayJob и его ConfigMap:
kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}
Чтобы удалить всю инфраструктуру, см. раздел "Развертывание инфраструктуры— очистка ресурсов".