EQQ.jp

Index


NVIDIA ドライバーと CUDA と OpenCL の設定について

CentOS 7 が動作する AMD A10 APU のパソコンに、GeForce GTX 1650 グラフィックボードを付けました。

APU は、グラフィックチップが内蔵されているので、グラフィックボードがなくても単体で GUI が使えるます。
グラフィックボードを追加することで、CPU で利用できるメモリ領域が増える、GPU が計算に使える、高速化が期待できる利点があります。

ここでは、以下のことを行いました。

  1. グラフィックボードを挿して、認識するか確認します。
  2. CentOS7 で、起動時に GUI が立ち上がるのをやめ、CUI 環境にします。
  3. ディスプレイケーブルを差し替え、BIOS を操作し、APU のグラフィック機能を停止します。
  4. カーネルのソフトウェアの確認とカーネルの更新を防止します。
  5. 標準のグラフィックドライバを利用しないようにします。
  6. NVIDIA のグラフィックドライバーをインストールします。
  7. CentOS 起動時に GUI で立ち上がるようにします。
  8. CUDA をインストールします。
  9. OpenCL の環境を整えます。
  10. CUDA のサンプルプログラムをコンパイルし、動作させます。

 

グラフィックボードの装着

電源を落とし、グラフィックボードに付属の手順書に従って、グラフィックボードを挿します。

電源を投入し、従来通り起動することを確認します。

端末を開き、新しく挿したボードが認識されているか確認します。

$ lspci | grep -i vga

今回のケースでは、APU にある Radeon と ボードにある GeForce の2つが確認できました。

 

GUI から CUI への切り替え

GUI(グラフィカルユーザインタフェース) で立ち上がる場合、CUI(キャラクタユーザインタフェース) で立ち上がるように変更します。

gdm.service を確認し、enabled になっているなら GUI で起動します。

$ systemctl list-unit-files
gdm.service                                   enabled

 

gdm.service を一旦停止します。

$ sudo systemctl disable gdm.service

再起動し、CUI で立ち上がることを確認します。

CUI の環境でも、GUI 環境を立ち上げることができます。
(※ 日本語の入力は出来ませんでした)

$ LANG=ja_JP.UTF-8 startx

 

APU のグラフィック機能の停止

電源を落とし、ディスプレイケーブルをグラフィックボードからの出力に切り替えます。

立ち上げ時に、BIOS を起動します。
BIOS の起動は、立ち上げ直後にあるキーを何回か押すことで実現します。
あるキーとは、F1, F2, F4, F9, F10, F12, Del, ESC など BIOS によってまちまちなので、事前の下調べが必要です。

今回のマシンでは、BIOS の以下の設定を、Auto から Disabled に変更することで、APU のグラフィック機能をオフにできました。

Advanced -> Integrated Graphic Configuration -> Initiate Graphic Devices -> Auto=>Disabled

 

設定を保存して、立ち上げ、VGA が1つになっていれば成功です。

$ lspci | grep -i vga

 

カーネルソフトウェアの確認とカーネルの更新停止

カーネル関係のソフトウェアを確認します。
バージョンは、以下の例より新しくなっていると思います。

$ yum list installed | grep kernel
kernel.x86_64                               3.10.0-1127.18.2.el7
kernel-devel.x86_64                         3.10.0-1127.18.2.el7
kernel-headers.x86_64                       3.10.0-1127.18.2.el7
kernel-tools.x86_64                         3.10.0-1127.18.2.el7
kernel-tools-libs.x86_64                    3.10.0-1127.18.2.el7

 

足りないようでしたら、インストールします。

$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

 

NVIDIA のグラフィックドライバーをインストールするとカーネルが更新されるたびに、グラフィックドライバの再インストールが必要なようです。
なので、カーネルの自動更新を停止させます。
/etc/yum.conf の [main] の項目の最後にでも、exclude=kernel* を追加します。

$ sudo vi /etc/yum.conf
[main]
exclude=kernel*

 

標準のグラフィックドライバの利用停止

標準では、NVIDIA のボードを挿すと nouveau ドライバが機能します。

$ lsmod | grep nouveau

 

これを、動作しないように、以下の内容のファイルを作成します。

$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

 

カーネルを構築し、リブートします。

$ sudo dracut --force
$ sudo reboot

 

NVIDIA のグラフィックドライバのインストール

NVIDIA のサイト https://www.nvidia.com/Download/index.aspx?lang=en から、適切なドライバをダウンロードし、実行してインストールします。

$ sudo sh NVIDIA-Linux-x86_64-450.57.run

 

インストールに成功したら、再起動します。

$ sudo reboot

 

デバイスドライバを確認します。

$ ls /dev/nvidia*

 

起動時のエラーがないか確認します。

$ dmesg | grep NVRM
[    2.403696] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  450.51.06  Sun Jul 19 20:02:54 UTC 2020

 

GUI への切り替え

OS 起動時に GUI で立ち上がるように、設定を変更します。

$ sudo systemctl enable gdm.service
$ sudo reboot

起動後に、操作してみると、APU のみの時に比べ、操作感が若干早くなった気がします。

 

CUDA のインストール

CUDA は、NVIDIA のグラフィックボードを利用したソフトウェアを開発する環境です。

NVIDIA のサイト https://developer.nvidia.com/cuda-downloads から、適切なソフトウェアをダウンロードして、インストールします。

$ wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda-repo-rhel7-11-0-local-11.0.3_450.51.06-1.x86_64.rpm
$ sudo rpm -i cuda-repo-rhel7-11-0-local-11.0.3_450.51.06-1.x86_64.rpm
$ sudo yum clean all
$ sudo yum -y install nvidia-driver-latest-dkms cuda
$ sudo yum -y install cuda-drivers

 

CUDA が、/usr/local/cuda にインストールされているようであれば、以下のような感じで、環境変数を整えます。

$ vi ~/.bash_profile 
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/cuda/bin
export PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export CUDA_DEVICE_ORDER=PCI_BUS_ID

 

OpenCL の環境設定

OpenCL は、GPU を使って計算などを行う環境です。

以下のような設定ファイルに、以下のような内容の記述がなさそうな場合、設定ファイルを作成します。

$ sudo vi /etc/OpenCL/vendors/nvidia.icd
/usr/lib64/libnvidia-opencl.so.1

 

clinfo コマンドで利用できる環境の情報が表示されます。

$ sudo yum install clinfo
$ clinfo
Number of platforms                               1
  Platform Name                                   NVIDIA CUDA
  Platform Vendor                                 NVIDIA Corporation
  Platform Version                                OpenCL 1.2 CUDA 11.0.197
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             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_fp64 cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics
  Platform Extensions function suffix             NV
以下略

 

CUDA のサンプルプログラムのコンパイルと実行

CUDA のサンプルプログラムは、以下にあり、make コマンドでコンパイルできます。

$ cd /usr/local/cuda/samples
$ ls
0_Simple     2_Graphics  4_Finance      6_Advanced       EULA.txt  Makefile
1_Utilities  3_Imaging   5_Simulations  7_CUDALibraries  LICENSE   common
$ make

コンパイルが正常終了すれば、それぞれのディレクトリ下にある実行ファイルを起動するとサンプルプログラムが起動します。