Stable Diffusion на видеокартах AMD: полное руководство

Запуск Stable Diffusion на видеокарте AMD упирается в одну ключевую проблему: большинство сборок нейросети изначально рассчитаны на CUDA от NVIDIA, поэтому на «красном» железе стандартная установка Automatic1111 либо падает с ошибкой на этапе инициализации PyTorch, либо молча уходит в медленный режим CPU. Признак последнего — генерация одного изображения 512×512 занимает минуты вместо секунд, а в диспетчере задач видеокарта простаивает.

Хорошая новость в том, что рабочие пути существуют, и их несколько: нативный ROCm на Linux, DirectML-сборки для Windows, прослойка ZLUDA и готовые интерфейсы с поддержкой AMD «из коробки». Ниже разберём каждый вариант, требования к железу и типичные ошибки, чтобы вы могли выбрать подходящий сценарий под свою систему.

Почему Stable Diffusion не работает на AMD «из коробки»

Ядро Stable Diffusion выполняется через фреймворк PyTorch, а его стандартные сборки компилируются под CUDA — закрытую платформу NVIDIA. Видеокарты AMD эту платформу не поддерживают физически, поэтому команда torch.cuda.is_available() на AMD-системе возвращает False, и веб-интерфейс либо выдаёт ошибку, либо переключается на процессор.

У AMD есть собственная вычислительная платформа — ROCm, для которой существуют официальные сборки PyTorch. Однако её поддержка в Windows исторически ограничена: основной и наиболее стабильный сценарий ROCm — это Linux (чаще всего Ubuntu). Именно поэтому выбор операционной системы фактически определяет ваш путь установки.

⚠️ Внимание: поддержка конкретных моделей GPU в ROCm зависит от версии платформы. Перед установкой сверьтесь с официальной матрицей совместимости AMD — карты вне списка могут работать через обходные переменные окружения, но стабильность не гарантируется.

Требования к железу и объёму видеопамяти

Главный ограничивающий фактор — объём VRAM. Для комфортной генерации в SD 1.5 желательно от 8 ГБ, для SDXL — от 12–16 ГБ, хотя с оптимизациями (--medvram, --lowvram) можно работать и на более скромных картах, жертвуя скоростью. Системной оперативной памяти желательно иметь от 16 ГБ, поскольку модели подгружаются через RAM.

РежимМинимум VRAM (ориентир)Комментарий
SD 1.5, 512×5124–6 ГБРаботает с флагами оптимизации
SD 1.5, 512×5128 ГБКомфортная работа без ограничений
SDXL, 1024×102412 ГББазовый уровень для SDXL
SDXL + refiner / ControlNet16 ГБ и болееТяжёлые связки моделей

Учтите, что это ориентировочные значения: реальное потребление зависит от разрешения, размера батча, включённых расширений и выбранного метода внимания (attention). Если видеопамяти не хватает, Stable Diffusion выдаёт ошибку CUDA out of memory (или её аналог для ROCm) либо аварийно завершается.

Вариант 1: ROCm на Linux — максимальная производительность

Для видеокарт Radeon RX 6000/7000 серии на Linux это предпочтительный путь: ROCm-сборка PyTorch задействует GPU напрямую, и скорость генерации приближается к аналогичным по классу картам NVIDIA. Последовательность в общих чертах выглядит так:

  • 🐧 Установите поддерживаемый дистрибутив Linux (чаще всего рекомендуют Ubuntu LTS) и драйверы AMD с компонентами ROCm согласно официальной документации AMD.
  • 🐍 Создайте виртуальное окружение Python и поставьте PyTorch именно с индексом ROCm: pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.x (номер версии уточняйте на сайте PyTorch).
  • 🚀 Клонируйте Automatic1111 или Forge и запустите webui.sh — скрипт сам подхватит ROCm-сборку.
  • 🔧 При неофициально поддерживаемой карте попробуйте переменную HSA_OVERRIDE_GFX_VERSION, подставив версию ближайшего поддерживаемого чипа — это обходной приём, а не гарантия.

☑️ Проверка перед запуском на ROCm

Выполнено: 0 / 4

Диагностика простая: выполните python -c "import torch; print(torch.cuda.is_available())" в активированном окружении. Ответ True означает, что PyTorch видит GPU через ROCm (интерфейс называется «cuda» по историческим причинам — это нормально). Ответ False указывает на проблему с драйверами или несовместимость версий.

📊 На какой системе вы запускаете Stable Diffusion на AMD?
Linux с ROCm
Windows с DirectML
Windows с ZLUDA
Только выбираю вариант

Вариант 2: DirectML на Windows

Если переход на Linux не входит в планы, для Windows существуют сборки на базе DirectML — API машинного обучения от Microsoft, работающего поверх любого современного GPU, включая AMD. Наиболее известный путь — форк Stable Diffusion WebUI DirectML или готовые дистрибутивы вроде Amuse от AMD и ONNX-конвейеров.

Расплатой за простоту становится скорость: DirectML-режим обычно заметно уступает ROCm и CUDA, а часть расширений (некоторые версии ControlNet, отдельные сэмплеры) может работать некорректно или не работать вовсе. Для старта достаточно клонировать DirectML-форк и запустить его webui-user.bat — зависимости подтянутся автоматически.

