Технологии

«Без генерации токена ответа»: AWS развернула decision-модели на llama.cpp DLC в SageMaker AI

12 октября 2026 года AWS описала в блоге Machine Learning два пути обслуживания decision-моделей в Amazon SageMaker AI: штатный — через AWS Deep Learning Container для llama.cpp с OpenAI-совместимыми chat completions, и расширенный — через SemIf, который возвращает вероятности по объявленным вариантам без генерации токена ответа.

«Без генерации токена ответа»: AWS развернула decision-модели на llama.cpp DLC в SageMaker AI

Зачем нужны оценки вместо текста

Приложения, которые маршрутизируют запросы, выбирают действие агента или назначают исход по политике, часто нуждаются не в свободном тексте, а в оценках по фиксированному набору вариантов. Управляемый путь для таких квантизованных моделей AWS строит на CPU или GPU: контейнер находит первый файл.gguf в каталоге /opt/ml/model, отображает POST /invocations на llama-server и передаёт переменные SM_LLAMA_CPP_* в аргументы llama.cpp.

Штатному пути не нужны Dockerfile или репозиторий ECR: модель упаковывается как model.tar.gz в Amazon S3, а опубликованный образ DLC указывается напрямую. Вместо GGUF из S3 можно настроить SM_LLAMA_CPP_HF_REPO и SM_LLAMA_CPP_HF_FILE, чтобы контейнер скачал файл из Hugging Face при наличии исходящего доступа.

Почему для вероятностей нужен дочерний образ

HTTP-API llama-server не выставляет логиты последней позиции и операции с состоянием, на которые опирается SemIf. Поэтому структурный путь собирает дочерний образ через AWS CodeBuild и хранит его в Amazon ECR: образ сохраняет скомпилированные CPU- или CUDA-библиотеки DLC, но заменяет точку входа на адаптер, совместимый с SageMaker.

Схемы у путей разные: штатный принимает массив messages с ролью и содержимым плюс параметры генерации вроде max_tokens и stream, а SemIf — объект decision с идентификатором, неструктурированным состоянием, вопросом и упорядоченным списком допустимых вариантов. В ответ приходят option_ids, probabilities и сырые option_logits в том же порядке — вместе с метаданными промпта, таймингов и закреплённой модели. При стабильных идентификаторах вариантов приложение применяет пороги, откаты и проверки политики, не разбирая сгенерированную прозу.

Замер: 231 задача JevBench, CPU против GPU

Одни и те же 231 публичные задачи JevBench отправлялись последовательно на CPU-эндпоинт и на GPU-эндпоинт — это замер расширения SemIf, а не штатного текстового пути. На модели Qwen3.5-4B Q4_K_M в конфигурации ml.c6i.8xlarge с 32 потоками и образом llama-cpp:server-sagemaker-cpu-v1 получилось 231/231 валидных ответов, точность 179/231 (77.5%), p50 1.715 секунды и p95 19.291 секунды. В конфигурации ml.g6e.xlarge с полной выгрузкой на GPU и образом llama-cpp:server-sagemaker-cuda-v1 — 231/231, 180/231 (77.9%), p50 0.352 секунды и p95 0.599 секунды.

По сравнению с CPU-конфигурацией GPU-эндпоинт оказался в 4.9 раза быстрее по p50 и в 32.2 раза быстрее по p95. Стартовые логи подтвердили, что llama.cpp выгрузила на NVIDIA L40S все 34 слоя модели. Разница в один ответ не говорит о выигрыше в качестве: CPU- и GPU-образы использовали разные сборки llama.cpp и дали разные предсказания на шести трудных задачах, и AWS просит считать это вариацией рантайма, а не доказательством того, что выгрузка на GPU улучшает модель.

Меньшие модели снижали медианную задержку, но кандидаты на 2B и 0.8B дали 66.7% и 58.4% точности, поэтому качество-first дефолтом в примере остаётся 4B Q4_K_M; сами измерения включают сетевую задержку и гарантией сервиса не являются.

Что важно в эксплуатации

Адаптер сериализует скоринг вокруг одного stateful-контекста llama.cpp, поэтому масштабироваться нужно инстансами эндпоинта, а не рассчитывать на параллельный скоринг внутри контейнера. При перегрузке он возвращает повторяемые ответы HTTP 503 вместо неограниченной очереди вокруг того же контекста. GPU-путь задаёт упорядоченный пул инстансов, но это запасные варианты размещения, а не балансировка: SageMaker выбирает один доступный тип, и создание эндпоинта занимает больше времени, пока он идёт по пулу.

Скрипты развёртывания отклоняют изменяемые теги образов, а сборка модели сверяет контрольную сумму GGUF и останавливается при расхождении. Итоговая рекомендация AWS: CPU — для фоновых, офлайн- или низкопоточных нагрузок, которые терпят секунды ответа; GPU — для интерактивных решений, длинных промптов и жёстких требований к хвостовой задержке.

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

SemIf, ранее OpenJev, AWS помещает в более широкий класс decision-моделей, которые оценивают заданные приложением исходы из неструктурированного состояния, — рядом с Jev от TypeSafe с его API /v1/systemone, Kev и Strands Decider 2B.

Первоисточники

  1. AWS Machine Learning Blog — Deploy decision models with llama.cpp on Amazon SageMaker AI (12 октября 2026)