여러 리전 PlatoBlockchain 데이터 인텔리전스를 사용하여 Amazon Rekognition 상태 비저장 API의 확장성을 향상합니다. 수직 검색. 일체 포함.

여러 리전을 사용하여 Amazon Rekognition 상태 비저장 API의 확장성 향상

이전에 블로그 게시물, 우리는 단일 AWS 리전에서 엔드 투 엔드 자격 증명 확인 솔루션을 설명했습니다. 솔루션은 다음을 사용합니다. 아마존 인식 API 얼굴 감지 얼굴 인식 및 얼굴 비교 얼굴 비교를 위해 이러한 API는 Amazon Rekognition에 의존하지 않기 때문에 상태 비저장 API라고 생각합니다. 얼굴 수집. 또한 멱등적입니다. 즉, 동일한 매개변수를 사용하여 반복해서 호출해도 동일한 결과가 반환됩니다. 이미지 전달에 대한 유연한 옵션을 제공합니다. 아마존 단순 스토리지 서비스 (Amazon S3) 위치 또는 원시 바이트.

이 게시물에서는 Amazon 인식 이미지 상태 비저장 API, 이미지 전달의 두 가지 옵션 및 시스템 아키텍처 관점에서 다른 옵션을 선택해야 하는 경우에 대해 논의합니다. 그런 다음 상태 비저장 API를 확장하여 일부 지역 제한을 극복하는 방법에 대해 논의합니다. 확장성에 대해 이야기할 때 우리는 종종 솔루션이 처리할 수 있는 초당 최대 트랜잭션(TPS)을 언급합니다. 예를 들어 컴퓨터 비전을 사용하여 얼굴이나 개체 레이블을 감지하는 대규모 이벤트를 주최할 때 트래픽 급증이 발생할 수 있으며 시스템이 조절되는 것을 원하지 않습니다. 즉, 때때로 TPS를 높이고 Amazon Rekognition API의 지역 서비스 할당량을 초과해야 할 수도 있습니다. 이 게시물은 여러 지역을 사용하여 상태 비저장 API의 TPS를 높이는 솔루션을 제안합니다.

Amazon Rekognition 상태 비저장 API

사용 가능한 Amazon Rekognition Image API 중에서 얼굴 비교, 얼굴 감지, 라벨 감지, DetectModeration레이블, 감지보호장비, 텍스트 감지유명인사 알아보기 무국적자입니다. 이미지를 전달하기 위해 Amazon S3 및 원시 바이트 옵션을 모두 제공합니다. 예를 들어, DetectFaces API에 전달하는 두 가지 옵션이 있습니다. Image 들: Bytes or S3Object.

를 사용할 때 S3Object 옵션에서 일반적인 아키텍처는 다음과 같습니다.

이 솔루션에는 다음과 같은 워크플로우가 있습니다.

  1. 클라이언트 애플리케이션은 다음으로 호스팅되는 웹페이지에 액세스합니다. AWS 증폭.
  2. 클라이언트 애플리케이션은 다음을 통해 인증되고 권한이 부여됩니다. 아마존 코 그니 토.
  3. 클라이언트 애플리케이션은 S3 버킷에 이미지를 업로드합니다.
  4. Amazon S3는 AWS 람다 Amazon Rekognition을 호출하는 함수.
  5. Lambda 함수는 S3Object 옵션을 사용하여 Amazon Rekognition API를 호출합니다.
  6. Lambda 함수는 결과를 아마존 DynamoDB 테이블.

선택 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. 한 가지 해결책은 다음을 사용하는 것입니다. Bytes 다음과 같이 Amazon Rekognition을 사용할 수 있는 다른 리전에서 Amazon Rekognition을 호출하는 옵션 us-east-1. 다음 다이어그램은 이 아키텍처를 보여줍니다.

다른 지역의 인식

Lambda 함수가 트리거된 후(4단계) 이미지의 S3 위치로 Amazon Rekognition을 직접 호출하는 대신 함수는 S3 버킷에서 이미지를 검색한 다음(5단계) 이미지의 원시 바이트로 Amazon Rekognition을 호출해야 합니다(단계 6). 다음은 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-1us-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-1us-west-2 둘 다 Amazon Rekognition DetectFaces API에 대해 최대 50 TPS를 가지며 환경 변수를 설정하여 50/50 가중치로 API 호출을 균등하게 분산시킬 수 있습니다. REGION_1_TRAFFIC_PERCENTAGE 이렇게 하면 이론적으로 최소(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, 이는 50TPS입니다. 50개의 동시 스레드로 시작하여 점진적으로 5개의 스레드를 추가하여 사용자 지정 API 끝점에서 부하 테스트를 수행합니다. ProvisionedThroughputExceededException Amazon Rekognition에서 반환된 데이터가 관찰됩니다.

REGION_1_TRAFFIC_PERCENTAGE 그런 다음 50으로 설정됩니다. DetectLabels API 호출이 균등하게 전송됩니다. us-east-1us-west-2. 이론적으로 달성할 수 있는 최대 TPS는 두 리전이 결합하는 서비스 할당량인 100TPS입니다. 최대 TPS를 찾기 위해 100개의 스레드에서 부하 테스트를 다시 시작합니다.

다음 표에는 부하 테스트 결과가 요약되어 있습니다.

us-east-1에 대한 DetectLabels API 호출 비율 us-west-2에 대한 DetectLabels API 호출의 백분율 이론상 최대 TPS 없이 최대 동시 실행 프로비저닝된처리량ExceededException
100 0 50 70
50 50 100 145

결론

많은 고객이 ID 확인, 콘텐츠 조정, 미디어 처리 등 다양한 사용 사례에 Amazon Rekognition Image 상태 비저장 API를 사용하고 있습니다. 이 게시물에서는 이미지 전달의 두 가지 옵션과 다음 사용 사례에 대해 원시 바이트 옵션을 사용하는 방법에 대해 설명했습니다.

  • Amazon Rekognition 리전 가용성
  • 고객 데이터 상주
  • Amazon Rekognition 상태 비저장 API의 TPS 확장

Amazon Rekognition이 어떻게 사용되는지 확인하십시오. 다양한 컴퓨터 비전 사용 사례 혁신 여정을 시작하십시오.


저자에 관하여

여러 리전 PlatoBlockchain 데이터 인텔리전스를 사용하여 Amazon Rekognition 상태 비저장 API의 확장성을 향상합니다. 수직 검색. 일체 포함.샤론 리 매사추세츠주 보스턴에 본사를 둔 AWS의 솔루션 아키텍트입니다. 그녀는 엔터프라이즈 고객과 협력하여 그들이 어려운 문제를 해결하고 AWS를 기반으로 구축하도록 돕습니다. 직장 밖에서 그녀는 가족과 시간을 보내고 현지 식당을 탐험하는 것을 좋아합니다.

여러 리전 PlatoBlockchain 데이터 인텔리전스를 사용하여 Amazon Rekognition 상태 비저장 API의 확장성을 향상합니다. 수직 검색. 일체 포함.바이브 하브 샤 AWS의 선임 솔루션 아키텍트이며 모든 클라우드와 관련하여 고객을 돕고 클라우드 채택 여정을 지원하는 것을 좋아합니다. 일 외에는 여행, 새로운 장소와 레스토랑 탐색, 요리, 크리켓과 축구와 같은 스포츠 관람, 영화 및 시리즈 시청(Marvel 팬), 하이킹, 스카이다이빙과 같은 모험적인 활동을 좋아합니다.

타임 스탬프 :

더보기 AWS 기계 학습