スパイラルはリアルタイムの機械学習を使用してFacebookのサービスを自動調整します

スパイラルはリアルタイムの機械学習を使用してFacebookのサービスを自動調整します

[51CTO.com クイック翻訳] Facebook を利用する何十億もの人々にとって、私たちのサービスは統合されたモバイル アプリケーション システムまたは Web サイトのように見えるかもしれません。社内では状況が異なります。 Facebook は、インターネット トラフィックのバランス調整から画像のトランスコード、信頼性の高いストレージの提供まで、あらゆることを実行する何千ものサービスを使用して構築されています。 Facebook 全体の効率性は、個々のサービスの効率性を組み合わせることにあります。各サービスはそれぞれ独自の方法で最適化されていることが多く、拡張や急速な変化への適応が難しい方法を使用しています。

多数のサービスをより効率的に最適化し、絶えず変化する相互接続された内部サービスに柔軟に適応するために、Spiral を開発しました。 Spiral のようなシステムは、リアルタイムの機械学習技術を最大限に活用して、Facebook 規模の環境で高性能なインフラストラクチャ サービスを自動的に調整します。手動で調整されたヒューリスティックを Spiral に置き換えることで、更新されたサービスを数週間ではなくわずか数分で最適化できます。

規模の課題に対する新たなアプローチ

Facebookでは変化のペースが速いです。 Facebook のコードベースは、継続的なデプロイメント プロセスの一環として、数時間ごとに本番環境にプッシュされます (たとえば、フロントエンドの新しいバージョンなど)。今日では多くの変化が起きているため、最高の効率を維持するためにサービスを手動で微調整するのは現実的ではありません。キャッシュ/許可/削除ポリシーやその他の手動で調整されたヒューリスティックを手動で上書きするのは非常に困難です。ソフトウェアメンテナンスの本来のコンセプトを根本的に変えなければなりません。

この課題を効果的に克服するには、手動でハードコードされたヒューリスティックやパラメータに頼るのではなく、システムを自己調整できるようにする必要があります。この変化により、Facebook のエンジニアは自分たちの仕事を新たな観点から見直す必要に迫られました。システムによって生成されたグラフやログを見て正確かつ効率的な動作を検証するのではなく、エンジニアはコードを使用して、システムが正しく効率的に実行されることの意味を表現するようになりました。現在、当社のエンジニアは、リクエストに対する正しい応答を計算する方法を指定するのではなく、自己調整システムにフィードバックを提供する方法をプログラムしています。

従来のキャッシュ戦略は、オブジェクトのサイズ、タイプ、その他のメタデータを考慮してキャッシュするかどうかを決定する、枝分かれしたツリーのようなものです。キャッシュの自動調整はさまざまな方法で実装できます。このようなシステムは、オブジェクトのアクセス履歴をチェックすることができます。オブジェクトが以前に一度もアクセスされていない場合、それをキャッシュするのはおそらく悪い考えです。機械学習言語では、メタデータ(特徴)と関連するフィードバック(ラベル)を使用してオブジェクトを区別するシステムは「分類器」になります。この分類器は、キャッシュに入るオブジェクトに関する決定を行うために使用され、システムは継続的に再トレーニングされます。この継続的な再トレーニングにより、環境が変化してもシステムを最新の状態に保つことができます。

概念的には、このアプローチは宣言型プログラミングに似ています。 SQL はこのアプローチの典型的な例です。エンジニアは複雑なクエリの結果を計算する方法を指定する必要はなく、計算する必要があるものを指定するだけで、エンジンが最適なクエリを見つけて実行します。

システムに宣言型プログラミングを使用する際の課題は、目標が正しく完全に指定されていることを確認することです。上で説明した自動調整イメージ キャッシュ戦略と同様に、キャッシュするオブジェクトとキャッシュしないオブジェクトに関するフィードバックが不正確または不完全な場合、システムはすぐに誤ったキャッシュ決定を行うようになり、パフォーマンスが低下する可能性があります。

