Slide 1

Slide 1 text

AWS Fargate を使ってコストを抑えつつ 機械学習のバッチ処理を構築した話


Slide 2

Slide 2 text

自己紹介 2 新卒で半導体の会社に就職 ソーシャルゲームの開発やコンサルティング会社を経て 2019年より株式会社 DROBE の CTO DROBE は生まれた時から機械学習による事業効率の 改善が宿命付けられていたのですが、当時私は機械学 習の経験はありませんでした 日々試行錯誤しながらサービス開発をしています 都筑 友昭

Slide 3

Slide 3 text

はじめに
 3 機械学習をサービスに組み込む時に
 こんな事を思ったことはありませんか?


Slide 4

Slide 4 text

はじめに
 🏗 インフラを作るのが大変そう
 
 💻 運用が面倒そう
 
 💰 出来るだけ安くしたい
 4

Slide 5

Slide 5 text

はじめに
 5 本日は AWS Fargate を使った 機械学習のバッチ処理を最大限シンプルに 実装したお話をします 同じような悩みを持つ方の参考に少しでもなれば嬉しいです! 


Slide 6

Slide 6 text

会社と事業の紹介


Slide 7

Slide 7 text

会社概要
 7 会社設立
 従業員家族・知人約200名にサービス提供
 クローズドβ開始
 一般の方向けにオンラインでの集客を開始
 オープンβ開始
 AIを活用したサービス提供開始
 正式リリース
 AIを用いて推薦された商品を直接購入できる機能
 ストア機能リリース
 シリーズAにて5億円の資金を調達 
 フェムトパートナーズ株式会社を引受先とする
 第三者割当増資
 2019.04 2019.06 2019.09 2020.03 2020.10 2021.04 株式会社DROBE
 代表取締役CEO
 山敷 守
 資本金
 1億円
 従業員数
 約30名
 (パート・アルバイト含む) 


Slide 8

Slide 8 text

サービスの概要
 8 約70問のアンケートをもとにAIとスタイリストが協働、 
 5~8点の商品をお選びし、ご自宅にお届け。 
 自宅で試着して商品の購入を検討。購入や着こなしに悩んだら、 
 スタイリストにLINEで相談。気に入ったものだけ購入、それ以外は返送。 
 商品の感想を送っていただくことで、 
 回数を重ねるごとに自分に似合う商品が届くように。 
 1 2 3

Slide 9

Slide 9 text

取り扱い商品
 9 取り扱い商品数
 万超
 40 メーカー ※一部 
 ※SKU


Slide 10

Slide 10 text

売上推移
 10 2021年12月 
 2020年12月 
 2019年12月 
 億超
 1 月商
 サービス開始2年で


Slide 11

Slide 11 text

1顧客あたりスタイリング時間推移
 11 分
 15 分
 240 AI導入

Slide 12

Slide 12 text

1回あたり購入金額
 購入率 (購入金額/送付商品総額) 
 AI導入前
 (〜2020年1月) 
 AI導入後
 (2020年2月〜) 
 AI導入前
 (〜2020年1月) 
 AI導入後
 (2020年2月〜) 
 Note : 購入金額は同一条件となる商品点数5点での比較 
 1顧客あたり購入KPI
 12 %増
 113 %増
 129

Slide 13

Slide 13 text

サービスの流れ 13 STEP. 1 プロフィールを記入
 AIにてWeb事前提案 
 スタイリストにて
 商品選定→発送
 試着・FB
 STEP. 2 STEP. 3 STEP. 4 1−3ヶ月頻度で 繰り返し 70問 5~8点 いつでも ストアでお買い物


Slide 14

Slide 14 text

サービス内での機械学習利用例 ➀
 14 AI による事前提案 ユーザーさんに事前に商品を提案 する機能
 
 カテゴリーや色のバランス、多様性 などが大事


Slide 15

Slide 15 text

サービス内での機械学習利用例 ➁
 15 スタイリストの商品選択画面 スタイリストが使う商品検索画面 
 
 機械学習を使っておすすめ順に並び 替える機能がある他、柄や素材と いったタグや、色やカテゴリーなどの 幅広い検索軸を用意 


Slide 16

Slide 16 text

サービス内での機械学習利用例 ➂
 16 ストア 検索の無い EC サイト 
 
 機械学習や運営からのオススメ などによって商品を提案 


Slide 17

Slide 17 text

