Tensor Parallel на старых GPU: сравнение ik_llama, exllama v3, vLLM 2026 | AiManual
AiManual Logo Ai / Manual.
04 Фев 2026 Гайд

Старые GPU ещё живы: Tensor Parallel на P40 и Pascal — битва фреймворков 2026

Полное руководство по запуску современных LLM на P40 и Pascal GPU. Сравнение производительности ik_llama, exllama v3, vLLM и llama.cpp в Tensor Parallel режиме.

Зачем мучить старые карты в 2026 году?

У вас на полке валяются две P40 по 24 ГБ каждая. Или пара GTX 1080 Ti. Или, что ещё смешнее, связка из четырёх P100. Цена вопроса — 0 рублей (если не считать счета за электричество). Современные модели вроде Llama 3.2 70B требуют минимум 48 ГБ VRAM для работы в FP16. Новые RTX 5090 стоят как подержанная машина. Что делать?

Tensor Parallel — единственный способ заставить эти древние артефакты работать с современными LLM. Но здесь начинается ад. Каждый фреймворк обещает поддержку распределённого вывода, но на практике оказывается, что «поддержка» означает «работает на A100, а на вашем железе — как повезёт».

Главный миф: «Tensor Parallel ускоряет вывод пропорционально количеству карт». На P40 это работает с точностью до наоборот. Из-за низкой пропускной способности памяти (346 ГБ/с против 1008 ГБ/с у RTX 4090) и отсутствия NVLink синхронизация между картами съедает до 40% производительности.

Почему P40 и Pascal — особый случай

Карты на архитектуре Pascal (2016) и их серверные версии P40/P100 имеют три критических ограничения:

  • Нет Tensor Cores — все вычисления идут через CUDA Cores, что в 4-8 раз медленнее для матричных операций
  • PCIe 3.0 x16 — 16 ГБ/с против 32 ГБ/с у PCIe 4.0 в современных системах
  • FP16 без аппаратного ускорения — на P40 FP16 работает в 2 раза медленнее, чем FP32 (да, вы не ослышались)

Именно поэтому стандартные бенчмарки и руководства бесполезны. То, что работает на RTX 4090, на P40 либо не запустится, либо будет работать в 10 раз медленнее.

Фреймворки 2026 года: кто кого

На 04.02.2026 актуальная ситуация выглядит так:

Фреймворк Версия Поддержка P40 Сложность настройки Токенов/сек (Llama 3.2 13B)
ik_llama 0.9.4 (2026) Нативная Средняя 12-15
exllama v3 3.1.2 Через патчи Высокая 18-22
vLLM 0.5.3 Официальная Низкая 8-10
llama.cpp v4.0.1 Работает из коробки Очень низкая 6-8

ik_llama: специалист по старому железу

ik_llama создавалась именно для таких случаев. Авторы изначально тестировали на P40 и P100, поэтому здесь нет «сюрпризов» вроде внезапных ошибок CUDA из-за отсутствия Tensor Cores.

Что работает хорошо:

  • Автоматическое определение оптимального размера блока для Pascal
  • Агрессивное кэширование KV-cache между слоями
  • Поддержка смешанной точности FP32/FP16 с учётом аппаратных ограничений

Что раздражает:

  • Документация на уровне «запусти и молись»
  • Нужно самому компилировать из исходников
  • Только модели семейства Llama (никаких Qwen или Phi)
💡
Если вы хотите запустить Llama 3.2 70B на четырёх P40 — ik_llama ваш выбор. Она единственная стабильно работает с контекстом 8192 токенов на такой конфигурации.

exllama v3: максимальная скорость ценой стабильности

exllama v3 — это монстр оптимизаций. На новых картах она даёт прирост до 40% по сравнению с vLLM. На P40 ситуация сложнее.

Проблема в том, что exllama заточена под использование Tensor Cores. На Pascal она эмулирует их через CUDA Cores, что приводит к интересным артефактам:

# Вот как НЕ надо делать на P40:
model = ExLlamaV3(config)
# Автоматически выберет kernel с Tensor Cores
# На P40 упадёт с ошибкой "No kernel available"

# Правильно:
model = ExLlamaV3(config, disable_tensor_cores=True)
# Заставит использовать CUDA Cores

Но даже с этим флагом exllama пытается использовать оптимизации, которые на Pascal работают медленнее. Нужно патчить исходники, отключая:

  • Fused attention layers (работают в 2 раза медленнее)
  • Warp-level matrix operations
  • Асинхронные memory copies между GPU

Результат? После трёх часов танцев с бубном получаем 18-22 токена в секунду на Llama 3.2 13B с двумя P40. Быстрее всех, но стабильность — как у карточного домика.

vLLM 0.5.3: стабильность вместо скорости

vLLM в версии 0.5.3 (вышла в январе 2026) наконец-то получила нормальную поддержку старых GPU. Раньше она просто отказывалась работать на картах без Tensor Cores.

Плюсы:

  • Работает из коробки — pip install и запускай
  • Отличная документация
  • Поддержка батчинга (на P40 это критично)

Минусы:

  • Медленнее всех — 8-10 токенов/сек
  • Жрёт на 20% больше памяти из-за менее агрессивного кэширования
  • Не умеет в смешанные прецизионы на Pascal

Если вам нужна стабильность и возможность быстро переключаться между моделями — vLLM. Если нужна скорость — идите в exllama.

llama.cpp: по старинке

llama.cpp v4.0.1 поддерживает Tensor Parallel через флаг --tensor-parallel-size. Работает, но медленно. Зато стабильно как швейцарские часы.

Интересный момент: llama.cpp на P40 иногда быстрее в FP32, чем в FP16. Проверьте оба варианта:

