こんにちは、エムスリーエンジニアリンググループ AI・機械学習チーム(以下「AIチーム」)で機械学習エンジニアをしている農見です。
今日から1週間「AIチーム ブログリレー」と題し、AIチームメンバーでリレー形式でテックブログを執筆し、AIチームがどのような開発をしているのか・どんなチームなのか・どんなメンバーがいるのかなど、ご紹介できればと思います。
記念すべき初回は僕がAIチームで知っている技術スタック( AIチーム内で使ってる技術スタックではない)についてです。それではどうぞ
AIチームの技術スタック
そもそも技術選定は各プロダクト毎にやってるので、僕が触れているもの、ほんんんんの一部なんですけど抜粋するとこんな感じです。脚注があるのがチーム内の人が開発したものです。
開発言語 | Python, Go |
インフラ | Google Cloud, Kubernetes, Terraform |
Google Cloud関連 | zerodriver*1, berglas-secret-controller, Gatekeeper(OPA) |
データベース | MySQL(Cloud SQL), BigQuery, Elasticsearch |
データ分析 | BigQuery, Redash, Looker |
監視 | お手製のk8sのevents監視くん*2 |
環境構築 | Docker, Colima, Poetry |
API | Goa |
実験管理 | gokart*3, kannon*4 |
便利ツール | cookiecutter, kj*5 |
機械学習ライブラリ | LightGBM, PyTorch, Implicit |
CI | GitLabCI |
開発言語について
AIチームではAI開発とAPI開発をセットでやることが多いです。そのためAI用のPythonとAPI用のGoのセットがメイン言語となってます。ただ、これで作らなくてはいけないということはなくRustを使ったAPI等もあり、要件を満たすなら色んな言語を使うことが出来るという遊びの余地もあるのがAIチームのいいところです。
インフラについて
データ基盤のBigQueryと距離が近くなるということでGoogle Cloudを使用してます。Kubernetesを使うためメインで使うのはGKEです。インフラはTerraformでコード化されており、権限管理が容易となってます。
Google Cloud関連
Cloud Logging に最適化した構造化ロギングとしてzerodriverを採用してます。これはAIチームの笹川さんが開発しているもので、こういうOSS活動を行なっているメンバーがいるところもAIチームの魅力です。
データベース
AIチームでは以下の事情があり、MySQL(Cloud SQL)を使用することが多いです。
AIチームのworkloadは、全削除 + 全データ投入というデータの書き込みと、キーに紐づくデータの参照で構成されています。キーに紐づくデータの参照はKVS(Key-Value Store) の得意分野なので一見するとKVSでも良さげに見えますが、データ全削除 + 全投入はKVSには辛い処理となりがちで料金も跳ねるので使いづらいです (Bigtableならそうでもなさそうだけど)。
そういう理由があるのとまあ正直RDBで特に問題もないので、MySQLを使用しています。
データ分析
基本はBigQueryでSQLを叩いてKPIを確認してます。ただ、それだけではなくRedashやLookerを用いてダッシュボード化してチーム外にも共有し、ビジネスサイドと話すこともあります。
監視について
お手製のk8sのevents監視くんが動いています。これがかなり便利で自動でSlackに流れてくることにより気が付きやすく、担当者以外も対応しやすくなっています。
環境構築について
k8sといえばコンテナ、Dockerを使用しています。最近Docker Desktopの値段が高くなったのでColimaに移行しました。世知辛いね。
また、Pythonのライブラリ管理としてPoetryを使用してます。ライブラリ管理ツールは色々ありますが、その中でもPoetryは便利で使い勝手が良いです。
APIについて
Goaを使用して作成することが多いです。デザインのGoを書くだけでサーバとクライアントのコードおよびOpenAPIを作成してくれるので楽です。
実験管理
エムスリーといえばgokart。キャッシュによる実験の高速化と再現性の担保を行なっている機械学習パイプラインです。みんな使ってください。
最近インターンの小栗さんがKubernetes jobで分散実行するためのライブラリkannonを作ったのでそっちもよろしくお願いします。
便利ツール
新規開発の機会が多いのでcookiecutterでプロジェクトの雛形を作成しています。これを作ることにより、プロジェクト開発のSoTAを探す必要がなくなるので便利です。今後cruftを取り入れて進化するらしいですが、それは明日の記事で
kjは北川さんが作ったk8sのCronJobをtemplateとするJobを作成するツールですね。せっかくなので宣伝してます。
機械学習ライブラリについて
この辺は他の会社と変わらないと思います。モデルとか使用している技術とかにも触れると枚挙に暇がないので本記事ではカット。
CIについて
リモートリポジトリとしてGitLabを使用しているのでCIもGitLabCIを使用しています。GitLab自体にCI/CDが組み込まれているので使いやすいです。
終わりに
以上がAIチームの技術スタックです。AIチームでは新規開発の機会が多いので割とモダンな技術スタックになってると思います。
We are hiring!!
AIチームではこの技術スタックいいねと思った方やもっとイケてる技術スタックに変えてやるぜという方を募集しております。
色々書いてますが、これらのスタックすべて入社前にできる必要はないです。データ分析、機械学習等で得意な分野があれば応募してください。僕は入社前はGo書いてませんでしたが、入社後から書き始めてAPIを作ってます。