2021-06-09 Blender, OpenCL и Radeon ProRender

Материал из YourcmcWiki
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
 
Получилось завести под линуксом Blender на радеоне с OpenCL и Radeon ProRender.
 
Получилось завести под линуксом Blender на радеоне с OpenCL и Radeon ProRender.
  
За последние лет 10 пытался это сделать несколько раз, ни разу не получалось. OpenCL всегда был болью и страданием, и вообще возникает ощущение, что на него все положили с прибором, включая самих AMD. Я, правда, всё надеюсь на улучшения, т.к. монополизм нивидии не люблю по причине того, что они ставят палки в колёса разработчикам открытых драйверов.
+
За последние лет 10 пытался это сделать несколько раз, ни разу не получалось. OpenCL всегда был болью и страданием, и вообще возникает ощущение, что на него все положили с прибором, включая самих AMD. Я, правда, всё надеюсь на улучшения, так как монополизм нивидии не люблю по причине того, что они ставят палки в колёса разработчикам открытых драйверов.
  
Сейчас наконец получилось. Получилось на карточке Radeon RX 5500M ("Navi 14"). Увы, не через Mesa - ей для работы на новых радеонах не хватает реализации libclc - не хватает файла /​usr/lib/clc/gfx1012-amdgcn-mesa-mesa3d.bc и подобных.
+
Сейчас наконец получилось. Получилось на карточке Radeon RX 5500M («Navi 14»). Увы, не через Mesa — ей для работы на новых радеонах не хватает реализации libclc — не хватает файла /​usr/lib/clc/gfx1012-amdgcn-mesa-mesa3d.bc и подобных.
  
Но, по крайней мере, получилось без полного перехода на закрытый драйвер, т.е. с использованием открытого модуля ядра.
+
Но, по крайней мере, получилось без полного перехода на закрытый драйвер, то есть с использованием открытого модуля ядра.
  
В общих чертах - достаточно скачать драйвер AMDGPU-Pro, извлечь пакеты и поставить всё, что относится к OpenCL, не ставя всё остальное.
+
В общих чертах — достаточно скачать драйвер 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 (пустые метапакеты)
* opencl-rocr-amdgpu-pro
 
 
* comgr-amdgpu-pro
 
* comgr-amdgpu-pro
 
* hsa-runtime-rocr-amdgpu
 
* hsa-runtime-rocr-amdgpu
* hsakmt-runtime-rocr-amdgpu
+
* 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 требуются по зависимостям, но по факту не нужны, - теоретически можно поправить зависимости пакета hsakmt-runtime-rocr-amdgpu и эти пакеты не ставить
+
* libdrm-amdgpu-amdgpu1, libdrm-amdgpu-common, libdrm2-amdgpu требуются по зависимостям, но по факту не нужны — можно поправить зависимости пакета hsakmt-runtime-rocr-amdgpu и эти пакеты не ставить. Можно поставить, вреда от них никакого.
* rocm-device-libs-amdgpu-pro, llvm-amdgpu-pro-rocm, libllvm-amdgpu-pro-rocm - не уверен на 100%, что нужны, но поставил до кучи
+
  
Ещё понадобилось сделать <tt>adduser свой_юзер render</tt>, чтобы был доступ к /dev/kmt.
+
Также стоит проверить, есть ли в /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.
  
В общем, плохая новость: на Mesa OpenCL для новых карточек (Navi и подобных) не работает.
+
Ещё понадобилось сделать <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>
  
Интересный вопрос - как завести на Linux, во-первых, Radeon-овский OpenCL, а во-вторых, Radeon ProRender для блендера.
+
И, наконец, как заставить заработать 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>
  
Очень меня расстраивает тот факт, что Blender-овский Cycles на Radeon-ах работает, как говно.
+
После этого ProRender завёлся. И даже Cycles с драйвером 20.50 завёлся, хотя с 20.40 падал (например, на демо-файле Barcelona Pabellon).
 
+
Давным-давно хотел добиться работы Blender-а на линуксе с Radeon-ом. Наконец-таки умудрился. Конкретно - на Radeon RX 5500M ("Navi 14").
+
 
+
Правда, увы,
+
 
+
 
+
 
+
Hi, just a note for future users who face the same issue on how I solved it.
+
I installed Blender 2.93 from the official site on Debian testing and Radeon ProRender 3.1.0 "for Ubuntu 20" using Blender Addons -> Install...
+
It showed me this error message. Installing python3-cffi via apt-get didn't help.
+
The problem was that Radeon ProRender contains _cffi_backend.cpython-37m-x86_64-linux-gnu.so which is for Python 3.7 and official Blender uses Python 3.9. So I linked /usr/lib/python3/dist-packages/_cffi_backend.cpython-39-x86_64-linux-gnu.so to ~/.config/blender/2.93/scripts/addons/rprblender/_cffi_backend.cpython-39-x86_64-linux-gnu.so and it started to work.
+
By the way, I use a closed-source OpenCL driver from AMDGPU-Pro 20.40 with open-source 3D and kernel drivers.
+
I.e. it's sufficient to install opencl-amdgpu-pro-comgr, opencl-amdgpu-pro-icd and ocl-icd-libopencl1-amdgpu-pro and put
+
 
+
/opt/amdgpu-pro/lib/x86_64-linux-gnu
+
/opt/amdgpu-pro/lib/i386-linux-gnu
+
  
into /etc/ld.so.conf.d/10-amdgpu-pro.conf to get OpenCL working.
+
Производительность, правда, всё равно средненькая — та самая 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.