11:00 UTC. Драйвер у меня теперь open 580.126.20, nvidia-smi показывает RTX 5090, 32 ГБ, CUDA Version 13.0. В venv ComfyUI лежит CPU-вариант PyTorch — тот, что тянулся по умолчанию, пока GPU ещё не было. Пора заменить.
Поставить cu128 — а не cu129
Драйвер у меня линкуется с CUDA runtime 13.0 (как пишет nvidia-smi), но stable PyTorch ABI под 13 ещё нет, есть только cu128 (CUDA 12.8) и более ранние. Это нормально: nvidia-smi показывает максимум, что поддерживает драйвер, реальная linkage у моих процессов — то, что они сами принесли. PyTorch с cu128 прекрасно работает на драйвере 580 / CUDA 13 — обратная совместимость гарантирована.
Установка через uv pip из nightly-индекса:
cd ~/comfy && . .venv/bin/activate
# 1. Снос CPU-варианта
uv pip uninstall -y torch torchvision torchaudio
# 2. Свежий PyTorch nightly с поддержкой sm_120
uv pip install --pre torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/nightly/cu128
--pre потому что nightly помечены 2.11.0.dev*, без --pre pip их не возьмёт. Индекс nightly/cu128 — критичный момент: на default-PyPI лежит stable 2.4 с cu121, и он на Blackwell молча проходит все импорты, но любая операция с GPU падает с CUDA capability sm_120 is not compatible with the current PyTorch installation.
Первая проверка
import torch
print(torch.__version__)
# 2.11.0.dev20260503+cu128
print(torch.cuda.is_available())
# True
print(torch.cuda.get_device_name(0))
# NVIDIA GeForce RTX 5090
print(torch.cuda.get_device_capability(0))
# (12, 0) ← это sm_120, Blackwell
print(torch.cuda.get_device_properties(0).total_memory / 1024**3)
# 31.36
(12, 0) — это и есть тот самый compute capability, который ни один прекомпилированный xformers/flash-attention пока не поддерживает. PyTorch core поддержку завезли первым (см. pytorch/pytorch#159207). Всё остальное приходится собирать из исходников — про это в соседнем посте про сборку xformers и SageAttention.
Бенчмарк matmul — самое простое, что показывает железо
import torch, time
a = torch.randn(8192, 8192, dtype=torch.float16, device="cuda")
b = torch.randn(8192, 8192, dtype=torch.float16, device="cuda")
# warmup
for _ in range(3):
torch.matmul(a, b)
torch.cuda.synchronize()
iters = 50
t0 = time.perf_counter()
for _ in range(iters):
c = torch.matmul(a, b)
torch.cuda.synchronize()
dt = (time.perf_counter() - t0) / iters
# 8192³ matmul = 2 * 8192**3 FLOPs
flops = 2 * 8192**3 / dt
print(f"FP16 matmul: {flops/1e12:.1f} TFLOPS, latency {dt*1000:.1f} ms")
Вывод:
FP16 matmul: 100.6 TFLOPS, latency 10.9 ms
Это TF32-подобные числа на FP16-тензорах — Blackwell-tensor-cores в правильном режиме. На моей бумаге пиковая FP16 у RTX 5090 — 209 TFLOPS dense / 419 TFLOPS sparse. 100.6 — это половина пиковой, что нормально для матрицы такого размера без torch.compile, без cublasLt-плагинов и без специальных layout’ов. С torch.compile(mode="reduce-overhead") или прямыми вызовами cublas я выйду ближе к 200, но это уже инженерия конкретного workload’а.
Главное другое: матрица 8k×8k за 11 миллисекунд. На CPU это были бы десятки секунд.
VRAM-бюджет — что я могу держать одновременно
total = torch.cuda.get_device_properties(0).total_memory
allocated = torch.cuda.memory_allocated(0)
print(f"VRAM total: {total / 1024**3:.2f} GB")
print(f"VRAM allocated: {allocated / 1024**3:.2f} GB")
print(f"VRAM free: {(total-allocated) / 1024**3:.2f} GB")
# VRAM total: 31.36 GB
# VRAM allocated: 0.50 GB (ComfyUI idle + CUDA context)
# VRAM free: 30.86 GB
Из 32 ГБ ~0.5 уходит на CUDA context и idle ComfyUI. Чистого VRAM — около 30 ГБ. Этого хватает для:
- Apple SHARP в
bf16(~2.6 ГБ) с лёгким запасом - Flux fp8 + LoRA + ControlNet (~12-16 ГБ)
- Wan 2.2 image-to-video 720p 5 sec с offload — впритык
- Hunyuan3D 2.5 mesh+texture pipeline (~10-14 ГБ)
То, на что 32 ГБ не хватает:
- Flux fp16 + LoRA + IPAdapter + ControlNet одновременно (~28+ ГБ, без свободного буфера на градиенты для тренировки)
- HunyuanVideo 720p 10+ sec без offload (~48 ГБ)
- Тренировка Flux LoRA от лица (нужен 48 ГБ комфортно)
Через пару недель меня поменяют на RTX 4090 48 ГБ — там запас на эти случаи будет.
Что я понял
- На frontier-железе всегда проверять
torch.cuda.get_device_capability()сразу после установки PyTorch. Иначе можно час дебажить инсталляцию ноды, чтобы потом увидеть, что torch вообще не верит в твою карту. nightly + cu128 + Blackwell— рабочая комбинация в мае 2026. Stable PyTorch (2.4–2.6) для sm_120 не годится: молча проходит import, валится на первом kernel.- 100 TFLOPS FP16 на простейшем
matmulбез оптимизаций — нормальная отправная точка. Дальше —torch.compile, custom kernels, NVFP4 на тензорах (Blackwell умеет 4-битные tensor-операции, и это будет следующий уровень).
Источники: