
2025.02.18
「売上をスケールする」AIの使い道とは アルペンが挑む、kintone×生成AIの接客データ活用法
"Cost-efficient and scalable ML-experiments in AWS with spot-instances, Kubernetes and Horovod"がベストプラクティスだと思う理由(全2記事)
リンクをコピー
記事をブックマーク
大嶋悠司氏(以下、大嶋):『使われる機能を目指して測ったり試したり』という内容で発表していきます。私は運営をしている上田さんと同じメルカリでエッジAIチームというチームのテックリードをしています。
メルカリに入る前は、OSS活動を中心にしていて、例えばさっきも話に出ましたKubeflowの中でハイパーパラメータチューニングをするKatibのオーナーをしていました。メルカリに入ってからは、OSS活動というよりかはサービスよりの開発をしています。
私のチームはエッジAIというチームでして、このチームで行った活動を例に、エッジAI技術を使ったアプリについてお話をしていきたいと思います。
まずエッジAIとは? という話ですね。このエッジAIというワードは最近ちらほらよく聞くようになってきたので、ご存知の方もけっこういるかもしれません。
ふつう機械学習のサービスを立てるときは、なにかしらクラウド上なりにリッチなサーバーを置いて、そこにWeb REST APIなりgRPCのAPIなりを開けて、端末からアクセスするとかブラウザからアクセスするっていうようなことが多いと思います。
それとは違って、例えばスマホ上で機械学習のモデルを搭載して、インターネットを介してアクセスすることなく端末上で機械学習の推論を行うような技術。まあ推論だけではなく学習を行うこともありますが、そういった技術になります。
じゃあそれを使って何が嬉しいのか。何ができるのかという話ですね。想像できると思いますが、インターネットを介さないので非常にレイテンシーが低いですね。これ以外にもメリットはあるんですが、我々は主にここを重視しています。
例えばインターネットを介してサーバーにリクエストを送る場合だと、モデルをどれだけチューニングしたとしてもそもそもインターネットを介さないといけないので、まあ500ミリsecを切ることは難しいんじゃないかと私は想像します。1秒とか2秒かかるようなサービスもぜんぜん普通にあると思います。
それに対してEdge、つまり端末上で機械学習のモデルを動かしたときには、モデルをチューニングさえすれば50ミリsec以内、早ければ10ミリsecとかで返すことも可能ですね。ただデバイス上で動かさないといけないので、モデルサイズだったり消費電力に制限がある技術となります。
じゃあ一体我々は何のためにそれに取り組んでいるのか? という話ですが、いろいろ制限は大きいんですが、まずレイテンシーが非常に低いこと。インターネットを必要としないで推論できる、つまりオフラインでも推論ができるということで、インターネット環境に影響されずに安定して推論が行えることから、それを使ってUXを大きく改善していけるだろうということで、この領域の技術に私たちは注力しています。
Edgeっていうと実はいろいろあるんですね。製造業だと、例えば工場のラインにIoTデバイスを置いてその上で推論をさせるとか、そういうエッジAI用のチップとかも売られてたりします。メルカリは今のところ、そういったデバイスを作ってなくて、スマホ上で機械学習を行うということを指してエッジAIというふうに呼んでいます。
機械学習をモバイル上で行うというのはけっこう最近流行っている技術でもあって、それを使うためのフレームワークがいくつかあります。TensorFlow Lite、TVM、PyTorch Mobile。こういったものを使って機械学習を端末上に置いていきます。
ただやることはどのフレームワークも基本的には同じで、まず普通に機械学習のモデルを学習します。そのモデルを端末上に置けるように軽量化していきます。例えば量子化をしたりだとか、プルーニングをしたり。このへんはあとで詳しく話します。
モデルの形式を変換したあとデバイス上で実行する。これらを3つのフレームワークのどれかを使ってやります。我々は2020年5月現在、最も成熟しているTensorFlow Liteを使って、このエッジAI技術をアプリに組み込むことにしました。
では我々は何を作ったかという話です。メルカリのアプリを使ったことがある方だとご存知かもしれませんが、メルカリって、商品を出品するときに、例えば本とかDVDとかそういったものだとバーコードを読み込むとそのバーコードの情報がサッと入力されます。
商品のタイトルとか詳細とかに勝手に入れてくれる便利な機能があります。けっこう使っていただいてはいるんですが、もっと認知を広めていきたいという思いがあります。
じゃあこのバーコード出品をもう少し認知率を高めるためにはどうしたらいいか? ということで、バーコード出品を使わずに出品しようとした場合、例えば本なんかを普通に写真で撮影したときに「これは本だからバーコード出品したらいいんじゃないですか?」みたいなサジェストを行えれば、もうちょっとバーコード出品を知らない人に知ってもらえるんじゃないかと考えました。
「本じゃないですか?」って判断するだけなら、実装は、MobileNetみたいなImage Classificationモデルで普通にできそうですよね。ということで、じゃあ本だと認識したらサジェストを出すという機能を作ってみようということになりました。この機能については、先日Googleのテックブログに記事を書かせていただきましたので、そちらと今回の発表は少し重複する部分もあります。
ではこの機能を作っていく流れで、先ほどのTensorFlow Liteを使ってどうやって開発していったかを説明していきたいと思います。
まずモデル学習です。モデル学習は基本的には普通にMobileNet V3を学習しました。ただその中でQuantization Aware Trainingというものを使います。これはこのあとでちょっと説明するんですけど、モデルを軽量化するために量子化っていうのを行うんですね。この量子化をしたときに精度劣化を防ぐための技術です。
普通ニューラルネットワークの重みはFLOAT32で記述されているんですけれども、それをint8の8bitに落とし込む。量子化します。そうすることで単純に情報量を減らし、モデルのサイズを小さくすることが可能になります。
ただもちろんそうすると情報量が減っちゃうので精度が劣化します。それを防ぐために、こいつは将来quantizeされる、量子化されるんだぞということを意識して学習の重みを考えて配置していくというような学習方法です。
これを使わずにquantizeすると精度が5ポイントくらい落ちたのに、使うことでほぼ落ちないという効果があったので、これだけちょっと学習のときは工夫をしたという話になります。
次にモデルの軽量化とか、そのあとモデルの形式の変換です。モバイル端末上で推論を行うために必要なことは何かというとですね。
今回のアプリでは、写真を撮った瞬間にサジェストを出したいわけですよね。必要とされる推論速度についていうと、写真を撮って1秒後とか2秒後とかだったら、もうカメラを閉じて次の出品行動をとって、タイトルを入力するとかに移っている可能性が高いのでそれだと困る。即座に出したい。だから50ミリsec以内に推論を返したいと。
さらに機械学習のモデルを端末上に入れないといけない。そうなると機械学習のモデルを入れるからアプリのサイズが100メガとか300メガ大きくなりますっていうのは基本的には許されないので。10メガよりも小さくしてくださいねっていうことでやっています。
TensorFlow Liteでモデルを変換するときにオプションが4つあります。これで先ほどから何度も出てきている量子化というのを行います。
選択肢として、FLOAT32が量子化しない。普通にFLOAT32で重みを表現する。FLOAT16で重みを表現する。例えばGPUで、FLOAT16で計算できるものがありますけれども、あれと同じようにFLOAT16で表現する。そうするとモデルサイズは単純計算で半分になりますね。
8bitで表現する。その中でも重みだけを8bitで表現するものと、重みと活性化関数両方を8bitで表現できるようにするものの2種類があります。
これはTensorFlow Liteの仕様によるところが大きいんですけれども、実は重みだけを量子化するのが、ファイルサイズが一番小さいです。活性化関数まで量子化しようとすると活性化関数を8bitで表現するために、この値が入ってきたらこれを返すみたいなマップを全部保持することになるので、モデルサイズが少し大きくなるというような仕様になっています。
レイテンシーについては、活性化関数まですべて8bitで表現できていれば計算時も8bitで計算するので非常に速い。しかし重みだけ8bitで表現されている場合は計算時にもう1回FLOATに直して計算するので別に速くはならないという結果になっています。
ただ今回は重みだけの量子化でレイテンシーを十分達成できるため、重みだけの量子化を選択しました。活性化関数まで量子化をしようとすると、実はいろいろ大変なことがあるので、またそれは別のところで話せればと思います。
最後にデバイス上で実行するにあたってです。ここでもTensorFlow Liteのオプションがいろいろあります。TensorFlow Liteで普通にCPU上で実行するというのが一番普通のやつなんですが……。
それを例えばGPUで計算を行わせるようなGPU delegationだったりとか。iOSだったらCoreMLのライブラリを利用するCoreML delegationとか、ほかにもいくつかオプションがあるんですね。
これらを行うとパフォーマンスが良くなったり良くならなかったりというようなものになるんですが。今回はdelegationなしでもパフォーマンスが十分出るということがわかったので、delegationはまた今後やっていこうねっていうことになっています。なので基本的なTensorFlow Liteの機能だけを使ってモデルを作りました。
これができた。完成! 写真をカメラで撮ると「これ本じゃないですか?」っていうサジェストが出るっていう機能になります。お疲れ様でした! できました! これで完成ですね。アプリをリリースしますね。終わりですね。
たぶんMLCTに来られているみなさんは「いや、嘘でしょ」っていうのがわかると思います。
タイトルにも書きましたとおり、ここからが本題というか、ここからも大事な場面ですよね。
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.13
上司からは丸投げ、部下からはハラスメント扱い、業務は増加…プレイングマネジャーを苦しめる「6つの圧力」とは
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
第20回エクゼクティブメンターイベント「今、「ひと」と組織が共創する〜働き方の未来へ」
2024.12.07 - 2024.12.07