はじめに
2020年5月17日をもって、株式会社ABEJAを退職しました。在籍期間は業務委託で入った期間を入れてちょうど1年でした。ABEJAではSoftware EngineerとしてABEJA Platformを担当し、MLOpsの新機能開発やユーザビリティ改善、およびPdMの真似事をやりました。
最終出社恒例のやつ pic.twitter.com/KtiP4DlhjH
— Keigo Hattori (@keigohtr) May 16, 2020
関連記事
- 株式会社ABEJAに入社しました
- ABEJA PlatformのJupyter Notebookから機械学習Jobをたくさん投げる方法
- ABEJA Platformで学習済みの機械学習モデルを管理する方法
- LINE株式会社を退職します
- LINE株式会社に入社しました
- 富士ゼロックスを退職しました
ABEJAでやったこと
在籍は1年間ではありましたが非常に多くの機能をリリースしました。ここではGAになった機能だけを紹介します。検証中のアルファ機能もやばいのでGAを楽しみにしてください!GAされなかったら察してください
機能編
テンプレート機能
入社当初のABEJA Platformのコアバリューは、私が思うに"無限にスケールするML用学習/配信インフラ"でした。しかし、色々と手が届いていない点もあり、ユーザーにとってはオンボーディングが非常に難しいプロダクトでした。事業的にはABEJA Platformのアノテーションツールが最も好評でした。そこで、オンボーディングの問題を解決しつつ、アノテーションから学習、配信までをスムーズに回せる体験を作ることにしました。それがテンプレート機能です。
設計のポイント
- ABEJA Platformで動作することが完全に保証されていること
- 学習、配信の両方のコードがある
- テンプレとしてだけではなく、コードサンプルとして使えるレベルに整理されている
- ABEJA Platformのアノテーションツールと完全に連携すること
- アノテーションツールからであればノンコーディングで利用できる
- ABEJA Platformでのベストプラクティスを体現していること
- ハイパーパラメータの記録のため環境変数でハイパーパラメータを制御する
- ABEJA PlatformのTensorBoardで学習の進捗を表示できる
- ローカルで動作すること
- ABEJA Platformの独自仕様で内部が見えづらいところをうまくwrapする
- GitHubで情報を公開すること
- ドキュメントの代わりに、コードサンプルを充実する
- プルリクエストを受けられる状況にして、より良いテンプレートに改善する
- 私に属人化しないこと
- 様々なテンプレを簡単に追加できる構成にする
どうだったか?
現在、テンプレートは4種類あります。画像分類、領域抽出、物体検知、多値分類(テーブルデータ)の4種類です。これらはABEJA Platformのアノテーションツールを使っているお客様にも利用頂いていますし、受託した案件で社内のDSチームが使っています。また、ABEJA Platformのデモやハンズオンでも使っているので、bizメンバーの活動支援にも繋がりました。あくまでテンプレートなのでMLモジュールとしてみると精度は十分ではないことが多いですが、オンボーディングの課題を解決しつつ迅速にPoC (Proof of Concept) できるため、ABEJA Platformのプロダクトとしては非常に重要な機能になりました。
モデル配信まわりの再構成
ABEJA Platformはデータ蓄積から学習、運用までを一気通貫でサポートするMLOps as a Serviceですが、学習から配信への動線に不自由さがありました。具体的には、ABEJA Platformで訓練済みモデルを管理するためにはABEJA Platformで学習ジョブを回す必要があり、配信から先だけを使いたいユーザーはある種の裏技(="コードにモデルを内包してABEJA Platformにアップロードする")を駆使する必要がありました。私はむしろ配信から先の機能を充実させたいと思っていましたし、配信から先を使うユーザーを増やしたいと思っていたので、学習から配信への動線を再構成することにしました。これには内部のDBの統廃合やフロントエンドの大幅な改修が必要で、3ヶ月位かかりました。
設計のポイント
- 手元にある訓練済みモデルをABEJA Platformで管理できること
- 訓練済みモデルのコンテキスト(データ、パラメータ、メトリック)含めて管理する
- 適切なユーザビリティを提供すること
- モデル管理機能、配信コード管理機能、配信機能を分ける
- 上記の改修をお客様の移行コストゼロで実現すること
どうだったか?
利用者からするとあまり恩恵はなかったと思います。多少のユーザビリティが改善した程度でしょうか。しかし、後述の「ABEJA Platform SDKの拡張」に下準備になっています。
ABEJA Platform SDKの拡張
私がMLOpsのプラットフォームを作る上で大事にしていることとして"如何にDS/MLEの既存の体験(モデル開発)を変えずにMLOpsの価値を提供するか"があります。たぶん私と同じ設計方針を取っていて特に素晴らしいと思う企業はDatabricksです。例えば、koalasはpandasの皮をかぶったsparkですし、MLflowはloggerライクに使えるMLモデル管理機能を提供しています。最近ではMicrosoftがDatabricksと組んでJupyter Notebookで完結する素晴らしいMLOps体験を提供しています。この体験が本当に良いと思ったので、自社プロダクトにも取り込むことにしました。
設計のポイント
- SDKから学習Jobを投げられること
- Notebookでデバッグし、動作確認できたら学習用クラスタにJobとして投げられる体験を作る
- MLモデル用のLoggerを作ること
つまりMLflow tracking- Loggerの記法でparameterやmetrics、artifactをABEJA Platformに保存できる
- GUIでmetricsをグラフ化できる
- parameterやmetricsを表で見れる
- ↑の表で表示するカラムをカスタマイズできる
スクリーンショット
どうだったか?
大きく体験を変えることに成功しました。ML/DSの活動をABEJA Platform上で完結できるようになったのでデモやハンズオンで公開できるシナリオが増え、bizメンバーの活動支援に繋がりました。訓練済み機械学習モデルの管理機能についてはこれからフィードバックを貰う状況ですが、社内および既存顧客へのデモでは好評でしたのでフィードバックが楽しみです。
その他
アルファ機能なのでGAになるまでお待ち下さい。現在の体験とは全く異なる新しい体験を複数仕込んでいます。先出しでデモしたお客様には好評でしたので、これからフィードバックを貰うのが楽しみです。GAになったらこのブログでも紹介できればと思ってます。
番外編
PdM の真似事
私はPlatform事業部のPdMになることを期待されて採用されました。多分。入社後にもCPOから「Platform事業部のPO (Product Owner) になってほしい」と言われた記憶があります。残念ながらその話はなくなってしまいましたが、いずれにせよ事業にPdMはおらず、しかし事業にPdMは必要なので、少しでも力になれればとPdMの真似事をやることにしました。
実際にやったことは、「プロダクトのDAUを機能ごとに計測し、ユーザーの行動ログを観察すること」と「既存顧客を訪問し、プロダクトのフィードバックを貰うこと」の2点です。ありがたいことにbizメンバーの協力が得られたので既存顧客はほぼ全社訪問できました。ヒアリングでは、こちらから積極的に自社プロダクトの悪い点を提示してお客様から意見を貰うようにしました。このやり方は本来は良くないので、やれるのであればエスノグラフィをオススメします。今回は時間の都合もあってエスノグラフィができなかったことと、過去の経験からヒアリングではお客様から厳し目の意見が出づらいこと、それらを踏まえてこのようにしました。ヒアリングの結果、お客様が感じるプロダクトの不満点は共通で、そこを解決するとユーザビリティがとても良くなるだろうという感触を得ることができました。既にアルファ機能として機能開発は完了し、仮説検証をしています。GAを楽しみにしてください(フラグ)。
退職理由
・・・言語化するのが難しいですが、有り体に言えば「音楽性の違い」になると思います。カルチャーフィットしなかったのか。例えると、私が所属したPlatform事業部は「ジャズ」の文化で私は「オーケストラ」の文化を求めていた、となるでしょうか。私はみんなでオーケストラをやろうとしたし、同じようにオーケストラやろうとするメンバーはたくさん居たけど、やっぱり事業部はジャズで動いていた。文化の違いがある中でどう動けばよかったのか、私にはわかりませんでした。もしかしたらジャズをやればよかったのかもしれないし、オーケストラをやれるように時間をかければよかったのかもしれないし、あるいは外で落語を始めたらよかったのかもしれません。たとえすぎてもはや何を言っているかわからない。
ABEJAでの仕事をやりきったかと言われると全然そんなことはなく、むしろもっとやれることはたくさんあったしやりたいことはたくさんありました。個人的に考えたプロダクトのロードマップはかなり先まで描いていました。・・・それでも辞めるのは、ミスマッチと至らなさです。プロダクトの方向性が合わなかったし、プライオリティも合わなかった。せめて文化にハマるか文化を受け入れられれば良かったですが、私にはどちらも出来ませんでした。挙句の果てには自分の考えをチームにインストールしようとして、そのアクションによってチームに迷惑をかけました。私の実力不足と人間的な未熟さでも迷惑をかけました。迷惑をかけることが増えていました。私も事業部も「事業を成長させる」ことがやりたいわけで、スタートアップなのでそれ以外のことで消耗すべきではないです。プロダクトの方向性もプライオリティも異なる私が事業部に留まることは事業の成長にとってマイナスでした。私が去れば事業部はもっと良いチームになりますし、それが事業の成長を加速させます。そう思い退職を決意しました。なので、今回は自分に対して不甲斐なさを感じる退職となります。敗走、逃走、そういう感覚です。
最後に、ABEJA Platformの目指すところはきっとこれからも私自身が将来実現したい世界と近いはずです。私はこれから彼らとは違う道 (process) で、歩き方 (how) を変えて、ゴール (what) を目指します。歩き続けていればきっとゴールにたどり着けるし、最後まで歩いていた人が最も遠くまでいける。そして道の先でまた彼らと出会えたらいいなと思います。ポエムか!
おわりに
というわけで、1年間という短い間でしたがABEJAにはお世話になりました。Platform事業部のメンバーは全員優秀で、大変勉強になりました。ありがとうございました!
P.S. その1
このブログのバックナンバーを見ていると、転職しかしていない気がした。
P.S. その2 私はSOを持っていません。