技術評論社様から献本いただきました。ありがとうございます。
Practical Developers ――機械学習時代のソフトウェア開発[ゲームアプリ/インフラ/エッジ編]
- 作者: 飯塚健太郎,大川徳之,keno,古賀理,田中一樹,徳永拓之,西田圭介,森田和孝
- 出版社/メーカー: 技術評論社
- 発売日: 2019/08/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
献本されたからとか、筆者に個人的にゆかりのある人が多いからとかではなく、純粋に、読んで面白かったです。
僕は(ご存知の通り)機械学習工学研究会(MLSE)なる、機械学習システムをどう構築するかっていう工学を考える研究会にどっぷりかかずらわっているんですけども。
この本のサブタイトルが「機械学習時代のソフトウェア開発はどう変わったのか」になっていて、まさにこの、機械学習工学的な興味に照らしてどんぴしゃな内容だったわけです。
6章を7人が、それぞれの経験を元に色々書いていて、目次見たときはもっと簡素な事例集かと思ったんですけど、各章非常に中身が濃く、そこいらではなかなか得られないような気づきも多く含まれた、非常に良質なプラクティスの塊だなぁという印象を持ちました。
ということで、本当に純粋に、機械学習工学に興味を持つ人、機械学習を使ったソフトウェアの開発に興味を持つ人にオススメしたい本です。
以降はもう少し詳細に語っていこうかなと思います。
全体的な話
面白いと言うか、よくこんな構成にしたなと思ったのは、6章あるうちの3章がクラウドサービス構築に関する話、でもう3章が、よくエッジAIとか言われる、小さいデバイスでディープラーニングを走らせる話に関連した内容になってることです。
両方とも機械学習が関わってるとはいえ、興味を持つ人が分断するんじゃないかなと。前半しか読まない人とか後半しか読まない人とか出そうで、本を企画する側としてはどういう気持ちでこうしたんだろうな、などと思ってしまいました。
あと、各章それぞれの執筆者に自分の開発環境がどうなっているか(使っている計算機、モニタ、エディタの種類、etc.)を書かせてるのが地味に面白かったです。
読者にとって役立つ情報かどうかはわからないですが、みんな他人がどういう環境で開発してるかは気になりますよね。
1章 ゲームアプリ『逆転オセロニア』の開発
個人的には非常に読ませる内容でした。改めて思ったんですけど、ゲームって機械学習のアプリケーションとして向いてますよね。
機械学習って確定的な出力結果を期待できなかったり、リコメンドシステムみたいなものだと返ってくる結果が合ってるのか間違ってるのかも定かでなかったり、という意味で、ロジックをバッチリ組むビジネスアプリケーションと相性が悪いところがあるんです。
そういう点で、ゲームというのはプレイヤーの満足度をいかに上げるかっていう感性が全てなので、開発者もそういうモードで接しやすいと言うか。
そのためか、非常に機械学習を使いこなしてるなぁ、という印象を持ちました。
機械学習モジュールに周辺のシステムをすり合わせていくような開発過程など、一般的なアプリケーションの開発でも参考になる点は多いと思います。
2章 Indeedのインフラ構築
こういうのを、最近国内では MLOps と呼ぶようになりました。
機械学習システムの運用をどう円滑に進めて、そのためにどういうインフラを構築しなければいけないか、など。
この方面は、エンジニアの人達はさかんに勉強会を開いたりしてるんですが、残念ながらアカデミックにちゃんと研究してる人が少なくて、国内ではゼロに等しいのです。
海外ではOpMLなんて国際会議も開かれたりしてるんですけどね。
この章を読んで頂ければわかるんですけど、本当に機械学習関連のインフラ周りは奥が深いようで(僕は普段タッチしないので間接的に聞いてる話でしかないですけど)やはり多くのエンジニアが興味を持つのでは。
3章 フィンテックでの大規模データ処理の自動化
こちらも2章に比較的近い話なのかな。フィンテックと書いていて、具体的なサービス名などは明らかになってないようですが。
いやー、こちらも僕は専門外ではあるんですけど、奥が深そう。すごくマニアックなことを色々書いていて、ちょっと感動しました。ファイル名の名前の付け方で日付が後ろのほうがいいとか、非常に細かい話が書いてあります。
このdockerやAirflowに特化した話を、他社の人がどれだけ参考にできるかわかりませんけども、筆者がどうしてこういうことを考えたのかな、という思いを巡らせると、いろいろ得るものは大きそうな気がします。
タスクを冪等に設計する/しないなんて話は、そういうこと考えるんだ、というちょっとした感動が個人的にはありました。
4章 Ideinの深層学習のエッジ推論高速化
はい、私の勤め先です。
執筆者の大川さんは会社で私の隣りに座っている人なので、なので開発環境が書かれているとおりになっているの、ここだけは自分で確かめられました。
これも身内贔屓じゃないんですけども、非常に内容が濃いですよね。
大川さんとか、その他Ideinエンジニアがよく議論していることが本当にそのまま書かれていて、結構太っ腹だな、とか思ってしまいました。
ぜったい他社の人も参考にしてほしいって思うことも書いてるし、依存型モリモリ使ったHaskellの型検査が遅いとか、他社では絶対参考にならんやろ、とか思う情報もふんだんに載ってますけど。
まぁ、大川さんは普段こんな細かいことを意識しながら開発してるんだ、っていうのをぜひとも汲み取ってほしいです。
あと、2章のIndeedのところで「計算資源のコストより開発コストを下げる方を優先」って書いてあったんですけど、このIdeinの章を読めばそういう富豪的な開発はエッジ向けには採用できないということがわかっていただけると思います。どちらが間違いとかではなく、やはり製品・サービスごとにトレードオフがあるということですね。
5章 TVM
ここだけは、うーん、僕はあまり面白いと思えなかったです。森田さんごめんなさい。
というか、ここだけノリが違いません? 他は製品なのにここだけOSSってのもあるかもしれないですけど、他は製品をどう作るのかって話が主眼なのに、ここはTVMそのものの紹介しかしてないと言うか。
どちらかというと、森田さんにはTVMを開発する上でどういう苦労があるかとかをもっと密に語ってほしかったかな……あるいはTVMの中の人じゃなくて、TVMをサービスに組み込んでる AWS SageMaker Neo の中の人に、TVMをどんな工夫を凝らして組み込んでいるかを語ってもらうとか。中の人英語だろうけど。
国際的なチームによるOSS開発ならではの苦労とか、色々あると思うんですけどねえ。
僕自身がTVMに少なからず関わっていて、この章の内容はほぼ既知の内容だったってので面白さを見いだせなかったのかもしれないですけども。
6章 LeapMindでのFPGAとか量子化とか
はい、私の以前の勤め先です。
だからというのもあってか、ここは多分他の人と僕は読み方が違っていると思います。あー徳永さん育児休暇取ってたんだ、とか。
Blueoilのワークフロー書いてましたけど、あれ、それlmnetじゃない? dlkはどうなってるんだろう?とか。
(僕は在籍時、dlk開発のリードとかしていました)
まぁそんななので、フェアに書けることが割と少ないんですけど、ただエッジAI開発であっても学習環境が重要だっていうのは #02 あたりを読んで頂ければわかるのではないですかね。
僕がいた頃からLeapMindには優秀なインフラエンジニアの方がいまして、彼らがみんなの開発を支えていた面が多分にありました。
おわりに
改めてですけど、これは非常におすすめです。開発で機械学習使ってたり、機械学習プロジェクトに関わってたりする人は読んでみるといいのでは。
続編が読みたいかというとそうでもないんですが(この内容で十分おなかいっぱいになれる)、機械学習工学研究会をやってる人間からすると、これを踏み台にしていろいろ研究する人とか出てきてくれないかな、と思ったりします。