2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
"Cost-efficient and scalable ML-experiments in AWS with spot-instances, Kubernetes and Horovod"がベストプラクティスだと思う理由(全2記事)
リンクをコピー
記事をブックマーク
大嶋悠司氏(以下、大嶋):結果です。アプリをリリースしましたが、タップしてくれる人は想定以上に少なかったです。さらにバーコード出品の増加率もほとんどなかったです。タップしてくれる人が少ないので、そもそも機能が使われていないので当たり前ですよね。
ここにいる方には当然かなというふうに思いますが、じゃあそのあと計測して改善していこうというフェーズが当然出てきますよねという話です。
今回、機械学習のモデルは、本かどうか。正確には本・DVD・ゲームか、それ以外かという二次分類でしかなくて、Image Classificationのタスクとしては非常に簡単なものでした。なのでちゃんとテストデータセットを用意して精度検証しても90パーセント近いPrecisionが出ています。なのでおそらくはモデルの精度をがんばるフェーズではないだろうという話になります。
じゃあモデルのレイテンシーはどうなのか。ということでいろいろな端末で検証してみましたが、それなりに古い端末でも30ミリsec前後で動いていることがわかりました。ということはそれほど体験を毀損しているとはこの段階では言えないということになります。
じゃあユーザーインターフェースがおかしいんじゃないの? という話になるわけです。まず一番簡単なところでは、ポップを表示している表示時間ですね。最初はデザインの段階で、あんまり長いこと出てくると邪魔に感じるお客さまも多いんじゃないですかねということで、4秒くらいかなというふうに感覚で決めましたが。
4秒って長いの短いの? ということを考えます。実際に各秒数でタップしたお客さまの数を計測します。4秒表示した場合だとこんな感じです。2秒が一番多いんですが、4秒以降ももしかしたらもっといるんじゃないの? という感じのグラフなわけですね。実際に8秒表示してみるとこんな感じに。ああやっぱり。半分くらいのお客さまは4秒じゃ足りなかったんじゃないの。というような結果になるわけです。なので表示時間は延ばしたほうがよさそう。
さらに疑問が出てくるわけです。8秒くらいでタップしているお客さまがいるということは、お客さまってけっこう文言しっかり読んでいるんじゃないの? それでちゃんと伝わっていないんじゃないの? ということが仮説として出てきます。お客さまとのインタラクションは十分ですか? ということですね。最初のバージョンで表示しているポップはこんな感じでした。「本・CD/DVD・ゲームの場合はバーコードで出品できます」と。なるほど。我々はこれでもわかります。なぜならメルカリを作っている人間なので。
でもそもそもバーコード出品をしたことがないお客さまにバーコード出品を使ってほしいという意識からこれを作っていたはずで、バーコードで出品できますってそもそも何を言っているのかわからないじゃないですか? っていうこと。
あとデザインとして、「使用する」というボタンがあるんですけれども、これはボタンだと認識されていないんじゃないの? という非常に単純なところから疑問というか、仮説が立つわけですね。なのでデザインを改善しました。
まず文言を変えました。「商品のバーコードを読み取ると出品に必要な情報を登録できます」と。バーコード出品できますではなくて、バーコード出品するとこんなにいいことがありますよというような文言に変える。ここにボタンがありますよということをわかりやすくする。
非常に簡単な変更ではあります。ただこの改善でもAndroid、iOSともにバーコード出品数増加に貢献しました。実際、デザイン改善前と比べて改善後はその効果が倍以上になっていることが確認できています。改善版はすでにリリースされてすべての端末上で動いているはずなので、ぜひお手元の端末で確認してください。
つまり我々EdgeチームはもともとMLをモバイル上で使う営みをしていたわけではなくて、UXを改善する営みをしているんだということをきちんと意識しようねという話です。
ただそのときに、今回はモデルの精度とかモデルのレイテンシーというのはとくに影響は大きくないだろうという結論になりましたけれども、それらも含めてデザインとすべてを総合的にモニタリングしていきましょうということになります。
一応今やっている話もこのあとにあるんですけれども、時間がちょっとあれなので。駆け足でちょっと。
もっと前の段階から、UXってどういうふうに作っていけるんだろうという話を考えたときに、Googleが出しているPAIRと呼ばれるPeople + AI Researchで言われている話で……。
自動化っていうのと拡張っていうのがあります。AIによって自動化していいタスクと、ユーザーに主導権を任せるんだけれどもAIがサポートするようなUIがありますよね。というような話があります。今回我々はどちらかと言うと拡張というのにフォーカスしてやっていこうとしています。
例えば今メルカリではAI出品というのがあって、写真を撮るとカテゴリとかブランドとか商品名というのを自動で入力してくれます。これは自動化の例ですね。
ただそれだと、何を書くのかわからないお客様には非常に有効になるんですが……。実際出品行動のサポートはは責任を伴う。自分の売上に関わるし。どういうふうな文言を考えたいかというお客さまもビジョンを持っている話になるので……。もうちょっと拡張的なサポートができないかということで、Mercari IMEという機能を現在開発しています。
すでにABテストの最中で、一部のお客様にはこれが表示されている感じです。メルカリ特有のワードをIMEのようなかたちでサジェストする。それによって商品の入力とかを簡単にしていくという機能です。これについては今後どこかで話す予定ですのでまたみなさまにお話できればと思います。
駆け足になりましたが、以上です。ありがとうございます。
上田隼也氏(以下、上田):ありがとうございました。質問です。TensorFlow Liteなどはエッジ文脈で語られることが多いですが、サーバーサイドでも普通にけっこう便利なんじゃないでしょうか? サーバーサイドもTensorFlow Liteでやろうというチャンスはありますか?
大嶋:そうですね。TensorFlow Liteをサーバーサイドでも使うことは可能ではありますが、現状だと、普通にという言い方はアレかもしれないですけれども、TensorFlow Servingでチューニングしたモデルを動かしたほうがサーバーサイドではレイテンシーが低いはずなので、現状サーバーサイドで使うという予定はないですね。
上田:そうですね。あと量子化して速度が短くなっても、うまみがそこまであるのか感もありますね。
大嶋:そうですね。実際、量子化しちゃうと、サーバーも普通のIntelのx86 CPUだと量子化したものよりも普通にFLOAT32でやったほうが速いということになります。ARMのCPUでチューニングされたランタイムだからUINT8のほうが速いということになっていたはずですね。
上田:なるほど、なるほど。次の質問です。わざわざ機械学習を使わなくてもほかのUI/UXの工夫でバーコード出品の利用率をもっと増加できそうな気がするんですけれども、機械学習を使うという意思決定はどういうふうにされたのでしょうか? という質問です。
大嶋:UI/UXの工夫でバーコード出品の利用率を増加できるという施策も、もちろんあります。ただこの施策についてはそもそも我々がまずエッジAI技術を使えるところはないかということで、今紹介したようなかたちで使えるんじゃないかという話で開発が始まったところがあります。
機械学習を使わないでUIのみでバーコード出品を増加させる施策も並列して走っていて、最終的に両方食い合うことはなくて、2つとも機能として載せたほうがバーコード出品の増加率は高いという結果になっているので、両方とも現状は乗せています。
なので機械学習のみでいく意思決定というのは、そもそも回っていなかったです。まあ難しいですよね。機械学習でやったほうがいいということって、実はそんなに多くないので……。意思決定は難しいと思いますね。
上田:そうですね。今回はいい感じに結果が出たからよかったねっていう感じですね。
大嶋:そうですね。
上田:次の質問です。full quantizationの大変な点を伺いたいですという質問ですね。
大嶋:full quantizationだと、さっき言ったように活性化関数が、この値が来たらこれを返すみたいなふうにマップを作らないといけないんですね。その際にRepresentation Datasetっていう、実際に来るであろうデータセットを表現するようなデータのサブセットを作って、それを入れて活性化関数の値を記録していくという作業があります。
そこでちゃんとしたデータセットを作れないと最終的な精度に大きく影響してしまうのと、メルカリの出品の画像のドメインが変わっていたときにそれをやるとモデルのメンテコストが上がるとか、いろいろな問題があったので今回は選んでいません。実際速度的に問題がある場合には、それをやる必要があるかなと思っています。
上田:ありがとうございます。次の質問です。FLOAT32からFLOAT16、もしくはUINT8に変換したモデルの場合、学習速度や予測速度はどれくらい向上するのでしょうか? という質問です。
大嶋:学習時はFLOAT32なので、学習速度は同じです。FLOAT32で学習したモデルをUINT8だったりFLOAT16に落とすということをしますが、推論速度は、モデルの構造にもよりますが、どれくらいだったかなぁ……。すみません、ちょっと私の記憶ですが30パーセントから40パーセントほど高速化したはずです。
上田:なるほど。1.5倍、1.34倍くらいですね。
大嶋:そうですね。なのでFLOAT32だと80ミリsecとかでちょっときつかったのが……あ、違うか。50ミリsecくらいで、もうちょっと短くしたいねということで30ミリsecに落とせたということになります。
上田:次の質問です。iOS、Android、いろいろなバージョンや端末の差分があると思うんですけれども、TensorFlow Liteはそういった違いも全部吸収してくれているのでしょうか? という質問です。
大嶋:そうですね、問題なくと言うか、どちらも一定以上の新しさは必要になります。本当に古い端末だと動かないです。iOSはまだマシなんですよね。バージョンいくつ以上だったらオッケーというくらいになりますけれども。
Androidはそもそも使われているCPUが違ったりするのでアプリ側で、Androidのこのバージョンで、かつCPUがこういうアーキテクチャであるものという指定を書いています。なのですべて吸収してくれるっていうことはないですね。
上田:逆にTensorFlow Lite側は、アプリが落ちるとか、メモリリークしちゃうとか、そういうネガティブなポイントとかってあるんですかね? けっこう扱いに気をつけないといろいろ起きちゃうみたいな……。
大嶋:まず単純に電池消費が激しくなるので、電池消費量はめっちゃ気をつけないといけないポイントです。かなり恐れていたんですけれども、TensorFlow Lite起因での障害というかアプリの劣化というのは、現状は大きくは見られていません。とはいえ今回は写真を撮ってその画像を推論するというワンショットの推論なんですけれども。
例えば、動画にずっとobject detectionをかけ続けるみたいなストリーミング処理を行わせるときは、デモアプリですらけっこうメモリリークを起こしたりしているので注意して見たほうがいいですね。
上田:なるほど、なるほど。
上田:なるほど。では残り2つの質問でちょうどいい感じですかね。エッジ側のモデルをアップデートしようとする場合にどうやってデプロイするんでしょうか? 何が必要なのでしょうか?
それからモデルのマネジメント。エッジで例えば、たぶんこういう質問だと思うんですけれども、モデルをアップデートしたい場合にどうやってコントロールするのかとか。という質問です。
大嶋:エッジ側のモデルのアップデートはそうなんですよ。そのとおりで難しい問題ですよね。今現状、実はさっきのバーコード出品のサジェスト機能は、アプリにモデルを同梱して配布しています。なので単純にアプリのサイズが増えています。
ただモデルのアップデートにアプリのアップデートも必要になるのは今後あまり良くないだろうという話になっているので。そこはあとからCDNから配布するとかする必要があるというふうに考えています。
その場合、なにかしらのメタデータをこちらで用意して、この端末はこういうアトリビュートの、例えばCPUはなにで、Androidバージョンはなにだよみたいな情報をサーバー側に送信して、それにちょうどいいモデルを配布するというような仕組みを現状考えています。
ただ、まあ、これは今考えているところなので、実際運用してみたらどうなるかはちょっとまだわからないですね。
上田:iOS用のTensorFlow LiteとかAndroid用のTensorFlow Liteみたいな?
大嶋:そうですね。それはやっぱりモデルもそれによって違うとかだとかっこいいじゃないですか(笑)。
上田:AIっぽいですよね(笑)。
上田:最後の質問です。学習時にMixed Precisionとかは試されましたか? と質問です。
大嶋:やっていないです。そこらへんまで十分にキャッチアップができていないのでMixed Precisionがどれくらい効果があって、どれくらいよいものなのかというのは、まだちょっと我々のチームでも検証が十分できていないので今回はとくに試していません。
上田:なるほど。じゃあもしみなさんがメルカリをインストールされると、手元に、もう自動的にTensorFlow Liteのモデルがインストールされると。
大嶋:そうですね。10年前とかの端末じゃなければたぶん動くと思います。
上田:いいですね! TensorFlow Liteで最低のAndroidのバージョン保証とかってAndroid5以上とか、そういう感じなんですかね?
大嶋:すみません、今ちょっとすぐには出てこないですが、まあそれくらいです。あとはAndroidのCPUが64じゃないと動かないという制限をかけています。そっちのほうがたぶん強いですね。それで最近のそれなりに新しいスマホということになります。
上田:みなさんもTensorFlow Liteの動きを確かめるためにメルカリをインストールしてもいいかもしれません。
大嶋:ぜひ使ってみてください。
上田:今日はありがとうございました。
大嶋:ありがとうございます。
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05