ปรับปรุงความสามารถในการปรับขนาดสำหรับ API ไร้สถานะของ Amazon Rekognition โดยใช้หลายภูมิภาค PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ปรับปรุงความสามารถในการปรับขนาดสำหรับ API ไร้สถานะของ Amazon Rekognition โดยใช้หลายภูมิภาค

ในสมัยก่อน โพสต์บล็อกเราได้อธิบายโซลูชันการยืนยันตัวตนแบบ end-to-end ในภูมิภาค AWS เดียว การแก้ปัญหาใช้ ความหมายของ Amazon APIs ตรวจจับใบหน้า สำหรับการตรวจจับใบหน้าและ เปรียบเทียบใบหน้า เพื่อเปรียบเทียบใบหน้า เราคิดว่า API เหล่านั้นเป็น API ไร้สถานะ เนื่องจากไม่ได้ขึ้นอยู่กับ Amazon Rekognition คอลเลกชันใบหน้า. พวกเขายังเป็น idempotent ซึ่งหมายความว่าการโทรซ้ำด้วยพารามิเตอร์เดียวกันจะส่งคืนผลลัพธ์เดียวกัน พวกเขามีตัวเลือกที่ยืดหยุ่นในการส่งรูปภาพไม่ว่าจะผ่าน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon ตำแหน่ง (Amazon S3) หรือไบต์ดิบ

ในโพสต์นี้เราเน้นที่ อิมเมจการรับรู้ของ Amazon APIs ไร้สัญชาติ และอภิปรายสองตัวเลือกในการส่งผ่านอิมเมจ และเมื่อใดที่ควรเลือกตัวเลือกหนึ่งจากมุมมองของสถาปัตยกรรมระบบ จากนั้นเราจะหารือเกี่ยวกับวิธีปรับขนาด API ไร้สัญชาติเพื่อเอาชนะข้อจำกัดระดับภูมิภาค เมื่อพูดถึงความสามารถในการปรับขนาด เรามักอ้างถึงธุรกรรมสูงสุดต่อวินาที (TPS) ที่โซลูชันสามารถจัดการได้ ตัวอย่างเช่น เมื่อจัดงานขนาดใหญ่ที่ใช้การมองเห็นของคอมพิวเตอร์เพื่อตรวจจับใบหน้าหรือป้ายชื่อวัตถุ คุณอาจพบกับการจราจรติดขัด และคุณไม่ต้องการให้ระบบเร่งความเร็ว ซึ่งหมายความว่าบางครั้งคุณจำเป็นต้องเพิ่ม TPS และมากกว่าโควต้าบริการระดับภูมิภาคที่ Amazon Rekognition API มี โพสต์นี้เสนอวิธีแก้ปัญหาเพื่อเพิ่ม TPS ของ API ไร้สัญชาติโดยใช้หลายภูมิภาค

API ไร้สถานะของ Amazon Rekognition

จาก Amazon Rekognition Image API ที่มีให้ใช้งาน เปรียบเทียบใบหน้า, ตรวจจับใบหน้า, ตรวจหาฉลาก, ตรวจหาModerationLabels, ตรวจจับอุปกรณ์ป้องกัน, ตรวจจับข้อความและ รู้จักคนดัง เป็นคนไร้สัญชาติ พวกเขามีทั้ง Amazon S3 และตัวเลือกไบต์ดิบเพื่อส่งภาพ ตัวอย่างเช่น ในไวยากรณ์คำขอของ DetectFaces API มีสองตัวเลือกในการส่งไปยัง Image สนาม: Bytes or S3Object.

เมื่อใช้ S3Object ตัวเลือก สถาปัตยกรรมทั่วไปมีดังนี้

โซลูชันนี้มีเวิร์กโฟลว์ต่อไปนี้:

  1. แอปพลิเคชันไคลเอนต์เข้าถึงหน้าเว็บที่โฮสต์ด้วย AWS ขยาย.
  2. แอปพลิเคชันไคลเอ็นต์ได้รับการรับรองความถูกต้องและได้รับอนุญาตจาก Amazon Cognito Co.
  3. แอปพลิเคชันไคลเอนต์อัปโหลดรูปภาพไปยังบัคเก็ต S3
  4. Amazon S3 ทริกเกอร์ AWS แลมบ์ดา ฟังก์ชันเรียก Amazon Rekognition
  5. ฟังก์ชัน Lambda เรียกใช้ Amazon Rekognition API ด้วยตัวเลือก S3Object
  6. ฟังก์ชันแลมบ์ดาคงผลลัพธ์ไว้เป็น อเมซอน ไดนาโมดีบี ตาราง

เลือก 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) แทนที่จะเรียก Amazon Rekognition โดยตรงกับตำแหน่ง S3 ของรูปภาพ ฟังก์ชันจำเป็นต้องดึงรูปภาพจากบัคเก็ต S3 (ขั้นตอนที่ 5) จากนั้นเรียก Amazon Rekognition ด้วยข้อมูลดิบของรูปภาพ (ขั้นตอนที่ 6). ต่อไปนี้เป็นข้อมูลโค้ดของฟังก์ชันแลมบ์ดา:

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 จำเป็นต้องมีการประมวลผลภาพเพิ่มเติมเพื่อแปลงเป็น JPEG หรือ PNG ไบต์ก่อนที่จะส่งไปยัง Amazon Rekognition รหัสต่อไปนี้แปลง 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'])

