Amazon Search が AWS Inferentia を使用して ML 推論コストを 85% 削減した方法

Amazon の製品検索エンジンは、数十億の製品をインデックスに登録し、世界中の何億もの顧客にサービスを提供しており、世界で最も頻繁に使用されているサービスの XNUMX つです。 Amazon 検索チームは、機械学習 (ML) テクノロジーを開発しています。 Amazon.com 検索エンジンであり、顧客が簡単に検索できるようにします。 優れたカスタマー エクスペリエンスを提供し、 Amazon.com このチームは、リアルタイムのレイテンシとスループットの要件を備えた、より費用対効果の高いシステムを構築する方法を常に探しています。 チームは、ディープ ラーニング用に最適化されたハードウェアとコンパイラを常に調査して、モデルのトレーニングと推論を加速すると同時に、全面的に運用コストを削減しています。

この投稿では、Amazon Search の使用方法について説明します AWSインフェレンティアは、ディープ ラーニングの推論ワークロードを加速するために AWS によって構築された高性能アクセラレータです。 チームは、AWS Inferentia ベースの Transformer ベースの NLP モデルを使用して、低レイテンシーの ML 推論を実行します アマゾン エラスティック コンピューティング クラウド (Amazon EC2) Inf1 インスタンスに対応し、強力なスループットとレイテンシーのパフォーマンスを維持しながら、インフラストラクチャ コストを最大 85% 節約します。

重複およびクエリの意図を予測するための深層学習

Amazon マーケットプレイスの検索は、ASIN (Amazon Standard Identification Number、商品を一意に識別する 10 桁の英数字の番号)、商品画像、テキストによる説明、およびクエリなどの複数の入力を処理する、マルチタスクでマルチモーダルな問題です。 カスタマイズされたユーザー エクスペリエンスを作成するために、多くのモデルからの予測が検索のさまざまな側面に使用されます。 検索システムには、ピーク負荷時に XNUMX 秒あたり数万のトランザクション (TPS) を持つ数千のモデルがあるため、これは課題です。 私たちは、その体験の XNUMX つの要素に焦点を当てています。

  • 顧客が認識した重複予測 – ユーザーのクエリに一致する最も関連性の高い製品のリストを表示するには、顧客が区別するのに苦労している製品を特定することが重要です
  • クエリの意図の予測 – 検索ページと製品レイアウトを顧客が探しているものにより適したものに適応させるには、ユーザーのクエリの意図とタイプ (たとえば、メディア関連のクエリ、ヘルプ クエリ、およびその他のクエリの種類) を予測することが重要です。

これらの予測は両方とも、Transformer モデル アーキテクチャ、つまり BERT ベースのモデルを使用して行われます。 実際、どちらも同じ BERT ベースのモデルをベースとして共有しており、それぞれがこのバックボーンの上に分類/回帰ヘッドを積み重ねています。

重複予測は、評価された製品のペアのさまざまなテキスト機能 (製品タイプ、タイトル、説明など) を入力として取り込み、大規模なデータセットに対して定期的に計算されます。 このモデルは、マルチタスク方式でエンド ツー エンドでトレーニングされます。 Amazon SageMaker 処理ジョブ これらのバッチ ワークロードを定期的に実行して起動を自動化し、使用した処理時間に対してのみ支払いを行うために使用されます。 このバッチ ワークロードのユース ケースでは、推論スループットの要件は合計 8,800 TPS でした。

インテント予測は、ユーザーのテキスト クエリを入力として受け取り、日常のトラフィックを動的に処理し、Amazon マーケットプレイスでのユーザー エクスペリエンスを向上させるためにリアルタイムで必要とされます。 モデルは、マルチクラスの分類目的でトレーニングされます。 このモデルは次にデプロイされます Amazon エラスティック コンテナ サービス (Amazon ECS) により、迅速な自動スケーリングと 簡単な展開の定義と管理. これはリアルタイムのユース ケースであるため、快適なユーザー エクスペリエンスを確保するには、P99 のレイテンシを 10 ミリ秒未満にする必要がありました。

