機械学習環境をKubernetesで構築する
2019/02/09

ゴール
kubernetesのPod作成時にGPUを使うようにします。環境
1 2 3 4 |
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS" |
1 2 3 4 5 |
# dpkg -l | grep kube ii kubeadm 1.10.3-00 amd64 Kubernetes Cluster Bootstrapping Tool ii kubectl 1.10.3-00 amd64 Kubernetes Command Line Tool ii kubelet 1.10.3-00 amd64 Kubernetes Node Agent ii kubernetes-cni 0.6.0-00 amd64 Kubernetes CNI |
1 2 3 4 5 |
# lspci | grep NVIDIA 01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1) 03:00.0 VGA compatible controller: NVIDIA Corporation GP104 (rev a1) 03:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) |
Nvidia Driverの設定
1 |
$ lsmod | grep nouveau |
下記の2ファイルを作成して、nouveauドライバを読み込ませないように設定します。
1 2 3 4 5 |
blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off |
1 |
options nouveau modeset=0 |
1 2 |
$ sudo update-initramfs -u $ sudo reboot |
ドライバーのインストール
NVIDIAのダウンロードページでGPUの情報をプルダウンから選択し、ドライバーのバージョンを確認します。https://www.nvidia.co.jp/Download/index.aspx?lang=jp

1 2 3 4 5 6 |
$ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt-get update $ sudo apt-get install nvidia-390 $ sudo apt-get install mesa-common-dev $ sudo apt-get install freeglut3-dev $ sudo reboot |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ sudo nvidia-smi Tue Jun 5 01:57:47 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 390.59 Driver Version: 390.59 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 108... Off | 00000000:01:00.0 Off | N/A | | 0% 56C P8 20W / 250W | 0MiB / 11178MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 107... Off | 00000000:03:00.0 Off | N/A | | 0% 39C P8 5W / 180W | 0MiB / 8119MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ |
NVIDIA-dockerのインストール
nvidia-dockerをインストールしていきます。
1 2 3 4 5 6 7 8 9 10 11 |
#リポジトリの追加 $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add - $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list $ sudo apt-get update #nvidia-docker2のインストール $ sudo apt-get install nvidia-docker2=2.0.3+docker17.12.1-1 nvidia-container-runtime=2.0.0+docker17.12.1-1 #dockerの再起動 $ sudo pkill -SIGHUP dockerd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi Tue Jun 5 02:04:49 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 390.59 Driver Version: 390.59 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 108... Off | 00000000:01:00.0 Off | N/A | | 0% 56C P8 19W / 250W | 0MiB / 11178MiB | 1% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 107... Off | 00000000:03:00.0 Off | N/A | | 0% 39C P8 6W / 180W | 0MiB / 8119MiB | 1% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ |
GPU Nodeの設定変更
Dockerのデフォルトランタイムを変更
まず、GPU Node上のデフォルトのランタイムとしてnvidiaランタイムを有効する必要があります。/etc/docker/に通常あるdaemon.jsonファイルを編集します。
1 2 3 4 5 6 7 8 9 10 |
{ "insecure-registries" : ["192.168.100.150:5000"], "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } |
DevicePlugins機能の有効化
次にすべてのGPU NodeでDevicePlugins機能を有効にします。
1 |
Environment="KUBELET_EXTRA_ARGS=--feature-gates=DevicePlugins=true" |
1 2 |
$ sudo systemctl daemon-reload $ sudo systemctl restart kubelet |
Masterの設定変更
NVIDIA GPU device pluginのデプロイをMasterで行います。 Masterで実行
1 |
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.10/nvidia-device-plugin.yml |

pod作成
GPUを1つ割り当てたpodを作成してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: v1 kind: Pod metadata: name: cuda-vector-add spec: restartPolicy: OnFailure containers: - name: cuda-vector-add # https://github.com/kubernetes/kubernetes/blob/v1.7.11/test/images/nvidia-cuda/Dockerfile image: "k8s.gcr.io/cuda-vector-add:v0.1" resources: limits: nvidia.com/gpu: 1 |
Docker,Kubernetesについてもっと知りたい方はココナラからご連絡ください!
参考サイト
https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/https://github.com/NVIDIA/k8s-device-plugin
ubuntu16でNVIDIA Docker2を使ってみる(CUDA,cDNN)
ubuntuにNVIDIAのドライバーをインストール Download→Linux→x84_64→Ubuntu→16.04→dev(network) [crayon-5c5ea3547b89b045064843/] apt-keyコマンド実行時に下記のエラーが出力された場合 gpgkeys: protocol `https' not supported sudo apt-get install gnupg-curl gnupgをインストールすれば解決します。 再起動後、nvidia-smiコマンドが使えるようになっている。 cat /proc/driver/nvidia/version gpuの使用状況の確認 [crayon-5c5ea3547b8a3485436893/] Dockerをインストール [crayon-5c5ea3547b8a8537155376/] 一般ユーザにもdockerコマンドの実行権限を付与する [crayon-5c5ea3547b8ab701586358/] コマンドを一度抜けて(exit)、再度一般ユーザでログインするとdockerコマンドが使えます。 NVIDIA docker2のインストール [crayon-5c5ea3547b8af180446590/] 下記のコマンドを実施してnvidia-smi -lの結果が出力されれば成功。 [crayon-5c5ea3547b8b2517619531/] nvidia-docker-composeのインストール [crayon-5c5ea3547b8b6612515853/] nvidia-docker-composeコマンドは使えなくなっているみたいです。 docker-composeのデフォルトのruntimeをdaemon.jsonファイルで設定し、dockerを再起動します。 [crayon-5c5ea3547b8b9899472470/] docker-compose upを実行してnvidia-smiの結果が出力されれば成功。 version2.3からruntimeオプションが使えるとDocumentにありましたが、できなかったので。。。 cuDNNのインストール cuDNN 7.1 for CUDA 9