この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 へのパスを通します。
~/.bashrc
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 へのパスを通します。
~/.bashrc
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 ↩