The post has been translated automatically. Original language: Russian
On September 5, 2026, SGLang 0.5.19 was released, the release of the inference server for large language and multimodal models. This is one of the runtimes on which LLM's own deployments are based: it accepts HTTP requests, collects them into batches, caches the prefixes of promptos, and decomposes the model across multiple graphics cards. According to the authors, the release contains 786 pool requests from 214 contributors — both new functionality and incompatible changes that are easy to stumble upon when updating.
Beam search appeared at the query level
The main innovation for those who pull the server out of the code is beam search. Now you can pass the beam_width parameter in the request, and instead of one generated sequence, the server returns the n best options. Previously, this had to be emulated from the outside: send several requests with a non-zero temperature and select successful responses yourself. Beam search queries are processed mixed with the usual ones, and a separate server instance is not needed for this mode.
Where the model's response goes through a validator — SQL, JSON schema generation, function calls — a set of candidates allows you to take the first validated version instead of re-accessing the model.
A single prefix tree has become the default behavior.
The unified radix tree, which was previously included in the environment variable and was used mainly in hybrid configurations, now works as a prefix caching mechanism for all configurations, and the corresponding variable has been deprecated. The meaning of the cache is the same: the common prefix prompt — system instructions, tool descriptions, few-shot examples - is counted once and reused between requests.
The second infrastructure change is the DeepEP engine version 2 with fixed—size buffers. Since the buffer size no longer floats, the decoding stage can be performed under CUDA graphs even when the model is spread across several nodes, and according to the authors' measurements, the performance is comparable to the classic backend.
Performance measurements
Figures from the release notes:
- sequence parallelism for normalization layers removes 3.5% of the prefilling time on the Qwen3-8B model on the H100 accelerator and 5.6% on the B200;
- quantization of W4A8 for MoE models on the Hopper architecture provides about a 12% increase in output bandwidth.;
- The lightweight implementation of attention on AMD graphics cards in the ROCm stack shows up to 1.52 times more bandwidth on the MI355X;
- speculative decoding cores have been accelerated — an increase of 1.3–1.8 times on the B200 has been announced.
There are preliminary images for CUDA 13.4 and ROCm 10.
What does this mean in practice?
The update is not one that rolls around without reading the notes. What to look at in advance:
- The FlashInfer version has been rigidly upgraded to 0.6.18, and there is no compatibility with the old API. If the image is built with a fixed version of this library, the build will break. Edit the dependencies with the same commit as the server version.
- The ServerArgs object no longer resolves the parameters itself: you need to explicitly call the resolve_once method. This will hit those who raise the engine not through a ready-made CLI, but from their Python code: the configuration will silently go to the default values.
- One of the supported models has been renamed in the configuration files and parsers, and the environment variables for caching diffusion models have been marked as obsolete. Both should be cleaned out of deployment manifests.
- Changing the prefix caching mechanism changes the video memory consumption profile. Before rolling out, run a load test on your length allocation and see the proportion of cache hits and peak memory usage.
The release is useful for those who keep their own information and rely either on the cost of re-generation or on the bandwidth on AMD. But in terms of the number of incompatible changes, it requires a test run on the stand, rather than a direct upgrade of the combat node.
The draft text was prepared with the participation of AI, the facts were checked against the original source — the official notes to the SGLang 0.5.19 release on GitHub.
5 сентября 2026 года вышел SGLang 0.5.19 — релиз сервера инференса для больших языковых и мультимодальных моделей. Это один из рантаймов, на которых держатся собственные развёртывания LLM: он принимает запросы по HTTP, собирает их в батчи, кеширует префиксы промптов и раскладывает модель по нескольким видеокартам. В релизе, по данным авторов, 786 пул-реквестов от 214 контрибьюторов — и новая функциональность, и несовместимые изменения, о которые легко споткнуться при обновлении.
Лучевой поиск появился на уровне запроса
Главное новшество для тех, кто дёргает сервер из кода, — лучевой поиск (beam search). Теперь в запросе можно передать параметр beam_width, и вместо одной сгенерированной последовательности сервер вернёт n лучших вариантов. Раньше это приходилось эмулировать снаружи: слать несколько запросов с ненулевой температурой и самому отбирать удачные ответы. Запросы с лучевым поиском обрабатываются вперемешку с обычными, отдельный инстанс сервера под такой режим не нужен.
Там, где ответ модели проходит через валидатор — генерация SQL, JSON по схеме, вызовов функций, — набор кандидатов позволяет взять первый прошедший проверку вариант вместо повторного обращения к модели.
Единое префиксное дерево стало поведением по умолчанию
Унифицированное радиксное дерево, которое раньше включалось переменной окружения и применялось в основном в гибридных конфигурациях, теперь работает как механизм кеширования префиксов для всех конфигураций, а соответствующая переменная объявлена устаревшей. Смысл кеша прежний: общий префикс промпта — системная инструкция, описания инструментов, few-shot-примеры — считается один раз и переиспользуется между запросами.
Второе инфраструктурное изменение — движок DeepEP версии 2 с буферами фиксированного размера. Раз размер буфера больше не плавает, стадия декодирования может исполняться под графами CUDA даже при разнесении модели по нескольким узлам, и по замерам авторов производительность сопоставима с классическим бэкендом.
Замеры производительности
Цифры из примечаний к релизу:
- параллелизм по последовательности для слоёв нормализации снимает 3,5% времени предзаполнения на модели Qwen3-8B на ускорителе H100 и 5,6% на B200;
- квантование W4A8 для MoE-моделей на архитектуре Hopper даёт около 12% прироста выходной пропускной способности;
- облегчённая реализация внимания на видеокартах AMD в стеке ROCm показывает до 1,52 раза больше пропускной способности на MI355X;
- ускорены спекулятивные ядра декодирования — заявлен прирост в 1,3–1,8 раза на B200.
Появились предварительные образы под CUDA 13.4 и ROCm 10.
Что это значит на практике
Обновление не из тех, что накатываются без чтения примечаний. На что смотреть заранее:
- Версия FlashInfer жёстко поднята до 0.6.18, совместимости со старым API нет. Если образ собирается с зафиксированной версией этой библиотеки, сборка сломается — правьте зависимости тем же коммитом, что и версию сервера.
- Объект ServerArgs больше не доразрешает параметры сам: нужно явно вызвать метод resolve_once. Это ударит по тем, кто поднимает движок не через готовый CLI, а из своего Python-кода: конфигурация молча уедет к значениям по умолчанию.
- Одна из поддерживаемых моделей переименована в конфигурационных файлах и парсерах, а переменные окружения для кеширования диффузионных моделей помечены как устаревшие. И то, и другое стоит вычистить из деплой-манифестов.
- Смена механизма кеширования префиксов меняет профиль потребления видеопамяти. Перед выкаткой прогоните нагрузочный тест на своём распределении длин промптов и посмотрите долю попаданий в кеш и пиковую занятость памяти.
Релиз полезен тем, кто держит собственный инференс и упирается либо в стоимость повторных генераций, либо в пропускную способность на AMD. Но по числу несовместимых изменений он требует прогона на стенде, а не прямого обновления боевого узла.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные примечания к релизу SGLang 0.5.19 на GitHub.