Написал небольшое howto по установке драйверов AMD Radeon RX580 в Debian 9
Интересны комментарии, особенно владельцев карты, но и в любом случае, может где ошибся или что.
Рассматривается установка свободных драйверов OpenGL и проприетарных OpenCL на ветку stable ОС Debian 9.6 (Stretch) с ядром 4.9.0-8. Проприетарных OpenCL, поскольку карта ставится в машину с процессором старее Haswell/Ryzen, которые не поддерживаются ROCm.
Информация также должна годиться для RX570 и RX470, RX480. И скорее всего, для всех остальных RX 4xx, RX 5xx, кроме RX 590 (но может и с ней сразу заработает) - эта карточка стоит несколько особняком. В конце есть пара теоретических (самой карты нет и не пробовал) соображений, что может понадобиться, чтобы она заработала.
Сразу скажу, что информации на официальной вики проекта слишком мало https://wiki.debian.org/GraphicsCard#AMD.2FATI
В терминологии AMD у этой карты архитектура «polaris», она же «Arctic Islands» она же GCN 4th gen (4-е поколение Graphics Core Next). К ней относятся карты RX 460, RX 470, RX 480, RX 540, RX 550, RX 560, RX 570, RX 580
Микроархитектура карт (RX 470, RX 480) == (RX 570, RX580) практически до неразличимости на программно-драйверном уровне. Довольно много подробностей на эту тему можно прочесть здесь: https://wiki.gentoo.org/wiki/AMDGPU. Версия фирмвари от AMD - polaris10 для amd 480 и amd 580 (могут быть разные буквенные индексы у фирмвари).
Так как до этого на компьютере стояли карты от Nvidia надо избавиться от их драйверов. Рекомендации wiki Debian может оказаться недостаточно.
Но по порядку. Все делаем от root, разумеется.
Установка свободного драйвера OpenGL:
- Добавляем contrib и non-free в репозиторий (/etc/apt/sources.list), если еще этого не сделано.
- Добавляем dpkg --add-architecture i386
В принципе необязательно, но весьма желательно для некоторых пакетов. В том числе для wine - apt-get update
- apt-get install xserver-xorg-video-amdgpu libdrm-amdgpu1 libgl1-mesa-dri libgl1-mesa-glx glx-alternative-mesa
- apt-get install -t sid firmware-amd-graphics
-t sid опционален. (но сам пакет ставить нужно) У меня RX580 и с фирмварью из stable работает, но возможно кому-то.нужны более новые бинарники к карте. Впрочем, вполне можно не подключать testing и sid ветки репозиториев, если отдельно скачать пакет от sid и содержимое /lib/firmware/amdgpu добавить вручную. Также фирмварь появится и при установке проприетарных драйверов, даже только OpenCL. - Проверяем, что модуля nvidia нет в списке /etc/initramfs-tools/modules
Если он там есть удаляем или коментим # - Редактируем /etc/modprobe.d/nvidia.conf комментируем все записи. Добавляем строчку blacklist nvidia
- Выполняем update-glx --config glx
Выбираем среди альтернатив (скорее всего от nvidia, если была карта nvidia) mesa - Reboot
Должно заработать, если не заработало, то я даже не знаю. Надо будет внимательно читать лог /var/log/Xorg.1.log и смотреть, что там делает строчка nvidia =)
glxinfo -B
name of display: :0
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: X.Org (0x1002)
Device: AMD POLARIS10 (DRM 3.20.0 / 4.9.0-8-amd64, LLVM 3.9.1) (0x67df)
Version: 13.0.6
Accelerated: yes
Video memory: 8171MB
Unified memory: no
Preferred profile: core (0x1)
Max core profile version: 4.3
Max compat profile version: 3.0
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.1
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD POLARIS10 (DRM 3.20.0 / 4.9.0-8-amd64, LLVM 3.9.1)
OpenGL core profile version string: 4.3 (Core Profile) Mesa 13.0.6
OpenGL core profile shading language version string: 4.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL version string: 3.0 Mesa 13.0.6
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
Добавляем apt-get install mesa-vdpau-drivers libvdpau-va-gl1 для ускорения фильмов.
Вот не помню, нужно ли было для свободного драйвера ставить заголовки ядра или только для проприетарного, а также llvm. Но не исключено, что потребуется.
Добавление возможностей OpenCL
- Берем пакет 17.50 для Ubuntu. Официально драйвера рассчитаны на Ubuntu, SuSe или RHEL c CentOS, так как Ubuntu весьма родственна Debian, она наиболее совместимая. При этом 18-я версия для Stretch (Debian 9) не подойдет. 17.50 вроде последняя среди 17-ой версии. Версия 17.50 почему-то не находится явно по ссылкам для для предыдущих версий на сайте amd
Поэтому скачиваем по прямой ссылке, не забудьте referer - без него не даст скачать.wget -c -O amdgpu-pro-17.50-511655.tar.xz --referer=http://support.amd.com https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.50-511655.tar.xz
Проверяем по контрольной сумме корректность скачивания (есть сообщения, что часто отдается битый файл, тогда надо повторять до успеха).md5sum 7c3da10af92f6e259bd5d2b250a70c91 amdgpu-pro-17.50-511655.tar.xz sha256sum a623f95b7bdbad981e19bd30304f7943f8827d230b702dc5b580793efe70ea07 amdgpu-pro-17.50-511655.tar.xz
- Создаем каталог
#mkdir /var/opt/amdgpu-pro-local/ - Распаковываем туда содержимое скаченных драйверов
tar -xpJf amdgpu-pro-17.50-511655.tar.xz --strip=1 -C /var/opt/amdgpu-pro-local/
Обратите внимание на опцию --strip=1 - она убирает первый уровень вложенности каталогов, без нее внутри был бы создан вложенный каталог с пакетами, а этого нам не надо. - Устанавливаем нужные права владельца:
chown -Rv _apt:root /var/opt/amdgpu-pro-local/
Важно. Без этого потом установка будет валиться с ошибкой типа- причем в том числе и если запустить установочный скрипт внутри пакета с драйверами, даже если там поменять ubuntu на debian. Вот все вроде будет нормально, но зафейлится в процессе установки на правах для установщика пакета.N: Download is performed unsandboxed as root as file '/var/opt/amdgpu-pro-local/./amdgpu-core_17.50-511655_all.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
- Создаем файл /etc/apt/sources.list.d/amdgpu-pro-local.list
echo 'deb [ trusted=yes ] file:/var/opt/amdgpu-pro-local/ ./' > /etc/apt/sources.list.d/amdgpu-pro-local.list
- apt-get update
- apt-get install amdgpu-core amdgpu-dkms amdgpu-pro-core clinfo-amdgpu-pro ids-amdgpu libdrm-amdgpu-amdgpu1 libdrm2-amdgpu libopencl1-amdgpu-pro
Внимательно следим за процессом установки, компиляция чере dkms драйвера и его установка должны быть безошибочными. Это ключевой момент, без чего работать ничего не будет. Разумеется должны быть установлены заголовки ядра linux-headers-4.9.0-8-common и компиляторы со всем необходимым. dkms вроде сам добавится через зависимости, если еще не стоит. - Опционально. Можно переустановить пакет или скопировать из других драйверов содержимое с более свежим firmware для amd, так как amdgpu-dkms содержит каталог firmware которым перепишет старые бинарники.
- reboot
Теперь OpenCL версии 1.2 доступно. Можно для проверки запустить clinfo или поставить какой-нибудь пакет, его использующий, например, hashcat и запустить бенчмарк hashcat -b
Некоторые мысли по поводу RX 590. Я не знаю, может этого и не нужно или наоборот этого не хватит для работы, просто предполагаю.
В принципе, RX 590 почти тоже самое, что и RX580, но могут быть нужны новые фирмвари, которые можно взять из новейших драйверов 18.50, распотрошив файл amdgpu-dkms_18.50-708488_all.deb и достав их из каталога usr/src/amdgpu-18.50-708488/firmware/amdgpu скопировав затем в /lib/firmware/amdgpu
Также в пакете ids-amdgpu от 17.50 есть файл amdgpu.ids установленный в /opt/amdgpu/share/libdrm/amdgpu.ids - его полезно будет заменить таким же из пакета libdrm-amdgpu-common_1.0.0-708488_all.deb
Чего я не понял, это почему для OpenCL пишется что-то вроде Memory : 4048/7916 MB allocatable
Куда 4Гб памяти дели? Или так и должно быть, там какое-то разделение есть на основную и константную, может просто не понял чего насчет работы OpenCL.