# きっかけ
最近AIが流行っているので私もAIや機械学習について勉強したくなりました。
その勉強用の環境構築をGCPで構築したので、やったことをメモとして残します。
# 何故にGCP?
- ローカル環境を汚したくない
- 手元のpcはゲーム用で、kaggleのdocker imageやanacondaの容量はでかいのでローカルに置きたくない
- GPU Imageを簡単に導入できる
- GPU Imageでnvidia container tool kitやwslなどなど入れるソフトが多くてめんどくさい
以上の理由で環境をGCPのVertexAIで構築しようと思いました。
# 1. VertexAIでインスタンスを作成する
- ノートブック名
- ノートブックの名前です、好きな名前をつけます
- リージョン
- インスタンスのリージョンです、とりあえず東京にしました
- ゾーン
- よくわからないのでとりあえずaにしました
- 環境
- Kaggle Python[BETA]にします、これでkaggle環境のインスタンスが作れます
- マシンタイプ
- 適当にn1-standard-4に、GPUタイプはNVIDIA T4にしました
- NVIDIA GPUドライバを自動的にインストールするをチェックすればよしなにやってくれます
以上の5つの設定項目を埋めていって、最後に作成ボタンを押してしばらく待てばインスタンスができます。JupyterNotebookの補完機能だけで十分だという場合はここで終わりですが、私はVSCodeの補完機能を使いたいのでsshなどの設定を行います。

# 2. VSCodeにRemoteDevelopmentをインストールする
RemoteDevelopmentはvscodeでリモートpcをsshで繋げられたり、DockerContainerに繋げられたりできる便利なextensionです。インストールします。

# 3. RemoteDevelopment用の設定ファイルを作成する
インスタンスへssh接続するための設定ファイルなどを作ります、gitbashやpowershellを呼び出して以下のコマンドを実行します。
$ ssh-keygen
できた秘密鍵(id_rsa)と公開鍵(id_rsa.pub)をuserフォルダの下に.sshというフォルダを作り、そこにぶち込みます。
次にインスタンスに作成した公開鍵を登録します。公開鍵を適当なテキストエディタで開きます。公開鍵の最後の=符号の後ろがuser名となっているので、気に入らなければ他のやつに変えます。
次にこの公開鍵の文字列をコピーして、先程作成したインスタンスを開き、編集より公開鍵をペーストして、登録します。

これで秘密鍵を使って、先程作成したインスタンスにログインできるようになったので、RemoteDevelopmentで繋げるためのconfigファイルを作成します。
configファイルは以下の図のようにVSCodeの左にあるタブで開きます。

configファイルを開いたら、空なので以下のような行を追加します。それぞれの項目は
- Host
- configの一覧で表示される名前です、好きな名前をつけましょう
- HostName
- インスタンスのIPアドレスを入れます、IPを固定してそれを入力した方がいいかもしれません
- User
- 先程の公開鍵にあったuser名を入れます
- IdentifyFile
- 先程作成した秘密鍵へのパスを入れます
Host gcp_kaggle
HostName a.b.c.d
User username
IdentityFile ~/.ssh/id_rsa
これでsshでインスタンスに繋げる設定はすべて完了です。
# 4. VSCodeのRemoteDevelopmentを使ってインスタンスに接続する
設定が完了すれば、ssh targetsに先程登録した名前が現れるはずです。それを右クリックして、Connect to Host in New Windowでssh接続します。
新しい窓が開いたら、更にf1を押してattachって入力して、Dev Containers:Attach to Running Containerから/payload-containerを選択すれば構築したkaggle環境に接続できます。
> attach
Dev Containers:Attach to Running Container
/payload-container
これでkaggle環境に繋げられたので、最後に補完機能を使うために、python extensionをremote containerにインストールします。

インストールし終えたら、VSCodeの補完機能が使える使えるようになるので快適なkaggle環境の完成です。