nokoのブログ

こちらは暫定のメモ置き場ですので悪しからず

GPU環境構築メモ

はじめに

  • DockerからGPUを使うときの手順と、ついでに用語をまとめたメモ。

メモ

参考

用語

  • GPU
    • 「Graphics Processing Unit」の略
    • 3Dグラフィックスなどの画像描写を行う際に必要となる計算処理を行う半導体チップ(プロセッサ)のこと
    • 最近では、3Dグラフィックス以外の計算処理も行わせるGPGPU(General-purpose computing on graphics processing units)も数多く登場している
    • マザーボードに予めグラフィック機能が備わっていることが多い。一般的な使い方をするのであれば、特にグラフィックボードは必要ない。
    • 種類
  • CUDA
    • NVIDIAが提供するGPU向けのC言語統合開発環境であり、コンパイラやライブラリなどから構成されている。
    • グラフィックスに関係した概念は全く意識せずに、ごく普通に変数や配列を宣言してC言語でのプログラミングができる。
  • cuDNN
    • NVIDIAが公開しているDeep Learning用のライブラリである。このライブラリを使うとCaffeやChainerなどのDeep Learning用のソフトウェアの速度が向上する。
    • この速度向上に寄与している最も大きな部分がConvolutionの高速化である。
    • cuDNNのConvolutionの基本は、上記のloweringである。しかし、loweringをそのまま実装すると、メモリ消費量の問題がある。そこで、cuDNNはタイリングとloweringを組み合わせてconvolutionの実装としている。
    • cuDNNのライブラリをCUDAがインストールされているディレクトリにコピーする。
  • NVIDIA Docker
    • NVIDIA Docker のインストール方法 (最新版)
      • 過去のしがらみがなければ Docker 19.03 + nvidia-container-toolkit
        • 最新の NVIDIA ドライバーをインストール (cuda-drivers パッケージがオススメ)
        • Docker の最新バージョン (19.03) をインストール (例えば Ubuntu ならこちら)
        • nvidia-container-toolkit パッケージをインストール (Quickstart を参照)
          • -> これだけです。GPU コンテナを実行するには Docker 19.03 でサポートされた --gpus オプションを使います。
      • 後方互換性を維持する必要があれば Docker 19.03 + nvidia-docker2
    • 歴史
      • NVIDIA Docker(ver1.0.1 / nvidia-dockerコマンドでデーモンと通信してコンテナでGPUを使っていた)
      • Docker Engine Utility for NVIDIA GPUs(ver2.0.2 / docker run --runtime=nvidia )
      • NVIDIA Container Runtime for Docker(ver2.1.0 / 2.0.x 系と仕組みは同じ)
      • NVIDIA Container Toolkit(ver2.2.1 / Docker 19.03 が GPU にネイティブ対応したことに伴い、pre-start-hook の登録にカスタムランタイムが不要になった。)

手順

ホストでGPUを利用するための設定手順

# ビルド前に事前に入れておく
$ sudo apt-get install build-essential

# cudaインストール
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
$ sudo sh cuda_10.2.89_440.33.01_linux.run

# cuDNNインストール
$ tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

コンテナからGPUを利用するための設定手順

# Dockerはインストール済の前提
# NVIDIA Dockerのインストール
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ 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 && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker
$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi