機械学習環境をGCPで構築する方法

  • 必要なもの

・Google Chrome 最新版
・Googleアカウント
・クレジットカード

  • 作ったインスタンスの構成

OS:      Ubuntu 16.04 LTS 永続ディスク100GB + Cloud Storageのバケット
CPU:    custom(vCPU x 12、メモリ 78 GB)
GPU:    NVIDIA Tesla V100 ×1
ゾーン: asia-east1-c

CUDA:  10.1
cuDNN: 7.6.3

  • GCEでGPUを利用するために割り当て申請する(参考ページ

qiita.com

ひとことメモ:「GPUS_ALL_REGIONS」の割り当てが0になっている場合、そちらも1以上に増やして、割り当て申請する必要があります。

  • GPU割り当て申請を完了させる

割り当て申請したあとに以下のような英語のメールが届くかと思います(先払いしてくださいメールが来なければ料金を先払いする手順は不要)
Make a payment of $140 US Dollars or the same amount in your currency
following the instructions linked below [1] and reply to this message when the
charge clears. Your payment will be applied to any charges you incur in the future
and will be visible as a credit in your account.

要するに「140ドル(金額は条件次第で違うっぽい?)を先払いしないと割り当てしませんよ」ということらしい。
料金先払いで不正利用じゃないことを証明してくださいってことだと思います(たぶん)


・料金を先払いする手順

  1. Google Cloud Platformからお支払い画面を開く
  2. 請求先アカウントを登録してなかったら登録する(クレカ必須)
  3. 登録できたらお支払い画面の「お支払いの概要」タブを開く
  4. 「早期払い」ボタンから指定された金額以上($140だったら余裕を持って16000円以上入れるといいかも)
  5. ひたすら割り当て完了メールが来るのを待つ
  6. 割り当てされましたメールが届く
  7. テンション上がる(^ω^ ≡ ^ω^)
  • GPUが割り当てされた後、GCEのVMインスタンス画面からGPUインスタンスを作成する

- 名前 ⇒ 任意

- ゾーン ⇒ asia-east1-c
※1 使いたいGPUに対応してるゾーンを選択する必要があります
※2 GPU対応ゾーン一覧表: https://cloud.google.com/compute/docs/gpus/?hl=ja&_ga=2.186643945.-1732709063.1508124456#gpus-list

- マシンタイプ ⇒ 必要に応じて選択(例:custom vCPU x 12、メモリ 78 GB)

- GPU種別 ⇒ NVIDIA Tesla V100(予算と相談の上、GPUを選択してください)
- GPU個数 ⇒ 1個

- ブートディスク ⇒ 必要に応じて選択(例:Ubuntu 16.04 LTS)

- ディスクサイズ(GB) ⇒ 必要に応じて増減(例:永続ディスク100GB)

- ID と API へのアクセス ⇒ すべての Cloud API に完全アクセス権を許可を選択

- ファイアウォール ⇒ HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方にチェック

- プリエンプティブ ⇒ オンにする(任意)
※オンにすると利用料金は大幅に抑えることができますが、途中でインスタンスがシャットダウンされるリスクが伴います。

- 管理、ディスク、ネットワーク、SSH 認証鍵 ⇒

管理タブ⇒自動化⇒起動スクリプトに以下の内容を入力(Ubuntu 16.04 LTSの場合)

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-10-1; then
# The 16.04 installer works with 16.10.
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
fi
# Enable persistence mode
nvidia-smi -pm 1

・ローカルPCとインスタンスとの間でデータのやり取りを行いたいときは、Google Cloud Storage経由で行う。
・メニューから[Storage]⇒[ブラウザ]を選択

・バケットがなければ作成。Multi-Regionalで場所はどこでもOK!

・バケットを選択するとファイル一覧が見ることができる。ファイル名をクリックするとダウンロード可能。

  • GCEのVMインスタンス画面から作成したインスタンスにSSH接続する

SSHボタンを押すと別ウィンドウでインスタンスのコンソール画面を開いてくれる(作業しやすい)

  • GPU関連のドライバが入ってるか確認(なんかたくさん出力されたら入ってる)

dpkg -l | grep nvidia
dpkg -l | grep cuda

ドライバが入ってなければ、インスタンスを停止してからもう一度開始を押す。
※それでもダメだったらインスタンス作成からやり直す。

  • GPUを高速化するcuDNNを導入

echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list
sudo apt update
sudo apt install libcudnn7-dev=7.6.3.30-1+cuda10.1

Do you want to continue? [Y/n] と表示されたら y と入力してエンター

  • .bashrcでCUDAのPATH設定を行う

export PATH="/usr/local/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH"
source ~/.bashrc

  • Anaconda環境のインストール(このバージョンが古ければ公式サイトから最新版を入れてください)

wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
bash Anaconda3-2019.07-Linux-x86_64.sh

  • Anacondaインストーラー実行後の操作手順
  1. ライセンスの表示をしますか?と聞かれるので yes を入力してエンター
  2. 長文のライセンスが表示されるのでエンター or スペースキーでスキップ
  3. ライセンスへの同意を求められるので yes を入力してエンター
  4. Anacondaをどこのディレクトリにインストールするか指定してエンター(何も入力しなくてもOK)
  5. PATHに追加するか(.bashrcに追記するか)聞かれるので yes を入力してエンター
  • 追加したPATHを反映

source ~/.bashrc

  • PATH(環境変数)にanaconda3のディレクトリパスが登録されていなければ登録する

・PATHの一覧を表示して確認

echo $PATH

※出力されたPATHの一覧に /home/<Gmailアドレス>/anaconda3/bin があればPATHの登録は不要

・PATHを登録する

export PATH="/home/<Gmailアドレス>/anaconda3/bin:$PATH"
echo $PATH
source ~/.bashrc

※Gmailアドレスのところには、「@」や「.」などの記号をアンダーバー「_」に置き換えたものを入力する
例: tekitou1515@gmail.com -> tekitou1515_gmail_com

  • Anacondaバージョン確認

conda -V

※バージョンが表示されなかったらPATHがしっかり設定できてない可能性が高い(インスタンス再起動推奨)

  • 仮想環境作成

conda create -n py36 python=3.6

※Proceed ([y]/n)? と表示されたら y と入力してエンター

conda activate py36

  • これは必要に応じてインストール(zipファイルを扱えるようになるので入れておくと便利)

sudo apt-get install zip unzip

  • おまけ

[インスタンス⇔Cloud Storage(GCS)バケット間のファイル転送コマンド]

  • BUCKET_NAME変数を定義

export BUCKET_NAME=<プロジェクト名>

※プロジェクト名はインスタンスの名前ではありません。

  • ファイルをインスタンスからCloud Storageへコピー

gsutil cp -r <インスタンス側のファイルパス> gs://$BUCKET_NAME/<GCS側のフォルダパス>

例:gsutil cp -r ~/igo_ai/models/igo_model-1.txt gs://$BUCKET_NAME/igo_ai/models/v1

  • ファイルをCloud Storageからインスタンスへコピー

gsutil cp -r gs://$BUCKET_NAME/<GCS側のファイルパス> <インスタンス側のフォルダパス>

例:gsutil cp -r gs://$BUCKET_NAME/igo_ai/models/v1/igo_model-1.txt ~/igo_ai/models


APIの有効化とかバケットのファイル権限とか、まだまだつまづくポイントはあるけど大体こんな感じ。


人工知能・AIランキング