2021-06-09 Blender, OpenCL и Radeon ProRender
м |
м |
||
Строка 1: | Строка 1: | ||
Получилось завести под линуксом Blender на радеоне с OpenCL и Radeon ProRender. | Получилось завести под линуксом Blender на радеоне с OpenCL и Radeon ProRender. | ||
− | За последние лет 10 пытался это сделать несколько раз, ни разу не получалось. OpenCL всегда был болью и страданием, и вообще возникает ощущение, что на него все положили с прибором, включая самих AMD. Я, правда, всё надеюсь на улучшения, | + | За последние лет 10 пытался это сделать несколько раз, ни разу не получалось. OpenCL всегда был болью и страданием, и вообще возникает ощущение, что на него все положили с прибором, включая самих AMD. Я, правда, всё надеюсь на улучшения, так как монополизм нивидии не люблю по причине того, что они ставят палки в колёса разработчикам открытых драйверов. |
− | Сейчас наконец получилось. Получилось на карточке Radeon RX 5500M ( | + | Сейчас наконец получилось. Получилось на карточке Radeon RX 5500M («Navi 14»). Увы, не через Mesa — ей для работы на новых радеонах не хватает реализации libclc — не хватает файла /usr/lib/clc/gfx1012-amdgcn-mesa-mesa3d.bc и подобных. |
− | Но, по крайней мере, получилось без полного перехода на закрытый драйвер, | + | Но, по крайней мере, получилось без полного перехода на закрытый драйвер, то есть с использованием открытого модуля ядра. |
− | В общих | + | В общих чертах — достаточно скачать драйвер AMDGPU-Pro, извлечь пакеты и поставить всё, что относится к OpenCL, не ставя всё остальное. |
Для AMDGPU-Pro 20.40 это: | Для AMDGPU-Pro 20.40 это: | ||
Строка 17: | Строка 17: | ||
Для AMDGPU-Pro 20.50 это: | Для AMDGPU-Pro 20.50 это: | ||
* amdgpu-core, amdgpu-pro-core (пустые метапакеты) | * amdgpu-core, amdgpu-pro-core (пустые метапакеты) | ||
− | |||
* comgr-amdgpu-pro | * comgr-amdgpu-pro | ||
* hsa-runtime-rocr-amdgpu | * hsa-runtime-rocr-amdgpu | ||
− | * hsakmt- | + | * hsakmt-roct-amdgpu |
* ocl-icd-libopencl1-amdgpu-pro | * ocl-icd-libopencl1-amdgpu-pro | ||
* opencl-rocr-amdgpu-pro | * opencl-rocr-amdgpu-pro | ||
− | * libdrm-amdgpu-amdgpu1, libdrm-amdgpu-common, libdrm2-amdgpu требуются по зависимостям, но по факту не | + | * libdrm-amdgpu-amdgpu1, libdrm-amdgpu-common, libdrm2-amdgpu требуются по зависимостям, но по факту не нужны — можно поправить зависимости пакета hsakmt-runtime-rocr-amdgpu и эти пакеты не ставить. Можно поставить, вреда от них никакого. |
− | + | ||
− | + | Также стоит проверить, есть ли в /etc/ld.so.conf.d/ файл с содержимым | |
+ | <pre> | ||
+ | /opt/amdgpu-pro/lib/x86_64-linux-gnu | ||
+ | /opt/amdgpu-pro/lib/i386-linux-gnu | ||
+ | </pre> | ||
− | + | Но если установлены «пустые метапакеты», то должен быть (/etc/ld.so.conf.d/10-amdgpu-pro.conf). После чего выполнить sudo ldconfig. | |
− | + | Ещё понадобилось сделать <tt>adduser свой_юзер render</tt>, чтобы был доступ к устройству /dev/kfd. | |
+ | Далее ставим clinfo, запускаем его в консоли и видим вроде-как рабочий OpenCL. | ||
+ | Как monkey-патчить зависимости Debian-пакета: | ||
+ | <code-bash> | ||
+ | ar x hsakmt-roct-amdgpu_1.0.9-1234664_amd64.deb | ||
+ | tar -Jxf control.tar.xz | ||
+ | # нагло правим файл control прямо в текстовом редакторе и выпиливаем из него ненужную зависимость | ||
+ | tar -cJf control.tar.xz control md5sums shlibs triggers | ||
+ | ar r hsakmt-roct-amdgpu_1.0.9-1234664_amd64.deb control.tar.xz | ||
+ | </code-bash> | ||
− | + | И, наконец, как заставить заработать ProRender! | |
+ | Я поставил сборку Blender 2.93 с официального сайта и Radeon ProRender 3.1.0 «для Ubuntu 20», скачав его и установив через Blender Addons -> Install… попробовал включить его и увидел какой-то мутный питоновый бэктрейс. | ||
+ | Оказывается, проблема в том, что в ProRender есть файлик <tt>_cffi_backend.cpython-37m-x86_64-linux-gnu.so</tt> — он для Python 3.7, а официальная сборка идёт с Python 3.9. Соответственно, вся задача — найти <tt>_cffi_backend.cpython-39-x86_64-linux-gnu.so</tt>. Найти его легче всего в пакетах (<tt>apt-get install python3-cffi</tt>), там как раз тоже python 3.9, и сделать | ||
+ | <code-bash> | ||
+ | ln -s /usr/lib/python3/dist-packages/_cffi_backend.cpython-39-x86_64-linux-gnu.so ~/.config/blender/2.93/scripts/addons/rprblender/_cffi_backend.cpython-39-x86_64-linux-gnu.so | ||
+ | </code-bash> | ||
− | + | После этого ProRender завёлся. И даже Cycles с драйвером 20.50 завёлся, хотя с 20.40 падал (например, на демо-файле Barcelona Pabellon). | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Производительность, правда, всё равно средненькая — та самая Barcelona Pabellon на Radeon RX 5500M без CPU рендерится 16 минут, либо 8 минут на CPU+GPU (Ryzen 4800 HS + Radeon RX 5500M). Не понятно, что было на похорониксе [https://www.phoronix.com/scan.php?page=article&item=blender-281-optix&num=3 в бенчах нивидии] — участвовал ли там CPU. Если не участвовал, то производительность Radeon-а где-то на уровне GTX 1650. Если участвовал, то всё не так плохо и радеон+рузен вышли даже побыстрее GTX 1660. |
Версия 16:48, 8 июня 2021
Получилось завести под линуксом Blender на радеоне с OpenCL и Radeon ProRender.
За последние лет 10 пытался это сделать несколько раз, ни разу не получалось. OpenCL всегда был болью и страданием, и вообще возникает ощущение, что на него все положили с прибором, включая самих AMD. Я, правда, всё надеюсь на улучшения, так как монополизм нивидии не люблю по причине того, что они ставят палки в колёса разработчикам открытых драйверов.
Сейчас наконец получилось. Получилось на карточке Radeon RX 5500M («Navi 14»). Увы, не через Mesa — ей для работы на новых радеонах не хватает реализации libclc — не хватает файла /usr/lib/clc/gfx1012-amdgcn-mesa-mesa3d.bc и подобных.
Но, по крайней мере, получилось без полного перехода на закрытый драйвер, то есть с использованием открытого модуля ядра.
В общих чертах — достаточно скачать драйвер AMDGPU-Pro, извлечь пакеты и поставить всё, что относится к OpenCL, не ставя всё остальное.
Для AMDGPU-Pro 20.40 это:
- amdgpu-core, amdgpu-pro-core (пустые метапакеты)
- opencl-amdgpu-pro-comgr
- opencl-amdgpu-pro-icd
- ocl-icd-libopencl1-amdgpu-pro
Для AMDGPU-Pro 20.50 это:
- amdgpu-core, amdgpu-pro-core (пустые метапакеты)
- comgr-amdgpu-pro
- hsa-runtime-rocr-amdgpu
- hsakmt-roct-amdgpu
- ocl-icd-libopencl1-amdgpu-pro
- opencl-rocr-amdgpu-pro
- libdrm-amdgpu-amdgpu1, libdrm-amdgpu-common, libdrm2-amdgpu требуются по зависимостям, но по факту не нужны — можно поправить зависимости пакета hsakmt-runtime-rocr-amdgpu и эти пакеты не ставить. Можно поставить, вреда от них никакого.
Также стоит проверить, есть ли в /etc/ld.so.conf.d/ файл с содержимым
/opt/amdgpu-pro/lib/x86_64-linux-gnu /opt/amdgpu-pro/lib/i386-linux-gnu
Но если установлены «пустые метапакеты», то должен быть (/etc/ld.so.conf.d/10-amdgpu-pro.conf). После чего выполнить sudo ldconfig.
Ещё понадобилось сделать adduser свой_юзер render, чтобы был доступ к устройству /dev/kfd.
Далее ставим clinfo, запускаем его в консоли и видим вроде-как рабочий OpenCL.
Как monkey-патчить зависимости Debian-пакета:
ar x hsakmt-roct-amdgpu_1.0.9-1234664_amd64.deb tar -Jxf control.tar.xz # нагло правим файл control прямо в текстовом редакторе и выпиливаем из него ненужную зависимость tar -cJf control.tar.xz control md5sums shlibs triggers ar r hsakmt-roct-amdgpu_1.0.9-1234664_amd64.deb control.tar.xz
И, наконец, как заставить заработать ProRender!
Я поставил сборку Blender 2.93 с официального сайта и Radeon ProRender 3.1.0 «для Ubuntu 20», скачав его и установив через Blender Addons -> Install… попробовал включить его и увидел какой-то мутный питоновый бэктрейс.
Оказывается, проблема в том, что в ProRender есть файлик _cffi_backend.cpython-37m-x86_64-linux-gnu.so — он для Python 3.7, а официальная сборка идёт с Python 3.9. Соответственно, вся задача — найти _cffi_backend.cpython-39-x86_64-linux-gnu.so. Найти его легче всего в пакетах (apt-get install python3-cffi), там как раз тоже python 3.9, и сделать
ln -s /usr/lib/python3/dist-packages/_cffi_backend.cpython-39-x86_64-linux-gnu.so ~/.config/blender/2.93/scripts/addons/rprblender/_cffi_backend.cpython-39-x86_64-linux-gnu.so
После этого ProRender завёлся. И даже Cycles с драйвером 20.50 завёлся, хотя с 20.40 падал (например, на демо-файле Barcelona Pabellon).
Производительность, правда, всё равно средненькая — та самая Barcelona Pabellon на Radeon RX 5500M без CPU рендерится 16 минут, либо 8 минут на CPU+GPU (Ryzen 4800 HS + Radeon RX 5500M). Не понятно, что было на похорониксе в бенчах нивидии — участвовал ли там CPU. Если не участвовал, то производительность Radeon-а где-то на уровне GTX 1650. Если участвовал, то всё не так плохо и радеон+рузен вышли даже побыстрее GTX 1660.