17 これらの機能を実現する為に、
 DROBEではレコメンドはもとより
 画像認識技術を使って商品タグを充実させています


Slide 18

Slide 18 text

画像認識の実装


Slide 19

Slide 19 text

画像認識の仕組み
 19 出展: https://github.com/cvdfoundation/fashionpedia#images タグ推定モデル 柄 色推定モデル 色 セグメンテー ションモデル 画像認識技術では、柄と色を推定している ファッションでは画像の中に対象となる商品以外 (セットとなる洋服やモデル、背景など ) が一緒に写って いる事が多い そういった画像を上手く扱う為に、 DROBE では複数の機械学習モデルを用いた手法を採用

Slide 20

Slide 20 text

Application container 画像認識のサービスへの組み込み
 20 Web app Aurora 画像認識 API container ① 推論をリクエスト ② 処理結果を取得 ③ DBへ保存

Slide 21

Slide 21 text

再掲
 🏗 インフラを作るのが大変そう
 
 💻 運用が面倒そう
 
 💰 出来るだけ安くしたい
 21

Slide 22

Slide 22 text

DROBE ではどうしたか


Slide 23

Slide 23 text

MUST 要件
 - 新しい商品が登録されたら自動で柄と色を推論して DB に保存したい 
 - 画像モデルを更新した際には全商品のタグを付け替える必要がある 
 
 WANT 要件
 - 出来るだけシンプルに作りたい (もし上手くいかなかったら機能自体辞めるかもしれない) 
 - サーバーの費用も出来るだけ下げたい 
 
 妥協出来ること
 - リアルタイム性 (新商品を登録してから翌日くらいに推定が終わっていれば問題ない) 運用の要件を整理
 23

Slide 24

Slide 24 text

1. 常に API サーバーを建てておき、Application を定期実行
 要件から導き出される実現案
 24 App container Web app Aurora 画像認識 API container ① 推論をリクエスト ② 処理結果を取得 ③ DBへ保存 Step Function

Slide 25

Slide 25 text

要件から導き出される実現案
 25 App container Web app 画像認識 API container ① 推論をリクエスト ② 処理結果を取得 ③ DBへ保存 Step Function 2. バッチの開始前に API サーバーを起動し、終了後に API サーバーを落とす


Slide 26

Slide 26 text

要件から導き出される実現案
 26 3. サービス側のバッチ処理と機械学習の API を同じ Fargate Task に纏める
 App container Web app Aurora 画像認識 API container ① 推論をリクエスト localhost ② 処理結果を取得 ③ DBへ保存 Step Function

Slide 27

Slide 27 text

要件から導き出される実現案
 27 3. サービス側のバッチ処理と機械学習の API を同じ Fargate Task に纏める
 🏗 インフラはシンプル
 
 💻 運用も既存のインフラの知識でやれる
 
 💰 費用は使った分だけ


Slide 28

Slide 28 text

Fargate task の終了
 28 Faragte task を終了させるために、全てのコンテナのプロセスを止める必要がある Flask を止めるための endpoint を準備しておき、App server 側で処理が終わったら叩く def shutdown_server(): func = request.environ.get("werkzeug.server.shutdown") if func is None: raise RuntimeError("Not running with the Werkzeug Server") func() @app.route("/system/shutdown", methods=["POST"]) def finalize(): shutdown_server() return jsonify({"message": "ok"})

Slide 29

Slide 29 text

Fargate Task は独立したリソースなので、平行し て呼び出す事も可能 
 
 例えば商品 id が奇数のものと偶数のものは別の Task で処理するなどスケールが可能 
 定期実行
 29 Step Function Fargate Schedule Task

Slide 30

Slide 30 text

🎉 画像推論のような機械学習機能も Fargate を使う事でシンプルにサービスに組み込めた 
 
 🎉 リアルタイム性が必要とされないバッチなどの機能では、サービス側の処理と機械学習の API を 同じ Fargate Task に纏める事で、コストと複雑性を抑えられた 
 
 🎉 バッチを並列化する事である程度のスケールにも耐えられる仕組みを構築できた 
 まとめ
 30

Slide 31

Slide 31 text

さいごに


Slide 32

Slide 32 text

We are hiring!!
 32 採用情報 https://info.drobe.co.jp/jobs エンジニアリング資料 https://info.drobe.co.jp/engineering 少しでも気になった方、お気軽にご連絡ください!! 
 カジュアルにお話するだけでも大歓迎です! 
 Twitter Meety