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
では利用できるらしい。
ということは別の可能性らしいですね。 ちなみにJapanはダメみたい。 v2 とか v3 はより高性能なのでお金がちょっと高めにかかります。 "as" がついているのはARMらしく、無用なトラブルは避けたいのでIntelじゃないCPUは今回無視していました。 ARMでもOKという人は、これが一番お安いです。
次にQuota
Quotaによる制限があるらしい。つまり、Instanceとして生成する場合、「このシリーズのVMはCPU何個まで」といった制限があるらしい。 実際に調べてみると、NCが出始めの頃にはNC シリーズのvCPU Quotaが0 に設定されていたり(つまりQuotaを変更しないとVMが作れない)したらしいが、 現在の自分の値を見てみると、そのような制限はない。
Japanでは利用できないが、一応Quotaの設定自体はされているようだ。
ここで、 "East US2" と "West US2" がなんとなくグレーアウト気味になっていることに気づく。これを見てみると
グレーアウトしている地域では使えないらしい。これは理由が不明だが、一説によるとCOVID-19による負荷対策の一環らしい。情報源が1年前なので本当にそうかはよくわからない。 とりあえず、何かしらCustomer Supportに連絡すれば対応はしてもらえるものらしい。
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
この方法で作ると確かに作成可能だが:
- スクリプトでお膳立てしていた部分を結局自分でやる必要がある
- お値段が高め (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設定されてるけどダメでした。謎。
まとめ
こういう寄り道ばっかりしているので、本筋の勉強が疎かになるんですよ。