接着剤の精進日記

競プロでの精進や研究に関係したことを書いていきます。

Google Cloud Platform (GCP)でGPUを使えるようにする

はじめに

GCPGPUを使えるようにする際に幾つかハマったところがあったので残しておきます

GCPアカウントの作成

はじめにGCPアカウントの作成を行います。
アカウント作成については以下の記事などを参照してください。
【GCP入門編・第2回】まずは、ここから!知らないと恥ずかしい Google Cloud Platform (GCP) の事前準備! | 株式会社トップゲート

Google Compute Engine(GCE)の利用

GCPアカウントを作成したら、プロジェクトが出来ていると思います。
新しくプロジェクトを作成してもいいです。
プロジェクトを作成したら、GCEのインスタンスを立てる前にGPUの割り当てというものを行います。
メニューからIAMと管理を選択します。
次に左のメニューから割り当てを選択します。
すると、次のような画面になっていると思います。
f:id:tkm-kyudo:20190704130852p:plain
指標のところで使いたいGPUを選択肢し、自分の使いたいリージョンのところを確認します。
ここで、上限が1になっていればすでに1つ割当てられています。

ハマったところ

GPUを割り当ててインスタンスを作成するときにGPUを選択すると、エラーが起きました。
色々調べると、Compute Engine APIが割当てられていないことが原因でした。(以下の記事のハマりポイント2参照)
Compute Engine APIの割当て申請を行います。
GCEでtensorflow-gpuの環境を構築する - Qiita

インスタンス作成

インスタンスの作成は以下の記事を参照してください。
【GCP入門編・第3回】難しくない! Google Compute Engine (GCE) でのインスタンス起動方法! | 株式会社トップゲート
インスタンスの作成の際に画像のGPUを追加のところから使用したいGPUを選択します。
OSはubuntu16.04にしました。
f:id:tkm-kyudo:20190704131635p:plain

GPUドライバのインストール

インスタンスを作成したら、インスタンスにアクセスします。
自分はGoogle Cloud SDKを利用しました。
SDKを利用する際は、公式ドキュメントを参照してインストールしてください。
Google Cloud SDK documentation  |  Cloud SDK  |  Google Cloud

自分の環境だとデフォルトでsudoが使えなかったので、以下の記事を参考にsudoを使えるようにしました。
OS LoginでGCEインスタンスへのSSH接続を管理する - 本日も乙

sudoが使えるようになったら、公式ドキュメントを参照しながらドライバをインストールします。
自分は公式のスクリプトを利用しました。

vi gpu_install.sh
#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-10-0; then
  # The 16.04 installer works with 16.10.
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
  apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
  apt-get update
  apt-get install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1
sudo bash gpu_install.sh

スクリプトが終わったら以下のコマンドで確認します。

nvidia-smi

f:id:tkm-kyudo:20190704133115p:plain
無事GPUが認識されました。