この問題と、クローズドループ機械学習の使用に関連するその他の問題については、複数の Google エンジニアによって書かれたこの論文で詳しく説明されています。私たちの経験では、Spiral を使い始める上で最も難しい部分の 1 つは、自動チューニングの望ましい結果を正確に定義することです。しかし、数回の反復を経て、エンジニアは明確で正しい定義に同意することが多いこともわかりました。

スパイラル: 簡単な統合とリアルタイム予測

Facebook のシステム エンジニアがますます急速に変化するペースに対応できるように、Facebook のボストン オフィスのエンジニアは、依存関係が最小限の、小型で埋め込み可能な C++ ライブラリである Spiral を構築しました。 Spiral は機械学習を使用して、リソースが制限されたリアルタイム サービス向けのデータ駆動型のリアクティブ ヒューリスティックを作成します。このシステムにより、手作業でコーディングする場合に比べて、これらのサービスの開発と自動メンテナンスが大幅にスピードアップします。

Spiral との統合では、コードに 2 つの呼び出しサイト (予測用とフィードバック用) を追加するだけです。予測された呼び出しサイトは、「このエントリをキャッシュに入れる必要があるか」などの決定を行うために使用されるインテリジェントなヒューリスティックの出力です。予測された呼び出しは、各決定に対して実行されるように設計された高速なローカル計算として実装されます。

図1

フィードバック呼び出しサイトは、「このエントリはまったくヒットしなかったためキャッシュから無効にされました。そのため、このようなエントリはキャッシュしないほうがよいでしょう」などのフィードバックを随時提供するために使用されます。

図2

ライブラリは、完全な組み込みモードで実行することも、デバッグに役立つ情報を表示したり、後で分析できるようにデータを長期ストレージに記録したり、組み込みモードでトレーニングするにはコストが高すぎるが実行するにはコストが高すぎないモデルのトレーニングと選択という面倒な作業を実行したりできる Spiral バックエンド サービスにフィードバックと統計を送信することもできます。

図3

サーバーに送信されるデータは、クラスの不均衡によるバイアスがサンプルに侵入するのを防ぐために、アンチバイアス サンプリングを使用します。たとえば、一定期間内に正のサンプルよりも負のサンプルが 1000 倍多く受信された場合、1000 個の負のサンプルのうち 1 個だけをサーバーに記録し、その重みが 1000 であることを示す必要があります。サーバーはデータのグローバルな分布について深い洞察力を持っているため、多くの場合、1 つのノードのローカル モデルよりも優れたモデルが生成されます。ライブラリにリンクして上記の 2 つの関数を使用する以外に、設定は必要ありません。

Spiral では、フィードバックが得られるとすぐに学習が始まります。フィードバックが増えるにつれて、予測の品質は徐々に向上します。ほとんどのサービスでは、フィードバックは数秒から数分以内に得られるため、開発サイクルは短くなります。専門家は、新しい機能を追加して、それが予測の品質の向上に役立つかどうかを数分で確認できます。

ハードコードされたヒューリスティックとは異なり、スパイラルベースのヒューリスティックは変化する状況に適応できます。キャッシュ許可ポリシーを例にとると、特定の種類のエントリがあまり頻繁に要求されない場合、フィードバックによって分類子が再トレーニングされ、人間の介入なしにそのようなエントリを許可する可能性が低くなります。

ケーススタディ: 自動化のためのリアクティブ キャッシュ ヒューリスティック

Spiral の最初の実稼働ユースケースは、Phil Karlton の有名な引用と一致しました。「コンピューター サイエンスで難しいことは 2 つだけです。キャッシュの無効化と命名です。」 (私たちはプロジェクトに適切な名前を付けたので、実際に Spiral でキャッシュの無効化をすぐに解決しました。)

Facebook では、Spiral (他の社内システム) の「ユーザー」がクエリ結果をサブスクライブできるように、リアクティブ キャッシュを展開しました。ユーザーの観点から見ると、システムはクエリ結果とその結果へのサブスクリプションを提供します。外部イベントがクエリに影響を与えるたびに、更新された結果が自動的にクライアントに送信されます。これにより、クライアントのポーリングの負担が軽減され、クエリ結果を計算する Web フロントエンド サービスの負荷が軽減されます。

