GCP+Docker+GPUでrosを動かす (1) ~ GCPでGPUとVNCを用いた環境の構築 ~
この記事は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
最終的には、上記の図のようにGCPのVMを動かしているVNC上で動いているDockerのguiブラウザにroboschoolが実装されます。
ここまでできたので次回はrosでgazeboをやってみようかと思う。
Author And Source
この問題について(GCP+Docker+GPUでrosを動かす (1) ~ GCPでGPUとVNCを用いた環境の構築 ~), 我々は、より多くの情報をここで見つけました https://qiita.com/1222_takeshi/items/b1a3a700aeab7eb92a7a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .