Запуск vLLM на Tesla P40 для Qwen3 ASR: модификация фреймворка | AiManual
AiManual Logo Ai / Manual.
08 Мар 2026 Инструмент

Tesla P40 против vLLM: как взломать фреймворк для работы с устаревшей архитектурой

Практический гайд по модификации vLLM 0.5.8 для работы с GPU Tesla P40 (архитектура Pascal) и запуска модели Qwen3 ASR для транскрипции аудио в 2026 году.

Зачем в 2026 году возиться с карточкой 2016-го?

Tesla P40 – это 24 ГБ памяти GDDR5 за смешные деньги на вторичном рынке. Идеально для загрузки больших моделей. Проблема одна: её архитектура Pascal (compute capability 6.1) для современного vLLM – как динозавр в космическом корабле. Фреймворк оптимизирован под Volta, Ampere и новее. Но если ковыряться в исходниках, можно заставить его летать и на этом "динозавре".

vLLM 0.5.8 (последний стабильный релиз на март 2026) официально требует CUDA Compute Capability 7.0+. P40 с её 6.1 – за бортом. Но мы это исправим.

Где ломается vLLM на Pascal и как это починить

Всё упирается в ядра (kernels). vLLM использует кастомные CUDA-ядра для эффективного внимания (attention) и управления кэшем ключей-значений (KV cache). Многие из них скомпилированы только для архитектур 7.0+. При запуске получите ошибку CUDA error: no kernel image is available for execution on the device.

1Скачиваем и вскрываем форк

Не нужно писать всё с нуля. Кто-то уже проделал черновую работу. Находим форк vLLM с патчами для Pascal (например, vllm-project/vllm на GitHub, ищем форки с тегом 'pascal'). Клонируем его.

git clone https://github.com/[username]/vllm-pascal.git
cd vllm-pascal
# Проверяем, что ветка актуальна относительно основной 0.5.8
💡
Основные изменения обычно лежат в csrc/attention/attention_kernel.cu и файлах, связанных с компиляцией ядер (setup.py, csrc/CMakeLists.txt). Ищем флаги -arch=sm_70 и меняем на -arch=sm_61.

2Меняем флаги компиляции и целевые архитектуры

В setup.py находим секцию, где определяются флаги для nvcc. Заменяем все упоминания более новых архитектур на поддержку sm_61.

# Было (пример из vLLM 0.5.8):
arch_flags = ['-arch=sm_70', '-arch=sm_75', '-arch=sm_80', '-arch=sm_86', '-arch=sm_89', '-arch=sm_90']

# Меняем на:
arch_flags = ['-arch=sm_61', '-arch=sm_70']  # Поддерживаем P40 и базово современные карты

Также нужно проверить файл csrc/CMakeLists.txt на наличие похожих флагов. Иногда там жестко прописаны условия.

3Проверяем совместимость операций

Некоторые оптимизации в ядрах vLLM используют инструкции, которых нет в Pascal. Например, __dp4a для INT8 вычислений. Если в планах использовать квантование, нужно закомментировать или переписать эти участки, откатившись на более простые операции FP16. В большинстве случаев для inference с FP16 этого не требуется.

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

4Сборка и установка

# Устанавливаем зависимости
pip install -e .
# ИЛИ для полного контроля (если CMake ругается)
MAX_JOBS=4 pip install -e . --no-build-isolation --verbose

Если компиляция прошла успешно, можно тестировать. Создаём простой Python-скрипт для проверки, что vLLM видит GPU и может инициализировать движок.

Запускаем Qwen3 ASR для реальной транскрипции

Qwen3 ASR – модель для автоматического распознавания речи от Alibaba. На март 2026 года это всё ещё одна из самых точных open-source моделей для этой задачи. Её размер (например, 1.5B параметров) отлично влезает в 24 ГБ P40 даже для длинных аудио.

from vllm import LLM, SamplingParams
import torch
# Указываем модель с Hub
model_id = "Qwen/Qwen3-ASR-1.5B"
# Ключевой момент: используем dtype=torch.float16, так как P40 поддерживает FP16
llm = LLM(model=model_id, dtype="float16", gpu_memory_utilization=0.9, max_model_len=8192)

# Допустим, у нас есть извлечённые аудио-фичи (псевдокод)
# audio_features = load_audio("sample.wav")
# На практике нужно использовать пайплайн: аудио -> фичи -> промпт для ASR модели
prompts = ["Транскрибируй аудио: [AUDIO_FEATURES_PLACEHOLDER]"]
sampling_params = SamplingParams(temperature=0.0, top_p=1.0, max_tokens=500)
outputs = llm.generate(prompts, sampling_params)
print(outputs[0].outputs[0].text)
💡
Для реального использования Qwen3 ASR с vLLM нужно предварительно обработать аудио в последовательность токенов признаков, специфичных для этой модели. Обычно для этого используют отдельный скрипт или часть загрузки модели. Убедитесь, что ваш пайплайн подаёт на вход модели корректный тензор.

А что если не хочется ковыряться в коде? Альтернативы

Модификация vLLM – не единственный путь.

  • llama.cpp с CLBlast: Если модель в формате GGUF, можно использовать llama.cpp с вычислениями на GPU через CLBlast (OpenCL). Для P40 это работает, но скорость inference будет заметно ниже, чем у vLLM. Подробности в нашем гайде "Как запустить LLM на старом железе: гайд по Raspberry Pi, Steam Deck и майнинг-ригам".
  • Text Generation Inference (TGI) от Hugging Face: TGI также отринул поддержку Pascal. Шансов завести меньше.
  • Hugging Face Transformers + PEFT (напрямую): Стандартный пайплайн Transformers с урезанием точности до FP16 часто запускается на P40. Но никакого continuous batching, памяти ест больше, скорость на потоке запросов – низкая. Для одиночных экспериментов сойдёт.
ПодходСкорость (токен/с)Использование памятиСложность настройки
Модифицированный vLLMВысокая (30-50)ОптимальноеВысокая
Transformers (FP16)Низкая (5-15)ВысокоеНизкая
llama.cpp (CLBlast)Средняя (10-25)НизкоеСредняя

Кому это вообще нужно в 2026 году?

Этот путь для упрямых энтузиастов и тех, у кого стойка P40 уже пылится в дата-центре. Если вам нужна транскрипция аудио в реальном времени для внутренних нужд и бюджет стремится к нулю – то да, игра стоит свеч. Производительность P40 после всех танцев с бубном сравнима с RTX 3060 в подобных задачах, но памяти в два раза больше.

Для тех, кто не готов тратить недели на отладку CUDA ядер, есть более простой путь: аренда облачного GPU с архитектурой Ampere или новее. Например, Vultr предлагает инстансы с A100 по разумной цене (но это всё равно дороже, чем разовая покупка P40). Или можно изучить гайд "vLLM CPU Offloading" для более современных, но слабых карт.

Главный итог: сообщество open-source не оставляет старые железки. Пока есть спрос на дешёвые вычисления, будут находиться умельцы, которые пропатчат последний фреймворк под десятилетние архитектуры. Следующий на очереди – maybe, запуск NVFP4 моделей на Maxwell? Шутка. Или нет.

Подписаться на канал