nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | Chainer x Azure ML Hackathon CV編 #dllab

はじめに

だんないよ、nikkieです。
「Chainer x Azure ML Hackathon CV編」に参加してきました。

nikkieのレベル感

  • Azure ML Studioで機械学習(特にレコメンド)は業務で数ヶ月の経験あり
  • 深層学習について、用語は聞いたことがあるが、手を動かしたことがない

深層学習に踏み出したかったので参加しました。

勉強会の概要

いよいよ、ディープラーニングをエンジニアが使いこなす時代がやってきています。柔軟性が高く直感的な記述が可能なDeep Learning Framework Chainerと機械学習プロジェクトをEnd to EndでサポートするAzure Machine Learningを使って、画像認識、画像分類のExampleを作るハッカソンを行います。様々なデータセット(CIFAR10/100, ImageNet, MNIST, ResNet, YOLO)を使って、データ準備、モデル構築、モデルデプロイまでを行います。ExampleはDLLABのGitHubで公開します。今後も継続的にやっていきますよ!
ハッカソンと銘打っていますが、ハンズオンに近そうな印象を受け、初学者でもいけるだろうとエントリーしました。
各自でやることを決めて取り組む形式だったので、もくもく会の趣でした。

取り組んだこと

深層学習のイメージは、GPUと画像分類チュートリアル(CIFAR10など)でした。
そこで、AzureにGPUインスタンスを立てて、チュートリアルをやることにしました。

AzureにGPUインスタンスを立てる:DSVM
Chainerの名を冠するイベントなので、Chainerを使おうとWindows OSのData Science VMを作成。
(Data Science Virtual Machine - Windows 2016のNC6。月9万円程度)

Azure での Windows データ サイエンス仮想マシンのプロビジョニング | Microsoft Docs

Linux OSの方が慣れているのですが、UbuntuCentOSもドキュメント中にChainerの文字がありませんでした。
 そのため、Chainerが構築時から入っているWindows OSを使うことにしました)
 
Azure ML Workbenchからアクセスを試みる
Machine Learning 実験を作ってWorkbenchからアクセスを試みたところ認証でハマりました。(認証中から先に進まない状態になりました。。)
サインインすると、Workbench によって Azure サブスクリプション内で検出された最初の実験アカウントが使用され、
今回使ったアカウントにはいくつかのディレクトリが紐付いています。
Workbench側が全然関係ないディレクトリの認証情報入力を求めてきたので
虱潰しに検出するものなのかと入力したのですが、それ以降進まなくなりました。
後述のRDPという代替手段を見つけたので、深入りしませんでしたが、
トラブルシューティングのドキュメントを参考に、キャッシュファイルをクリアするとWorkbenchを復旧できるそうです。

DSVMにアクセスする
最初はSSHでつなごうとしたのですが、タイムアウトでうまくいきませんでした。
(ネットワークセキュリティグループの受信規則にSSHを追加したのですが、解決しませんでした。。)
リモートデスクトップ(RDP)ってMacからはできないものと思いこんでいたのですが、
上記ドキュメントのリンクから入手したアプリであっさり接続できました。

チュートリアルのための環境設定

DSVMにRDPしてJupyterでチュートリアルを進めることにしました。

チュートリアルを進めるに当たり、DSVMのChainerをv4にバージョンアップする手順がアナウンスされました。
コマンドプロンプトから以下を順に実施しました)
  • pip uninstall chainer
  • pip uninstall cupy
  • pip install chainer
  • pip install cupy-cuda90

DSVMはハッカソン後に消えるので、仮想環境は使わず、OSデフォルトのPython3.6.3とpipで進めています。

MNIST

ビギナー向けチュートリアル(上記リンク)のMNISTを進めました。
▼成果物
https://gist.github.com/ftnext/cd763fc4cec9f44373ad330443cad5aa
「全結合層のみからなる多層パーセプトロン」のGPUを使った学習まで進めたところで時間切れとなりました。

MacからRDP接続するとUSキーボードになったので苦労しました。

Mac からのRDP 接続で日本語キーボードを設定する

時間が限られていたので、以下のサイトをもとに読み替えて進めました。

USキーボードと日本のキーボードの違い

()はShift+9,0だったり、:はshift+;だったり、=はShift+^だったりとだいぶ混乱したので、設定をしたほうが作業が進んだかもしれません。

 

成果物のダウンロード

ファイル共有設定をすることで、DSVMで作成したnotebookがmacにダウンロードできました。

MacからWindowsにリモート接続する際のファイル共有 | ITBeginner

「ファイル共有」ということは、事前にmacでnotebookを用意することで
お高いDSVMの稼働時間を削減できそうです。(ファイルを送るか、コピペをする想定)

感想

深層学習に一歩踏み出しました!
今回進めたチュートリアルはわかりやすく、「エポック」や「ミニバッチ」などの用語をつかめた感触があります。

ただ、chainerのコードは呪文状態なので、勉強することはまだまだたくさんあります。
dllabさんからは手を動かす機会を定期的にいただけそうなので、今後もチェックしたいと思います。

chainerはscikit-learnみたいな書き方をするんだなと気づきました。
機械学習フレームワークはどれもオブジェクト指向で書いているのかも)

RDPははじめて触ったのですが、驚くほど使いやすかったです。

平日ハードワークのためか寝過ごしてしまい、午後からの参加でした(お恥ずかしい限りです)。
遅刻対応していただけて本当にありがたがったです。
「かたじけない、この御恩は必ず」という思いです。

あと、以下の質問をしたところ、バラバラだったAzureのサービスがつながり、
Azureを触っている身として進むべき方向が見えた気がします。
咀嚼しきれていないところもありますが、Azureについて学習するモチベーションが上がりました!

質問:Azure ML StudioとAzure ML Serviceの違いはなにか?

Azure ML Studioは触ったことがある。(ブラウザでGUI機械学習できるツール)
Azure ML Serviceは言葉だけ聞いているが、Studioとの違いが今ひとつわからなかった。

回答:

  • StudioはJupyterと同等
  • ServiceはJupyterの限界を取り払った(IoTやHololensまで広がる世界 & 自動化)

Studioは大量データの扱いに限界がある
StudioにはDeep Neural Networkがない
StudioはCPUで動く
StudioはAPIのデプロイが数クリックでできる

WorkbenchはPython + Dockerでできている。(※Serviceの主要構成要素としてWorkbenchがあると理解しました)
日付や文字データであればpandasのdatasetとしてデータ加工してくれる
トレーニング環境の使い分けができる(ローカル、GPU(DSVM)、Azure Batch(GPUインスタンスが複数立ち上がる)、Spark)
WorkbenchはモデルをBlob Storageに保存。モデルのマトリックス(ハイパーパラメタ × エポック数)からモデルを選抜すればよい
データ加工、学習、デプロイ全てでCLIを提供→自動化を見据えている

IoTHubからデバイス(ラズパイ)を指定して、モデルを流せる。(Dockerを使う。Azure Container Registoryに保存)
 buildではデバイスのツールキットを発表。今は1000円程度だが、このコストは今後激減すると見込まれる
Windows間ではモデルはONNX形式でやり取りできる。→Hololensに渡せる

 

以上です。
ハッカソン関係者と参加者の皆さま、どうもありがとうございました。1日お疲れ様でした。