Однажды захотел я установить Ubuntu 24.04 для локального запуска LLM-моделей. Поскольку моя система полностью на базе AMD (процессор Ryzen 7600 и видеокарта Radeon RX 9060 XT), логичным выбором стал стек ROCm
Однако быстрого и понятного руководства «от и до» для свежего Ubuntu 24.04 я не нашёл — даже нейросети давали устаревшие или фрагментированные советы.
В этой статье я подробно разберу весь путь: от установки драйверов ROCm до получения первого ответа от модели через Python-скрипт. Надеюсь, этот гайд сэкономит время тем, кто столкнётся с аналогичной задачей.
1. Установка системы и драйверов ROCm
Сам процесс установки Ubuntu 24.04 опущу — с ним справится каждый. Но был нюанс: с активной дискретной картой RX 9060 XT установщик Ubuntu отказался работать, постоянно зависал без видимых причин. Пришлось временно переключить монитор на встроенную графику (iGPU), установить систему, поставить драйверы и только затем вернуться к дискретной карте.
Первым и самым важным шагом является установка драйверов и ПО ROCm. Действуем по официальной инструкции AMD.
Открываем терминал и выполняем следующие команды:
# Скачиваем и устанавливаем пакет amdgpu-install
wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
sudo apt install ./amdgpu-install_7.1.1.70101-1-1_all.deb
# Обновляем списки пакетов и устанавливаем необходимые компоненты
sudo apt update
sudo apt install python3-setuptools python3-wheel
# Добавляем текущего пользователя в необходимые группы для доступа к GPU
sudo usermod -a -G render,video $LOGNAME
# Устанавливаем ROCm
sudo apt install rocmТеперь можно перезагрузиться и переключится на дискретную видеокарту
Небольшой бонус: я привык к переключению раскладки клавиатуры как в Windows (Alt+Shift). В Ubuntu по умолчанию такой опции нет, но её легко добавить одной командой:
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Alt>Shift_L']"2. Установка Docker
Для запуска llama.cpp я выбрал Docker-образ от AMD. Это удобно, изолированно и не засоряет систему.
Добавляем официальные репозитории Docker и устанавливаем:
# Добавляем GPG-ключ Docker
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Добавляем репозиторий в источники Apt
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
# Устанавливаем Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Проверяем, что служба запущена
sudo systemctl status docker
# Добавляем текущего пользователя в группу docker (чтобы не использовать sudo)
sudo usermod -aG docker $USER
newgrp dockerДля применения изменений с группой нужно выйти из системы и залогиниться заново (или просто запустить новую сессию терминала).
3. Запуск llama.cpp в Docker
Переходим к ключевому этапу — запуску модели. На странице документации AMD по llama.cpp доступно несколько образов. Для себя выбрал образ server.
Скачиваем образ:
docker pull rocm/llama.cpp:llama.cpp-b6652.amd0_rocm7.0.0_ubuntu24.04_serverСкачиваем модель. Например, с Hugging Face. Я использовал квантованную модель в формате GGUF (например,
gpt-oss-20b-UD-Q4_K_XL.gguf). Сохраните её в удобную директорию, например,/mnt/f_disk/llm.Запускаем контейнер. Команда выглядит объёмно, но каждый параметр важен для работы ROCm внутри контейнера:
docker run --privileged \ --network=host \ --device=/dev/kfd \ --device=/dev/dri \ --group-add video \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ --ipc=host \ --shm-size 16G \ -v /mnt/f_disk/llm:/data \ rocm/llama.cpp:llama.cpp-b6652.amd0_rocm7.0.0_ubuntu24.04_server \ -m /data/gpt-oss-20b-UD-Q4_K_XL.gguf \ --port 8081 \ --host 0.0.0.0 \ -n 512 \ --n-gpu-layers 999-v /mnt/f_disk/llm:/data— монтирует вашу папку с моделями в контейнер.-m /data/...— указывает путь к модели внутри контейнера.--n-gpu-layers 999— загружает максимально возможное количество слоёв на GPU для ускорения.
ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: Если в системе есть встроенная графика (iGPU), она может вызвать конфликт. Я столкнулся с ошибкой:
ggml_cuda_compute_forward: MUL_MAT failed
ROCm error: invalid device function
current device: 1Проблема решилась только отключением встроенной видеокарты в BIOS. Альтернативные методы (например, явное указание устройства через переменные окружения) в моём случае не сработали.
4. Тестирование через Python
Сервер запущен на порту 8081. Протестируем его, используя совместимый с OpenAI Python-клиент.
Устанавливаем необходимый пакет:
sudo apt install python3 python3-pip
pip install openaiСоздаём простой скрипт test_llama.py:
from openai import OpenAI
# Клиент настраивается на наш локальный сервер
client = OpenAI(
api_key="not-needed", # Токен не требуется, но поле должно быть
base_url="http://localhost:8081/v1"
)
response = client.chat.completions.create(
model="gpt-oss", # Имя модели может быть любым, оно игнорируется сервером
messages=[
{"role": "user", "content": "Напиши короткую сказку на ночь про единорога."}
]
)
print(response.choices[0].message.content)Запускаем скрипт:
python3 test_llama.pyЕсли всё настроено верно, вы получите ответ от локально работающей модели.
Необязательные, но полезные доработки
Текстовый редактор: В качестве удобного редактора кода я установил Geany:
sudo apt install geany geany-plugins
Проблемы с микрофоном: В Ubuntu я столкнулся с очень низкой чувствительностью аналогового микрофона. Проблема решилась переходом на USB-микрофон и ручной регулировкой уровней через
alsamixer(выкрутил gain до 80%).
И заключение
Надеюсь, этот гайд поможет другим энтузиастам как минимум потратить меньше времени :-). Если у вас есть более изящные решения для некоторых этапов (особенно для проблемы с iGPU) — делитесь в комментариях!
