Проблема: почему Strix Halo не может запустить 120B модель
Вы только что собрали мощнейшую систему на базе AMD Strix Halo с 128GB оперативной памяти, установили ROCm и попытались запустить 120-миллиардную языковую модель. И вместо долгожданного инференса получаете фатальную ошибку:
RuntimeError: Unable to allocate ROCm0 buffer: out of memory
Requested: 48.00 GB, Available: 42.33 GB
Парадокс? Система сообщает, что доступно 42GB, хотя у вас установлено 128GB. Дело в том, что ROCm по умолчанию резервирует память под конкретные задачи, и без правильной настройки вы не сможете использовать весь потенциал системы.
Важно: Эта ошибка возникает не из-за недостатка физической памяти, а из-за неправильного распределения между VRAM и RAM в многочиповых конфигурациях AMD.
Архитектура Strix Halo: почему стандартные подходы не работают
Strix Halo — это не обычная система с дискретной видеокартой. Это монолитная архитектура с интегрированной графикой, где:
- Память унифицирована (UMA — Unified Memory Architecture)
- Нет разделения на VRAM и RAM в классическом понимании
- ROCm видит память как единый пул, но с ограничениями на выделение
- По умолчанию драйверы настроены для игр, а не для AI-инференса
Полное решение: пошаговый план настройки
1 Проверка и обновление системы
Сначала убедитесь, что у вас установлены последние версии драйверов и ROCm:
# Проверяем версию ROCm
rocminfo | grep "ROCm Version"
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем последний ROCm (пример для Ubuntu 22.04)
wget https://repo.radeon.com/amdgpu-install/6.1/ubuntu/jammy/amdgpu-install_6.1.60100-1_all.deb
sudo apt install ./amdgpu-install_6.1.60100-1_all.deb
sudo amdgpu-install --usecase=rocm --no-dkms
2 Настройка переменных окружения ROCm
Ключевой шаг — правильная настройка переменных окружения. Добавьте в ~/.bashrc или ~/.zshrc:
# Увеличиваем лимит выделяемой памяти
export HSA_OVERRIDE_GFX_VERSION=11.0.0
export HCC_AMDGPU_TARGET=gfx1103
# Разрешаем использование всей системной памяти
export ROCM_VISIBLE_DEVICES=0
export HSA_ENABLE_SDMA=0
# Настройка пула памяти для больших моделей
export PYTORCH_HIP_ALLOC_CONF=max_split_size_mb:512,garbage_collection_threshold:0.9
# Оптимизация для Strix Halo
export HIP_VISIBLE_DEVICES=0
export HIP_DEVICE=0
Примените изменения:
source ~/.bashrc
3 Конфигурация ядра Linux для больших моделей
Для работы с 120B моделями нужно увеличить лимиты ядра:
# Редактируем конфигурацию sysctl
sudo nano /etc/sysctl.conf
# Добавляем в конец файла:
# Увеличиваем shared memory
kernel.shmmax = 137438953472
kernel.shmall = 33554432
# Увеличиваем лимиты памяти для процессов
vm.overcommit_memory = 1
vm.overcommit_ratio = 95
# Оптимизация для ROCm
vm.nr_hugepages = 1024
vm.hugetlb_shm_group = 1000
Применяем настройки и перезагружаемся:
sudo sysctl -p
sudo reboot
4 Оптимизация загрузки модели с квантованием
Даже с 128GB RAM 120B модель в FP16 (240GB) не поместится. Используем квантование:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Настройка устройства для Strix Halo
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")
# Загрузка с 4-битным квантованием (снижает требования до ~60GB)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-120B",
torch_dtype=torch.float16,
device_map="auto",
load_in_4bit=True, # Ключевой параметр!
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
max_memory={0: "120GB", "cpu": "128GB"}
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-120B")
# Принудительное использование unified memory
torch.cuda.set_per_process_memory_fraction(0.95, device=0)
Совет: Для сложных задач, таких как финансовый ИИ-трейдер, используйте 8-битное квантование для большей точности вычислений.
5 Настройка vLLM для максимальной производительности
vLLM — оптимальный движок для инференса на Strix Halo:
# Установка vLLM с поддержкой ROCm
pip install vllm --extra-index-url https://rocm-pypi.github.io/vllm/
from vllm import LLM, SamplingParams
# Специальная конфигурация для Strix Halo
llm = LLM(
model="meta-llama/Llama-3.1-120B",
quantization="awq", # Активационно-взвешенное квантование
dtype="half",
gpu_memory_utilization=0.95,
max_model_len=8192,
enable_prefix_caching=True,
swap_space=64, # Использование SSD как расширенной памяти
tensor_parallel_size=1 # Для Strix Halo используем 1
)
# Генерация текста
sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=512)
outputs = llm.generate(["Explain quantum computing in simple terms"], sampling_params)
Распространенные ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| HIP_ERROR_OutOfMemory | Драйвер не видит всю память | Установить amdgpu-dkms и пересобрать initramfs |
| CUDA out of memory | PyTorch использует CUDA вместо ROCm | Установить torch с поддержкой ROCm: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.1 |
| Slow performance | Неоптимальные настройки памяти | Настроить Huge Pages и увеличить vm.max_map_count |
Мониторинг и оптимизация производительности
После настройки важно отслеживать использование ресурсов:
# Мониторинг памяти ROCm
rocm-smi --showmeminfo
# Просмотр использования unified memory
cat /sys/class/kfd/kfd/topology/nodes/0/mem_banks/0/used_memory
# Мониторинг в реальном времени
watch -n 1 "cat /proc/meminfo | grep -E 'MemTotal|MemFree|HugePages'"
Для автоматизации мониторинга можно использовать подходы из DevOps для ИИ, создавая системы авто-оптимизации.
Дополнительные оптимизации для продвинутых пользователей
- Настройка zRAM: Создание сжатого swap в RAM для дополнительного буфера
- Использование NVMe как расширенной памяти: Настройка swap на быстром SSD для моделей >120B
- Оптимизация компилятора: Пересборка ROCm с флагами оптимизации под Zen 5
- Кастомные ядра: Использование Triton с поддержкой ROCm для специфичных операций
Итог: что дает правильная настройка
После применения всех шагов вы получите:
- Работающую 120B модель на Strix Halo с 128GB RAM
- Скорость инференса 5-15 токенов/сек (в зависимости от квантования)
- Стабильную работу без ошибок памяти
- Возможность запуска нескольких моделей одновременно
- Подготовленную систему для специализированных AI-задач
Strix Halo — мощная платформа для AI-разработки, но требует тонкой настройки. Потратив несколько часов на оптимизацию, вы получите систему, способную конкурировать с серверными решениями за fraction стоимости.