見出し画像

Uberはモバイルパフォーマンスを検出するために機械学習で何をやっているのか

スマートフォンは、ハードウェアが多様に存在しています。パフォーマンスチューニングをする上でこれが1つの壁になります。さらに、OSが変わってしまいます。今は大量のAndroidがあり、比較的古いiOSもありますね。

答えとしてはどちらも。どちらでも、動かないといけないですよね。しかも、携帯のネットワーク環境は常に変化します。

もちろん、私たちには選択肢があるけど・・・

コードを書いて、そのあとエンジニアテストをして、そのあと、実際にユーザーアに提供する。これが典型的なやり方です。何かをプログラム修正するコストは、たいしたことがなくても、テストのコストは膨大になってしまいますし、それをユーザーテストすると、さらに膨大になります。

戦略とトレードオフ

戦略には大きく分けると3つくらいあるのではないでしょうか。

1)開発センターでの回帰検出
2)デバイスラボでの回帰検出
3)あらゆる場所での回帰検出

当然、採用する戦略によってコストが変わってくるので、Uberでは(2)を導入しています。

挑戦していること

A/Bテスト実験ができるようにセットアップしてます。ですが、問題がありました。バッテリーの温度が上がれば、バッテリーの精度が下がる。温度・CPUなどの全てが当然なのですがパフォーマンスに影響しています。

1.プロダクションのアプリをインストール
2.ランテスト(30-50のイテレーション)
3.ナイトリービルドをインストール
4.ランテスト(30-50のイテレーション)

*ナイトリービルドとは、毎日行うプログラムの最新バージョンのビルドのこと。

私たちは、最小の努力で大きな成果をあげたいと考えました。

その結果がこちらです。50回のサンプルサイズと2%のロード時間上昇を許容したとき、80%の信頼性を得られることがわかりました。

さらにCUPEDを組み合わせることで、こんな結果を得られました。30のサンプルサイズで2%のロード時間上昇を許容したとき、84%の信頼性が得られるようになったのです。

Uberの今後

今後もこのようにA/Bテストを続け、より高速な開発ができるようにしていきます。


サポートされた費用は、また別のカンファレンス参加費などに当てようと思います。