ПО для GPU
Настройка ROCm для AMD Instinct MI355X
Ваш сервер MI355X выдаётся с образом ROCm. Эти шаги помогут убедиться, что все восемь GPU исправны, а затем запустить PyTorch, vLLM и задачи на нескольких GPU.
На этой странице
Это руководство по настройке ROCm на серверах AMD Instinct MI355X проведёт вас от первого входа до запуска PyTorch, vLLM и задач на нескольких GPU. Наши gfx950.
Проверка GPU с помощью rocm-smi , amd-smi и rocminfo
rocm-smi
amd-smi list
amd-smi static
rocminfo | grep -E 'Marketing Name|gfx'
В выводе и должно быть восемь GPU с номерами от 0 до 7. rocminfo перечисляет процессоры и все GPU в качестве агентов, и у каждого GPU должно быть указано gfx950 дополнительно выводит подробные сведения о каждом GPU. О регулярных проверках читайте в руководстве по мониторингу GPU.
Добавление пользователей в группы render и video
Пользователь root может работать с GPU напрямую. Остальным пользователям нужен доступ к /dev/kfd и /dev/dri, который ROCm предоставляет через группы render и video. Для каждого пользователя, кроме root (в примере — bob), выполните:
sudo usermod -aG render,video bob
# after bob logs out and back in
groups bob
В выводе должны быть render и video. Без этих групп программы ROCm не находят GPU или завершаются с ошибками доступа к /dev/kfd.
Запуск PyTorch в контейнерах ROCm или из wheel-пакетов
Проще всего взять контейнер PyTorch от AMD: в него уже входят пользовательские компоненты ROCm подходящей версии. Если в вашем образе нет Docker, сначала установите его (в Ubuntu — sudo apt install ). Что означают флаги устройств, объясняется в руководстве по контейнерам Docker с GPU.
docker run -it --rm \
--device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --security-opt seccomp=unconfined \
rocm/pytorch:latest
Внутри контейнера проверьте, что видит PyTorch:
python3 -c "import torch; print(torch.version.hip, torch.cuda.device_count(),
torch.cuda.get_device_name(0))"
Вы увидите версию HIP, число 8 и название GPU. PyTorch на ROCm сохраняет API torch.cuda, поэтому большая часть кода, написанного для CUDA, работает без изменений. Для воспроизводимых сборок закрепите конкретный тег из репозитория rocm/pytorch вместо latest.
sudo apt install -y python3-venv
python3 -m venv ~/venvs/rocm
source ~/venvs/rocm/bin/activate
pip install torch --index-url https://download.pytorch.org/whl/rocmX.Y
Подставьте эту версию вместо rocmX.Y и убедитесь, что выпуск PyTorch поддерживает MI355X. Если нет, вы увидите ошибку hipErrorNoBinaryForGpu.
Выбор GPU, которые видит процесс
HIP_VISIBLE_DEVICES=0,1 python3 train.py
# the same inside a container
docker run --rm --device=/dev/kfd --device=/dev/dri --group-add video \
-e HIP_VISIBLE_DEVICES=0,1 rocm/pytorch:latest \
python3 -c "import torch; print(torch.cuda.device_count())"
Команда с контейнером должна вывести 2. Внутри процесса видимые GPU нумеруются заново, начиная с 0. HIP учитывает и CUDA_VISIBLE_DEVICES, а ROCR_VISIBLE_DEVICES отбирает устройства на более низком уровне; задавайте только одну из этих переменных, чтобы не запутаться в их сочетаниях. Чтобы запустить две задачи параллельно, выделите каждой свой набор GPU, например с 0 по 3 и с 4 по 7.
Инференс моделей с vLLM в контейнере ROCm
docker run -d --name vllm \
--device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --security-opt seccomp=unconfined \
-p 127.0.0.1:8000:8000 \
-v /data/hf:/data/hf -e HF_HOME=/data/hf \
rocm/vllm:latest \
vllm serve Qwen/Qwen2.5-72B-Instruct --tensor-parallel-size 8 \
--host 0.0.0.0 --port 8000
Следите за запуском с помощью docker logs , затем выполните curl http://127.0.0.1:8000/v1/models: в списке должна появиться модель. Внутри контейнера vLLM слушает все интерфейсы, а благодаря привязке к 127.0.0.1
Обмен данными между GPU с RCCL
RCCL — библиотека коллективных операций из состава ROCm, которая реализует API NCCL. PyTorch на ROCm использует её, когда вы выбираете бэкенд nccl, поэтому скрипты DDP и FSDP, запущенные через torchrun , работают без изменений, а RCCL читает привычные переменные NCCL, например NCCL_DEBUG=INFO
sudo apt install -y git build-essential
git clone https://github.com/ROCm/rccl-tests.git
cd rccl-tests
make
./build/all_reduce_perf -b 8 -e 8G -f 2 -g 8
В столбцах #wrong в каждой строке должен быть 0. Как читать столбцы с пропускной способностью, объясняется в руководстве по тестам NCCL. Для многоузловых задач на нескольких серверах попросите в примечаниях для наших инженеров настроить между серверами частную сеть, когда будете их развёртывать, или создайте тикет в личном кабинете, если серверы вам уже выданы.
Устранение неполадок
- hipErrorNoBinaryForGpu. В сборке нет кода для
gfx950. Используйте образ на базе ROCm 7.x или wheel-пакет с поддержкой MI355X. - Ошибка «Permission denied» при доступе к /dev/kfd или GPU не найдены. Добавьте пользователя в группы render и video и войдите заново. В Docker передайте оба флага
.--device - В списке меньше восьми GPU. Выполните
sudo dmesg | grepи отправьте результат вместе с выводом-i amdgpu в тикете в поддержку через личный кабинет.amd-smi list
Не получается?
Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.