Strix Halo ROCm ошибка: запуск 120B модели на 128GB RAM | AiManual
AiManual Logo Ai / Manual.
29 Дек 2025 Гайд

Ошибка 'Unable to allocate ROCm0 buffer' на Strix Halo: как заставить 120B модель работать на 128GB RAM

Полное руководство по исправлению ошибки 'Unable to allocate ROCm0 buffer' на AMD Strix Halo. Оптимизация VRAM, настройка ROCm и запуск больших LLM моделей.

Проблема: почему 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-инференса
💡
Если вы работаете с multi-modal моделями, проблема усугубляется, так как требуется одновременная обработка разных типов данных.

Полное решение: пошаговый план настройки

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 для специфичных операций
🎓
Если вы только начинаете работать с ИИ, рекомендую бесплатный курс по AI-агентам, где разбираются основы оптимизации моделей.

Итог: что дает правильная настройка

После применения всех шагов вы получите:

  1. Работающую 120B модель на Strix Halo с 128GB RAM
  2. Скорость инференса 5-15 токенов/сек (в зависимости от квантования)
  3. Стабильную работу без ошибок памяти
  4. Возможность запуска нескольких моделей одновременно
  5. Подготовленную систему для специализированных AI-задач

Strix Halo — мощная платформа для AI-разработки, но требует тонкой настройки. Потратив несколько часов на оптимизацию, вы получите систему, способную конкурировать с серверными решениями за fraction стоимости.