# vLLM на CPU: установка в Linux и проверка локального API

Источник: https://modelium.tech/zhurnal/vllm-na-cpu/

vLLM умеет обслуживать модели на CPU без NVIDIA GPU, но обычный GPU-пакет не заменяет специальную CPU-сборку. Для Linux x86 проверьте AVX2 или предпочтительно AVX-512, выберите модель из CPU-матрицы, установите CPU wheel либо соберите проект с VLLM_TARGET_DEVICE=cpu. Затем запросите ответ у локального сервера; публикация команды здесь не означает, что Modelium выполнил запуск.

**Документация и карточка модели проверены 4 октября 2026 года.** vLLM закреплён на Git-ревизии `6f75cc7`, Qwen3-1.7B — на HF-ревизии `70d244c`. Ни установка, ни инференс, ни скорость на CPU **не проверялись Modelium**; шаги ниже — инструкция по первоисточникам, а не журнал выполненного теста [s1](#src-s1)[s7](#src-s7).

## Когда имеет смысл ставить vLLM без видеокарты?

vLLM имеет отдельный CPU backend для запуска и обслуживания моделей. Здесь рассматривается **Linux на x86 Intel/AMD**, а не установка GPU-версии без CUDA и не запуск ROCm: у ARM AArch64 и Apple Silicon свои инструкции. Если ваш процессор не отвечает x86-требованиям или компьютер работает под Windows, нельзя механически перенести команды этого раздела: сначала проверьте документацию под свою архитектуру. Общий обзор runtime — в [гайде vLLM](/zhurnal/vllm/), а [WSL-гайд](/zhurnal/vllm-windows-wsl/) решает другой, преимущественно GPU-сценарий [s1](#src-s1)[s2](#src-s2)[s3](#src-s3).

Практический маршрут: задача обслужить текстовую модель через локальный HTTP → конкретная совместимая модель `Qwen/Qwen3-1.7B` → проверка флагов и свободной памяти **своего** процессора → CPU-сборка vLLM → ответ `/v1/models` и результат запроса `/v1/chat/completions`. Модель есть в официальной CPU-матрице, но её таблица отражает проверку на Intel Xeon 5/6, **не минимальную конфигурацию** вашего ПК и не обещание скорости. Для учебного сравнения серверных runtime сначала подтвердите запуск именно на своём железе; [выбор компьютера](/zhurnal/kompyuter-dlya-lokalnyh-modeley/) вынесен отдельно [s4](#src-s4)[s7](#src-s7)[s5](#src-s5).

## Как проверить CPU, Python и запас памяти до установки?

Документация CPU на этой ревизии требует Python **3.10–3.13**. Для x86 указан Linux с флагом `avx512f` как рекомендованным; `avx2` допускает ограниченный набор возможностей. Командой `lscpu` на целевой машине проверьте архитектуру, фактические флаги, число физических ядер и NUMA-узлы; командой `free -h` посмотрите доступную память. Не выводите поддержку из названия марки процессора или числа потоков. Если нет нужных флагов, не подменяйте их инструкцией для ARM или случайным GPU wheel [s1](#src-s1)[s2](#src-s2)[s3](#src-s3).

Выбранный пример `Qwen/Qwen3-1.7B` указан в CPU-матрице авторов, а в карточке Hugging Face указан `Qwen3ForCausalLM` и лицензия Apache-2.0. Это **не** замер необходимых RAM, производительности или качества русского текста. Размер весов, KV-кеш, служебная память и параллелизм участвуют отдельно; не превращайте размер файла модели либо серверный Xeon автора в собственный минимальный системный порог. Перед загрузкой проверьте условия модели и объём свободной памяти на вашем устройстве [s4](#src-s4)[s7](#src-s7)[s1](#src-s1).

Переменная `VLLM_CPU_KVCACHE_SPACE` задаёт выделяемый CPU KV-кеш в **GiB**, а не общий минимум RAM; документация показывает значение 40 GiB лишь как пример аппаратно-зависимой настройки. Для первого пробного запуска выберите значение, которое помещается *помимо* весов и остальных процессов. Привязка OpenMP-потоков `VLLM_CPU_OMP_THREADS_BIND=auto` — значение по умолчанию, а `VLLM_CPU_NUM_OF_RESERVED_CPU=1` резервирует ядро для фронтенда при соответствующем auto-binding. Это опции для настройки под конкретный NUMA/CPU, а не обязательная магическая конфигурация каждого ноутбука [s1](#src-s1).

## Как поставить CPU-вариант и чем wheel отличается от сборки?

Создайте отдельное окружение рекомендованным автором способом: `uv venv --python 3.12 --seed --managed-python`, затем `source .venv/bin/activate`. Эти команды предполагают установленный `uv`; если Python 3.12 не подготовлен, сначала выполните шаг установки Python/uv по документации, а не используйте системный Python 3.14 как заведомо поддерживаемый. Зафиксируйте версию Python, Git-ревизию документации и фактический wheel в журнале собственного эксперимента [s1](#src-s1)[s8](#src-s8).

Для x86 Linux автор описывает **предсобранный CPU wheel** с релизов, доступный начиная с vLLM 0.17.0. На дату снимка официальный GitHub API возвращал релиз `v0.30.0`; прежде чем копировать wheel-URL, проверьте наличие артефакта CPU для выбранного тега и совпадение ABI/архитектуры. Команда в документации строит URL вида `vllm-<версия>+cpu-cp38-abi3-manylinux_2_34_x86_64.whl` и ставит его через `uv pip install ... --torch-backend cpu`; **не** используйте индекс обычных CUDA wheels как замену. Для wheel документация отдельно требует найти библиотеку Intel OpenMP `libiomp5.so` и добавить её в `LD_PRELOAD`. Не угадывайте системный путь библиотеки [s2](#src-s2).

Если релизный wheel не подходит или требуется код определённой ревизии, соберите CPU-вариант из checkout исходников: установить GCC/G++ по требованиям инструкции, CPU-зависимости из `requirements/build/cpu.txt` и `requirements/cpu.txt`, затем `VLLM_TARGET_DEVICE=cpu uv pip install . --no-build-isolation`. Сначала закрепите нужный Git commit после `git clone`; незакреплённый `main` может изменить команду или зависимости. Этот путь действительно **компилирует код**, требует инструментов разработки и не заменяется `VLLM_USE_PRECOMPILED=1`, который зависит от уже готовых CPU wheels. Здесь сборка не выполнялась [s2](#src-s2)[s1](#src-s1).

Не запускайте опубликованный CPU Docker-образ с `-p 8000:8000` на доступном извне хосте без ограничения сетевого доступа: типовой пример автора показывает порт, но не политику безопасности. ARM AArch64, Apple Silicon и x86 имеют разные наборы wheel/образов; берите их только из ветки инструкции для собственного процессора [s2](#src-s2)[s3](#src-s3)[s6](#src-s6).

## Как проверить локальный API, а не только статус процесса?

После установки задайте **свой** бюджет KV-кеша по доступной памяти и запускайте сервер только на loopback, например: `VLLM_CPU_KVCACHE_SPACE=<ваше_значение_GiB> vllm serve Qwen/Qwen3-1.7B --dtype bfloat16 --host 127.0.0.1 --port 8000`. Уберите угловые скобки и подставьте обоснованное число перед выполнением; это **шаблон**, а не команда, успешно исполненная Modelium. Официальный CPU FAQ рекомендует `bfloat16` при проблемах с float16 на CPU; совместимость конкретного железа проверяется в вашем окружении. Если веса ещё не скачаны, первый запуск получит их из репозитория модели при наличии сети и нужных разрешений — не обещайте офлайн-режим только из-за CPU [s1](#src-s1)[s4](#src-s4)[s7](#src-s7).

Проверяйте по порядку: `curl -sS http://127.0.0.1:8000/v1/models` должен вернуть список моделей, где присутствует нужный идентификатор; затем отправьте тестовый JSON на `/v1/chat/completions` с `model: "Qwen/Qwen3-1.7B"` и обычным сообщением пользователя. Убедитесь, что JSON содержит не только HTTP 200, но и `choices[0].message.content` либо наблюдаемое поле результата для выбранной модели. Пустой список, ошибочный ID, ошибка chat template или ответ без генерированного содержимого не подтверждают успешный инференс. Формат chat API применим только к моделям с chat template; для моделей без него используйте совместимый Completions API [s5](#src-s5)[s7](#src-s7).

Запишите фактические `python --version`, CPU flags, RAM, версию vLLM, ревизию модели, параметры запуска, HTTP-код и ответ на один контролируемый запрос. Только такой сохранённый протокол может подтвердить запуск именно на вашем устройстве; отсутствие теста нельзя компенсировать ссылкой на чью-то таблицу. Мерить задержку и скорость имеет смысл уже после работоспособного API по [отдельному протоколу нагрузочного теста](/zhurnal/vllm-bench-serve/) [s1](#src-s1)[s4](#src-s4)[s5](#src-s5).

## Какие ошибки и ограничения следует проверить?

Если установка подтянула CUDA-зависимости или сервер ищет GPU, вернитесь к CPU wheel и `--torch-backend cpu`, а при сборке — к `VLLM_TARGET_DEVICE=cpu`. Если нет `avx512f`, проверьте `avx2` и перечень ограниченных функций; отсутствие обоих флагов — повод не обещать работу x86 backend. Если процесс завершается при загрузке модели, сравните *фактически доступную* RAM с памятью, занятой весами, KV-кешем и другими процессами; уменьшение KV-кеша не гарантирует, что веса поместятся. Если BF16 даёт ошибку на конкретном процессоре, сверяйте тип и поддержку CPU, а не меняйте формат вслепую [s2](#src-s2)[s1](#src-s1).

**Не открывайте этот API в интернет по одной только настройке **`**--api-key**`**.** Официальная документация прямо указывает, что ключ защищает лишь часть путей, в частности `/v1/...`, но `/invocations` остаётся доступным без него. Для учебного теста оставьте `--host 127.0.0.1`; корпоративный доступ требует отдельной сети, прокси и контроля открытых путей. Если задача — GPU, [ROCm-инструкция](/zhurnal/vllm-na-amd-rocm/) относится к иной архитектуре, а не к ускорению описанной CPU-сборки [s5](#src-s5)[s6](#src-s6).

Удаление учебного окружения: остановите запущенный сервер, затем удалите **только созданное для этого теста** виртуальное окружение и скачанный кэш модели, если он больше не нужен другим проектам. Не очищайте общий `~/.cache/huggingface` без проверки его использования. Основной следующий шаг: получить реальный ответ API на своём CPU и лишь потом измерять скорость на одинаковом наборе запросов [s8](#src-s8)[s5](#src-s5).

## Источники

1. [vLLM — CPU installation and runtime configuration](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/getting_started/installation/cpu.md) — получено 2026-10-04
2. [vLLM — x86 CPU installation, wheels and source build](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/getting_started/installation/cpu.x86.inc.md) — получено 2026-10-04
3. [vLLM — ARM AArch64 CPU installation](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/getting_started/installation/cpu.arm.inc.md) — получено 2026-10-04
4. [vLLM — supported models on CPU, Intel reference matrix](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/models/hardware_supported_models/cpu.md) — получено 2026-10-04
5. [vLLM — OpenAI-compatible serving endpoints](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/serving/online_serving/openai_compatible_server.md) — получено 2026-10-04
6. [vLLM — security and API key authentication limitations](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/usage/security.md) — получено 2026-10-04
7. [Qwen — Qwen3-1.7B model card and config](https://huggingface.co/Qwen/Qwen3-1.7B/tree/70d244cc86ccca08cf5af4e1e306ecf908b1ad5e) — получено 2026-10-04
8. [vLLM — Python environment setup for CPU installation](https://github.com/vllm-project/vllm/blob/6f75cc7d5d1b5adfb399cbf79a8231ae66844fcf/docs/getting_started/installation/python_env_setup.inc.md) — получено 2026-10-04
