Above & Beyond

日々のアウトプット記録

ABEJA Platform 勉強会 - ハンズオン

1/17(木)は「ABEJA Platform 勉強会 - ハンズオン」に参加してきました。

cloudai.connpass.com

f:id:kabukawa:20190114100914p:plain:w400

会場は 株式会社ABEJA さんのイベントスペース。

f:id:kabukawa:20190117191023j:plain:w600

会場自体は以前別の勉強会で来たことがありますので、迷わずにたどり着けました。(その時のイベントはこれ)

kabukawa.hatenablog.jp

白金高輪駅から地下道で繋がっているので、地上に出なくてもABEJAさんの入っているビルまで行くことが出来ます。 会場は一度来たことが有るということもあり、一番乗りしてしまいました(笑)


目次


ABEJA Platform 勉強会 とは

イベントの概要から引用します。

機械学習ディープラーニングのAI・MLOpsを実装するためのプラットフォーム「ABEJA Platform」の勉強会です。

ABEJA Platform についてはこちらをどうぞ。

abejainc.com

「AIの導入・運用実績を元に、実産業で活用できるAIを実装するためのノウハウをプラットフォームとして提供」してくれるというサービスですね。

f:id:kabukawa:20190114102408p:plain:w500

PoC時はともかく、運用周りとかは実際にAIを使っていく時には運用周りとか結構やることはあるのに、そのあたりが考えられてない事は多いと思うので、こういうサービスは必要だよな、と思います。もちろん、こういう仕組みをクラウドを使って自前で構築することも可能ですけど、せっかくPoCで素早く回そうとしているのに実運用にするための仕組みづくりに時間がかかったら意味ないじゃん、と。そういう時に予め用意された「ABEJA Platform」のようなプラットフォームに乗る、というのも選択肢の一つとして大きな意味が有ると個人的には思います。


何故参加したか

今は自分でAIのシステム開発をしているわけではないので、聞かれた時に答える、提案のための自分の引き出しを増やしておきたいというところが参加の動機です。 運用だったり、モデルを再学習してデプロイして、というようなサイクルは、システムにする上での大事なポイントだと思うので、そういう意味でも興味がありました。 どういうフローとか仕組みになっているんだろう、というところですね。


タイムテーブル

時間 タイトル 登壇者
19:15 受付開始
19:30 会場説明
19:35 ABEJA Platformの概要説明
19:50 ABEJA Platformハンズオン
20:45 成果発表!! みんなでできた/できない、tipsをシェアします
21:00 懇親会 軽食・飲み物を用意する予定です。
22:00 解散 みんなで片付けをします

内容

ハンズオン、ということで講師の話を聞きながら黙々とPCに打ち込む、という感じの流れを想像していたのですが。。。

取り敢えず乾杯して飲みながらスタートでした。やっぱり楽しくできるのが一番ですね(笑)


ABEJA Platform の概要説明

さらっと紹介されていましたが、資料は公開されていないようなのでこんな感じの説明があったというのを貼っておきます。

ABEJA Platform の周辺(エッジ、既存データ、他プラットフォーム)との連携

f:id:kabukawa:20190118112348p:plain:w500

ABEJA Platform の提供するAIの継続的インテグレーション

f:id:kabukawa:20190118112530j:plain:w500

AI開発、運用時の課題とABEJA Platform の提供するソリューション

f:id:kabukawa:20190118111731p:plain:w500


ABEJA Platform ハンズオン

こちらの記事を使って、ABEJA Platform の管理コンソールの操作に慣れつつモデルのデプロイ、WebAPI化といったところを体験する流れでハンズオンが行われました。

qiita.com

手順は上記の記事を見ながらやれば最後まで行けると思いますので、自分がやったこととハマったところを書いておきます。


環境周り

  • PC ハンズオンなのでPCを持ち込む必要があります。
    Macの方が楽だと思います。でもMac持ってないので自分はWindows10のWSL(Ubuntu 18.04 LTS)環境で参加しました。 後で出てきますが、WSLだと若干の制限があります。

  • Webブラウザ
    特に説明はありませんでしたが、管理コンソールを使う関係上Chrome最新バージョンをインストールしておく必要があるようです。
    個人的にはChrome使いなので新しくChromeをインストールするようなことはしませんでした。
    他のブラウザの人が居なかったので分かりませんが、たぶん画面表示が崩れるとかそういう問題が出る可能性があるのだと思われます。

  • プログラミング言語
    MacLinuxPythonが動く環境が必要。 自分はWSL(Ubuntu 18.04 LTS)にPython3.5をインストールして参加しました。WSLは他のハンズオンなどで入れたライブラリなどの影響が有ると嫌だったので環境をリセットしたうえで、開発関連のツールチェーンも必要な気がしたのでこんな感じでパッケージを追加しました。

$ sudo apt -y install build-essential python3 python3-pip python3-dev

ABEJA Platform 管理コンソール

ログインする時のID等はハンズオン参加者向けに用意されています。 ただ、幾つか最初にやっておいたほうが良いと思われる設定があるので、それを書いておきます。

  1. 日本語表示
    ログイン直後はデフォルトで英語表示なので、日本語表示にしたほうが分かりやすと思います。
    f:id:kabukawa:20190118131733p:plain

  2. サイドメニュー デフォルトでアイコンのみになっていて分かりづらいので、慣れるまではキャプション付きにしておいたほうが良いと思います。
    f:id:kabukawa:20190118132008p:plain
     ⬇
    f:id:kabukawa:20190118132021p:plain

  3. モデルやデプロイの名前
    モデル作成やデプロイなどで使う名前は任意(但し同じ名前は付けられないようです)で付けることが出来ます。
    ハンズオンは10人位でやるので、何も考えずにつけると一覧画面で自分のモデルやデプロイを探す時にちょっと困ります。
    ただハンズオンでは全員が共通のIDで作業しているので自分のモデルだと分かりやすいように名前や日付などを入れるなど、工夫したほうが良いと思いました。

  4. パーソナルアクセストーク
    IDは共通なので誰かが一人作成すればいいと思います。
    各自で作成する場合は、モデル名と同様にトークン名にも名前や日付などを入れるなどの工夫を。
    作成を実行して「正常に作成が行われました」というメッセージが表示されても、ユーザー情報のメニューににパーソナルアクセストークンが表示されない場合、管理コンソールのページ自体を再読込すると表示されるようです。パーソナルアクセストークンの一覧ページで確認することもできます。