เพิ่มขนาด TPS ของ API ไร้สัญชาติโดยกระจายการเรียก API ไปยังหลายภูมิภาค

กรณีการใช้งานอื่นของ Bytes ตัวเลือกคือคุณสามารถขยาย TPS ของ API ไร้สัญชาติได้โดยกระจายการเรียก API ออกเป็นหลายภูมิภาค ด้วยวิธีนี้ คุณจะไม่ถูกจำกัดโดยโควต้าบริการภูมิภาคของ API เพราะคุณสามารถรับ TPS เพิ่มเติมจากภูมิภาคอื่นได้

ในตัวอย่างต่อไปนี้ ฟังก์ชัน Lambda ถูกสร้างขึ้นเพื่อเรียกใช้ Amazon Rekognition 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 ภูมิภาค

การแพร่กระจายการรับรู้การจราจร

ข้อมูลโค้ดที่จะโทร 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 ทั้งคู่มี TPS สูงสุด 50 สำหรับ Amazon Rekognition DetectFaces API คุณสามารถกระจายการเรียก API ให้เท่ากันด้วยน้ำหนัก 50/50 โดยการตั้งค่าตัวแปรสภาพแวดล้อม REGION_1_TRAFFIC_PERCENTAGE ถึง 50 ด้วยวิธีนี้ คุณสามารถบรรลุขั้นต่ำ (50/50%, 50/50%) = 100 TPS ในทางทฤษฎี

ในการตรวจสอบแนวคิด ฟังก์ชัน Lambda จะแสดงเป็น REST API ด้วย Amazon API Gateway Amazon. แล้วก็ 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 TPS เริ่มการทดสอบการโหลดอีกครั้งจาก 100 เธรดเพื่อหา TPS สูงสุด

ตารางต่อไปนี้สรุปผลการทดสอบโหลด

เปอร์เซ็นต์ของการเรียก API ของ DetectLabels ไปยัง us-east-1 เปอร์เซ็นต์ของการเรียก API ของ DetectLabels ไปยัง us-west-2 TPS สูงสุดในทางทฤษฎี การทำงานพร้อมกันสูงสุดโดยไม่มี มีการเตรียมใช้งานThroughputExceededException
100 0 50 70
50 50 100 145

สรุป

ลูกค้าจำนวนมากกำลังใช้ API ไร้สถานะของ Amazon Rekognition Image สำหรับกรณีการใช้งานต่างๆ รวมถึงการยืนยันตัวตน การกลั่นกรองเนื้อหา การประมวลผลสื่อ และอื่นๆ โพสต์นี้กล่าวถึงสองตัวเลือกในการส่งรูปภาพและวิธีใช้ตัวเลือกไบต์ดิบสำหรับกรณีการใช้งานต่อไปนี้:

  • ความพร้อมใช้งานระดับภูมิภาคของ Amazon Rekognition
  • ถิ่นที่อยู่ของข้อมูลลูกค้า
  • ปรับขนาด TPS ของ API ไร้สถานะของ Amazon Rekognition

ตรวจสอบวิธีการใช้ Amazon Rekognition กรณีการใช้งานคอมพิวเตอร์วิทัศน์ที่แตกต่างกัน และเริ่มต้นเส้นทางแห่งนวัตกรรมของคุณ


เกี่ยวกับผู้เขียน

ปรับปรุงความสามารถในการปรับขนาดสำหรับ API ไร้สถานะของ Amazon Rekognition โดยใช้หลายภูมิภาค PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ชารอน ลี เป็นสถาปนิกโซลูชันที่ AWS ซึ่งตั้งอยู่ในเขตบอสตัน รัฐแมสซาชูเซตส์ เธอทำงานร่วมกับลูกค้าระดับองค์กร ช่วยพวกเขาแก้ปัญหายากๆ และสร้างบน AWS นอกเวลางาน เธอชอบใช้เวลากับครอบครัวและสำรวจร้านอาหารในท้องถิ่น

ปรับปรุงความสามารถในการปรับขนาดสำหรับ API ไร้สถานะของ Amazon Rekognition โดยใช้หลายภูมิภาค PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ไวภาวชาห์ เป็นสถาปนิกโซลูชันอาวุโสของ AWS และชอบช่วยเหลือลูกค้าด้วยทุกสิ่งบนระบบคลาวด์และเปิดใช้งานเส้นทางการปรับใช้ระบบคลาวด์ นอกเวลางาน เขาชอบท่องเที่ยว สำรวจสถานที่และร้านอาหารใหม่ๆ ทำอาหาร ติดตามกีฬา เช่น คริกเก็ตและฟุตบอล ดูภาพยนตร์และซีรีส์ (แฟนพันธุ์แท้ Marvel) และกิจกรรมผจญภัย เช่น ปีนเขา กระโดดร่ม และอื่นๆ อีกมากมาย

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS

AWS ได้รับตำแหน่งในหมวดหมู่ผู้นำในการประเมินผู้ให้บริการซอฟต์แวร์และแพลตฟอร์มของ IDC MarketScape ประจำปี 2022 สำหรับ APEJ AI Life-Cycle Software Tools and Platforms

โหนดต้นทาง: 1785099
ประทับเวลา: ม.ค. 6, 2023