EC2 G4インスタンスのAmazon Linux 2にNVIDIA CUDAをインストールしてみた
EC2 G4 インスタンスは NVIDIA Turing アーキテクチャの NVIDIA T4 Tensor コア GPU を搭載するGPU系インスタンスです。
費用対効果に優れ、機械学習推論やグラフィックスを多用するアプリケーションに向いています。
今回は、このG4にNVIDIA TeslaドライバーとCUDA環境を構築する方法を紹介します。
インストール方針
CUDA をインストールするには、主に以下の3通りがあります。
- インストール済みAMIを利用
- RPMパッケージからインストール
- インストーラー(runfile)からインストール
上のものほど、環境を簡単に用意でき、運用負荷も低いため、おすすめです。
後ろ2つのどちらが選ぶべきかについて、NVIDIA の公式ドキュメント *1から引用します。
2.5. Choose an Installation Method
The CUDA Toolkit can be installed using either of two different installation mechanisms: distribution-specific packages (RPM and Deb packages), or a distribution-independent package (runfile packages). The distribution-independent package has the advantage of working across a wider set of Linux distributions, but does not update the distribution's native package management system. The distribution-specific packages interface with the distribution's native package management system. It is recommended to use the distribution-specific packages, where possible.
※太字は当方が付与
以下では、各インストール手順を紹介します。
1. インストール済みAMIを利用
NVIDIAドライバー、CUDA ツールキットがインストール済み AMI を利用します。
ユーザーは特別な設定なしに CUDA を利用できるため、まずはこの方式をご検討ください。
インストール済みの AMI の例としては以下のものなどがあります。
- MarketPlace にあるCUDA向けAMI ※ CUDA特化型
- AWS Deep Learning Base AMI(DLAMI) ※ 深層学習の1ライブラリとしてCUDAもインストール
2. RPMパッケージからインストール
パッケージマネージャー(YUM)からインストールします。
NVIDIA CUDA用のレポジトリを追加すれば、依存関係やパッケージ更新はパッケージマネージャーが解決してくれるため、構築・運用の手間は比較的軽微です。
インストールするには、NVIDIAのインストールドキュメントにある RHEL 7 向けと同等の手順を行います。
事前準備
CUDA向けGPUがあることを確認します。
$ lspci | grep -i nvidia 00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
カーネルヘッダーなどをインストールします。
$ sudo amazon-linux-extras install epel $ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
CUDA用のレポジトリを追加します。
インストール
$ ARCH=$( /bin/arch ) $ echo $ARCH x86_64 $ distribution=rhel7 $ sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo Loaded plugins: extras_suggestions, langpacks, priorities, update-motd adding repo from: http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo grabbing file http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo to /etc/yum.repos.d/cuda-rhel7.repo repo saved to /etc/yum.repos.d/cuda-rhel7.repo
CUDAとそのドライバーをインストールします。
$ sudo yum install -y nvidia-driver-latest-dkms cuda cuda-drivers
インストールされたことを確認します。
$ nvidia-smi -q ==============NVSMI LOG============== Timestamp : Sat Jul 25 10:14:28 2020 Driver Version : 450.51.06 CUDA Version : 11.0 Attached GPUs : 1 GPU 00000000:00:1E.0 Product Name : Tesla T4 Product Brand : Tesla ...
設定
共有ライブラリ
/etc/ld.so.conf.d/cuda-11-0.conf
が追加されているので対応不要です。
PATH
$HOME/.bashrc
などで CUDA へのパスを通します。
export CUDA_HOME=/usr/local/cuda-11.0 export PATH=${CUDA_HOME}/bin${PATH:+:${PATH}}
動作確認
CUDA のサンプルプログラムをビルドできることを確認します。
まず CUDA Toolkit のダウンロードページに移動し、以下を選択します。
- Operating System : Linux
- Architecture : x86_64
- Distribution : CentOS
- Version : 7
- Installer Type : runfile(local)
手順に従い、cuda_11.0.2_450.51.05_linux.run というようなファイル名のベースインストーラーをダウンロードし、$HOME/cuda
以下に展開します。
$ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run $ sh cuda_11.0.2_450.51.05_linux.run --extract=$HOME/cuda $ cd cuda/ $ ls bin cuda_cupti cuda_gdb cuda_nvcc cuda_nvprof cuda_nvtx cuda_sanitizer_api libcublas libcusolver libnvjpeg NVIDIA-Linux-x86_64-450.51.05.run cuda_cudart cuda_demo_suite cuda_memcheck cuda_nvdisasm cuda_nvprune cuda_nvvp EULA.txt libcufft libcusparse nsight_compute cuda_cuobjdump cuda_documentation cuda_nsight cuda_nvml_dev cuda_nvrtc cuda_samples integration libcurand libnpp nsight_systems
cuda_samples
ディレクトリ以下にサンプルプログラムがあるので、移動してビルドします。
$ cd cuda_samples/1_Utilities/deviceQuery $ make ... $
プログラムを実行し、CUDA デバイスを認識できていれば、成功です。
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla T4" CUDA Driver Version / Runtime Version 11.0 / 11.0 CUDA Capability Major/Minor version number: 7.5 Total amount of global memory: 15110 MBytes (15843721216 bytes) (40) Multiprocessors, ( 64) CUDA Cores/MP: 2560 CUDA Cores ... deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.0, CUDA Runtime Version = 11.0, NumDevs = 1 Result = PASS
3. インストーラー(runfile)からインストール
ディストリビューション非依存のインストーラー(runfile)からインストールします。
インストーラーを利用すると、パッケージマネージャーに対応していないディストリビューションにもインストールできる一方で、ディストリビューションのパッケージマネージャーとコンフリクトする恐れがあります。
事前準備
カーネルヘッダーなどをインストールし、パッケージを最新にして再起動します。
$ sudo amazon-linux-extras install epel $ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) $ sudo yum update $ sudo reboot
インストール
CUDA Toolkit のダウンロードページに移動し、以下を選択します。
- Operating System : Linux
- Architecture : x86_64
- Distribution : CentOS
- Version : 7
- Installer Type : runfile(local)
手順に従い、cuda_11.0.2_450.51.05_linux.run というようなファイル名のインストーラーをダウンロードし、root 権限で実行してインストーラーを起動します。。
$ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run $ sudo sh cuda_11.0.2_450.51.05_linux.run
EULAに同意します。
インストールパッケージをを選択します。
インストールが成功すると、以下の様なメッセージが表示されます。
$ sudo sh cuda_11.0.2_450.51.05_linux.run =========== = Summary = =========== Driver: Installed Toolkit: Installed in /usr/local/cuda-11.0/ Samples: Installed in /home/ec2-user/, but missing recommended libraries Please make sure that - PATH includes /usr/local/cuda-11.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-11.0/lib64, or, add /usr/local/cuda-11.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.0/bin To uninstall the NVIDIA Driver, run nvidia-uninstall Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-11.0/doc/pdf for detailed information on setting up CUDA. Logfile is /var/log/cuda-installer.log
メッセージからは LD_LIBRARY_PATH
向けの対応が必要と読み取れますが、/etc/ld.so.conf.d/cuda-11-0.conf
はインストール時に設置されます。
root 権限で ldconfig
の実行だけ行います。
# インストールログを確認 $ grep ld.so /var/log/cuda-installer.log [INFO]: Creating /etc/ld.so.conf.d/cuda-11-0.conf with content /usr/local/cuda-11.0/targets/x86_64-linux/lib # 設定ファイルを確認 $ cat /etc/ld.so.conf.d/cuda-11-0.conf /usr/local/cuda-11.0/targets/x86_64-linux/lib # 設定を反映 $ sudo ldconfig
PATHを通す
YUM インストール時と同じく、$HOME/.bashrc
などで CUDA へのパスを通します。
export CUDA_HOME=/usr/local/cuda-11.0 export PATH=${CUDA_HOME}/bin${PATH:+:${PATH}}
動作確認
CUDA のサンプルプログラムをビルドできることを確認します。
ビルドに必要なパッケージが足りないので、インストールします。
$ sudo yum groupinstall "Development Tools"
インストール時のログ(Samples: Installed in /home/ec2-user/, but missing recommended libraries) にあるように、
$HOME/NVIDIA_CUDA-11.0_Samples
以下にサンプルプログラムがあります。
先程と同じく、プログラムのディレクトリに移動してビルドします。
$ ls cuda_11.0.2_450.51.05_linux.run NVIDIA_CUDA-11.0_Samples $ cd NVIDIA_CUDA-11.0_Samples/1_Utilities/deviceQuery $ make ... $
プログラムを実行し、CUDA デバイスを認識できていれば、成功です。
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla T4" CUDA Driver Version / Runtime Version 11.0 / 11.0 CUDA Capability Major/Minor version number: 7.5 Total amount of global memory: 15110 MBytes (15843721216 bytes) (40) Multiprocessors, ( 64) CUDA Cores/MP: 2560 CUDA Cores ... deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.0, CUDA Runtime Version = 11.0, NumDevs = 1 Result = PASS
GRIDドライバー・ゲーミングドライバーのインストール方法
本記事では、 NVIDIA TESLAドライバーのインストール方法を紹介しました。 GRIDドライバー、及び、ゲームドライバーについては、次のドキュメントを参照ください。
Linux インスタンスへの NVIDIA ドライバーのインストール - Amazon Elastic Compute Cloud
最後に
EC2 G4 インスタンス上のAmazon Linux 2に Teslta ドライバーとCUDAをインストールした環境を用意する方法を3種類紹介しました。
- インストール済みAMIを利用
- RPMパッケージからインストール
- インストーラー(runfile)からインストール
上のものほど、環境を簡単に用意でき、運用負荷も低いため、おすすめです。
また、後ろ2つについては、インストール後のインスタンスを AMI 化すると、横展開する時の負荷を大幅に軽減できます。
参考
- Linux インスタンスへの NVIDIA ドライバーのインストール - Amazon Elastic Compute Cloud
- g3インスタンスで、CUDA-8.0とChainerインストール済みのAMIを作成してみる | Developers.IO
- NVIDIA Driver Installation Quickstart Guide :: NVIDIA Tesla Documentation
- CUDA Toolkit Download | NVIDIA Developer
- NVIDIA T4 Tensor Core データシート
脚注
- https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html ↩