概要
画像系の機械学習のために、gcpでGPU環境を構築し、TensorFlowを実行しました。
今回はその備忘録です。
前提条件
- gcpアカウントがあること
- プロジェクト作成されていること
- GPU割り当て申請がされていること
- ※ここは色々面倒だったので後述します。
GPUの割り当て申請
gcpでGPU使用するには初回のみ申請が必要です。
下記2つの申請が必要です。
- グローバル GPU 割り当て
- 使用リージョンのGPUモデルに対する割り当て
自分の場合、
1回目に使用リージョンのGPUモデルに対する割り当て
リージョン | GPUモデル |
---|---|
asia-east1 | tesla K80 |
2回目にグローバル GPU 割り当て
GPUs (all regions)
をそれぞれ出しています。
1度の申請でまとめて出すことも可能なようです。
申請方法ですが、既に詳細に説明されてる記事があったので、
そちらを紹介させて頂きます。
ちなみにですが、
自分は申請してないtesla V100の上限もいつのまにか1になっており、
起動することもできました。
正直GPU割り当てについては手探りでやったので良く分かってません。
インスタンス作成(コンソールの場合)
Compute engine -> VMインスタンス
から「作成」をクリック。
テキストフィールドに「deep learning vm」と入力し、一番先頭に表示されるイメージをクリックします。
一部の設定を変更後に「デプロイ」をクリックして、インスタンスを起動します。
項目名 | 設定例 | 備考 |
---|---|---|
Deployment name | tf-test001 | インスタンス名です |
Zone | us-west1-b | リージョン(us-west1)はGPU割り当て申請時のところにしてください。ゾーン(b)は起動したいGPUがあるところにしてください。ゾーンによっては起動できないGPUがあります |
GPUの数 | 1 | そのまま |
GPUのタイプ | Tesla K80 | 特に理由がなければv100以外で選ぶのをおすすめします。v100は人気だからなのかたまにデプロイに失敗することがあります |
NVIDIA GPUドライバ | チェック | インスタンス起動時にNVIDIA GPUドライバを自動でインストールするかどうかです。自前で特殊なドライバを入れる場合以外はチェックを入れたほうがいいと思います。 |
Boot disk size | 200 | インスタンスのディスクサイズです。200Gより小さいと、起動後にパフォーマンスが下がると警告が出るので基本200で |
インスタンス作成(CLIの場合)
CLIで同様にする場合は下記になります。
export IMAGE_FAMILY="tf2-2-3-cu110"
export ZONE="us-west1-b"
export INSTANCE_NAME="tf-test001"
export BOOT_DISK_SIZE="200GB"
export MACHINE_TYPE="n1-highmem-2"
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--maintenance-policy=TERMINATE \
--accelerator='type=nvidia-tesla-k80,count=1' \
--metadata='install-nvidia-driver=True' \
--boot-disk-size=$BOOT_DISK_SIZE \
--machine-type=$MACHINE_TYPE
ブラウザウィンドウでSSH接続
起動後、しばらく待つと
Compute engine -> VMインスタンス一覧にインスタンスが表示されます。
SSH -> ブラウザウィンドウで開く をクリック。
するとSSHのウィンドウが表示されます。
GPUドライバの確認
インスタンス起動時にNVIDIA GPUドライバをインストールする
に
チェックを入れて起動したので、すでにNVIDIA GPUドライバがインストールされています。
nvidia-smi
コマンドで確認してみます
GPUドライバ入ってる場合
$ nvidia-smi
Tue Nov 24 15:42:42 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 |
| N/A 43C P0 72W / 149W | 0MiB / 11441MiB | 100% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
GPUドライバ入ってない場合
$ nvidia-smi
-bash: nvidia-smi: command not found
tensorflow用のdockerを起動する
googleが用意したdeep learning向けのコンテナを起動します。
コマンドは下記です。
イメージはdeeplearning-platform-releaseから選びます。
自分は tf2-gpu
(tensorflow2向けのGPU用イメージ)を選択してます。
docker run -it --rm --name tensorflow-gcp gcr.io/deeplearning-platform-release/tf2-gpu
#SSHポートフォワーディングでJupyter Labに接続
SSHポートフォワーディングし、ローカルポートにアクセスするとJupyter Labに繋がるようにします。
$ gcloud compute ssh --zone {インスタンスのゾーン} "{インスタンス名}" -- -N -f -L 28888:localhost:8080
例
gcloud compute ssh --zone us-west1-b "tf-test001" -- -N -f -L 28888:localhost:8080
実行後はhttp://localhost:28888
でJupyter Labに接続できます。
Jupyter Labでtensorflowを実行
次に下記コードでTensorFlowからGPU認識されているか確認します
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
大丈夫そうです。
これでtensorflowをGPU実行できます。
初心者のための TensorFlow 2.0 入門を実行してみました。
###その他の参考にした記事