私の主な目標は、Blender 2.82aがシステムのGPUを検出できるようにして、OpenCLコンピューティングとして使用してレンダリング時間を短縮することです。
問題は、19.10(カーネル5.5.11-050511-lowlatency
を使用)があるため、Ubuntuディストリビューションのバージョンが高すぎるようです。+ AMDGPU-PRO のOpenCLコンポーネントは、Ubuntu 18.04までしか正式にサポートできません。 ROCm に移動します。
AMDGPU-PROのOpenCLを、OpenCLコンポーネントのみを対象とするインストールスクリプト(--headless
経由)を使用してインストールし、手動で1つずつパッケージをインストールしました。すべて成功しませんでした。エラーメッセージに表示されるサポートではなく、前述のとおり明らかです。 ROCmで再試行したいのですが、パッケージが大きいようです。私のディストリビューションで利用できるビルド済みのパッケージがないので、同じように失敗するでしょう。
したがって、18.04に戻った場合、私のGPU(正確にはRyzen 3 2200gのAPU、個別のGPUはありません)にOpenCLドライバーをインストールする最後の手段として、すでにインストールされているメサ?
編集:
それまでの間、libclang-common-10-dev libclc-amdgcn libclc-dev libclc-r600 libllvm10 mesa-opencl-icd
パッケージを介してOpenCL 1.1をインストールすることで、テストできる範囲のことを行いました。 clinfo
によって意味のある情報が表示されます。しかし、BlenderはまだGPUをOpenCLデバイスとして検出しませんでした。
更新1:
ROCmでテストしました。 here と here からの適切なレポートにより、19.10のUbuntuリリースバージョンは問題ではなく、適切なカーネルバージョンが必要なだけであることが明らかになりました。したがって、私はカーネルバージョンを5.3.xに戻しました(特に、5.3はROCmのサポートされているバージョンとして、およびレポートから、5.3.18ジェネリックを使用します)。
ROCmパッケージは非常に大きいため、2番目のレポートリンクに記載されているように、パッケージを最小限にインストールします。次に、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からバンドルされたバイナリ)の結果を示します。
umber of platforms: 1
Platform Profile: FULL_PROFILE
Platform Version: OpenCL 2.1 AMD-APP (3004.6)
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
Number of devices: 1
Device Type: CL_DEVICE_TYPE_GPU
Vendor ID: 1002h
Board name: Unknown AMD GPU
Device Topology: PCI[ B#7, D#0, F#0 ]
Max compute units: 8
Max work items dimensions: 3
Max work items[0]: 1024
Max work items[1]: 1024
Max work items[2]: 1024
Max work group size: 256
Preferred vector width char: 4
Preferred vector width short: 2
Preferred vector width int: 1
Preferred vector width long: 1
Preferred vector width float: 1
Preferred vector width double: 1
Native vector width char: 4
Native vector width short: 2
Native vector width int: 1
Native vector width long: 1
Native vector width float: 1
Native vector width double: 1
Max clock frequency: 1100Mhz
Address bits: 64
Max memory allocation: 1825361100
Image support: Yes
Max number of images read arguments: 128
Max number of images write arguments: 64
Max image 2D width: 16384
Max image 2D height: 16384
Max image 3D width: 2048
Max image 3D height: 2048
Max image 3D depth: 2048
Max samplers within kernel: 16
Max size of kernel argument: 1024
Alignment (bits) of base address: 2048
Minimum alignment (bytes) for any datatype: 128
Single precision floating point capability
Denorms: No
Quiet NaNs: Yes
Round to nearest even: Yes
Round to zero: Yes
Round to +ve and infinity: Yes
IEEE754-2008 fused multiply-add: Yes
Cache type: Read/Write
Cache line size: 64
Cache size: 16384
Global memory size: 7301444400
Constant buffer size: 1825361100
Max number of constant args: 8
Local memory type: Scratchpad
Local memory size: 65536
Max pipe arguments: 16
Max pipe active reservations: 16
Max pipe packet size: 1825361100
Max global variable size: 1642824960
Max global variable preferred total size: 7301444400
Max read/write image args: 64
Max on device events: 1024
Queue on device max size: 8388608
Max on device queues: 1
Queue on device preferred size: 262144
SVM capabilities:
Coarse grain buffer: Yes
Fine grain buffer: Yes
Fine grain system: No
Atomics: No
Preferred platform atomic alignment: 0
Preferred global atomic alignment: 0
Preferred local atomic alignment: 0
Kernel Preferred work group size multiple: 64
Error correction support: 0
Unified memory for Host and Device: 1
Profiling timer resolution: 1
Device endianess: Little
Available: Yes
Compiler available: Yes
Execution capabilities:
Execute OpenCL kernels: Yes
Execute native function: No
Queue on Host properties:
Out-of-Order: No
Profiling : Yes
Queue on Device properties:
Out-of-Order: Yes
Profiling : Yes
Platform ID: 0x7f6233d65f10
Name: gfx902
Vendor: Advanced Micro Devices, Inc.
Device OpenCL C version: OpenCL C 2.0
Driver version: 3004.6 (PAL,HSAIL)
Profile: FULL_PROFILE
Version: OpenCL 2.0 AMD-APP (3004.6)
Extensions: cl_khr_fp64 cl_AMD_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_fp16 cl_khr_gl_sharing cl_khr_gl_depth_images cl_AMD_device_attribute_query cl_AMD_vec3 cl_AMD_printf cl_AMD_media_ops cl_AMD_media_ops2 cl_AMD_popcnt cl_khr_image2d_from_buffer cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images cl_khr_mipmap_image cl_khr_mipmap_image_writes cl_AMD_copy_buffer_p2p
ここで少し遅れを取り戻そう。今私のシステムは
apt
コマンド経由でのインストールから提供されるバージョン。ポイントはROCmのインストールが完了した後です。最新の AMDドライバー をダウンロードする必要があります。私の執筆時点では、バージョン19.50です。正確なリンクは amdgpu-pro-19.50-967956-ubuntu-18.04.tar.xz です。私の場合のように19.10にいても、Ubuntuのリリースバージョンについて心配する必要はありません。重要なことは、ROCmとAMDドライバーの両方に適合する安全性のためにカーネル5.3.xにとどまることです。
次に、tuxutku here のスクリプトを使用/変更します。リモートファイルを自分でダウンロードするときに、ダウンロードする行をコメント化して、代わりにファイルシステム内のそのようなファイルに対してオフラインで操作できます。結果ファイルを/
にコピーする最後のコマンドに注意してください。安全のために、その行にコメントを付けて手動で行うこともできます。
スクリプトの問題点は、AMDドライバーパッケージから何も実際にインストールするのではなく、共有ライブラリーを取り出し、いくつかの構成ファイルをシステムに配置することです。 ROCmはそれと対話します。 AMDGPU-PROがすでにインストールされている場合でも、競合を回避するために共有ライブラリの名前を変更する必要があるため、問題が特定されます。
/opt/OpenCL/vendors/amdocl64.icd
のコンテンツとしてlibamdocl64.so
があることに注意してください。抽出した.so
ファイルはすでに/
にコピーされているため、ROCmにバンドルされている.so
ファイルの代わりに参照されます。 ROCmを参照すると、ROCmは機能せず、デバイスが見つからないというエラーを叫びます。
これですべて完了です。 clinfo
の個別のバイナリ、またはROCmにバンドルされているバイナリを使用して、すべてが正常に行われたかどうかを確認することで、すべてを検証できます。
それをテストするいくつかのOpenCLベースのアプリケーションがあるとさらによいでしょう。 OpenCLの機能をテストするには、 Phoronixテストスイート 、つまりpts/juliagpu
またはpts/luxmark
を使用します。ブレンダーの場合、次のように検出してリストします
最初のものを選択すると(不明)、Blenderの真のGPUのように見えます。2番目を選択すると、シーンの[GPUコンピューティング]の設定がグレー表示されます。
はい、レンダリングされるのが本当にGPUであることを確認するには、それがグレー表示されていないことを確認する必要があります。または、radeontop
を使用して、シーンをレンダリングするときのアクティビティを監視できます。
最後に、現在は動作し、Blenderが私のGPUを検出します。ただし、クリックしてシーンをレンダリングするときに、CPUを遅延ロードで使用する場合よりもパフォーマンスが低下します。この Blenderの問題 は、独自仕様のドライバーのみを公式にサポートしていることを示しています。したがって、次のステップはAMDGPU-PROを純粋に使用してテストすることですが、オープンソースドライバーとクローズドドライバーを適切に切り替えるには努力が必要です。
更新:
私は上記の解決策を要約し、これで簡単に実行できるようにいくつかの改善を加えました video 。