Оценка LLM
LM-Eval предоставляет единый фреймворк для тестирования LLM на широком спектре задач оценки. Сервис построен на основе EleutherAI's lm-evaluation-harness и Unitxt. Оператор TrustyAI реализует его через CRD LMEvalJob, что позволяет создавать и управлять заданиями оценки в кластере.
В этом документе описывается запуск задания оценки для LLM, развернутой как Kubernetes InferenceService (совместимый с OpenAI API).
Содержание
Предварительные требованияЗапуск задания оценкиСтатус ресурсаПолучение результатовДополнительно: офлайн-хранение и PVCНастройки spec для офлайн-режимаПеременные окружения для офлайн-кэшейПодготовка PVC с датасетами для офлайн-запусковПредварительные требования
- Установлен TrustyAI Operator (см. Install TrustyAI).
- LLM развернута как InferenceService в целевом namespace (например, vLLM или Hugging Face runtime).
- Для задач или токенизаторов, требующих загрузки из интернета (например, Hugging Face): allowOnline должен быть включён в LMEvalJob, и кластер должен это разрешать (например,
permitOnline: allowв конфиге TrustyAI eval DataScienceCluster). Включение онлайн-доступа имеет последствия для безопасности; см. документацию Red Hat.
Запуск задания оценки
Создайте кастомный ресурс LMEvalJob, указывающий на InferenceService и задающий задачи оценки. Оператор запускает задание в pod; после завершения результаты записываются в status.results.
Пример: оценка LLM в кластере с задачей arc_easy (имя задачи lm-evaluation-harness). Модель доступна через URL сервиса предсказаний; токенизатор загружается из Hugging Face (требует allowOnline: true и разрешения кластера).
-
Тип модели (
model)local-completionsилиlocal-chat-completionsдля сервера, совместимого с OpenAI API (например, InferenceService predictor).- Они соответствуют эндпоинтам OpenAI:
local-completions—/v1/completionslocal-chat-completions—/v1/chat/completions
- modelArgs.base_url должен использовать тот же путь (например,
xxx/v1/completionsилиxxx/v1/chat/completions).
-
Аргументы модели (
modelArgs)base_url: URL предиктора с указанием пути/v1/completionsдляlocal-completions/v1/chat/completionsдляlocal-chat-completions
model: обычно совпадает с именем InferenceService.tokenizer: ID модели Hugging Face, используемый для токенизации приtokenized_requests= true.- Другие параметры (например,
num_concurrent,max_retries,batch_size) соответствуют документации lm-evaluation-harness.
-
Задачи (
taskList.taskNames)- Список имён задач lm-evaluation-harness (например,
arc_easy,mmlu). - Полный набор поддерживаемых задач и шаблонов определён в lm-evaluation-harness (Task Guide / available tasks).
- Альтернативно, используйте
taskRecipesс Unitxt карточками/шаблонами для кастомных задач.
- Список имён задач lm-evaluation-harness (например,
-
Онлайн-режим и выполнение кода
allowOnline: приtrueзадание может загружать датасеты и токенизаторы из интернета (например, Hugging Face); требует разрешения на уровне кластера.allowCodeExecution: приtrueзадание может выполнять код из загруженных ресурсов; по умолчаниюfalse, включайте только при необходимости и разрешении.
-
Выводы и ограничения
outputs.pvcManaged: создаёт PVC, управляемый оператором, для хранения результатов задания (размер, например100Mi). Если задан только размер, PVC использует StorageClass по умолчанию кластера; если StorageClass по умолчанию отсутствует, PVC остаётся в состоянии Pending и хранилище не выделяется. Альтернативно, используйтеoutputs.pvcNameдля привязки к существующему PVC.limit: необязательное ограничение на количество примеров (например,"2"для быстрого прогона).logSamples: приtrueсохраняет входные данные и результаты модели для каждого запроса для последующего анализа.
Статус ресурса
Подресурс LMEvalJob status отображает состояние задания и, по завершении, результаты оценки.
status.state: Текущее состояние задания:New,Scheduled,Running,Complete,CancelledилиSuspended. ОжидайтеCompleteперед чтением результатов.status.reason: Устанавливается при завершении задания (например,Succeeded,Failed).status.results: При состоянииCompleteсодержит результаты оценки в виде JSON-строки (метрики по задачам/рецептам).status.message: Читаемое сообщение; status.podName — имя pod с заданием.
Трафик или чтение результатов должны основываться на status.state == Complete (и, если применимо, status.reason == Succeeded).
Получение результатов
Когда status.state равно Complete, результаты доступны в status.results (JSON-строка). Пример:
Пример структуры результата для задачи arc_easy (ключевые поля; полный вывод включает configs, config, n-shot, n-samples и информацию об окружении):
Пример результатов (arc_easy)
Дополнительно: офлайн-хранение и PVC
В офлайн режиме задание оценки не обращается к интернету; модели и датасеты должны читаться с PVC (или из образа). Используйте это, если кластер запрещает онлайн-доступ или для изолированных сред.
Настройки spec для офлайн-режима
-
Поля задания
allowOnline: false: задание не загружает данные из интернета.offline.storage.pvcName: имя существующего PVC. Оператор монтирует этот PVC в pod задания; задание загружает модели и датасеты из путей внутри этого монтирования.
-
Пути в spec
- Загрузчики моделей/датасетов должны указывать на монтируемый PVC.
- Для моделей Hugging Face настройте
modelArgsтак, чтобы путь модели находился внутри монтирования PVC (например,/opt/app-root/src/hf_home/<model-dir>). - Для
taskRecipesили кастомных Unitxt карточек, загружающих с диска, задайте пути загрузчиков внутри того же монтирования.
Переменные окружения для офлайн-кэшей
Задайте переменные окружения в spec.pod.container.env, чтобы загрузчики использовали PVC как кэш/хранилище. Для надёжности укажите все следующие переменные на одну и ту же директорию внутри монтирования PVC (например, /opt/app-root/src/hf_home):
HF_DATASETS_CACHE: директория кэша для Hugging Facedatasets.HF_HOME: домашняя директория Hugging Face, используется токенизаторами и другими ресурсами.TRANSFORMERS_CACHE: директория кэша для моделей и токенизаторовtransformers.
Пример фрагмента для офлайн-режима:
Используйте outputs.pvcName или outputs.pvcManaged только для хранения результатов оценки; offline.storage.pvcName предназначен для входных данных (моделей и датасетов).
Подготовка PVC с датасетами для офлайн-запусков
В офлайн-режиме датасет (и файлы токенизатора/модели при использовании HF) должны уже существовать в PVC. Задание не загружает их из сети.
Практический способ подготовки PVC:
-
Онлайн-запуск для прогрева
- Создайте LMEvalJob с
allowOnline: true. - Смонтируйте целевой PVC (тот, что будет использоваться в офлайн-режиме), например через
offline.storage.pvcNameили дополнительный том. - Позвольте этому заданию загрузить необходимые датасеты/токенизаторы/модели, чтобы они сохранились в путях PVC, используемых переменными
HF_DATASETS_CACHE,HF_HOMEиTRANSFORMERS_CACHE, а также в конфигурируемыхmodelArgs/ загрузчиках задач.
- Создайте LMEvalJob с
-
Офлайн-запуск оценки
- Создайте реальное задание оценки с
allowOnline: falseиoffline.storage.pvcName, указывающим на тот же PVC. - Теперь задание читает все модели и датасеты с PVC без доступа к внешней сети.
- Создайте реальное задание оценки с