web-dev-qa-db-ja.com

Ubuntu 19.10にAMD GPU用のOpenCL 2.0ドライバーをインストールしますか?私のオプションは何ですか?

私の主な目標は、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でテストしました。 herehere からの適切なレポートにより、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

性能は良くないが問題は解決。以下のこの質問に対する私の回答を参照してください。

1
haxpor

最後に、私はそれを動作させ、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

ここで少し遅れを取り戻そう。今私のシステムは

  • カーネルバージョン:5.3.18汎用
  • グラフィックAPI:Mesa(最新バージョンでも問題ありません)
  • OpenCL:ROCm 3.1経由の2.1、または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を使用します。ブレンダーの場合、次のように検出してリストします

enter image description here

最初のものを選択すると(不明)、Blenderの真のGPUのように見えます。2番目を選択すると、シーンの[GPUコンピューティング]の設定がグレー表示されます。

enter image description here

はい、レンダリングされるのが本当にGPUであることを確認するには、それがグレー表示されていないことを確認する必要があります。または、radeontopを使用して、シーンをレンダリングするときのアクティビティを監視できます。

最後に、現在は動作し、Blenderが私のGPUを検出します。ただし、クリックしてシーンをレンダリングするときに、CPUを遅延ロードで使用する場合よりもパフォーマンスが低下します。この Blenderの問題 は、独自仕様のドライバーのみを公式にサポートしていることを示しています。したがって、次のステップはAMDGPU-PROを純粋に使用してテストすることですが、オープンソースドライバーとクローズドドライバーを適切に切り替えるには努力が必要です。

更新:

私は上記の解決策を要約し、これで簡単に実行できるようにいくつかの改善を加えました video

0
haxpor