GCPでPytorchのDeepLearningを実行する手順

投稿日 2023-10-11
最終更新日 2023-11-18

久しぶりにAIを触りたくなって、せっかくなのでGCPでGPUを借りてやってみることにしました。
その結果、結構苦労したため、備忘録として残しておくことにしました。
GCPでにディープラーニングに関する記事はすでにたくさんありますが、個人的に苦労した点が多かったのでその辺りを中心に書いていきます。

GPU申請をする

GCPでは、GPUを使うためには別途申請が必要です。(GCPに限った話じゃないですが)
その手順を順番に共有します。

手順1. Compute Engine APIを有効化する。

これをやっておかないと後述のGPU申請ができないようです。
やり方を以下に示します。なお、すでにCompute Engineを一度でも使ってある場合はこの手順は不要です。
私の場合は、プロジェクトを新しく作り直したためこの手順が実施されていない状態でした。

1, コンソール画面のトップから「Compute Engine」を選択(検索ボックスからアクセスしてもいいです)


2, APIの有効化の画面が表示されるので有効化する。


手順2. GPUを申請する。

次にGPUを申請していきます。

1, 左のサイドバーから「IAMと管理 > 割り当て」を選択



2, 「フィルタ」の欄に「gpus_all_regions」と入力。途中で候補が表示されるのでそれを選択



選択すると以下が表示される


3, 表示された項目のチェックボックスをONにして、右上の「割り当ての編集」を選択


割り当てを編集する画面が表示される

4, 「新しい上限」を「1」とし、「リクエストの説明」にGPUを使用したい理由を記載する。
英語で書きましょう。私は「Pytorchチュートリアルを実施するためにGPUが必要」というようなことをDeepLで翻訳して申請しました。
その後、電話番号を求められますが必須ではないようです。

5, GCPに紐づけられているメールアドレスに承諾のメールが届くのを待つ。
私の場合は、10分もかからないうちに承認されましたが個人差があるようです。

これでGPUが使えるようになります。

インスタンスを作成する。


手順1. Deep Learning VMを有効化する

デフォルトのGPUつきLinuxマシンを利用してCudaやPytorchを入れてもいいですが、今回はCudaやライブラリ一式があらかじめインストールされているVMを利用します。
そのための下準備をしていきます。

1, VMインスタンスのページから「Marketplace」を選択。


2, 検索ボックスに「deep learning vm」と入力する。「Deep Learning VM」が一番上に出るのでこれを選択する。



3,「使ってみる」をクリックし、利用規約に同意する。


これでDeep Learning VMが使えるようになります。

手順2. インスタンスを立ち上げる


1, VMインスタンスの画面に戻り、「インスタンスの作成」を選択する。

2, 各種設定をする。

  • 名前 : 任意(わかりやすい名前にしましょう)
  • リージョン(ゾーン) : GPUが使えるリージョン(ゾーン)と使えないリージョン(ゾーン)があります。迷ったらasia-northeast1 > asia-northeast1-a にしておくのが無難です。
  • マシンの構成 : GPUを選択 → 任意のGPUを選択
    • 安いのはNVIDIA T4です。(ものによりますが)Pytorch公式チュートリアルを実施する程度であればこれでいいと思います。
  • マシンタイプ : 任意のプリセットを選びましょう。後述しますが、一番安いものではなく1個上のn1-standard-2を選んでおくのが無難な気がします。
  • 可用性ポリシー > VMプロビジョンニングモデル : 「スポット」にすることでコストを大幅に抑えることができます。(代わりに、一定時間もしくは急に強制的にインスタンスが落ちることがあります。) 簡単なものを試したいだけであれば「スポット」にしておきましょう。また、VMの制限時間を設定できるようになるので設定しておくと消し忘れ等の被害を抑えることができます。
  • ブートディスク : 「変更」を選択
    • OS : 「Deep Learning on Linux」
    • バージョン : 任意のものを選択
      • 「CUDA」とついているものをインストールしましょう。自分が実行したいタスク、プログラムに応じてバージョンを選びます。私の場合、最新のバージョンではコードが動かなかったため、一個下のバージョンを選択しました。
      • 「Pytorch」とついているものを利用するとその名の通りPytorchが事前にインストールされています。ただし、torchvision等のバージョンが合わないことがあるので後でアップデートしましょう。
    • ブートディスク : 「標準永続ディスク」が若干安いです。
    • サイズ(GB) : 50GBでも十分かと思いますが、念のために100GB程度にしておいた方が無難な気がします。


3、作成を選択

sshでインスタンスに接続


手順1. gcloudをインストールする。

OSによって異なるため、以下を参照してください。
https://cloud.google.com/sdk/docs/install?hl=ja

手順2. gcloud sshでリモート接続する。

以下コマンドで、接続できます。

gcloud compute ssh {ユーザ名}@{インスタンス名}


インスタンス名の前にユーザ名を指定しないとエラーになるので気をつけましょう。
初回のみsshキーのパスフレーズを設定することになります。

これで接続が完了しました。あとは自身のソースコードをここに移してプログラムを実行しましょう。
使わない時は、停止しておくのも忘れないでください。

トラブルシューティング


プログラム実行中にフリーズする。

概要
掲題の通り、プログラム実行中にフリーズし何もできなくなってしまう状態が発生しました。
この時は、「Ctrl + C」コマンドすらも実行できずインスタンスを停止させるしかない状況になりました。

原因
非常にシンプルな原因で、メモリが不足していました。この時は、予算を節約するため一番安い「n1-standard-1」を使っていました。
その結果DataLoaderがメモリに載らずフリーズしてしまったというだけの話です。
実際以下のコマンドで定期的にチェックしたところ空きメモリがほとんどない状態の時にフリーズしたことが確認できました。

free -m -s 3


対策
予算をケチらずに高めのインスタンスを借りましょう。
また、free コマンドで定期的にメモリのチェックをしておきましょう。

今回は以上になります。最近はずっとサーバレスを使っていたので自分でインスタンスを立てるのにかなり苦労しました。クラウドを本業にしていなくても定期的に復習する必要がありそうですね。

参考