メモ:GCEのGPUインスタンスでRStudio Serverを使いたい(未完)

完成してないけど、忘れそうなのでメモ。

インスタンスを立てる

# firewallのルールをつくる
gcloud compute firewall-rules create default-allow-rstudio --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:8787 --source-ranges=0.0.0.0/0 --target-tags=rstudio-server

# Ubuntu 16.04のイメージをつくる
gcloud compute instances create keras-test --image-family ubuntu-1804-lts --image-project ubuntu-os-cloud --accelerator=type=nvidia-tesla-k80 --preemptible --tags=rstudio-server

インスタンスにいろいろインストール

Docker

これはあまりにも公式手順通りなので省略。

nvidia-docker

これも公式手順通りにやる。

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

# あとでリブートするのでdockerの再起動はとりあえず不要
sudo apt-get install -y nvidia-docker2

ドライバのインストール

ここは、Tensorflowのページに書かれている手順を参考にやったけど、よくわからなかった。

# レポジトリを追加
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1804_10.0.130-1_amd64.deb

# なぜかディレクトリを掘っておかないと失敗する(これなぜ...?)
sudo mkdir /usr/lib/nvidia

# ドライバをインストール(どれを選べばいいかわからなかったので最小バージョンの384)
sudo apt install nvidia-384

たぶんこれは失敗するので、いちどリブートした後もう一度やるといけるはず。

sudo apt install nvidia-384

Dockerイメージを起動

ここに、nvidia/cuda:9.0-runtime-ubuntu16.049.0-base-ubuntu16.04でもいいのかも)をベースにしてRStudioとかKerasとかを入れたDockerイメージを走らせればいいはず。 雰囲気にはこんな感じ?

docker run \
  --runtime=nvidia \
  -p 8787:8787 \
  -e PASSWORD=<password> \
  --name rstudio \
  <Dockerイメージ>

その他メモ

  • RockerのイメージはDebianベースだが、Debian用にはCUDAのdebパッケージがない。
  • Tensorflow1.11はCUDA 9.0を使うが、Ubuntu 18.04にはCUDA 9.0のdebパッケージがない。CUDA 10.0のdebパッケージはあって、Tensorflow 2.0になるとCUDA 10.0対応するらしい。
  • COSへのNVIDIAのドライバのインストールはcos-gpu-installerを使えば簡単にできる。が、そこから先はk8sの話しか出てこなくて、nvidia-docker2のインストール方法がわからない。
  • Tensorflowをimportしたときに出る「libcuda.so.1がない」という感じのエラーは、CUDAが適切にインストールできていないのではなく、GPUをうまく認識できていない(ドライバをインストールし忘れている、--runtime=nvidiaを付け忘れている)時に出るっぽい気がする。
  • Dockerを使わないのも手かも。イメージめっちゃ重くなるし。