GPUを利用するためのDocker プラグイン「NVIDIA Docker」とは?導入手順は?(前編)
GPUを利用した学習処理において、NVIDIAのGPUは事実上必須となっています。
TensorFlowや、ChainerのようなディープラーニングフレームワークでもGPUを使用する場合の例を検索すると、ほぼ全てがNVIDIAのGPU(CUDA)を使用した事例となっているかと思います。
通常Dockerコンテナ内からNVIDIAのGPUを利用する場合は、DockerエンジンがGPUをネイティブにサポートしておらず、ホスト側とコンテナ内に同じバージョンのGPUドライバをインストールしなければなりません。これではコンテナがホストOS側のドライババージョンに依存してしまい、可搬性が失われてしまうことになります。
また、ディープラーニングフレームワークは前提とするCUDAバージョンがそれぞれ違い、多人数、他PJでGPUサーバーを共有する場合、それぞれのコンテナ内に環境を構築したほうが、環境管理がしやすくなります。
環境管理専門の人材がいればまだいいですが、そうでない場合、希少なディープラーニングの専門家の時間を環境管理に煩わせることになってしまい、非常にもったいないですね。
そこで登場したのが、NVIDIAがDockerのアドオンとして開発した「nvidia-docker」です。
nvidia-dockerとは
「nvidia-docker」とは、NVIDIAのGPUとドライバがインストールされたマシン上で稼働するように開発された、Dockerコンテナプラグインです。
コンテナ内にCUDAやcuDNNなどのライブラリがインストールされており、「nvidia-docker」の拡張により、コンテナ内からGPUを使用することが可能です。
NVIDIA/nvidia-docker
https://github.com/NVIDIA/nvidia-docker/wiki
NVIDIA HPC/ディープラーニング系製品階層
それでは、さっそく「nvidia-docker」をインストールしていきたいと思います。
nvidia-dockerのインストール手順
今回のインストール先サーバー情報
サーバー: HPE ML350 Gen10
OS: CentOS 7.3(64bit)
GPU: NVIDIA Tesla P40
Docker: DockerCE 18.03.1-ce
参照した公式手順
- Nvidia-docker2
https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(version-2.0) - NVIDIAドライバ(CUDAToolkit)
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
※nvidia-dockerの推奨に従い、ドライバ単独の手動インストールではなくパッケージマネージャを利用したCUDAToolkitごとインストールする手順を採用しております。 - Docker-CE
https://docs.docker.com/install/linux/docker-ce/centos/
全体の流れ
- 前提条件確認/事前作業
- NVIDIAドライバインストール
- Dockerインストール
- NVIDIA Dockerインストール
1. 前提条件確認/事前作業
まず、GPUが認識しているかを確認します。
$ sudo lspci | grep -i nvidia
b1:00.0 3D controller: NVIDIA Corporation Device 1b38 (rev a1)
下記ページを参照して使っているGPUがCUDAに対応しているかを確認します。
https://developer.nvidia.com/cuda-gpus
今回はTeslaP40なので、CUDAに対応していることが確認できました。
次に、対象のCUDAバージョンでサポートされいているOS/gccバージョンであるかを確認します。
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements
OSバージョン
$ uname -m && cat /etc/*release
~
CentOS Linux release 7.3.1611 (Core)
gccのインストール有無、インストールバージョンを確認
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
Linuxカーネルバージョンを確認
# uname -r
3.10.0-514.el7.x86_64
次に、カーネル対応ヘッダ、開発パッケージを更新します。
公式ページの解説によると、ドライバ(CUDA Toolkit)のインストールにはカーネルに対応したバージョンのヘッダ/開発パッケージが必要ですが、後述のRPMのインストールでは最新のバージョンがインストールされてしまう為、カーネルバージョンに対応したヘッダ/開発パッケージをインストールします。
# sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
NVIDIAドライバ(CUDAツールキット)をダウンロードします。
URL取得
ダウンロードページアクセス
https://developer.nvidia.com/cuda-downloads
対応するプラットフォームを選択(Intall Typeは[rpm(local)]を選択)
Base Installerの横のDownload(x.xGB)のリンクをコピーします。
Wgetでサーバー上にダウンロード
# wget https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64
--2018-07-13 17:33:44-- https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64
~
2018-07-13 17:38:22 (6.03 MB/s) - `cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64' へ保存完了 [1718223108/1718223108]
2. NVIDIAドライバインストール
ダウンロードしたリポジトリを登録します。
# sudo rpm --install cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64
yumキャッシュ削除、アップデート更新
# sudo yum clean expire-cache
読み込んだプラグイン:fastestmirror, langpacks
リポジトリーを清掃しています: base cuda-9-2-local docker-ce-stable extras libnvidia-container nvidia-container-runtime
: nvidia-docker updates
10 個の metadata ファイルを削除しました
CUDA Toolkitが必要とするRPMリポジトリ(DKMS等)をインストールします。
https://fedoraproject.org/wiki/EPEL
リポジトリを登録
# sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
~
インストール:
epel-release.noarch 0:7-11
完了しました!
ドライバ(CUDA Toolkit)インストール
yumコマンドで CUDA Toolkitをインストール
[tesla1@nv-ai ~]# sudo yum install cuda
~
インストール:
cuda.x86_64 0:9.2.148-1
~
依存性関連をインストールしました:
~
完了しました!
インストール確認
nvidia-smi(GPU管理コマンド)コマンドの正常動作を確認
[tesla1@nv-ai ~]$ nvidia-smi
Fri Jul 13 18:52:04 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.37 Driver Version: 396.37 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P40 Off | 00000000:B1:00.0 Off | 0 |
| N/A 79C P0 54W / 250W | 0MiB / 22919MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
これでNVIDIAのGPUドライバのインストールができました。
後編では、docker、nvidia-dockerをインストールしていきたいと思います。
この記事の著者:岡田一哉
ICT事業本部 MD本部 ICTソリューション販売推進統括部
新規事業推進部 NVIDIA&AI事業推進課
以前はSEとして、アプリケーション基盤や、SSOシステムなどの構築・運用、オフショア移管などを担当。
その後、SB C&S社内で業務システムへの機械学習導入を担当し、
現在はその経験を活かし、NVIDIAのGPU製品についてセミナー、ハンズオンなどの販促活動を担当している。
DevOps Hubのアカウントをフォローして
更新情報を受け取る
-
Like on Facebook
-
Like on Feedly