アンドパッドのデータ部でデータ基盤や機械学習基盤の開発・運用をしている須貝です。冷やし中華が美味しい季節になりましたね。
先日、アンドパッドで初めて機械学習をプロダクトに組み込むことができました。プレスリリース も出すことができましたので、この記事ではこちらについて紹介します。
豆図AIキャプチャーとは
工事の際に、証拠資料としての工事写真を残す際に、工事状況を明記した黒板というものを使っています。この黒板の中に挿入する、補足情報となる図を豆図と呼びます。下図は黒板と豆図のサンプルです。
今回の開発した背景
配筋検査において、検査箇所の黒板に配筋リストの豆図を記載する必要があります。従来では設計図から豆図に該当する箇所を1つずつ手作業で保存していました。マンションやオフィスビルなど大型建築物の施工においてはとても手間がかかるため、 ANDPAD 黒板 の機能として、設計図から該当する豆図を検知する機械学習モデルの開発を行いました。
設計時に考えていたこと
開発当初、アンドパッドでは数名の機械学習エンジニアがPoCを実施し、価値があって精度が出るものを模索していました(現在も実施中です)。そのため、他にもPoCが成功したら機械学習をプロダクトに組み込むのが見えていました。
また、ありがたいことにアンドパッドはサービスが順調に伸びています。そのため継続的に学習を行うことで、モデルをPoC段階よりもさらに賢くできそうです。一方で建築業界といっても、業種が幅広いです。色々なユーザーに使ってもらうことで、図面の規格が定まっていないこともあり、性質の異なるデータが入ってくることも考えられ、トータルとしての精度が低くなることも想定していました。(別の文脈はありますが、実際にデータ分析をしていると、業種によって利用の仕方が異なり、悩むことが多いです)
そこで
- 新しい機械学習モデルのたびにコードやシステムを作るのは、開発・運用の観点で大変なので、汎用的に使い回せる
- その仕組みは機械学習モデルの開発で発生する様々な要求項目にも対応できる
- 継続的に学習して品質を保ち続けられる
- 精度が落ちた際に気づける、リリースの際に劣化していないことを確認できるようにモニタリングできる
ような基盤を実現しようと考えていました。
アーキテクチャについて
MLOpsのライブラリやツールはたくさんありますが、色々と検討した結果、Google CloudのVertex AIをベースにシステムを作成しました。学習ではVertex AI Pipelinesを、推論ではCloud Run + Vertex AI Endpointを利用しています。
Vertex AIについては日本語の記事もポツポツとではじめており、それと公式ドキュメントを参考に、まずはデータエンジニアがベースとなるコードやガイドラインを作成しました。実際にVertex AI Pipelines/Vertex AI Endpointを開発・運用してみると
- PoCからVertex AI Endpointのリリースまでを機械学習エンジニアが担当できるようになった
- GPUを指定したインスタンスでもオートスケーリングをやってくれる
- いざ切り戻しをする際にもモデルのバージョン管理ができているので簡単
- カナリアリリースも対応可能
など、とても便利なことを実感しました。
またサービスとVertex AI Endpointの間にCloud Runを挟むことで、汎用的な処理(例えば認証)の共通化や、アプリケーションの統合(例えばCloud Load BalancerとCloud Armor)がとても便利でした。今回の開発ではもしものために導入した側面が多く、とても悩んだところでしたが、結果としてシステムの拡張性が上がり、振り返ってみると良かったなと思います。
Human-in-the-Loopを取り入れる
機械学習の精度を継続的に改善していくプロセスの中に、人間からのフィードバックを取り入れたものをHuman-in-the-Loopと言います。
今回の豆図AIキャプチャーは、UI的に機械学習の予測結果のフィードバックをユーザーから貰いやすい形式でした。そこでANDPAD 黒板チームと一緒にDB構造をディスカッションし、フィードバックを溜めていくような仕組みを作りました。アンドパッドには既にデータ基盤があるため、このフィードバックを使い、上述した継続的に学習する仕組みが作れそうです。
また予測精度だけでなく、ビジネス上のKPIも決め、モニタリングできるようにログも出力してもらいました。
今回、1つ成功事例が作れたことで、次に新しい機械学習モデルをプロダクトに組み込む際も、この事例をベースにシステムを作っていきやすそうです。この場を借りて、改めてANDPAD 黒板チームには感謝を伝えたいです。
今後の継続学習への取り組み
今回の取り組みにより、豆図AIキャプチャーを実装するとともに、次に新しい機械学習モデルをプロダクトに組み込む際の工数を大幅に下げることができました。また継続的に学習するためのデータも溜まり始めました。一方で継続的に学習し、安全にリリースする仕組みはまだまだ開発途中です。
数週間前にチーム内でML Test Scoreをベースにディスカッションすることで、課題が明確になり、目線がチーム内で一致しました。今後はこの明確になった課題を解決するとともに、さらに基盤を発展させ、継続学習が当たり前の環境を作りたいです。
さいごに
アンドパッドでは、「幸せを築く人を、幸せに。」というミッションの実現のため、一緒に働く仲間を大募集しています。
現在はアンドパッドのMLOpsの黎明期です。今後、機械学習をプロダクトに組み込む案件は増えていきます。また継続学習のために基盤を作り込んでいきたいとも思っています。MLOpsを経験がない方でも、得意分野を活かして課題を解決できる人を募集しているので、我こそはという人は、是非ご応募ください。