Оценка LLM
LM-Eval предоставляет единый фреймворк для тестирования LLM на широком спектре задач оценки. Сервис построен на основе EleutherAI's lm-evaluation-harness и Unitxt. Оператор TrustyAI реализует его через CRD LMEvalJob, что позволяет создавать и управлять заданиями оценки в кластере.
В этом документе описывается запуск задания оценки для LLM, развернутой как Kubernetes InferenceService (совместимый с OpenAI API).
Содержание
Предварительные требованияЗапуск задания оценкиСтатус ресурсаПолучение результатовДополнительно: офлайн-хранение и PVCНастройки spec для офлайн-режимаПеременные окружения для офлайн-кэшейПодготовка PVC с датасетами для офлайн-запусковПредварительные требования
- Установлен TrustyAI Operator (см. Установка 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). Если задан только size, 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: При состоянии state равном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
В режиме offline задание оценки не обращается к интернету; модели и датасеты должны читаться из 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 без доступа к внешней сети.
- Создайте реальное задание оценки с