どうも!初めましての方は初めまして、初心者のWebサイト勉強のとみーです!
Google のクラウドサービスの Google Cloud Platform (GCP) では、機械学習モデルの作成からデプロイまでを行うための Vertex AI Workbench があります。
Vertex AI Workbench では
などの主要なパッケージ・フレームワークが導入済みの JupyterLab 環境の中で色々な開発・分析・実験ができます。
環境整備が大変な GPU が手軽に利用できるのがいいですね!
そんな便利な Vertex AI なのですが、エディタとしての機能はあまり充実していないため、コードを書くときにストレスを感じることがしばしばあります。
一応 Vertex AI の JupyterLab にも拡張機能をインストールできるので、それで解決できるものもあります。
しかし、最近は GitHub Copilot という AI によるコーディングサポートツールが登場し、開発効率が一気に高められるようになったため、できれば GitHub Copilot が使える環境で作業したいというのが正直なところです。
そこで、今回は GitHub Copilot も(その他の VSCode の拡張機能も)問題なく使えるように
Visual Studio Code から SSH で Vertex AI インスタンスにアクセスする
方法をご紹介します!
SSH で Vertex AI のインスタンスにアクセスする方法
単純に Vertex AI のインスタンスに SSH でアクセスし、作業するだけならこのセクションに書かれていることを実行するだけで OK です。
- Google Cloud CLI をインストール
- VSCode に Google Cloud Code をインストール
- VSCode に Remote Development をインストール
Google Cloud CLI をインストール
Google Cloud CLI は GCP に対してコマンドライン操作を行うためのツールです。
GCP へのアクセス認証を行うために、Google Cloud CLI をインストールする必要があります。
インストール方法は公式ガイドにわかりやすくまとめられているので、こちらに従いましょう。
機械翻訳された Google のドキュメントは非常に読みにくいことがありますが、このページは問題なく読めます。
gcloud init
まで実行できれば完了です。
次のコマンドを実行してバージョン情報が表示されれば正しくインストールできています。
gcloud version
VSCode に Google Cloud Code をインストール
Google Cloud Code は VSCode を GCP と連携させ、VSCode で GCP に関する様々な操作を行えるようにする VSCode の拡張機能です。
わざわざ GCP の Web ページにアクセスしなくても、VSCode 上で
などを管理することができます。
Vertex AI Workbench で作成した Notebook は、 GCE の VM インスタンスとして管理されます。
VSCode の拡張機能から Google Cloud Code をインストール
お使いの OS に応じて VSCode で次の操作を行いましょう。
Ctrl + Shift + X
キーを押して「拡張機能」ビューを開きます。
Cmd + Shift + X
キーを押して「拡張機能」ビューを開きます。
「拡張機能」ビューが開けたら cloud code
と検索し、Google Cloud Code をインストールします。
Cloud Code から Google Cloud にログイン
インストールが完了すると、VSCode に Cloud Code タブが追加されます。
「Login to Google Cloud SDK」をクリックするとブラウザが開き、ログイン画面に移動するのでログインしましょう。
ログインが完了すると、Vertex AI Workbench で作成した Notebook などのインスタンスが表示されます。
違うプロジェクトのインスタンスにアクセスしたい場合は、画面下の
Cloud Code ⇄ Project Name
のプロジェクト名をクリックすれば、プロジェクトを変更できます。
Notebook を起動し SSH でアクセス
SSH でアクセスしたい Notebook を起動しましょう。
Vertex AI Workbench から起動しても構いませんし、Google Cloud CLI で起動することもできます。
Vertex AI Workbench にアクセスし、対象の Notebook を選択した上で「開始」をクリックします。
次のコマンドを実行します。
gcloud notebooks instances start INSTANCE_NAME --location=LOCATION
INSTANCE_NAME
は Notebook の名前、LOCATION
は Notebook が置かれているゾーンです。
実際のコマンドは、例えば次のようになります。
gcloud notebooks instances start user-managed-notebook-my-project --location=asia-northeast1-a
起動中のインスタンス(Notebook)には、VSCode 側で緑色のチェックマークが付きます。
起動中のインスタンスの をクリックすると、SSH でアクセスできます。
SSH アクセスに成功すると、VSCode のターミナルで次のようにプロンプトが返ってきます。
user_name@notebook_name:~$
このときのuser_name
は、登録している Google アカウントのメールアドレスを元に作成されます。
このとき、SSH 通信のための秘密鍵・公開鍵・ホストキーは、それぞれ以下に保存されます。
コマンドライン操作だけで十分な場合は、これだけで終了です!
ただし、実際に機械学習・データサイエンス関連の作業を行う場合は、Notebook を使って作業する必要があります。
そこで、VSCode で SSH 接続したインスタンスの Notebook を操作できるように、リモート操作用の拡張機能をインストールしましょう。
VSCode に Remote Development をインストール
GCP に限らず SSH でアクセスした先の環境で開発を行う際によく使うのが、この Remote Development という拡張機能です。
Remote Development を使うと、ローカルでの開発と同じようにリモートサーバーのファイルを操作したり、プログラムを実行できるようになります。
VSCode の拡張機能から Remote Development をインストール
お使いの OS に応じて VSCode で次の操作を行いましょう。
Ctrl + Shift + X
キーを押して「拡張機能」ビューを開きます。
Cmd + Shift + X
キーを押して「拡張機能」ビューを開きます。
「拡張機能」ビューが開けたら remote development
と検索し、Remote Development をインストールします。
ホスト情報を設定
Remote Development で Vertex AI のインスタンスに SSH 接続するために、~/.ssh/config
を編集しましょう。
VSCode やお好きなエディタ、ターミナル等で~/.ssh/config
を開き、以下の内容を追記します。
Host 好きな名前
HostName Notebook の IP アドレス
IdentityFile ~/.ssh/google_compute_engine
User 先ほど上で表示された user_name
例えば次のようになります。
Host user-managed-notebook-my-project
HostName 30.100.100.100
IdentityFile ~/.ssh/google_compute_engine
User user_name
Remote Development で SSH 接続
~/.ssh/config
が準備できたら、Remote Development を使って Vertex AI インスタンス(Notebook)に SSH 接続しましょう。
Ctrl + Shift + P
キーを押してコマンドパレットを開きます。
Cmd + Shift + P
キーを押してコマンドパレットを開きます。
Remote-SSH: Connect to Host
を検索し、クリックします。
その後、先ほど~/.ssh/config
で設定したHost
が表示されるので、クリックすれば接続できます。
接続後はローカルでの開発と同じようにフォルダーを開いたりファイルを作成したりできます。
左下の「SSH: 〇〇」から正しく接続できていることが確認できます。
拡張機能をインストールしたりもできるので、基本的な開発を行う上ではこれで全く問題ありません。
Remote Development で SSH するときの問題
ただし、1つだけ Remote Development で SSH するときに生じる問題があります。
Remote Development で SSH したときのユーザー
上で見たように、Remote Development で SSH 接続すると
となります。
ブラウザで作業する場合のディレクトリ・ユーザー
一方で、Vertex AI Workbench から JupyterLab を開き、ブラウザで作業を行う場合
となります。
したがって、Remote Development で SSH した場合に/home/jupyter
以外の場所に作成したファイルは、ブラウザでアクセスしたときに見えず、実行もできないので不便です。
これを避けるためには、Remote Development で SSH 接続した後に/home/jupyter
の下で作業しなければいけません。
NoPermissions (FileSystemError): Error: EACCES: permission denied
しかし、Remote Development で SSH 接続して/home/jupyter
に移動し、ファイルを作成・保存しようとすると次のようなエラーが発生します。
Unable to write file 'vscode-remote://ssh-remote+user-managed-notebook-my-project/home/jupyter/temp.py'
(NoPermissions (FileSystemError): Error: EACCES: permission denied, open 'home/jupyter/temp.py')
これはログインユーザー(例えばuser_name
)に/home/jupyter
に対する書き込み権限がないことを意味しています。
ブラウザで作成したファイル(/home/jupyter
下に保存)は実行できますが、編集はできません。
書き込めるようにjupyter
ユーザーでログインする
/home/jupyter
に対して書き込めるようにするためには、
といった方法があります。
jupyter
ユーザーでログインすることで解決できたので、今回はこの方法をご紹介します。
秘密鍵・公開鍵を生成
jupyter
ユーザーでログインするための秘密鍵・公開鍵を作成します。
ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C jupyter -b 2048
KEY_FILENAME
は認証鍵ファイルの名前です。お好きな名前を付けましょう。
-C
は公開鍵にコメントを追加するためのオプションで、ここでは VM インスタンスにログインするユーザーを指定しています。
コマンド実行後、以下の場所に鍵が作成されます。
VM の/home/jupyter/.ssh/authorized_keys
に公開鍵をコピー
続いて、作成された公開鍵を VM インスタンスの/home/jupyter/.ssh/authorized_keys
にコピーします。
先ほど作成した~/.ssh/KEY_FILENAME.pub
の内容をコピーしておきましょう。
Google Compute Engine の VM インスタンスのページから対象のインスタンスをクリックし、詳細タブから SSH 接続します。
Cloud Code や Remote Development を使って SSH 接続しても/home/jupyter
への書き込み権限がないので保存ができません。
新しいウィンドウでターミナルが開くので、そこで/home/jupyter/.ssh/authorized_keys
を開き、コピーしておいた公開鍵(~/.ssh/KEY_FILENAME.pub
)の内容を追記します。
VM での操作はここまでなので、SSH を終了して大丈夫です。
~/.ssh/config
を更新
ローカルに戻ったら、上で行ったように~/.ssh/config
にjupyter
ユーザーで SSH するための情報を追記します。
Host 好きな名前
HostName Notebook の IP アドレス
IdentityFile ~/.ssh/KEY_FILENAME
User jupyter
jupyter
ユーザーで SSH 接続
以上の操作を終えれば、Remote Development でjupyter
ユーザーとして SSH 接続し、自由に操作できるようになります。
お疲れ様でした!
カスタム Image から作成したインスタンスの場合
自前の Docker Image から Vertex AI のインスタンスを作成した場合、上のやり方でもうまくいかないことがあります。
mkdir: cannot create directory '/home/jupyter/.vscode-server': Permission denied
問題の原因
調べてみると、
/home/jupyter
の所有者・所有グループがjupyter
ではなくroot
となっていることが原因
だとわかりました。
上のやり方は/home/jupyter
の所有者・所有グループがjupyter
であることを想定したやり方だっため、うまくいきませんでした。
解決方法
この場合
/home/jupyter
の所有者・所有グループをjupyter
に変更すればいい
ので、Google Compute Engine の VM インスタンスのページから SSH 接続し、次のコマンドを実行しましょう。
# root としてログイン
sudo su -
# /home/jupyter の所有者・所有グループを jupyter に変更
cd /home/jupyter
chown jupyter:jupyter .
コメント