ユーザーがクエリを送信すると、リアクティブ キャッシュはまずクエリを Web フロントエンドに送信し、次にサブスクリプションを作成し、キャッシュして、結果を返します。キャッシュは、元の結果に加えて、結果の計算に関係するオブジェクトと関連リストも受け取ります。次に、クエリによってアクセスされるオブジェクトまたは関連付けのデータベース更新の安定したストリームの監視を開始します。アクティブなサブスクリプションの 1 つに影響を与える可能性のある更新が検出されるたびに、リアクティブ キャッシュはクエリを再実行し、その結果をキャッシュの内容と比較します。結果が変更された場合は、新しい結果をクライアントに送信し、独自のキャッシュを更新します。

このシステムが直面している問題の 1 つは、データベースの更新が多数あるにもかかわらず、クエリの出力に影響を与えるのはそのうちのごく一部であるということです。 「この投稿にいいねした友達は誰ですか?」というクエリの場合、「この投稿が最後に表示されたのはいつか」という更新情報を常に取得する必要はありません。

この問題はスパム フィルタリングに似ています。電子メールに直面した場合、システムはそれをスパムとして分類するべきでしょうか (クエリ結果に影響しない)、それともスパムではない通常の電子メールとして分類するべきでしょうか (クエリ結果に影響する)?最初の解決策は、静的なブラックリストを手動で作成することです。これが可能になったのは、Reactive Cache エンジニアリング チームが、負荷の 99% 以上が少数のクエリから発生していることを認識したためです。低ボリュームのクエリの場合、すべての更新が通常のメールであると想定し、クエリによって参照されるオブジェクトの更新ごとにクエリを再実行します。少数の大量クエリについては、クエリ実行を注意深く観察し、各オブジェクトのどのフィールドが実際にクエリの出力に影響を与えたかを判断することで、ブラックリストを作成しました。このプロセスには通常、エンジニアがブラックリストごとに数週間かかります。さらに状況を複雑にしているのは、この大量のクエリのセットが絶えず変化しているため、ブラックリストがすぐに古くなることです。キャッシュを使用するサービスが実行するクエリを変更するたびに、システムはスパム フィルタリング ポリシーを変更する必要があり、エンジニアリング チームの作業が増えます。

より良い解決策: スパイラルスパムフィルタリング

クエリを再実行した後、新しいクエリの結果を古いものと比較するだけで、確認された更新がスパムか正当かを簡単に判断できます。このメカニズムは、Spiral にフィードバックを提供して、更新用の分類子を作成するために使用されます。

偏りのないサンプリングを保証するために、リアクティブ キャッシュは少数のサブスクリプションからのフィードバックのみを維持して提供します。キャッシュはこれらのサブスクリプションの更新をフィルタリングしません。関連するオブジェクトまたは関連付けが変更されるたびに、クエリが再実行されます。新しいクエリ出力をキャッシュされたバージョンと比較し、それを使用して Spiral にフィードバックを提供します。たとえば、「最終閲覧」を更新しても「いいね数」には影響がなかったことを伝えます。

Spiral は、すべてのリアクティブ キャッシュ サーバーからこのフィードバックを収集し、それを使用して、さまざまなタイプのクエリごとに分類子をトレーニングします。これらの分類子は定期的にキャッシュ サーバーにプッシュされます。新しいクエリ用のフィルターを作成したり、Web 層の動作の変化に応じてフィルターを更新したりする際に、エンジニアリング チームによる手動介入が不要になりました。新しいクエリのフィードバックが届くと、Spiral はそれらのフィルター用の新しい分類子を自動的に作成します。

スパイラル: より迅速な展開とより多くの機会

Spiral ベースのキャッシュ無効化メカニズムを使用することで、リアクティブ キャッシュで新しいクエリをサポートするために必要な時間が数週間から数分に短縮されました。 Spiral 以前は、リアクティブ キャッシュ エンジニアは、実験を実行してデータを手動で収集し、すべての新しいクエリの副作用を調べる必要がありました。しかし、Spiral を使用すると、ほとんどのユースケース (クエリへのマッピング) をローカル モデルによって数分で自動的に学習できるため、ローカル推論をすぐに利用できるようになります。

