﻿# SGLang memory fraction: как разбирать нехватку памяти

Что делает mem-fraction-static в SGLang: веса и KV-кеш, запас под активации, OOM в prefill или decode и проверка нагрузки.

Автор: Команда Retrivium
Обновлено: 2026-11-01
Канонический URL: https://retrivium.ai/ru/journal/sglang-memory-fraction/
Language: ru

В SGLang `--mem-fraction-static` задаёт долю памяти для статического размещения, связанного с весами и пулом KV-кеша. Это не процент вычислительной загрузки GPU. Увеличение может расширить ресурс кеша, но уменьшает запас для активаций и других буферов. При OOM сначала определите фазу сбоя и только затем меняйте бюджет.

## Разложите расход памяти

Общий расход включает веса, KV-кеш, активации и буферы вычислительных графов. Эти компоненты ведут себя по-разному: веса зависят от артефакта, а активная нагрузка — от длины и числа запросов. Поэтому успешная загрузка ещё не подтверждает устойчивость на длинном входе.

[Официальное руководство настройки SGLang](https://docs.sglang.io/docs/advanced_features/hyperparameter_tuning) объясняет связь компонентов. Смысл аргумента описан в [справочнике server arguments](https://docs.sglang.io/docs/advanced_features/server_arguments). Не используйте чужой процент без модели, карты и профиля: запас, подходящий одному серверу, может оказаться недостаточным другому.

## Начните с воспроизводимого примера

Для уже подготовленной совместимой среды пример аргумента выглядит так:

```bash
python -m sglang.launch_server \
  --model-path Qwen/Qwen3-0.6B \
  --host 127.0.0.1 --port 30000 \
  --mem-fraction-static 0.70
```

Число 0.70 выбрано для демонстрации синтаксиса, а не как универсальная рекомендация. В актуальном quickstart также используется CLI-маршрут `sglang serve`; сохраняйте тот способ запуска, который проверен в установленной версии. Не меняйте одновременно модель, образ и бюджет памяти.

## Отличите OOM входа от OOM генерации

При обработке длинного входа важен режим prefill и его рабочие буферы. Во время генерации растут активные последовательности и требования к кешу. Если ошибка появляется только при нескольких запросах, исследуйте параллельность и фактические длины выходов.

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

## Сравните запас и полезную ёмкость

Уменьшая статический бюджет, вы можете освободить место другим компонентам, но сократить кеш. Увеличивая — получить обратный компромисс. Лучшее значение определяется не отсутствием предупреждений само по себе, а рабочей задержкой, количеством ошибок и завершённых задач в вашем профиле.

Сделайте таблицу из двух или трёх близких проверенных значений. Запишите доступный ресурс из журнала, число активных обращений и время ответа. На общей машине измеряйте также состояние до старта: соседний процесс меняет исходные условия. Отличия фаз объясняет [материал prefill и decode](/ru/journal/llm-prefill-decode/).

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

## Подготовьте ограниченный рабочий профиль

Для владельца GPU результатом будет комбинация модели, бюджета, контекста и параллельности, которая прошла проверку. Не описывайте её как свойство карты вне этих условий. После изменения checkpoint или версии движка контрольные опыты следует повторить.

Финансовому партнёру данные помогают решить, полезнее ли дополнительная память, ещё одна реплика или более узкий профиль. Базовая установка рассмотрена в [руководстве SGLang Docker](/ru/journal/sglang-docker-launch/).
