複数のリージョン PlatoBlockchain Data Intelligence を使用して、Amazon Rekognition ステートレス API のスケーラビリティを向上させます。 垂直検索。 あい。

複数のリージョンを使用して Amazon Rekognition ステートレス API のスケーラビリティを向上させる

以前では、 ブログ投稿では、単一の AWS リージョンでのエンドツーエンドの ID 検証ソリューションについて説明しました。 ソリューションは、 Amazonの再認識 API 顔検出 顔検出と 顔の比較 顔比較用。 これらの API は Amazon Rekognition に依存しないため、ステートレス API と見なされます。 顔コレクション. また、それらはべき等です。つまり、同じパラメーターを使用して繰り返し呼び出しを行っても、同じ結果が返されます。 これらは、画像を渡す際の柔軟なオプションを提供します。 Amazon シンプル ストレージ サービス (Amazon S3) ロケーションまたは raw バイト。

この投稿では、 Amazon Rekognition イメージ ステートレス API について説明し、イメージを渡す XNUMX つのオプションと、システム アーキテクチャの観点からどちらを選択するかについて説明します。 次に、ステートレス API をスケーリングして地域の制限を克服する方法について説明します。 スケーラビリティについて話すとき、ソリューションが処理できる XNUMX 秒あたりの最大トランザクション数 (TPS) について言及することがよくあります。 たとえば、コンピューター ビジョンを使用して顔やオブジェクトのラベルを検出する大規模なイベントをホストする場合、トラフィックのスパイクが発生する可能性があり、システムが調整されないようにする必要があります。 つまり、場合によっては TPS を増やす必要があり、Amazon Rekognition API のリージョン サービス クォータを超えることさえあります。 この投稿では、複数のリージョンを使用してステートレス API の TPS を向上させるソリューションを提案します。

Amazon Rekognition ステートレス API

利用可能な Amazon Rekognition Image API のうち、 顔の比較, 顔検出, 検出ラベル, 検出モデレーションラベル, 保護機器の検出, テキストの検出, 認識有名人 ステートレスです。 イメージを渡すために、Amazon S3 と raw バイトの両方のオプションを提供します。 たとえば、 DetectFaces API に渡すには XNUMX つのオプションがあります。 Image フィールド: Bytes or S3Object.

使用している場合 S3Object オプションの場合、典型的なアーキテクチャは次のとおりです。

このソリューションには、次のワークフローがあります。

  1. クライアント アプリケーションは、でホストされている Web ページにアクセスします。 AWS 増幅.
  2. クライアント アプリケーションは認証され、承認されます。 アマゾンコグニート.
  3. クライアント アプリケーションは、イメージを S3 バケットにアップロードします。
  4. Amazon S3 が AWSラムダ Amazon Rekognition を呼び出す関数。
  5. Lambda 関数は、S3Object オプションを使用して Amazon Rekognition API を呼び出します。
  6. Lambda 関数は結果を Amazon DynamoDB 列で番号の横にあるXをクリックします。

選択する S3Object 次のシナリオでのオプション:

  • 画像は PNG または JPEG 形式のファイルです
  • Amazon Rekognition が利用可能な同じリージョンにスタック全体をデプロイします
  • Amazon Rekognition API のリージョン サービス クォータがシステム要件を満たしている

これらの要件をすべて満たしていない場合は、 Bytes オプションを選択します。

別のリージョンで Amazon Rekognition Stateless API を使用する

使用の一例 Bytes オプションは、Amazon Rekognition が一般に利用できないリージョンでユースケースをデプロイする場合です。たとえば、南米に顧客がいる場合 (sa-east-1) 領域。 データの所在地については、ユーザーの画像を保存するために使用する S3 バケットが存在する必要があります sa-east-1、ただし、Amazon Rekognition は一般に利用可能ではありませんが、ソリューションに使用したいと考えています。 sa-east-1。 XNUMXつの解決策は、 Bytes Amazon Rekognition が利用可能な別のリージョンで Amazon Rekognition を呼び出すオプション。 us-east-1. 次の図は、このアーキテクチャを示しています。

別の地域での認識

Lambda 関数がトリガーされた後 (ステップ 4)、画像の S3 の場所を使用して Amazon Rekognition を直接呼び出す代わりに、関数は S3 バケットから画像を取得し (ステップ 5)、画像の raw バイトを使用して Amazon Rekognition を呼び出す必要があります (ステップ 6)。 XNUMX)。 以下は、Lambda 関数のコード スニペットです。

rekognition_region = os.getenv("REKOGNITION_REGION")
s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name=rekognition_region)

def handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(
    event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    s3_res = s3.get_object(Bucket=bucket, Key=key)
    rekognition_res = rekognition.detect_faces(Image={"Bytes": s3_res['Body'].read()}, Attributes=['ALL'])
    print(json.dumps(rekognition_res))

上記のコード スニペットは、JPEG または PNG 形式で直接機能することに注意してください。 BMP などの他の画像形式の場合、Amazon Rekognition に送信する前に JPEG または PNG バイトに変換するために追加の画像処理が必要です。 次のコードは、BMP を JPEG バイトに変換します。

import io
from PIL import Image

s3_res = s3.get_object(Bucket=bucket, Key=key)
bmp_img = Image.open(io.BytesIO(s3_res['Body'].read()))
buffered = io.BytesIO()
rgb_img = bmp_img.convert('RGB')
rgb_img.save(buffered, format="JPEG")
rekognition_res = rekognition.detect_faces(Image={"Bytes": buffered.getvalue()}, Attributes=['ALL'])

API 呼び出しを複数のリージョンに分散することで、ステートレス API の TPS をスケールアップします

の別のユースケース Bytes オプションは、API 呼び出しを複数のリージョンに分散することで、ステートレス API の TPS をスケールアップできることです。 この方法では、他のリージョンから追加の TPS を取得できるため、API のリージョン サービス クォータによって制限されることはありません。

次の例では、Amazon Rekognition を呼び出すために Lambda 関数が作成されます。 DetectLabels とのAPI Bytes オプション。 最大 TPS をスケールアップするには、API 呼び出しを重み付けして複数のリージョンに分散できます。 達成できる最大 TPS は、min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight) で計算されます。 次の例では、 us-east-1 & us-west-2 地域。

Rekognition トラフィックの拡散

を呼び出すコード スニペット DetectLabels APIは次のとおりです。

region_1 = os.getenv("REKOGNITION_REGION_1")
region_2 = os.getenv("REKOGNITION_REGION_2")
region_1_traffic_percentage = int(os.getenv("REGION_1_TRAFFIC_PERCENTAGE"))

# randomly generate a number between 1, 100
random_num = random.randint(1, 100)
region = region_1 if random_num <= region_1_traffic_percentage else region_2
rekognition = boto3.client('rekognition', region_name=region)
response = rekognition.detect_labels(Image={"Bytes": image_bytes})
print(response)

なぜなら us-east-1 & us-west-2 どちらも Amazon Rekognition DetectFaces API に対して最大 50 TPS を備えているため、環境変数を設定することで、50/50 の重みで API 呼び出しを均等に分散できます。 REGION_1_TRAFFIC_PERCENTAGE このようにして、理論上は min(50/50%, 50/50%) = 50 TPS を達成できます。

アイデアを検証するために、Lambda 関数は REST API として公開されています。 アマゾンAPIゲートウェイ。 それから JMeterの API の負荷テストに使用されます。

ロード テスト Rekognition API 呼び出し

REGION_1_TRAFFIC_PERCENTAGE 最初は 100 に設定されています。 DetectFaces API 呼び出しが送信されます us-east-1 それだけ。 理論的には、達成できる最大 TPS は、サービス クォータによって制限されます。 us-east-1、これは 50 TPS です。 カスタム API エンドポイントで負荷テストを行います。50 の同時スレッドから開始し、5 つのスレッドを段階的に追加して、 ProvisionedThroughputExceededException Amazon Rekognition から返されたことが観察されます。

REGION_1_TRAFFIC_PERCENTAGE 次に 50 に設定します。この方法ですべて DetectLabels API 呼び出しは均等に送信されます us-east-1 & us-west-2. 理論的には、達成できる最大 TPS は、100 つのリージョンを合わせたサービス クォータ (100 TPS) です。 負荷テストを XNUMX スレッドから再度開始して、最大 TPS を見つけます。

次の表は、負荷テストの結果をまとめたものです。

us-east-1 に対する DetectLabels API 呼び出しの割合 us-west-2 に対する DetectLabels API 呼び出しの割合 理論上の最大 TPS なしの最大同時実行数 プロビジョニングされたスループット超過例外
100 0 50 70
50 50 100 145

まとめ

多くのお客様が、ID 検証、コンテンツ モデレート、メディア処理など、さまざまなユースケースに Amazon Rekognition Image ステートレス API を使用しています。 この投稿では、画像を渡す XNUMX つのオプションと、次のユース ケースで raw バイト オプションを使用する方法について説明しました。

  • Amazon Rekognition のリージョンでの利用可能性
  • 顧客データの所在地
  • Amazon Rekognition ステートレス API の TPS のスケールアップ

Amazon Rekognition がどのように使用されているかを確認してください さまざまなコンピューター ビジョンのユース ケース イノベーションの旅を始めましょう。


著者について

複数のリージョン PlatoBlockchain Data Intelligence を使用して、Amazon Rekognition ステートレス API のスケーラビリティを向上させます。 垂直検索。 あい。シャロン・リー マサチューセッツ州ボストンを拠点とする AWS のソリューション アーキテクトです。 彼女は企業のお客様と協力して、困難な問題の解決と AWS での構築を支援しています。 仕事以外では、家族と時間を過ごしたり、地元のレストランを探索したりするのが好きです。

複数のリージョン PlatoBlockchain Data Intelligence を使用して、Amazon Rekognition ステートレス API のスケーラビリティを向上させます。 垂直検索。 あい。バイバブシャー は、AW​​S のシニア ソリューション アーキテクトであり、クラウドのすべてについて顧客を支援し、クラウド導入の旅を可能にすることを好みます。 仕事以外では、旅行、新しい場所やレストランの探索、料理、クリケットやサッカーなどのスポーツ、映画やシリーズ (マーベル ファン) の鑑賞、ハイキング、スカイダイビングなどの冒険的な活動が大好きです。

タイムスタンプ:

より多くの AWS機械学習