## プロジェクト概要
大手企業を対象とした、放送技術系の機械学習プロダクトのAPI作成、インフラつなぎこみとフロントエンドを一部担当。
## チーム構成
機械学習エンジニア1名
インフラ1名(私)
バックエンド1名
フロントエンド3~5名
## 開発・実装内容と成果
### 1. スケーリングのしやすいAPI作成
機械学習系プロダクトの特性上、一度のリクエストで長時間の処理が必要になる点に課題がありました。
当初はFastAPIを用いたREST APIとしての構築を行いましたが、タスクの受け口と処理をするワーカーを分けるのが望ましく、Celeryというフレームワークを利用して受けたリクエストに対して柔軟なスケーリングができるタスクキュー型のAPIへ変更・設計しました。
また、タスクの数に応じてインスタンスをオートスケールさせるインフラや、オートスケールに耐えうる機械学習モデル周りの高速化(モデルのロードタイミングやIOPS性能の検討)、AWSのGPUインスタンスをスポット利用することでのコスト最適化、エラーの切り分けや定義なども行いました。
### 2. 機械学習プロダクトの最適化
学習部分には携わりませんでしたが、推論部分でのプロダクトの最適化を行っていきました。
・事前学習モデルの配置やローディングのタイミングを工夫して高速化
・シングルスレッドだった処理を並列処理や非同期処理に変更し高速化
・ルールベースでの処理を加えることを提案し、精度を向上
・処理に用いる際のデータを加えることを提案し、精度を向上
・より最適なパラメータの扱いを提案し、精度の向上
### 3. 進捗管理、フロントエンドの作成
社内でのタスク管理の優先順位付けやスケジュール管理なども行っていました。メンバーが詰まっている箇所などを確認し、適宜提案とアドバイスを行いました。
また、一部Next.jsでのフロントエンド側にも携わりました。
機械学習の非同期処理の特性を考慮し、各ステップで進捗状況を受け取って表示をするなど、ユーザーにストレスを与えないUXの提案と作成を行いました。
機械学習プロダクトは、先端的な情報が多いため検索などをしても前例が出てこない不具合なども多くありましたが、仮説を立てながら自主的に動いて課題解決をしていけたと感じます。