ほとんどのユースケースでは、サーバーは複数のサーバーのデータを使用して 10 ~ 20 分でモデルをトレーニングできます。この高品質のモデルは、すべての個別のサーバーに公開されると、精度が向上した推論に使用できるようになります。クエリが変更されると、サーバーは変更に適応し、更新されたクエリを受信すると新しい重要度パターンを再学習できます。

当社は、バックエンド サービスの自動化と機械学習の適用に引き続き取り組み、運用エクスペリエンスの向上に努めていきます。 Spiral の将来の潜在的な用途としては、ベイズ最適化を使用した継続的なパラメータ最適化、モデルベースの制御、および 1 秒あたりのリクエスト数 (QPS) が高いリアルタイム サービスとオフライン (バッチ) システムの両方に対するオンライン強化学習手法などがあります。今後の投稿でも引き続き私たちの取り組みと成果を共有していきます。

原題: Spiral: リアルタイム機械学習によるセルフチューニングサービス、著者: Vladimir Bychkovsky、Jim Cipar、Alvin Wen、Lili Hu、Saurav Mohapatra

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  アメリカでは500万の仕事が機械に置き換えられました!スーパーAIは人類に不死をもたらすのか、それとも破滅をもたらすのか?

>>:  AIツアーはAIIA AI開発者会議のサポートで終わりに近づいています

ブログ    
ブログ    
ブログ    

推薦する

製品の価格については心配しないでください。AI が教えてくれます!

[[341780]] ▲写真:ゲッティベインが 1,700 人以上のビジネス リーダーを対象に実施...

機械学習ガバナンスとは何ですか?

なぜ組織は機械学習のガバナンスに苦労するのでしょうか? 組織の機械学習ガバナンスに取り組もうとすると...

...

米国は中国のハイテク製品を全面的に禁止する「2021年戦略競争法」を提案した。

米国の民主党と共和党は常に深刻な対立関係にあるが、両党は中国との対決という一つの問題において稀な一致...

アリババが雲奇会議でデジタル経済について語らなかったこと

2009 年以来、雲奇会議は、最も初期のローカル ウェブサイト サミットから、アリババの年次戦略およ...

生成 AI はデジタル変革の優先事項にどのような影響を与えますか?

デジタル変革は組織の中核的な能力になる必要があり、これは CIO や IT リーダーにとって重要なア...

人工知能が刑事司法を支援する方法:利点と落とし穴

まとめ刑事司法の分野では、人工知能(AI)がますます重要な役割を果たしています。リスク評価システム(...

ソフトウェア開発者の生産性を測定する価値はあるでしょうか?

ほとんどの企業はデジタル戦略に取り組んでおり、従業員の生産性を向上させる方法を模索していますが、同時...

ディープラーニング、NLP、コンピュータービジョンのための 30 の優れた Python ライブラリ

[[357895]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

スマートコックピット、進行中のインタラクティブ革命

今日では、スマートカーは都市ネットワークにおける「デジタルノード」となっています。優れた環境認識能力...

人間の脳をインターネットに接続するときは注意してください

[[264958]]将来、道を歩いていて急にお腹が空いたとき、今のように検索エンジンを使って検索する...

マルチエージェントコラボレーションフレームワーク:人工知能の次の方向性と課題

人間社会は複雑なマルチエージェントシステムであり、各個人は独自の目標、行動、信念、好みを持ち、共通の...

...

CVPR で最も興味深い論文 | AI はぼやけた写真を復元できる

人生で、私たちは誰でもぼやけた画像に遭遇します。昔は、ぼやけた画像を復元することは不可能でした。PS...

AIツール:音楽から生成される画像の未来を探り、

音楽と画像は、感情を呼び起こし、物語を伝えることができる強力な媒体であることは周知の事実です。しかし...