ハマりどころ

あくまでWSL(Ubuntu 18.04 LTS)環境での話ですので、その点ご了承ください。

  • pythonコマンド
    Python3系を使うので、スクリプト等を実行する時のコマンドを読み替える必要があります。(エイリアス付けても良いのかもしれませんが自分は明示したいので意図的にそのままにしてます)
手順に有るコマンド WSL環境で打つコマンド
python python3
pip pip3
  • wgetコマンド
    自分のWSL(Ubuntu 18.04 LTS)環境では問題なかったのですが、Macの場合はwgetコマンドがインストールされていない人が何名かいらっしゃいました。 brewでインストールしてもいいと思いますし、URLをブラウザのURL欄に入れてダウンロード/表示したものを保存でも問題ないと思います。

  • パッケージ
    手順で出てくるコマンドが入っていなかったので追加しました。

$ sudo apt -y install zip jq
  • pipパッケージ
    Chainerのサンプルを実行する時にこんなエラーが出るので、言われたとおりmatplotlibをインストールします。
$ python3 demo.py cat.jpg
Traceback (most recent call last):
  File "demo.py", line 2, in <module>
    import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
$ pip3 install matplotlib
  • 猫画像
    Chainercvのサンプル実行時に、コマンドラインの引数に猫画像(cat.jpg)を指定しますが、そもそもこの画像が何処から出てくるかが手順にありません。 自分はネットで猫画像を適当に検索してダウンロードし、それを cat.jpgという名前に変更しました。
$ wget http://psnews.jp/cat/uploads/2017/02/cat-1646566_1280.jpg
$ mv cat-1646566_1280.jpg cat.jpg
  • デモ実行時の警告
    WSL(Ubuntu 18.04 LTS)環境では cv2 が無いという警告が出ますが、取り敢えず動くのでここでは気にせず。
/home/kabukawa/.local/lib/python3.6/site-packages/chainercv/utils/link.py:60: RuntimeWarning: cv2 is not installed on your environment. Pretrained models are trained with cv2. The performace may change with Pillow backend.
  RuntimeWarning)
/home/kabukawa/.local/lib/python3.6/site-packages/chainercv/transforms/image/resize.py:33: RuntimeWarning: cv2 is not installed on your environment. ChainerCV will fall back on Pillow. Installation of cv2 is recommended for faster computation.
  RuntimeWarning)
  • デモの結果画面
    Chainercvのサンプルは結果を Matplotlibを使って画面(ウィンドウ)表示するのですが、WSL(Ubuntu 18.04 LTS)環境ではX-Windows上でやらないと表示できません。 (しれっと画面表示しましたという体でコマンドラインは正常終了)
    ちゃんと処理しているのかを確認したければデモのソースにちょっと手を入れます。demo.pyの37行目あたりに以下のコードを追加すると、サンプルのモデルで画像を推論した結果が表示されると思います。
    最初が候補、次が推論結果のインデックス、最後が評価が正しいと思われる確率です。インデックスは0オリジンなので cat と評価されていることが分かります。
    print(voc_bbox_label_names)
    print(label)
    print(score)
('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor')
[7]
[0.9995179]
  • 犬画像でも
    これだけだと信じられないと思うので、犬の画像でもやってみると、ちゃんとそういう結果(インデックス11なので dog )が表示されます。
$ wget https://www.min-inuzukan.com/images/dog_img_miniature-dachshund.jpg?18102302
$ $ mv dog_img_miniature-dachshund.jpg?18102302 dog.jpg
$ python3 demo.py dog.jpg
('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor')
[11]
[0.9995899]

まとめ

デモで実際に動かしてみて、大まかな流れは理解できた気がします。 取り敢えずインフラのことは気にせずモデルをAPI化して使えるようにできるというのは、簡単そうに見えるけど結構面倒なことだと思うので良いなと思いました。

死活監視はAPIのエンドポイントを使ってやれば良さそうですね。ログやメトリクスについては気になっていたのですが、ABEJA Platform 側にログやメトリックの機能があるのでそれを使うか、SDKに実行ログを取得するものが有るようですのでそういったものを使ってコントロールする感じになるようです。ドキュメントにそれらしい関数などの記述も有るので興味があれば読んでみると良いかもしれません。

developers.abeja.io

ハンズオンとしては色々ハマったところもあったものの、最後まで行けたので個人的には参加してよかったと思っています。

仕事で使うにはどうしたら良いのか、という視点で参加したので、全体的な流れがイメージできたのはありがたかったです。 事例なども含めて、もっと詳しく知りたいと思ったら、こちらのイベントに参加してみるのもいいかと思います。 (僕は申し込みましたので、参加予定です)

six.abejainc.com

どちらかと言うとビジネス寄りのイメージだったので個人で参加するのはちょっとドキドキしたのですが、凄く雰囲気も緩やかで楽しく学ぶことが出来ました。

f:id:kabukawa:20190117185448j:plain:h400

講師、スタッフ、参加者の皆様、ありがとうございました!