AWS Inferentia と AWS Neuron SDK

EC2 Inf1 インスタンス AWS Inferentia は、深層学習の推論ワークロードを加速するために AWS によって構築された最初の ML アクセラレーターです。 Inf1 インスタンスは、同等の GPU ベースの EC2.3 インスタンスと比較して、最大 70 倍のスループットを実現し、推論あたりのコストを最大 2% 削減します。 選択したフレームワーク (PyTorch、TensorFlow、MXNet) を使用してモデルのトレーニングを継続し、AWS Inferentia に簡単にデプロイして、組み込みのパフォーマンス最適化の恩恵を受けることができます。 Inf1 インスタンスを使用して、画像認識、オブジェクト検出、自然言語処理 (NLP)、最新のレコメンダー モデルなど、幅広いモデル タイプをデプロイできます。

AWS ニューロン EC2 Inf1 インスタンスの ML 推論パフォーマンスを最適化するコンパイラ、ランタイム、およびプロファイリング ツールで構成されるソフトウェア開発キット (SDK) です。 Neuron は、TensorFlow や PyTorch などの一般的な ML フレームワークとネイティブに統合されています。 したがって、AWS Inferentia に深層学習モデルを展開し、選択したフレームワークが提供する同じ使い慣れた API を使用して、クラウドでパフォーマンスを向上させ、推論あたりのコストを最小限に抑えることができます。

発売以来、Neuron SDK は、パフォーマンスの向上と推論コストの削減を続けながら、サポートするモデルの幅を広げ続けてきました。 これには、NLP モデル (BERT)、画像分類モデル (ResNet、VGG)、オブジェクト検出モデル (OpenPose および SSD) が含まれます。

Inf1 インスタンスにデプロイして、低レイテンシ、高スループット、およびコスト削減を実現

Amazon Search チームは、重複予測での高スループット要件と、クエリ意図予測での低レイテンシー要件を満たしながら、コストを節約したいと考えていました。 彼らは AWS Inferentia ベースの Inf1 インスタンスにデプロイすることを選択し、高いパフォーマンス要件を満たしただけでなく、推論コストを最大 85% 節約しました。

顧客が認識した重複予測

Inf1 を使用する前に、専用の アマゾンEMR クラスターは、CPU ベースのインスタンスを使用して実行されていました。 ハードウェア アクセラレーションに依存しない場合、8,800 秒あたり合計 1.6 トランザクションという高スループット要件を満たすには、多数のインスタンスが必要でした。 チームは、それぞれ 4 つの AWS Inferentia アクセラレーターと 16 の NeuronCore (AWS Inferentia チップあたり 4 コア) を備えた inf16xlarge インスタンスに切り替えました。 単一の NeuronCore の Transformer ベースのモデルをトレースし、スループットを最大化するために、NeuronCore ごとに 85 つのモードをロードしました。 利用可能な 2 個の NeuronCores を利用することで、推論コストを XNUMX% 削減しました (現在のパブリック Amazon ECXNUMX オンデマンド料金に基づく)。

クエリの意図の予測

99 ミリ秒以下の P10 レイテンシ要件を考慮して、チームは inf1.6xlarge インスタンスで利用可能なすべての NeuronCore にモデルをロードしました。 これは、PyTorch Neuron を使用して簡単に行うことができます。 torch.neuron.DataParallel API。 Inf1 デプロイでは、モデルのレイテンシは 3 ミリ秒、エンドツーエンドのレイテンシは約 10 ミリ秒、ピーク負荷時の最大スループットは 16,000 TPS に達しました。

サンプルのコンパイルとデプロイ コードの使用を開始する

以下は、Inf1 インスタンスの使用を開始し、Amazon 検索チームのようなパフォーマンスとコストのメリットを実現するのに役立つサンプル コードです。 以下を使用して、PyTorch モデルをコンパイルして推論を実行する方法を示します。 PyTorch ニューロン.

まず、モデルは次のようにコンパイルされます torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

