Azure Machine Learning Workspace のコンピューティング インスタンスに VSCode から SSH 接続

Azure Machine Learning Workspaceコンピューティング インスタンスに Visual Studio Code からリモート接続 する方法。

仕事の進め方がすっかり変わってしまって、自宅なりのリモートで仕事をすることが多くなったという人もいますね。
またはもともと出張とか外出が多い方も。

AI 関連のプロジェクトを担当している人は、オフィスには GPU を積んだ高性能な PC があるけど、自宅とか外出先だと開発できないというのはうれしくない。
そこでクラウド上の高性能なマシンで開発してみます。これなら場所も手元の PC も関係なく、いつでもどこでも GPU をバリバリ使って開発ができます。

以下はマシンごとの初期設定の話なので、一度環境を作ってしまえば次からはすぐに接続できます。
特に難しいことはないはずですが、SSH を知らない自分(恥)には初めての作業だったのでメモ。


以下の手順で、Azure ML のコンピューティング インスタンスに VSCode から接続できます。

ステップ実施のタイミング
1VSCode の Remote Development 拡張機能をインストールローカル PC ごとに 1回
2OpenSSH クライアント インストール(未インストールの場合)ローカル PC ごとに 1回だけ
3ローカルで SSH キーペア作成リモート接続したいインスタンスごとに 1回
4Machine Learning Workspace に コンピューティング インスタンスを作成
5VSCode で 新しい SSH ホストを追加リモート接続したいインスタンスごとに 1回
6VSCode で config ファイルの編集リモート接続したいインスタンスごとに 1回
7VSCode で SSH ホストに接続リモート接続したいインスタンスごとに 1回
8VSCode でリモート先のフォルダーを開く
9インスタンスに Machine Learning 拡張機能をインストールリモート接続したいインスタンスごとに 1回
10VSCode のターミナル、エディターで任意の操作
11コンピューティング インスタンスを停止その日の作業終了時に

1. Visual Studio Code の Remote Development 拡張機能をインストール

VS Code を開いて、”Remote Development” 拡張機能をインストールします。
ローカル PC ごと (VSCode ごと)に 1回だけ実行 します。

Machine Learning のコンピューティング インスタンスに接続するだけなら “Remote – SSH” だけでもいいのですが、せっかく WSL2 な Linux にも接続できるようになったので “Remote Development” のインストールがおすすめ。

インストール後には VSCode を再起動します。


2. OpenSSH クライアント インストール

Windows の場合、必要に応じて OpenSSH クライアントをインストールします。
未インストールの場合、ローカル PC ごとに 1回だけ実行 します。

[アプリと機能] – [オプション機能] で “OpenSSH クライアント” をインストールします。


3. ローカルで SSH キーペアを作成

Azure Machine Learning のコンピューティング インスタンスに Visual Studio Code からリモート接続するには、インスタンス作成時に SSH アクセスを有効にする必要があります。

その際に公開キーを登録する必要があるのでローカル PC でキーペアを作成します。
ということで、接続したいインスタンスごとに 1回実行 する必要がある手順です。

3-1. ターミナルを起動します。
コマンドプロンプトでも PowerShell でもいいけど、今どきなので “Windows Terminal” を使うのがいいかと。

3-2. “<ユーザープロファイル>/.ssh” フォルダーに移動します。

3-3. “ssh-keygen.exe” コマンドを実行します。キーファイル名は適当に。
SSH 接続をするのが一つだけならデフォルト名でもかまいませんが、何が適切な名前を付けるのがよいかと。

2-4. あとで使うので、公開キーをクリップボードにコピーしておきます。
ターミナルで “type <pub ファイル>” や “cat <pub ファイル>”するなり、メモ帳で開くなり、ご自由に。


4. Machine Learning Workspace に コンピューティング インスタンスを作成

Azure Machine Learning Workspace にコンピューティング インスタンスを作成します。
SSH 接続を有効にするのはインスタンス作成時のみなので、必ずこのタイミングより前にローカル PC でキーペアを作成すること。

4-1. [SSH アクセスを有効にする] をチェックして [SSH 公開キー] に、先ほど作成したキーペアの公開キーの中身を貼り付けます。

