機械学習の経済学:クラウドはIoTの夢を見るか

hido
Chief Research Officer

2015-08-21 07:16:37

比戸です。夏の思い出、もう作りましたか?

今回はPreferred Networksのポジショントークをします。と言っても、ディープラーニングではなく、Internet of Thingsのほうです。

前回IoT関連のブログ「のび太とインターネット・オブ・シングス」を書いてから1年半弱、枯れたバズワードどころか、IoTはあらゆる業界を巻き込んだムーブメントになりつつあります。ちょうど昨日発表された、ガートナーの2015年度版ハイプサイクルでも、去年に続きハイプカーブの頂点に位置付けられていました。

IoTではコネクションとデバイスの管理、プロトコルの互換性、セキュリティについての議論が盛んですが、それは脇において、我々はいつも通りデータ解析の話をしたいと思います。 興味は「クラウドコンピューティングはIoT向けデータ解析でも唯一の主役となるのか?」です。 結論はずばり「そんなにうまくはいかないよ、特にインダストリアルな、機械学習頼みの応用ではね。」です(ほら、ポジショントークっぽくなってきた)。

最近クラウドで提供されているデータ分析プラットホームのほとんどが、競うようにしてIoT対応を打ち出し、「IoTも我が社のクラウドサービスにお任せ」と謳うようになりました。一方で、IoT機器から発生するセンサーデータからタイムリーに有益な知見を見出すためには機械学習を中心とした高度な解析技術が不可欠、ということも言われています。この2つを合わせると、IoTにおいて機械学習を適用するユースケースにはクラウドが最適、と言えそうです。昨日出た日経コンピュータの特集も、全くの偶然ですが、「クラウドAIが変える世界」でした。

しかし、本当にクラウドだけで問題が解決するのか、それをコスト対効果の面から検証したいと思います。タイトルに経済学といれたのは大げさかもしれませんが、試算してみましょう。

対象とするのは、機械学習を用いたリアルタイム異常検知です。遠隔モニタリング系の応用はほぼ異常検知に属し、IoT応用の中でも花形と言える問題設定です。単純な状況として、すでに学習済みモデルが読み込まれているクラウド上の機械学習エンジンに、現在のセンサーの値の集合をクエリとして送り、異常か否かを判断するユースケースを扱ってみましょう。リアルタイムと銘打っているので、車やカメラなどIoT機器1台につき、1秒間3回のクエリが発生すると仮定します。往復のネットワーク遅延と機械学習の判定処理のオーバーヘッドが加わるので、クエリが送信されてから機器側で結果を得てアクションを行えるまでの所要時間は1.0秒ほどとします。これは異常検知の結果とそれにもとづくアクションが人命に関わるなど、シビアなケースでもぎりぎり許容できるかどうか、くらいの頻度・遅延でしょう。

ではコストを計算します。簡単のために、利用するネットワークは必要なスループットで安定したレイテンシが保証されていて、そのコストは除外されるとします。純粋に機械学習クエリのコストだけを計算するということです。参考にするのは泣く子も黙るAWSのAmazon Machine Learning です。現在のところロジスティック回帰モデルのみがサポートされていますが、簡単のために異常検知もそれで二値判別問題として解くとします。リアルタイム予測(Real-Time Predictions)の値段は1クエリで$0.0001です(2015年8月現在。Azure Machine Learningは5倍の$0.0005)。

「1万クエリ打ってもたった$1、120円ちょっとか、良心的だな、さすがAWS」と直感的に思われる方が多いかもしれません。しかし本当にそうでしょうか。

先ほどの設定では1秒3クエリですので、1分180クエリ、1時間10,800クエリになります。1時間で約$1かかります。すると1日$24、1ヶ月30日で$720、1年365日で$8,760。日本円に換算すると現在の為替レートで100万円を超えています。端末1台あたりのリアルタイム機械学習のコストが、年間で100万円かかってしまうというのは、驚くべきことです。

先ほど仮定したようにこれは純粋に機械学習クエリの値段です。 実際にクラウドで実行しようとすれば、そこまでのネットワークのコストや、インスタンス、ストレージ等などの値段もかかります。 また、画像認識など求められるスループットが大きく処理も複雑なタスクになれば、さらにコストは上がることでしょう。 これでは数千万円の高級車のリアルタイム故障モニタリングにだって、クラウド機械学習のコストを本体価格やサービス価格として付加することはできません。ましてや、端末価格が1台数千円や数百円というIoT機器に対して運用コストが100万円などありえないことです。

なんだか騙されたような気分の方もいらっしゃるのではないでしょうか。 ではいくつか考えられる想定質問について検証してみましょう。

「もっとクエリ数を減らしてもいいのではないか」
ビッグデータの問題を一部データのサンプリングで解く文脈で言えば正しそうに思えますが、異常検知ではクエリ数を減らすとそのままリアルタイム性が犠牲となってしまう問題があります。例えば1秒に3回を1分に3回にすると、異常はいつ発生するかわからないので、タイミングが悪いと検知まで20秒かかってしまいます。また、コスト削減効果は60分の1ですので、まだ1万円以上のコストはかかることになります。

