2020年振り返り的な

はじめまして、yusと申します。
業務等以外で真っ当に文章を書く習慣がなかったなと思い、発生練習のつもりでAdvent Calendarという形で2020年の振り返り(主に技術面)をしてみる次第です。

2020年前半

今年は、業務側で去年からすでに仕込み始めていたMLモデルビルドパイプラインの構築関係でAirflow, Argo, MLflowに本格的に触れ始めたのが大きかったと思います。

特にパイプラインにどれを導入するかで色々試行錯誤したのですが、最終的には無難に(?)Kubernetes + Argoの組み合わせになりました。コンテナによるビルドの系を組み立てること、パイプラインの静的なチェックの両面から再現性をある程度担保できる、という実感を得られたからです。
ここに+αでMLflowでの実験(リリース候補モデル含む)管理を追加して一旦完成で回し始めました。

このあたり、メタ的にはほんの基本ではありますが、MLエンジニアから見ても、サービスへの適用の立場から見ても、効率的かつ使っていて苦にならないMLモデルの運用はどうすればよいか、ということを真剣に考えていたかなと。

結局の所、今になっても全く正解は見つかっていません。ただ、試行錯誤が肥大化しがちなMLの世界へ、再利用性などML以外では当然視されている設計を無理なく持ち込めるようにすることが必要なのだろう、というのが反省も込めた私の気持ちです。他のところで散々言われていますが…

その意味で定常かつ安定的なパイプラインには上記の通り、KubernetesとArgoの組み合わせで、それ以外はKedroで、というのが私の暫定的なベストプラクティスになってます。

あと、あらかた構築し終わった後に見つけた記事ですが、こちらが入門としてまとまっていて、これからMLOps初めたい人にはいいかなと。

2020年後半

今年の後半はまず、こちらのもくもく会に参加し始めました。在宅勤務は私の性に合ってはいるのですが、思考が発散しがちな私にとって週2回の開催になってるこのもくもく会は、精神的なリセットをしやすく助かっています。主催者のあすかさんに感謝です 🙏

業務ではニューラルネットワーク系のMLモデルをがちゃがちゃ書いていたため、気になっていたPyTorch Lightningを使い始めてました。オブジェクト指向的にスッキリとモデルを記述でき、Multi GPU学習やロギングなど、あって嬉しい機能ももりっと入っているので、保守性と拡張性両方の面で色々重宝できる感じなので、今後も使っていこうと思います。

他にも前半で作ってたパイプラインの拡張だったり、Kubernetesと周辺エコシステム(主にArgo CD)自体の勉強をもうちょいしてました。特に業務ではチーム内のプロトタイピングで、できたモデルをさくっとデプロイして企画とお話、という需要がちょいちょいあるので、Kubernetesをチーム内で気軽に扱えるようにしていきたいなぁと思ってる次第です。
最初期にKubernetesにするのはオーバースペックな感もありますが、他のエコシステムとのつなぎ込みとして、ML周りは依存する環境が多くなりがちなので、10人ぐらいのチームならKubernetes導入でもいいのかなと思ってはいます。

来年にむけて

2020年は効率的に実験もデプロイもできるML環境を作りたいという思いで動いていました。ある程度基本的な知識と実績は得られた反面、YAGNIの観点から見ると若干過剰だった気もするので、(一人でほぼやってたのもあり)どこまでやればいいのかは今でも不安です。

ただ、意外と複数の社外の人と軽く話した時に受けがよかったので、そんなに自分が間違ってないのかな、とは思ってます。精神的にも若干プラスになったので、ぶれないように来年も進んでいきたいです。

技術以外だと、チーム内での温度感のすり合わせが難しく感じました。確かに、純粋なMLエンジニアやリサーチャーから見た時に「デプロイやパイプラインまで保守性を担保しておくべき」というのは自明ではない部分も多くあるのかもしれない、というところはあります。
どうしても裏方的に評価されがちな部分でもあるので一人で空回りしないよう、ある程度の対話の必要性を感じました。

ともあれ全体的には技術的な蓄積は得られたので、チームでの回し方へ拡張していけるようにしたいなと思ってます。あと、さらっと流すくせができてしまったので、ちゃんとドキュメントとか精読するようにします…(当たり前)


この記事が気に入ったらサポートをしてみませんか?