4-2. コンピューティング インスタンスが作成されたら [SSH] 接続リンクをクリックして、ssh コマンド をクリックボードにコピーします。
すぐ後で使います。


5. VSCode に新しい SSH ホストを追加

ここからは Visual Studio Code での操作。

VSCode に新しい SSH ホストを追加します。
接続対象のインスタンスごとに 1回実行 します。

5-1. [コマンド パレット] で “Remote-SSH: Add New SSH Host” を選択します。

5-2. [SSH 接続コマンド] を求められるので、先ほどコピーしたコンピューティング インスタンスの SSH コマンドを貼り付けます。

5-3. [SSH Configuration file] で “<プロファイル>/.ssh/config” を選択します。

5-4. ホストが追加されると VSCode がポップアップしてくるので、[Open Config] を選択します。


6. VSCode で config ファイルの編集

前の手順で config ファイルが開くので、以下の 2点を編集します。

  • Host 名 : 適宜 (表示名、自分が見てわかる名前を)
  • IdentityFile : 作成した SSH キーペアの名前(秘密鍵のほう)、”~/.ssh/<SSH キー>”

7. VSCode で SSH ホストに接続

7-1. VSCode のコマンドパレットで [Remote-SSH : Connect to Host] を選択します。
個人の好みで “Current Window” で進めるのもあり。(個人的には Current Window 好き)

7-2. 接続先の名前を選択します。
ここで表示されるのは “config” ファイルの [Host] 名。

7-3. 接続先のプラットフォームを選択します。
Machine Learning のコンピューティング インスタンスは “Linux” なので、それを選択。

7-4. “フィンガープリント” の確認で “Continue” を選択します。

7-5. SSH キーペアを作った時のパスフレーズを入力します。

これで、ローカルの Visual Studio Code からクラウド上のコンピューティング インスタンスに接続できました。


8. VSCode でリモート先のフォルダーを開く

接続先の作業フォルダーを決めます。
基本的には “/home/azureuser/cloudfiles/code/Users/<ユーザー名>” あたりでしょう。


9. Machine Learning 拡張機能をインストール

コーディングや実行の前に、リモート接続先にも “Machine Learning” 拡張機能をインストールします。


10. VSCode のターミナル、エディターで任意の操作

以上で VSCode から コンピューティング インスタンスに接続して、開発する準備が整いました。
あとはご自由に。

ここまでの手順はすべて保存されているので、次からは接続先を選んでパスフレーズを入力するだけ。
あとは VSCode のターミナルで git clone なり、エクスプローラーで適宜ファイルを作成するなりして、エディターでコーディングしてください。

ローカルなのかリモートの接続先なのか区別することなくコーディングできます。


11. (終わったら) コンピューティング インスタンスを停止

開発自体はローカルか Azure ML のコンピューティング インスタンスかを意識することはありませんが、唯一、作業終了時にインスタンスを停止することを忘れずに。
コンピューティング インスタンスは自動ではシャットダウンしてくれません。となると課金がね(特に NC シリーズを使っている場合)。

Azure ML のコンピューティング インスタンスの弱いところがここだと思います。
プレビューの初期の頃は Azure ポータルで VM が見えてたから自動シャットダウンの設定ができたんですけどね。


やってみると、何が何でも Azure 上のコンピューティング インスタンスに VSCode で接続しなければならないものでもないかも。
Jupyter Lab でもいいわけだし。

ただ、VSCode のほうがコーディングとかデバッグ効率もよさそうだし、開発環境を VSCode に寄せられるのはうれしい。
モデルをサービス化したり他のプロジェクトと組み合わせることを考えると Jupyter よりも守備範囲が広い。

それを考えると VSCode を使うのがいいのかな。(私見)
ひとまず、こういう方法で VSCode の利用が上がりますよという紹介でした。

似たような技術で、

Data Science VM に VSCode からリモート接続する

というものもあります。
それについては こちらの記事 を参照してください。

いずれにしてもリモートでもオフィスでも、どこでも高性能なマシンを使えるのはいいですね。

Enjoy Programming !!

Azure Machine Learning Workspace のコンピューティング インスタンスに VSCode から SSH 接続」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中