ehnmsのブログ

ボケ防止

NC6 とかのGPUが使えるインスタンスが作れないよ on Azure

In Short

NC6のインスタンスの話ではあるが、fastaiでの学習用にインスタンスを作れないか試す内容の記事。 結論から言うと、Spot Instanceでなく、尚且つサポートされている地域(Central South USなど)であれば作れる。 ただしお金が高めなので自動シャットダウン機能を使うなどでコスト管理に注意する。

なぜGPU VMがほしかったか

先日からの続きでGPUが使える自由な環境をDeep Learning環境に欲しかった。 Paperspaceの無料枠だとすぐに負荷オーバーになってInstanceが使えなかったりするので せっかくなら専用のものをよく知ってるサービスで使えたが方がいいかなと思った。

こまったこと

例の fastai を利用した学習用サイトに、Azureセットアップ用のスクリプトが置いてあるわけです。 Direct link here

こいつをCloud Consoleから実行することで、Resource Groupの作成からVMの作成から実行環境の準備までやってくれるという話。 だったのだが、実際には実施してみるとエラーが...。

ehnms@Azure:~$ bash fastai2onAzureSpotDSVM.sh
Azure VM Name (default: fastai2):
Choose your Password:
Re-enter Password:
Azure VM Zone (default: westus2):

...

Creating Azure Data Science VM fastai2...
Azure Error: InvalidTemplateDeployment
Message: The template deployment failed with error: 'The resource with id: '/subscriptions/xxxxxxx/resourceGroups/fastai2/providers/Microsoft.Compute/virtualMachines/fastai2' failed validation with message: 'The requested size for resource '/subscriptions/xxxxxxx/resourceGroups/fastai2/providers/Microsoft.Compute/virtualMachines/fastai2' is currently not available in location 'westus2' zones '' for subscription 'xxxxxxx'. Please try another size or deploy to a different location or zones. See https://aka.ms/azureskunotavailable for details.'.'.
(ResourceNotFound) The Resource 'Microsoft.Compute/virtualMachines/fastai2' under resource group 'fastai2' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix

...

westus2 で "Standard_NC6" というタイプのVMを設定しようとしているのですが、エラーで終了します。 エラー内容は「サブスクリプションかあるいは地域の関係などでそのタイプのVMは作れないよ」というもの。 この理由を探す旅に出ました。

はじめにRegionがあった

もちろん、地域によってサービスが提供されていないことがあります。 さっきのスクリプトではデフォルトで westus2 という地域にされています。 このサイト から製品がどの地域で使えるのか見ることができます。 そこで今回使おうとしている "NC" というシリーズのVMを見てみる。 そうすると、上記の westus2 では利用できるらしい。

NCシリーズの利用可能性

ということは別の可能性らしいですね。 ちなみにJapanはダメみたい。 v2 とか v3 はより高性能なのでお金がちょっと高めにかかります。 "as" がついているのはARMらしく、無用なトラブルは避けたいのでIntelじゃないCPUは今回無視していました。 ARMでもOKという人は、これが一番お安いです。

次にQuota

Quotaによる制限があるらしい。つまり、Instanceとして生成する場合、「このシリーズのVMはCPU何個まで」といった制限があるらしい。 実際に調べてみると、NCが出始めの頃にはNC シリーズのvCPU Quotaが0 に設定されていたり(つまりQuotaを変更しないとVMが作れない)したらしいが、 現在の自分の値を見てみると、そのような制限はない。

NCシリーズのQuota
「リソースグループ」から「使用料とクオータ」を見て、適当にFiliterを変更することで得られる画面。色々ググっていた関係で英語になっている

Japanでは利用できないが、一応Quotaの設定自体はされているようだ。

ここで、 "East US2" と "West US2" がなんとなくグレーアウト気味になっていることに気づく。これを見てみると

グレーアウトしている地域では使えないらしい。これは理由が不明だが、一説によるとCOVID-19による負荷対策の一環らしい。情報源が1年前なので本当にそうかはよくわからない。 とりあえず、何かしらCustomer Supportに連絡すれば対応はしてもらえるものらしい。

How do I create a virtual machine on azure when there are no sizes available for my subscription/location - Stack Overflow

When Creating VM in Azure 'Select Size' is Greyed Out - Stack Overflow

しかし、それをするのは面倒なので先程の利用可能性の表と今回のQuotaの設定値を見比べて、両方がOKそうな場所を探す。"South Central US" とか良さそう。 こいつのコマンドラインでの名称は southcentralus なので、最初に実行していたスクリプトでRegionを聞かれる際にその文字列を入れてみる。

が、うまく動作しない。

どうやら原因は Spot Instance らしい

コマンドラインは不慣れでわからなかったため、WebからPortal上でVMを色々条件変更しながら作成してみたところ、 Spot Instanceのチェックを外せばどうやら "South Central US" で NC6 のインスタンスが作成できるらしい。 実際、最初のスクリプトの中でも Spot Instanceとしての設定オプションがいくつか付いている。

初めに掲載しているエラーメッセージの SKU Not availableというところをよく読めばよかったらしい。 そもそも、Spot Instanceがどういう仕組みのものか知らなかったのが敗因か。

I cant create a VM on azure using spot instance - Server Fault

この方法で作ると確かに作成可能だが:

  • スクリプトでお膳立てしていた部分を結局自分でやる必要がある
    • Port を開くところとか、NVIDIA GPUドライバ入れるところとか?
    • 中に入ってスクリプト叩いて環境準備するところとか
  • お値段が高め (120円/hour !!!!)

そもそも、最初のスクリプトってちゃんと動作するんだろうか?Diskとかネットワークとか指定していない物が多すぎるきがするんだけど、その辺は勝手に作ってくれるんだろうか。

実際の設定メモ

  • NC6 を Central South US のRegionで作成。このとき SSH認証に変えているので、最初のスクリプトはそのままでは使えなくなった。
  • Diskも適当に作成してくっつける
  • NVIDIA Derive のExtensionをつける
  • 作成を実施、しばらくかかって起動する
  • 最初のスクリプトに書いてあった 8000 ポートOpenコマンドを実施
  • その後のExtensionコマンドを実施すると、なんだかエラーする。諦めて乗り込むことにする。
  • 中に入って apt しようとすると別で使用中だと言われる。 ps で調べると cuda をインストールしている最中だったので、Extensionのコマンドが走っているのかもしれない。しばらく待ち。
  • しばらくすると apt の排他が取れるので、最初のスクリプトリポジトリにあった installfastai2.sh を手動で実施する。 fastuser は存在しないのでヒアドキュメントの部分も全部 azureuser で実施することになる。
  • その前に、 conda がないので Anaconda を普通にインストールする。
  • インストールスクリプトと同様の内容を実施。自分は怖いので手打ちで実施。
    • 最初に mkdir notebooks というコマンドが必要。スクリプとにはなかった。
  • 準備ができたら jupyter notebook --ip=* --port=8000 --no-browser でJupyter起動。
  • 速度は体感的にpaperspaceの無料インスタンスとどっこいどっこいくらい。

NB: Anacondaは有償ライセンスに敏感になったので、会社で使う際には注意する。

ちなみに、自動シャットダウンも設定がよくわからないのだが、Resoruce Providerというものでなんか設定するらしい。 ここのコメントで怒ってる人がいる。

Cannot press "Save" button in auto shutdown – Customer Feedback for ACE Community Tooling

自分はResource Provider設定されてるけどダメでした。謎。

まとめ

こういう寄り道ばっかりしているので、本筋の勉強が疎かになるんですよ。