はじめに
こんにちは、私は国立大学院生で、現在は研究で3Dセンサを用いた物体認識をしています。普段はありがたいことに研究室にGPUを4台積んだサーバPCがあり、ローカルで深層学習をすることができます。なのでクラウド環境を研究で使うことはないのですが、ふとクラウド環境でGPU使った学習をするときはどのように設定すればいいんだろうと思い、今回はGoogle Cloud
でkaggleコンペに取り組める環境を0から構築しました。
本記事の流れ
- GCP側でGPUが入ったインスタンスを作成
- SSH接続してローカル(VSCode)で作業できるようにする。
参考記事
基本的にこちらの記事を参考に環境をつくらせていただきました。
GCPでGPUが入ったインスタンスを作成
ここからはGCPに登録していて、プロジェクトを作っている前提で進めていきます。まだプロジェクトを作っていない人は新規プロジェクトを作成しておいてください。
1. VMインスタンスを作成
左上のナビゲーションメニューからComputer Engine
-> VMインスタンス
に遷移し、インスタンス作成ボタンを押してください。
そうすると上のような画面が開くと思います。GPU
を選択して所望のGPUのタイプ、GPUの数を選んでください。
今回は簡単のため、一旦以下の設定にしています。ご自身のタスクに応じた設定にしてください。
構成要素 | 選択 |
---|---|
GPU | NVIDIA T4 |
リージョン | 東京 |
VMプロヴィジョニングモデル(高度な構成) | スポット |
メモリ | ハイメモリ |
メモリはCPUメモリのことです。標準(1コア4GB)だとモデルのロードすらできずプロセスが強制終了します。4コア16GB以上を選択しておきましょう。
続いて、左側のOSとストレージ設定を押して、インスタンスのOSとストレージを決める画面が出てきます。
今回は以下の設定です。ストレージは200GB程度にしておくと、後述のKaggle環境のDockerイメージを引っ張るのに十分です。
構成要素 | 選択 |
---|---|
OS | Ubuntu 20.04 |
サイズ | 200GB |
ここまで設定したら作成
を押しましょう。
GPU割当上限の設定
VMインスタンスを作成すると、以下のようなエラーマークが出ると思います。これはGPUの利用上限がデフォルトでは0なので、インスタンスを作成できないというエラーです。
エラーマークをクリックして割り当てリクエストを行い、自身の設定したGPU数以上をリクエストしましょう。
体感10分以内にはGoogleから承認メールが届くと思います。しかし、GCP上での反映には少し時間がかかる場合もあるので、承認されたのにインスタンスが起動されていないという場合はしばらく待って開いてみてください。
ローカル(VSCode)からGPUインスタンスに接続し、AIをフル活用
ここからは、ローカルでGPUインスタンスに接続し、VSCodeで直感的に機械学習する設定をしていきます。
1. ローカルでSSHキーを作成
以下のコマンドでローカルにSSHキーを作成します。
・KEY_FILENAME
・・・自分がわかりやすい名前
・-C
・・・コメント、gcpに登録しているメールアドレスを入力しておく。
ssh-keygen -t ed25519 -f ~/.ssh/KEY_FILENAME -C "your_email@example.com"
すると、秘密鍵KEY_FILENAME
と公開鍵KEY_FILENAME.pub
が~/.sshの配下に作成されていると思います。
次に公開鍵をGCPに登録するので、catコマンドで公開鍵情報を確認してください。
私の場合は以下のようになっています。このssh~から最後までをコピペしておいてください。
2. GCPインスタンスに公開鍵を設定
先ほどの公開鍵を作成したインスタンスに登録します。VMインスタンス -> 編集 -> SSH認証鍵で、項目を追加します。設定は
ssh-ed25519 AA**************K USERNAME
です。追加したら設定を反映させてください。USERNAME
の部分は登録しているGmailアドレスの@の前まででいいはずです。
(参考)VMにSSH認証鍵を追加
3. ローカルのSSH-設定
ローカルの~/.ssh/config
に以下を追加しましょう。Hostの名前は個人で分かりやすいように変更してください。
・HostName
・・・VMインスタンスの外部IP
・User
・・・VMインスタンスのユーザ名。基本的に登録メールアドレスの@前までだと思います。
・IdentityFile
・・・先ほど作成した秘密鍵のパス
Host gcp-gpu
HostName xxx.xxx.xx.xx
User hoge
Port 22
IdentityFile ~/.ssh/[秘密鍵ファイル名]
ここまでできたらターミナルで
ssh gcp-gpu
を実行すると、GCPインスタンスに接続できるはずです。
4. VSCodeの設定
VSCodeにはssh接続やコンテナ接続に便利な拡張機能があります。
それがこちらです。
これをインストールするとサイドバーにPCウィンドウのようなものが現れます。開くと、自身が設定したホストが表示されます。(私は趣味で色々いじっているのでたくさんあります。。。)
GCPのホストを選択して起動し、ウィンドウ左下が画像のようになっていればVSCodeからの接続完了です。
最後は、Dockerを使って最速でGPUを使えるようにしましょう。
Kaggle環境をDocker構築
最後にKaggle環境の構築です。せっかくGPUを借りたのでGPUを使えるようにする必要はありますが、ドライバインストールしてCUDAとcudnnインストールしてと、普通はかなり手間がかかります。Dockerを使うと幾分かマシになるので今回はその方法を説明します。
1. NVIDIAドライバーのインストール
今回はこちらのコマンドでインストールしました。
sudo apt update
sudo apt install -y nvidia-driver-535
nvidia-smi
を実行して、GPU情報が表示されたらOKです。
2. Dockerのインストール
curl https://get.docker.com | sh
systemctl start docker && sudo systemctl enable docker
3. NVIDIA Container Toolkitのインストール
NVIDIA Container Toolkitのインストール方法は以下に記載されています。
InstallationとConfigurationまで手順に従ってください。
ここまででDockerでGPUを使える準備が整いました!次にKaggle公式のDocker ImageをPullします。
4. Kaggleイメージのビルド
docker pull gcr.io/kaggle-gpu-images/python:latest
少し時間がかかります。Pullできたら、コンテナを起動しましょう。
ENV_NAME
はわかりやすい名前に適宜してください。私は kaggle-gpu-container
としました。
docker run --gpus all -itd --rm -v /home:/home --name ENV_NAME gcr.io/kaggle-gpu-images/python /bin/bash
問題なく立ち上がれば、あとはVSCodeからコンテナに接続するだけです!
5. VSCodeからコンテナ接続
前項で説明したように、VSCodeでVMインスタンスに接続した状態では以下のような画面になっていると思われます。
この状態で黄色い部分をクリックしてください。
そうすると実行中のコンテナにアタッチ
というメニューがあります。そこをクリックすると、先ほど起動したコンテナを選択できるはずなので、そちらを選択すると、VSCodeからコンテナ環境に接続できます。
VSCodeのGUIでファイルを作ったり、スクリプト編集ができ、かつKaggleのPython環境が備わっているので、インタプリタを設定すればちゃんとハイライトもつきます。
VSCodeで接続したコンテナには当然ローカルの拡張機能は存在しません。PythonやJupyter、フォーマッタ系の拡張機能は適宜インストールしてください。
cudaもしっかり認識しているので問題なさそうですね!
おわりに
今回はGCPでGPUインスタンスを借りてKaggle環境構築するやり方を説明しました。
GCPは$300程度の無料クレジットがあるので、これからなるべく使い回していこうと思います。参考にされる方は、くれぐれも高額請求にならないように支払いアラートを設定しておいてください。