「そもそもそんなリアルタイム性は必要なのではないか」
たしかに、IoTの機械学習応用が全て秒単位のレスポンスを必要としているわけではありません。これまでのビッグデータ応用と同様、蓄積したデータに対するバッチ機械学習を用いるべきケースも存在します。ただ、特にインダストリアルなIoT応用として、車の事故防止、産業機械の故障予兆検知、ネットワーク機器の攻撃検知、防犯カメラからの異変発見など、多くの重要なアプリケーションでリアルタイム性が必須となっています。ネットワークのスループットはどんどん向上していますが、レイテンシの短縮は物理的な制約などがあり、ミリ秒単位でクラウドとの間でやりとりするのも難しく、これも課題と言えます。

「クラウドだからそのうち劇的に値段が下がるはずではないか」
これまでクラウドの利用価格はどんどん下がってきたのは事実です。今でもAmazonとMicrosoft Azure、Google Compute Engineが競うようにして値下げを行っています。ただし、それは主にストレージの容量単価の低減によって実現してきたものです。それらストレージにデータが蓄積されている一方、CPUは待機、メモリは空の状態で、集計・分析クエリを受け付けてからストレージを読みに行くという典型的なクラウド上のデータ処理では、ストレージネックだったため、値段が下げられたということです。しかしながら、機械学習でリアルタイム応答を可能にするためには、学習済みモデルをメモリ上に展開しておく必要があります。つまりメモリネックなのですが、その値段がここ数年という期間でもほとんど下落していないのはみなさんご存知かと思います。Amazon Machine Learningにしても、このメモリのコストは機械学習APIの使用料に転嫁するしかありません。大容量・低遅延な次世代メモリのコストが今のDRAMを下回るようになれば不連続な変化が起きる可能性はありますが、今後数年という単位では、クラウドとはいえこのメモリに関係するコストが劇的に下がる見込みは少ないでしょう。

「モデルの構築はクラウド側でやって、学習済みモデルを端末側に送ればいいのでは」
そのとおりだと思います。ただ問題はリアルタイムの予測クエリはそちらで処理することを考えても、一般的な組み込み機器やIoTゲートウェイ等には機械学習を実現するだけのプロセッサ能力・メモリが無いことが多いことです。この点は、ARMプロセッサ、FPGAを代表とする、組み込みに近いIoT機器の性能向上とコストダウンが今後どれだけ進むかにかかっています。が、見通しに関する意見は別れるところかもしれません。個人的には、この部分にホワイトスペースがあるのではないかと考えています。

「異常検知以外はクラウドでもいいのでは」
もちろん分類などの設定もあります。蓄積されたデータにおいてバッチ学習を行えば良い分類やレコメンドの応用は、IoTのデータさえクラウド側に収集/蓄積できれば、解析については特に新しい仕組みは必要ない(応用先がIoTであることとは関係ない)ので、これまで通り既存のビッグデータ基盤が使えるのは間違いありません。ただし、生データをそのままクラウドに送ると膨大になりすぎるため、単価が下がったとはいえ得られるメリットのわりにストレージコストがかかりすぎるという問題があります。そのような場合でも、もし上記のようにIoT機器側で機械学習モデルをストリーム的に適用して、元データではなくその結果のみをクラウドに送ることで代替できるなら、ネットワークとストレージのコストを大幅に削減することができます。

(追記)「クラウド/オンプレで自前の機械学習エンジンを動かせば良いのではないか」
単一機械学習モデル、単一IoT機器だけを扱っていればいいのであればそれで済みそうですが、ビジネスにするには数千台の機器に対して複数のモデルを切り替えながら適用するような必要があり、導入・管理コストもかかります。また異常検知は特に、複数予測対象への同一モデルの使い回しが聞きづらいタスクです。いずれにせよメモリを常時確保すべき処理をネットワークの向こう側に置いておかなければならないのは変わりません。それをAmazonが代行して効率的にリソースを使っているはずのサービスよりも大幅に価格を下げるのは難しいと考えられます。自前でRedShiftやBigQueryのクエリ単価を下回るのが難しいのと同じ理屈です。

いかがだったでしょうか。クラウドにデータを蓄積し、その統計的な分析の一環として、手動でバッチ学習・分類を行うようなケースであれば、クラウドはもちろん適していますし、これからも使われていくでしょう。 しかしもし目的がリアルタイム性を含む場合、あるいは映像など生データをクラウドに貯めるのにコストが掛かり過ぎる場合、とりあえずクラウドにデータを集める基盤を作って、それから機械学習など解析をどうするか考えましょう、ではどうにもならないということです。

ここからは完全に宣伝ですが、どうすれば端末側にインテリジェンスな機能をもたせたアーキテクチャが実現できるのか、それがエッジヘビーコンピューティングという弊社が3年前から提唱しているコンセプトです。その実現として、Deep Intelligence in-Motionというソフトウェア製品を開発しています。 まだ表には出てきていませんが、様々なIoTアプリケーションを支える基盤として業界を問わず使われるものを提供できればと考えています。

以上、ポジショントークでした。それではまた。

Leave a Reply