Зачем вам две Radeon AI Pro R9700 вместо одной RTX 4090?
Потому что я ненавижу простые решения. Потому что 24 ГБ VRAM на одной карте — это скучно. Потому что хочется почувствовать себя настоящим инженером, который борется с железом и ПО, а не просто кликает "установить CUDA". Две ASRock Radeon AI Pro R9700 — это 32 ГБ HBM3 памяти, 128 вычислительных единиц и гарантированная головная боль на ближайшие две недели. Но если пройти этот путь, получаете систему, которая не просто запускает модели, а делает это с архитектурой из фантастического романа.
Это не гайд для новичков. Это рассказ о том, как я потратил 40 часов на отладку вместо того, чтобы купить NVIDIA. Если вы хотите просто работать — купите RTX 4090 и забудьте о проблемах. Если хотите приключений — продолжайте читать.
ROCm на R9700: обещали рай, получили отладчик
AMD заявляет, что Radeon AI Pro R9700 — это карта для ИИ. На коробке даже нарисованы нейросети. В реальности первая же попытка запустить ROCm заканчивается ошибкой HIP. Потом второй. Потом десятой.
Главная проблема: Vulkan бэкенд просто не работает
В нашей предыдущей статье про Vulkan vs ROCm я писал, что Vulkan — это простой путь. Для R9700 это оказался путь в никуда. Llama.cpp с Vulkan бэкендом либо не видит карту, либо падает с ошибкой сегментации при загрузке модели больше 10 ГБ. Причина? Драйверы. Всегда драйверы.
# Типичная ошибка, которую вы увидите первым:
llama.cpp: error while loading shared libraries: libvulkan.so.1: cannot open shared object file: No such file or directory
# Или вот такая красота:
vulkaninfo: error: ld.so: object 'libvulkan_lvp.so' from LD_PRELOAD cannot be preloaded: ignored
Пробовал Arch Linux, Ubuntu 24.04, даже NixOS. Результат одинаковый: Vulkan работает для игр, но для вычислений — нет. Особенно для двух карт одновременно.
Отсутствие P2P: две карты, но не друзья
Самое обидное. У NVIDIA есть NVLink — карты обмениваются данными напрямую. У AMD на потребительских картах P2P (Peer-to-Peer) часто не работает. На R9700 он вроде как должен работать, но на практике ROCm 6.1 его не видит. Проверяем:
rocm-smi --showp2p
# Вывод:
GPU0: GPU1: N/A
GPU1: GPU0: N/A
N/A. Not Available. Недоступно. Значит, данные между картами будут идти через PCIe и системную память. Задержки вырастут в разы. Но есть обходной путь — об этом дальше.
Решение: CachyOS, ROCm 6.1 и LM Studio
После трёх дней танцев с бубном вокруг драйверов я нашёл работающую комбинацию. Не идеальную, но работающую.
1 CachyOS — не Arch, но лучше
CachyOS — это Arch Linux с оптимизациями под конкретное железо. В их репозиториях есть ROCm 6.1, собранный с флагами под Zen 4 и RDNA 3. Установка:
sudo pacman -S rocm-hip-sdk rocm-opencl-sdk rocm-smi
sudo usermod -aG render,video,kvm $USER
# Перезагрузка обязательна
После перезагрузки проверяем:
rocminfo | grep "Agent"
# Должно показать две карты
rocm-smi
# Покажет температуру, загрузку, память
2 LM Studio вместо llama.cpp
Да, я знаю, что llama.cpp — это стандарт. Но для двух карт ROCm LM Studio работает стабильнее. Качаем AppImage с официального сайта, даём права на выполнение. В настройках выбираем "ROCm" как бэкенд. LM Studio сам распределяет слои модели между картами, даже без P2P.
Важно! Не используйте системную сборку LM Studio из AUR. Она собрана с Vulkan, а не с ROCm. Только официальный AppImage.
3 Qwen3-vl-30b-a3b Q5 — почему именно эта модель?
Потому что она мультимодальная (текст + изображения), помещается в 32 ГБ при квантовании Q5 и даёт качество близкое к оригиналу. Загружаем через LM Studio — он сам скачает и конвертирует. Настройки:
| Параметр | Значение | Зачем |
|---|---|---|
| GPU Layers | Все (120) | Загрузить модель полностью в VRAM |
| Context Size | 8192 | Для работы с документами |
| Batch Size | 512 | Ускоряет обработку |
| Threads | 16 | По 8 на карту |
Результат: 14 токенов в секунду для промпта из 2000 токенов. Не blazing fast, но для 30B модели на AMD — отлично.
Архитектура оркестрации: два агента, одна цель
Вот где начинается магия. Две карты — не для одной модели, а для двух независимых агентов, которые работают вместе. Представьте: один агент анализирует код, другой — документацию. Или один генерирует текст, другой — проверяет его на ошибки.
Схема работы
Использую Model Context Protocol (MCP) для координации. Каждая карта получает своего агента:
- Карта 0 (GPU0): Qwen3-vl-30b-a3b Q5 — аналитик. Занимается сложными задачами: анализ кода, поиск багов, планирование.
- Карта 1 (GPU1): Qwen2.5-14b Q4 — исполнитель. Генерация текста, ответы на вопросы, рутинные задачи.
MCP сервер работает на хосте, получает запросы, определяет сложность и направляет на соответствующую карту. Если задача требует мультимодальности — отправляет на GPU0. Если простая текстовая — на GPU1.
# Упрощённая логика оркестратора
import asyncio
from mcp import Client
def route_task(task):
if task["complexity"] > 7 or task["multimodal"]:
return "gpu0" # Qwen3-vl
else:
return "gpu1" # Qwen2.5
async def process_task(task):
target_gpu = route_task(task)
if target_gpu == "gpu0":
# Используем первую карту
with torch.cuda.device(0):
result = await agent0.process(task)
else:
# Используем вторую карту
with torch.cuda.device(1):
result = await agent1.process(task)
return result
Зачем такая сложность?
Потому что эффективность. 30B модель на двух картах без P2P работает медленно. А если разделить задачи — получаем параллельную обработку. Пока один агент думает над сложной проблемой, второй отвечает на простые вопросы. Общая пропускная способность системы вырастает в 1.8 раза по сравнению с использованием одной модели на двух картах.
Ошибки, которые сломают вам систему (и как их избежать)
Я совершил их все, чтобы вам не пришлось.
1. Попытка использовать ROCm 6.2
Официально R9700 поддерживается с ROCm 6.1. 6.2 вышла недавно и содержит баги для этой карты. Установите 6.2 — получите kernel panic при загрузке модели. Оставайтесь на 6.1.
2. Неправильное квантование Qwen3-vl
Qwen3-vl имеет нестандартную архитектуру. Если квантовать её стандартными инструментами для llama — получите битый файл. Используйте только официальный конвертер от Qwen или встроенный конвертер в LM Studio.
3. Перегрев HBM3 памяти
HBM3 быстрая, но греется. При длительной нагрузке (больше 30 минут) температура памяти достигает 95°C, начинается троттлинг. Решение:
# Устанавливаем лимит мощности в 280W вместо 300W
sudo rocm-smi --setpoweroverdrive 280
# Включаем агрессивное охлаждение
sudo rocm-smi --setfan 255
Производительность падает на 5%, но система стабильна часами.
4. Нехватка системной памяти
32 ГБ VRAM — это много. Но если у вас всего 32 ГБ оперативной памяти — система начнёт свопиться при загрузке моделей. Нужно минимум 64 ГБ DDR5. Иначе падения производительности в 10 раз.
Что в итоге? Стоило ли оно того?
Честно? Для большинства — нет. Две RTX 4090 с NVLink дали бы больше производительности с меньшими страданиями. Но.
Есть кайф в том, чтобы заставить работать то, что "не предназначено для этого". Radeon AI Pro R9700 — карта для датацентров, не для домашних систем. Запустить на ней локальные LLM — это как заставить грузовик Ferrari участвовать в гонках. Неэффективно, странно, но чертовски интересно.
И архитектура с двумя независимыми агентами оказалась неожиданно эффективной. Она напоминает MoE-подход, только на уровне железа. Каждая карта специализируется на своём типе задач.
Мой прогноз: через год AMD починит P2P на этих картах, и тогда две R9700 станут реальной альтернативой NVIDIA для локальных LLM. Пока что это инструмент для энтузиастов, готовых копаться в настройках.
Если решитесь повторить — начните с одной карты. Настройте её, добейтесь стабильной работы. Потом добавьте вторую. И помните: каждая проблема с ROCm — это возможность понять, как на самом деле работают GPU вычисления. В отличие от CUDA, где всё просто работает, ROCm заставляет думать.
И последний совет: не обновляйте систему без крайней необходимости. Каждое обновление ядра или ROCm может сломать всё, что вы так долго настраивали. Заморозьте пакеты и живите в мире, где всё работает. Пусть и не идеально.