Вариант 3: ZLUDA и альтернативные интерфейсы

ZLUDA — прослойка, эмулирующая CUDA поверх ROCm/HIP, что позволяет запускать на Windows некоторые CUDA-ориентированные приложения. Энтузиасты используют её с Automatic1111 и ComfyUI, однако это неофициальное решение: установка требует ручной подмены библиотек, а совместимость зависит от версий драйвера и самой сборки. Рассматривайте ZLUDA как экспериментальный вариант, когда ROCm-Linux недоступен, а DirectML слишком медленный.

Отдельно стоит упомянуть ComfyUI и Stable Diffusion.cpp / ONNX Runtime: узловой интерфейс ComfyUI хорошо работает с ROCm на Linux и часто экономичнее расходует VRAM, а ONNX-варианты позволяют задействовать разные бэкенды исполнения. Для слабых карт есть также режим генерации на CPU — медленно, но без каких-либо требований к GPU.

Почему на AMD чёрные картинки вместо результата

Наиболее вероятная причина — нестабильность вычислений в половинной точности (fp16) на конкретной модели GPU или в конкретном бэкенде. Попробуйте флаги --precision full --no-half, отключите оптимизации внимания (например, замените xformers на --opt-sdp-attention или --opt-sub-quad-attention) и проверьте, не исчезла ли проблема. Если изображения стали нормальными, но генерация замедлилась — это плата за корректную точность.

Типичные ошибки и их решение

Большинство проблем на AMD сводится к нескольким повторяющимся сценариям. Разберём их по признакам.

  • 💥 torch.cuda.is_available() возвращает False — установлена стандартная CUDA-сборка PyTorch вместо ROCm, либо драйверы ROCm не установлены. Переустановите PyTorch с правильным индексом.
  • 🖼️ Чёрные или зелёные изображения — попробуйте --precision full --no-half и смените метод внимания.
  • 📉 Out of memory — снизьте разрешение, уменьшите батч до 1, добавьте --medvram или --lowvram.
  • 🐌 Генерация идёт на CPU — проверьте лог запуска: там явно указано, какое устройство выбрано. Часто причина в конфликте версий PyTorch.
  • 🧩 Расширения падают с ошибками — на DirectML и ZLUDA часть расширений несовместима; проверяйте требования каждого расширения к бэкенду.
⚠️ Внимание: не устанавливайте одновременно несколько версий PyTorch в одно окружение и не смешивайте пакеты из разных индексов (CUDA и ROCm). Это одна из самых частых причин «молчаливых» падений. При подозрении на конфликт пересоздайте виртуальное окружение с нуля.

Как ускорить генерацию на AMD

Когда базовый запуск состоялся, производительность можно заметно улучшить настройками. Начните с флагов запуска в webui-user.sh или webui-user.bat:

set COMMANDLINE_ARGS=--medvram --opt-sdp-attention --no-half-vae

Флаг --opt-sdp-attention включает эффективный механизм внимания, доступный в современных версиях PyTorch без установки xformers (который на AMD часто проблемен). Параметр --no-half-vae заставляет VAE-декодер работать в полной точности — это убирает артефакты ценой небольшого замедления. Также имеет смысл держать размер батча равным 1 и поднимать его только при явном запасе VRAM.

⚠️ Внимание: разгон видеокарты при работе с нейросетями может давать незаметные ошибки вычислений — изображения портятся без сообщений об ошибке. Если результаты внезапно деградировали, первым делом верните штатные частоты GPU и памяти.

Часто задаваемые вопросы

Можно ли запустить Stable Diffusion на AMD без Linux?

Да. Для Windows существуют DirectML-сборки Automatic1111, готовые решения вроде Amuse от AMD и экспериментальный вариант с ZLUDA. Скорость обычно ниже, чем у ROCm на Linux, но для SD 1.5 этого достаточно.

Почему PyTorch пишет про CUDA, хотя у меня AMD?

В ROCm-сборках PyTorch программный интерфейс исторически именуется «cuda», хотя под ним работает HIP/ROCm. Если torch.cuda.is_available() возвращает True на AMD-системе с ROCm — GPU определён корректно.

Сколько видеопамяти нужно для SDXL на AMD?

Ориентировочно от 12 ГБ для базовой генерации 1024×1024. С флагами экономии памяти можно работать и на 8 ГБ, но со снижением скорости и ограничениями на разрешение и расширения.

Работают ли xformers на видеокартах AMD?

Поддержка xformers на ROCm ограничена и зависит от версий; на DirectML и ZLUDA она, как правило, недоступна. Практичная альтернатива — встроенный механизм SDP-внимания через флаг --opt-sdp-attention.

Что делать, если моя карта не в списке поддерживаемых ROCm?

Проверьте актуальную матрицу совместимости AMD для вашей версии ROCm. Для ряда неофициально поддерживаемых карт применяют переменную HSA_OVERRIDE_GFX_VERSION с идентификатором ближайшего поддерживаемого чипа, но это обходной приём без гарантий стабильности. Если GPU старый или слабый, реалистичный запасной вариант — DirectML-сборка или генерация на CPU.