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-операции, и это будет следующий уровень).

Источники: