7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Cloud PlatformAdvent Calendar 2019

Day 16

GCP+Docker+GPUでrosを動かす (1) ~ GCPでGPUとVNCを用いた環境の構築 ~

Last updated at Posted at 2019-12-22

この記事はGPUを搭載したPCを持っていない人で、GPUを使ってrosのGazeboを用いた機械学習 (主に強化学習)をしたいという人向けに書きました。

今回は、GCPを用いてインスタンスを作成し、そのインスタンスのデスクトップ環境にDockerのGUIを出すところまでをやります。

#GCPとは
GCPとは元々Google製のPaaSとして知られる Google App Engine を中心に、EC2相当の Google Compute Engine、NoSQLであるCloud Datastore、ビッグデータ解析ツールのBigQueryなど、様々な製品をひとまとめにした環境です。これを用いた仮想PC環境を構築することでGPUを持っていない人でもGPUを用いた作業ができるようになります。

GCPでインスタンスを作成

こちらの記事を参考に作業を進めてください。
今回作成したインスタンスのスペックは以下の通りです。
コア数:8
メモリ数:52GB
GPU:Tesla K80

VNC環境の構築

インスタンスを作成したら、以下のコマンドを実行する。

$ sudo apt update
$ sudo  apt upgrade -f -y
$ sudo apt install -y \
     gnome-core \
     gnome-panel \
     vnc4server

全てのインストールが完了したら、vncserverを起動する。(初回起動時にパスワードを登録する)

$ vncserver

その後、vncserverを一旦停止し、設定を変更する。

$ vncserver -kill :1
$ vim .vnc/xstartup

xstartupの編集内容
unset SESSION_MANAGERの#を外します。
[ -x /etc/vnc/xstartup] 以下の全ての行の先頭に#を付けます。
一番下に以下の設定を追加します。
metacity &
gnome-settings-daemon &
gnome-panel &

これでVNCサーバーから起動できるようになる。
#Dockerのインストール
以下のコマンドを実行してDockerをインストールする。
まずは必要なパッケージ類をインストールする。

$ sudo apt update
$ sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

続いて GPG 鍵をインストールする。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

そしてリポジトリを追加する。

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

パッケージインデックスを更新したらDocker CE関連のパッケージをインストールする。

$ sudo apt update
$ sudo apt install -y docker-ce

インストールできたら docker version コマンドでクライアントとサーバが正常に稼働していることを確認しておく。

$ docker version

これでDockerのインストールが完了する。
##NVIDIAのドライバインストール
まずはホストに NVIDIA の提供するグラフィックスドライバをインストールする。 なお、CUDA はバージョンによってサポートしているグラフィックスドライバのバージョンが異なる。 そのため、利用したい CUDA のバージョンに合わせてインストールするバージョンを選ばなければいけない。
以下の手順でコマンドを実行します。

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

これでパッケージシステムからインストールできるグラフィックスドライバが増える。

$ apt-cache search nvidia-driver
$ sudo apt-get -y install ubuntu-drivers-common
$ ubuntu-drivers devices

推奨 (recommended) になっているドライバに関しては以下のようにインストールできる。

$ sudo ubuntu-drivers autoinstall

続いては今回のメインとなる NVIDIA-Docker2 をインストールする。
まずは GPG 鍵をインストールしておく。

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

続いて NVIDIA-Docker2 のリポジトリを登録する。

$ 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

パッケージインデックスを更新したら NVIDIA-Docker2 をインストールする。

$ sudo apt-get update
$ sudo apt-get -y install nvidia-docker2

インストールできたら Docker のデーモンを再起動する。

$ sudo pkill -SIGHUP dockerd

これで NVIDIA-Docker2 を利用する準備ができた。
以下のコマンドで動作確認をする。

$ sudo docker run --runtime=nvidia --rm -it nvidia/cuda:10.1-cudnn7-devel /bin/bash
root@78bc892cec27:/# nvidia-smi
Tue Dec 24 15:18:24 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.44       Driver Version: 440.44       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| 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 K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   35C    P0    67W / 149W |      0MiB / 11441MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

確認出来たらコンテナを終了する。

root@78bc892cec27:/# exit

#実行
VNCserverを起動する。

$ vncserver

私の場合、VNC Viewer for Google Chromeを用いています。
その後、このgitに従って、以下のコマンドを実行する。

$ sudo docker run --runtime=nvidia -it -p 6080:6080 ikeyasu/reinforcement-learning:latest

VNC Viewer for Google Chromeで http://localhost:6080 に接続するとブラウザ上にターミナルが表示される。
ここに以下のコマンドを入力するとroboschoolのサンプルプログラムが動く。

$ python3 $ROBOSCHOOL_PATH/agent_zoo/demo_race2.py

スクリーンショット (32).png

最終的には、上記の図のようにGCPのVMを動かしているVNC上で動いているDockerのguiブラウザにroboschoolが実装されます。
ここまでできたので次回はrosでgazeboをやってみようかと思う。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?