可能な引数の完全なリストについては、 trace 方法、参照 PyTorch-Neuron トレース Python API。 ご覧のように、 コンパイラの引数 に渡すことができます torch.neuron API を直接。 すべての FP32 演算子がキャストされます BF16 with --fp32-cast=all、ダイナミックレンジを維持しながら最高のパフォーマンスを提供します。 パフォーマンスとモデル精度のトレードオフを制御できるキャスト オプションが増えました。 両方のユース ケースで使用されるモデルは、単一の NeuronCore 用にコンパイルされています ( パイプライン).

次に、モデルを Inferentia にロードします。 torch.jit.load、予測に使用します。 の ニューロンの実行時間 モデルを NeuronCores に自動的にロードします。

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

まとめ

Amazon Search チームは、大量のトラフィックと厳しいパフォーマンス要件の下で、AWS Inferentia ベースの Inf85 インスタンスを使用して、推論コストを 1% 削減することができました。 AWS Inferentia と Neuron SDK は、トレーニングとは別に展開プロセスを最適化する柔軟性をチームに提供し、包括的なツールと使い慣れたフレームワーク API を介して浅い学習曲線を提示しました。

この投稿で提供されているサンプル コードを使用して開始することで、パフォーマンスとコストのメリットを引き出すことができます。 また、エンドツーエンドをチェックしてください チュートリアル Inferentia で ML モデルを実行するには パイトーチ & TensorFlow.


著者について

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。ジョアンモウラ アマゾン ウェブ サービスの AI/ML スペシャリスト ソリューション アーキテクトです。 彼は主に NLP のユース ケースに焦点を当てており、顧客が深層学習モデルのトレーニングと展開を最適化するのを支援しています。 彼はまた、ML に特化したハードウェアおよびローコード ML ソリューションの積極的な支持者でもあります。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。チャン・ウェイチー Search M5 のソフトウェア エンジニアリング マネージャーであり、Amazon 機械学習アプリケーションの大規模モデルの製品化に取り組んでいます。 彼の興味には、情報検索と機械学習インフラストラクチャーが含まれます。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。ジェイソン・カールソン 機械学習パイプラインを開発するソフトウェア エンジニアであり、顧客が認識した重複によって盗まれた検索インプレッションの数を減らすのに役立ちます。 主に Apache Spark、AWS、PyTorch を使用して、ML モデルのデータのデプロイとフィード/処理を支援しています。 余暇には、読書とランニングが好きです。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。シャオホイ・シー Search Query Understanding Infra チームの SDE です。 彼は、低レイテンシと高可用性を備えた大規模なディープ ラーニング オンライン推論サービスを構築する取り組みを主導しています。 仕事以外では、彼はスキーとおいしい食べ物の探索を楽しんでいます。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。張卓奇 は、Search Query Understanding Infra チームのソフトウェア開発エンジニアです。 彼は、ディープ ラーニング オンライン推論サービスのレイテンシとスループットを改善するモデル サービス フレームワークの構築に取り組んでいます。 仕事以外では、バスケットボール、スノーボード、ドライブが好きです。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。孫浩偉 は、Search Query Understanding Infra チームのソフトウェア エンジニアです。 彼女は、ディープ ラーニング オンライン推論サービスをサポートする API とインフラストラクチャの設計に取り組んでいます。 彼女の興味には、サービス API の設計、インフラストラクチャのセットアップ、および保守が含まれます。 仕事以外では、ランニング、ハイキング、旅行を楽しんでいます。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。Jaspreet Singh M5 チームの応用科学者であり、顧客のショッピング エクスペリエンスを向上させるために大規模な基盤モデルに取り組んでいます。 彼の研究対象には、マルチタスク学習、情報検索、および表現学習が含まれます。

Amazon Search が AWS Inferentia PlatoBlockchain Data Intelligence を使用して ML 推論コストを 85% 削減した方法。垂直検索。あい。シュルティ・コパーカー AWS のシニア プロダクト マーケティング マネージャーです。 彼女は、顧客が機械学習のニーズに合わせて EC2 アクセラレーテッド コンピューティング インフラストラクチャを調査、評価、採用するのを支援しています。

タイムスタンプ:

より多くの AWS機械学習