我的主要目标是让 Blender 2.82a 能够检测到我系统的 GPU,然后用作 OpenCL 计算来加快渲染时间。
问题似乎是我的 Ubuntu 发行版本太高,因为我有 19.10 (with kernel 5.5.11-050511-lowlatency
) + AMDGPU-PRO的 OpenCL 组件只能正式支持 Ubuntu 18.04,ROCm也是如此。
我确实尝试通过仅针对 OpenCL 组件的安装脚本(通过--headless
)安装 AMDGPU-PRO 的 OpenCL,甚至手动安装一个包;都没有成功。如前所述,不支持显示在错误消息中。我想用 ROCm 再试一次,但它的包似乎很大。由于我的发行版没有可用的预构建包,我想它也会失败。
那么,如果回到 18.04 是为我的 GPU 安装 OpenCL 驱动程序(确切地说是来自 Ryzen 3 2200g 的 APU,我没有独立的 GPU)以及已经安装的开源 OpenGL/Vulkan 驱动程序的最后手段,我的选择是什么?梅萨?
编辑:
与此同时,我尽我所能通过libclang-common-10-dev libclc-amdgcn libclc-dev libclc-r600 libllvm10 mesa-opencl-icd
包安装 OpenCL 1.1 来测试。它通过 显示有意义的信息clinfo
。但是 Blender 仍然没有检测到任何 GPU 作为 OpenCL 设备。
更新 1:
我用 ROCm 进行了测试。有了来自这里和这里的良好报告,很明显 Ubuntu 发行版 19.10 应该不是问题,只需要一个合适的内核版本。因此,我将内核版本恢复为 5.3.x(特别是使用 5.3.18 通用版本,因为 5.3 被声明为 ROCm 的受支持版本,并且来自报告)。
请注意,我按照第二个报告链接中的说明最低限度地安装软件包,因为 ROCm 软件包很大,然后按照其 github 页面的 README.md 中的较少安装说明进行操作。虽然我在上eoan
并且包裹来自xenial
,但我现在确实承担了风险。都过去了。我可以通过验证clinfo
或/opt/rocm-3.1.0/opencl/bin/x86_64/clinfo
两者都给出有意义的结果,即我现在拥有 OpenCL 2.1但没有找到设备!!!。
结果来自clinfo
Number of platforms 1
Platform Name AMD Accelerated Parallel Processing
Platform Vendor Advanced Micro Devices, Inc.
Platform Version OpenCL 2.1 AMD-APP (3084.0)
Platform Profile FULL_PROFILE
Platform Extensions cl_khr_icd cl_amd_event_callback cl_amd_offline_devices
Platform Host timer resolution 1ns
Platform Extensions function suffix AMD
Platform Name AMD Accelerated Parallel Processing
Number of devices 0
NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) AMD Accelerated Parallel Processing
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...)
clCreateContext(NULL, ...) [default] No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) No devices found in platform
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.2.11
ICD loader Profile OpenCL 2.1
结果来自/opt/rocm-3.1.0/opencl/bin/x86_64/clinfo
Number of platforms: 1
Platform Profile: FULL_PROFILE
Platform Version: OpenCL 2.1 AMD-APP (3084.0)
Platform Name: AMD Accelerated Parallel Processing
Platform Vendor: Advanced Micro Devices, Inc.
Platform Extensions: cl_khr_icd cl_amd_event_callback cl_amd_offline_devices
Platform Name: AMD Accelerated Parallel Processing
ERROR: clGetDeviceIDs(-1)
除了使用 Blender 进行测试之外,仍然没有检测到 GPU,这就是现在我遇到的设备未找到问题。
我正在进一步调查...
更新 2:
虽然性能不好,但问题解决了。请参阅下面我对这个问题的回答。
最后,我让它工作,这是
clinfo
(从 ROCm 捆绑的二进制文件)的结果。让我们在这里赶上一点。现在我的系统是
apt
OpenCL:2.1(通过 ROCm 3.1 或通过命令安装可能为您提供的任何版本) 。关键是在完成 ROCm 的安装之后。您必须下载最新的AMD 驱动程序。在我撰写本文时,它是 19.50 版,确切的链接是amdgpu-pro-19.50-967956-ubuntu-18.04.tar.xz。即使您像我的情况一样处于 19.10 版本,也不必担心 Ubuntu 发布版本,重要的可能是保持在内核 5.3.x 以确保适合 ROCm 和 AMD 驱动程序的安全性。
然后你在这里使用/修改来自 tuxutku 的脚本。您可以像现在自己下载一样注释掉下载远程文件的行,然后在文件系统中对此类文件进行脱机操作。注意最后一个命令,它将结果文件复制到
/
. 您甚至可以评论该行并自己手动执行以确保安全。脚本的要点是我们并没有真正从 AMD 驱动程序包中安装任何东西,而只是获取共享库和一些配置文件,然后放入我们的系统中。ROCm 将与之交互。它涉及重命名共享库以避免冲突,以防您已经安装了工作 AMDGPU-PRO,因此这将隔离问题。
请记住,
/opt/OpenCL/vendors/amdocl64.icd
它libamdocl64.so
的内容是。我们已经复制了提取的.so
文件,/
因此它将引用它而不是 ROCm 的捆绑.so
文件。如果您参考 ROCm,它将无法正常工作,并且会喊出找不到设备的错误。现在一切都完成了。您可以使用单独的二进制文件
clinfo
或从 ROCm 捆绑的二进制文件来验证所有内容,以检查一切是否顺利。最好有一些基于 OpenCL 的应用程序来测试它。我使用Phoronix 测试套件或
pts/juliagpu
测试pts/luxmark
OpenCL 的能力。对于 Blender,它检测并列出如下选择第一个(未知)似乎是搅拌机的真正GPU,因为选择了第二个场景的“ GPU Compute”的设置Will Grey。
是的,您需要确保它没有变灰,以确保它是真正的 GPU 渲染。或者您可以
radeontop
在渲染场景时使用它来监视活动。最后,虽然它现在可以工作并且 Blender 检测到我的 GPU。但是当你点击渲染场景时,性能比以前使用延迟加载的 CPU 更差。此Blender 问题表明它仅正式支持专有驱动程序。因此,下一步将尝试纯粹使用 AMDGPU-PRO 并进行测试,但您必须努力在开源驱动程序和封闭驱动程序之间正确切换。
更新:
我总结了上述解决方案,并进行了一些改进,以便在此视频中轻松完成。