こんにちは、タイミーのデータ統括部、DRE(Data Reliability Engineer)グループ & DS(Data Science)グループ所属の筑紫です。
DSグループではML基盤の構築・運用保守を担当しています。
本記事では、ML基盤を再構築した話を紹介したいと思います。
※Timee Advent Calendar2023のシリーズ 2の12月13日分の記事です。
経緯と課題
DSグループでは、様々なプロジェクトのML基盤を構築しています。
当初は、1つのCloud Composerの上に、全てのpipelineを載せて運用していました。
以下に当初の構成のイメージ図を示します。
ただ、このML基盤についてはいくつか課題がありました。
本番環境しかない
本番稼働しているpipelineが複数ある中、環境が本番環境しかありませんでした。
Cloud Composerも本番のインスタンス1つしかなく、例えばCloud Composerのimageのupdateが必要な際もupdateして既存本番に影響がないか検証できる環境がない、などの問題が発生しており、保守に耐えられない状況でした。
サービスレベルの異なるpipelineが同じワークフロー上に乗っている
当時ML基盤の予測結果を社外に提供する取り組みも開始している中で、社内利用のML pipelineと社外利用のML pipelineが同じワークフローツール(Cloud Composer)上に乗っている状況でした。
ML基盤でもその結果を社内で使用するものと社外で使用するものでは、サービスレベルが変わってきます。
異なるサービスレベルを持つ複数のpipelineが一つのワークフローに乗っている状況では、あるpipelineの挙動が他のpipelineにも影響を及ぼし、サービスレベルに影響を与える可能性があるため、運用上好ましくありませんでした。
インフラ反映までのプロセスが長い
GoogleCloud環境はTerraformで管理していますが、そのリポジトリはDREグループ管理になっており、DSグループがリソースを作成する際に、以下の手順を踏む必要がありました。
- DSグループで修正のPullRequest(以降PR)を作成
- DREグループにレビューを依頼
- DREグループのレビュー通過後にマージ & デプロイされるので、反映結果を確認
このような手順を踏むので、
- 検証のために、試しにリソースを作成したり変更したりする際に、都度PRを作成し、レビュー依頼しないといけない
- 他チームのレビューを挟むので、GoogleCloudのリソースを作成するまで、リードタイムがかかりがち
という問題があり、DX(Developer eXperience)に影響を与えていました。
ソリューション
まず本番環境しかない問題については、開発環境を作り、Cloud Composerを本番環境、開発環境それぞれに配置することにしました。
それに合わせてGoogleCloudのprojectも分けることにしました。
1つのproject上に本番環境と開発環境を構成するよりも、分けた方が事故が起こりにくく、Terraform上の管理もしやすかったためです。
また、サービスレベルの異なるpipelineが同じワークフローに載っている問題について、サービスレベルが大きく異なるユースケースごとにCloud Composerを分けることにしました。
コストとのトレードオフになりますが、運用・保守のしやすさを考えると、社内で使うユースケースと社外などConsumerなどに提供するユースケースでCloud Composerを分けた方が良いという判断からこの構成にしました。
結果、下図のような構成になりました。
その上で、上記環境のTerraformのコードをDRE管理のリポジトリと分けて、DSグループ管理の別リポジトリで管理する方針としました。
また、ブランチ戦略を整理して、featureブランチにpushする度に開発環境にデプロイされることにしました。
これにより、デプロイ都度レビューを挟まないといけないフローが、featureブランチにpushするだけでデプロイされるようになり、検証までのリードタイムを改善できたと思ってます。
結果
最終的に、数ヶ月かけてこの新環境の構築とpipelineの移行を行いました。
結果、上記の3つの課題については、解消することができたと思ってます。
特に、開発環境ができたことと、DSグループ管理のTerraformリポジトリができたこと、featureブランチのpushでデプロイできるようになったことから、インフラの検証のしやすさは格段に上がったと思っており、DSグループ内のDX向上に寄与できたのではと思っております。
We’re Hiring
タイミーのデータ統括部では、データサイエンティスト、DRE、Data Analystなど、様々な職種のメンバーを募集してます!
https://hrmos.co/pages/timee/jobs
カジュアル面談からでも対応できますので、少しでも気になった方は申し込み頂けると嬉しいです!