# FP32 (может быть быстрее на P40!)
./main -m llama-3.2-13b.Q4_K_M.gguf --tensor-parallel-size 2 --gpu-layers 40 -t 8

# FP16 (стандартный вариант)
./main -m llama-3.2-13b.Q4_K_M.gguf --tensor-parallel-size 2 --gpu-layers 40 -t 8 -c 4096

Пошаговый план: запускаем Llama 3.2 13B на двух P40

1 Подготовка системы

Первое — обновляем драйверы. На 04.02.2026 последний драйвер, поддерживающий P40 — NVIDIA 560.xx. Более новые могут не работать.

# Проверяем архитектуру
nvidia-smi --query-gpu=compute_capability --format=csv
# Должно показать 6.1 для P40

Второе — настраиваем PCIe. Для двух карт нужен хотя бы PCIe 3.0 x8 на каждую. Проверьте через lspci:

lspci -vv | grep -A 10 "NVIDIA" | grep "LnkSta"

2 Выбор фреймворка и установка

Для большинства случаев рекомендую такую последовательность:

  1. Попробуйте vLLM — если работает и скорость устраивает, остановитесь
  2. Если нужна скорость — поставьте ik_llama
  3. Если хотите максимум скорости и готовы потратить день на настройку — exllama v3
# Вариант 1: vLLM (проще всего)
pip install vllm==0.5.3

# Вариант 2: ik_llama
git clone https://github.com/ik-llm/ik_llama
cd ik_llama
# Смотрим README — там особые инструкции для Pascal
make CUDA_ARCH=61  # 61 для P40

3 Настройка Tensor Parallel

Здесь главное — правильно распределить слои модели. На двух P40 с 24 ГБ каждая:

  • Llama 3.2 13B в FP16 ≈ 26 ГБ
  • На одну карту не влезет
  • Tensor Parallel делит не слои, а матрицы внутри слоёв
# Пример для vLLM
from vllm import LLM, SamplingParams

llm = LLM(
    model="meta-llama/Llama-3.2-13B",
    tensor_parallel_size=2,  # Две карты
    gpu_memory_utilization=0.9,  # На P40 можно 0.95
    enforce_eager=True,  # Критично для Pascal!
    disable_custom_all_reduce=True  # Ещё один важный флаг
)

Никогда не используйте pipeline parallelism на P40! Разделение по слоям заставит токены прыгать между картами через PCIe 40 раз (по числу слоёв). Задержка убьёт всю производительность. Tensor Parallel передаёт данные только между матричными операциями — в 5-10 раз реже.

Ошибки, которые сломают вашу систему

Собрал топ-5 ошибок, которые совершают все (и я в том числе):

1. Память не чистится между запусками

На P40 после остановки модели память часто остаётся занятой. CUDA context не разрушается. Решение:

# После каждого падения модели
sudo fuser -v /dev/nvidia*
sudo kill -9 PID
# Или радикально
sudo rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia
sudo modprobe nvidia

2. Неправильная квантзация

На Pascal некоторые форматы квантзации работают медленнее. Избегайте:

  • Q8_0 — медленно декодируется
  • IQ4_XS — требует инструкций, которых нет на P40

Используйте Q4_K_M или Q5_K_M — лучший баланс скорости и качества.

3. PCIe перегрузка

Две P40 на PCIe 3.0 x8 каждая — это 16 ГБ/с в каждую сторону. Если у вас ещё и SSD на PCIe, начинается драка за bandwidth. Решение — ставить карты в слоты, которые не делят линии.

4. Перегрев

P40 — серверная карта без активного охлаждения. В десктопном корпусе греется до 90°C и троттлит. Обязательно поставьте вентиляторы на обдув.

5. Несовместимость CUDA версий

P40 поддерживает CUDA до 12.4. Но многие фреймворки 2026 года требуют CUDA 12.6. Решение — собирать из исходников с флагом CUDA_ARCH=61.

А что с большими моделями?

Четыре P40 (96 ГБ VRAM) теоретически могут потянуть Llama 3.2 70B в 4-битной квантзации. Практика:

  • ik_llama — работает, 3-5 токенов/сек
  • vLLM — нестабильно, падает при контексте > 2048
  • exllama v3 — можно заставить работать, но нужны недели настройки

Парадокс: иногда проще использовать методику с разделением контекста, чем пытаться запихнуть всю модель в VRAM.

💡
Самый неочевидный совет: попробуйте запустить модель не в Tensor Parallel, а через layer splitting (разделение по слоям), но с очень большим батчем. На P40 из-за медленной памяти передача больших объёмов данных эффективнее, чем множественные мелкие передачи. Это идёт вразрез со всей теорией, но на практике иногда работает быстрее.

Что будет дальше?

К 2027 году поддержка Pascal в основных фреймворках, скорее всего, исчезнет. NVIDIA уже не выпускает драйверы с оптимизациями для этих карт. Но пока они живы.

Мой прогноз: ik_llama станет основным фреймворком для энтузиастов со старым железом. Уже сейчас в ней появляются функции, которых нет в vLLM — например, динамическое перераспределение слоёв между GPU в зависимости от нагрузки.

Если у вас есть P40 — используйте их сейчас. Через год может быть поздно. А если хотите понять, как работать со смешанными конфигурациями (NVIDIA + AMD), посмотрите это руководство по Threadripper.

И последнее: не гонитесь за максимальным количеством токенов в секунду. На P40 стабильные 10 токенов/сек с 70B моделью — это уже победа. Помните, что эти карты выпускались, когда о GPT-3 ещё никто не слышал. Они делают то, для чего никогда не создавались. И делают это вопреки всему.