−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS
Начать

Песочница для оценки LLM: 1 000 решений модели примерно за цент

Чтобы оценить модель на задачах по программированию, нужно выполнить тысячи программ, которые никто не писал руками. Запускайте их в одноразовых песочницах на микро-VM, а не на своём ноутбуке: посекундная оплата и честно о пропускной способности и лимите CPU.

У бенчмарков по коду есть грязный секрет: чтобы оценить модель, нужно запустить то, что она написала. Прогон pass@k на несколько сотен задач с десятью решениями на каждую — это тысячи свежесгенерированных программ, а вы бы ни одну из них не сделали curl | bash от незнакомца.

Большинство начинает на ноутбуке с subprocess.run и таймаутом. Это работает, пока какое-нибудь решение не запишет файл на 40 GB, не размножит процессы до остановки машины или тихо не прочитает ваш домашний каталог. Решение не в более хитром таймауте. Решение — запускать решения там, где вам не жалко.

Схема, которая работает

Песочница — это микро-VM Firecracker с Python 3.12, Node.js 22 и bash, которая стартует примерно за секунду и удаляется, когда вы закончили. Исходящий интернет работает, входящий нет, и ничего вашего внутри нет.

Ловушка — обращаться с песочницей как с вызовом функции. Каждая оплачивается минимум за 60 секунд и стартует секунду, так что одна песочница на решение — медленно и расточительно. Вместо этого поместите харнес внутрь:

from eqvps import Sandbox

with Sandbox.create(tariff="standard", ttl=4 * 3600) as sb:
    sb.upload("/root/harness.py", open("harness.py").read())
    sb.upload("/root/samples.jsonl", open("slice_03.jsonl").read())
    task = sb.exec("python3 /root/harness.py /root/samples.jsonl > /root/results.jsonl",
                   background=True)
    task.wait(poll_interval=10)
    results = sb.download_text("/root/results.jsonl")

Внутри harness.py запускает каждое решение в подпроцессе со своим коротким таймаутом и записывает pass, fail или timeout. Одно буйное решение убивает свой подпроцесс, а не прогон. Если решению удалось сломать саму песочницу, вы теряете один кусок, пересоздаёте песочницу и продолжаете.

Файлы — до 5 MB за одну передачу, так что делите большие датасеты на куски — для параллельности это и так нужно.

Пропускная способность, честно

Аккаунт может держать до 20 песочниц, но одновременно выполняются 2 команды. Фоновая задача считается, пока работает. Так что быстрая оценка выглядит как две песочницы, каждая из которых в фоне перемалывает свой кусок, а не двадцать песочниц, дерущихся за два слота.

Для типичных бенчмарков по коду этого хватает с лихвой: большинство решений выполняются меньше чем за секунду, и одна песочница проходит тысячи за час. Если нужно оценивать много моделей сразу на огромном наборе, вы упрётесь в потолок. Тогда лучший инструмент — VPS с вашей собственной изоляцией.

Правило CPU, о котором стоит знать

Песочницы рассчитаны на пиковую нагрузку. Песочница, загруженная больше чем на 90% CPU дольше 15 минут, считается злоупотреблением — временная песочница останавливается. Обычные прогоны оценки, где быстрые запуски чередуются с учётом результатов, к этому не приближаются. Бенчмарк, который часами жжёт CPU на полную (сборка большого проекта на каждое решение, численные стресс-тесты), — приблизится. Для такого берите VPS помесячно: тариф AI agent даёт 4 vCPU и 4 GB за $10.

Сколько стоит прогон

Вы платите посекундно за vCPU и RAM тарифа, минимум 60 секунд, с предоплаченного баланса.

НагрузкаТарифВремяПримерная стоимость
1 000 коротких решений на Pythonsmall (0.5 vCPU, 1 GB)~20 мин$0.011
5 000 решений, numpy разрешёнstandard (1 vCPU, 2 GB)~2 ч$0.13
Сборка + тесты на каждое решениеplus (2 vCPU, 4 GB)~3 ч$0.40

Вызовы модели, которые генерируют эти решения, обойдутся дороже выполнения — обычно на порядок.

Ключи и воспроизводимость

Если харнес вызывает API модели изнутри песочницы — скажем, для оценки в стиле LLM-as-judge, — передайте ключ переменной окружения песочницы. Значения хранятся зашифрованными, не логируются, а API возвращает только имена переменных.

Для воспроизводимости закрепите версии пакетов в харнесе и записывайте тариф песочницы вместе с результатами. Каждая песочница стартует с одного и того же чистого образа, а это убирает из ваших цифр переменную «на моём ноутбуке работало». Честно говоря, ради одного этого стоит переходить.

Начните со страницы песочниц и документации по песочницам. Новые аккаунты получают $1 времени песочниц — этого хватит на первый прогон оценки из нескольких тысяч решений на тарифе small. Фоновые задачи и передачу файлов описывает справочник SDK, а полная таблица квот — в разделе лимиты и оплата песочниц.

По теме: песочница для ИИ-агентов и первая задача агента в песочнице.

Готовы развернуть? Оплата криптой, без KYC — сервер за минуту.

Развернуть →

Частые вопросы

Зачем вообще оценке песочница?

Потому что вы выполняете тысячи программ, написанных моделью. Большинство безвредны, некоторые зацикливаются, а единицы удаляют файлы или открывают сетевые соединения. На вашей рабочей машине это риск для данных; в песочнице — просто проваленное решение.

Создавать ли одну песочницу на одно решение?

Обычно нет. Создание песочницы занимает около секунды и оплачивается минимум за 60 секунд, так что песочница на каждое решение тратит и то и другое. Запускайте внутри одной песочницы харнес, который выполняет много решений, каждое со своим таймаутом, и пересоздавайте песочницу между моделями или когда что-то её сломало.

Насколько быстро можно идти?

Аккаунт выполняет не больше 2 команд одновременно в пределах до 20 песочниц. Практичная схема — несколько песочниц, в каждой ваш харнес работает фоновой задачей и проходит свой кусок датасета.

Можно ли гонять долгий бенчмарк часами?

Фоновой задачей — да, до конца жизни песочницы (24 часа у временной). Но песочница, загруженная по CPU на полную больше 15 минут, считается злоупотреблением. Пиковые прогоны оценки — нормально; многочасовые ровные вычисления место на VPS.

Может ли песочница обращаться к API моей модели?

Исходящий интернет открыт, так что да. Передайте API-ключ переменной окружения песочницы — он хранится зашифрованным и никогда не возвращается API, — а не вставляйте его в сгенерированный код.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.