โฮสต์โมเดลคอมพิวเตอร์วิทัศน์ TensorFlow หลายรุ่นโดยใช้ตำแหน่งข้อมูลหลายรุ่นของ Amazon SageMaker

โหนดต้นทาง: 1853804

อเมซอน SageMaker ช่วยนักวิทยาศาสตร์ด้านข้อมูลและนักพัฒนาในการจัดเตรียม สร้าง ฝึกอบรม และปรับใช้โมเดลแมชชีนเลิร์นนิง (ML) คุณภาพสูงได้อย่างรวดเร็วโดยรวบรวมชุดความสามารถที่หลากหลายซึ่งสร้างขึ้นสำหรับ ML โดยเฉพาะ SageMaker เร่งความเร็วของนวัตกรรมภายในองค์กรของคุณโดยมอบเครื่องมือที่สร้างขึ้นตามวัตถุประสงค์สำหรับทุกขั้นตอนของการพัฒนา ML รวมถึงการติดฉลาก การเตรียมข้อมูล วิศวกรรมคุณสมบัติ การตรวจจับอคติทางสถิติ AutoML การฝึกอบรม การปรับแต่ง การโฮสต์ การอธิบาย การตรวจสอบ และการทำงานอัตโนมัติของเวิร์กโฟลว์

บริษัทต่างๆ กำลังฝึกอบรมโมเดล ML ตามข้อมูลผู้ใช้แต่ละรายมากขึ้น ตัวอย่างเช่น บริการแชร์รูปภาพที่ออกแบบมาเพื่อเปิดใช้งานการค้นหาข้อมูลบนอินเทอร์เน็ตจะฝึกโมเดลที่กำหนดเองตามรูปภาพที่อัปโหลดของผู้ใช้แต่ละรายและประวัติการเรียกดูเพื่อปรับแต่งคำแนะนำสำหรับผู้ใช้รายนั้น บริษัทยังสามารถฝึกโมเดลแบบกำหนดเองตามหัวข้อการค้นหาเพื่อแนะนำรูปภาพต่อหัวข้อ การสร้างโมเดล ML แบบกำหนดเองสำหรับกรณีการใช้งานแต่ละกรณีนำไปสู่ความแม่นยำในการอนุมานที่สูงขึ้น แต่จะเพิ่มค่าใช้จ่ายในการปรับใช้และจัดการโมเดล ความท้าทายเหล่านี้จะชัดเจนยิ่งขึ้นเมื่อเข้าถึงโมเดลทั้งหมดไม่ได้ในอัตราเดียวกัน แต่ยังต้องพร้อมใช้งานตลอดเวลา

SageMaker ปลายทางหลายรุ่น ให้วิธีที่ปรับขนาดได้และคุ้มค่าในการปรับใช้โมเดล ML จำนวนมากในระบบคลาวด์ ตำแหน่งข้อมูลหลายรุ่นของ SageMaker ช่วยให้คุณสามารถปรับใช้โมเดล ML หลายรุ่นหลังปลายทางเดียวและให้บริการโดยใช้คอนเทนเนอร์ที่ให้บริการเดียว แอปพลิเคชันของคุณเพียงแค่ต้องรวมการเรียก API กับโมเดลเป้าหมายไปยังปลายทางนี้ เพื่อให้เกิดการอนุมานที่มีเวลาแฝงต่ำและมีปริมาณงานสูง แทนที่จะจ่ายสำหรับปลายทางแยกต่างหากสำหรับทุกรุ่นเดียว คุณสามารถโฮสต์หลายรุ่นได้ในราคาของอุปกรณ์ปลายทางเดียว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจุดปลายหลายรุ่นของ SageMaker โปรดดูที่ ประหยัดค่าใช้จ่ายในการอนุมานโดยใช้ตำแหน่งข้อมูลหลายรุ่นของ Amazon SageMaker.

ในโพสต์นี้ เราสาธิตวิธีใช้อุปกรณ์ปลายทางหลายรุ่นของ SageMaker เพื่อโฮสต์แบบจำลองคอมพิวเตอร์วิทัศน์สองรุ่นที่มีสถาปัตยกรรมแบบจำลองและชุดข้อมูลที่แตกต่างกันสำหรับการจัดประเภทรูปภาพ ในทางปฏิบัติ คุณสามารถปรับใช้โมเดลนับหมื่นบนปลายทางหลายรุ่นได้

ภาพรวมของโซลูชัน

ตำแหน่งข้อมูลหลายรุ่นของ SageMaker ทำงานร่วมกับเฟรมเวิร์กต่างๆ เช่น TensorFlow, PyTorch, MXNet และ sklearn และคุณสามารถ สร้างคอนเทนเนอร์ของคุณเองด้วยเซิร์ฟเวอร์หลายรุ่น ตำแหน่งข้อมูลหลายรุ่นยังได้รับการสนับสนุนโดยกำเนิดในอัลกอริธึมในตัวยอดนิยมของ SageMaker ดังต่อไปนี้: XGBoost, ผู้เรียนเชิงเส้น, ป่าสุ่มตัด (RCF) และ K-เพื่อนบ้านที่ใกล้ที่สุด (เคเอ็นเอ็น). คุณสามารถใช้คอนเทนเนอร์ที่ SageMaker จัดหาให้ได้โดยตรงในขณะที่ใช้อัลกอริทึมเหล่านี้โดยไม่ต้องสร้างคอนเทนเนอร์ที่คุณกำหนดเอง

ไดอะแกรมต่อไปนี้เป็นภาพประกอบแบบง่ายของวิธีที่คุณสามารถโฮสต์แบบจำลองหลายรุ่น (สำหรับโพสต์นี้ หกรุ่น) โดยใช้จุดปลายหลายรุ่นของ SageMaker ในทางปฏิบัติ ตำแหน่งข้อมูลหลายรุ่นสามารถรองรับโมเดล ML ได้หลายร้อยถึงหมื่นหลังจุดสิ้นสุด ในสถาปัตยกรรมของเรา หากเราโฮสต์โมเดลมากขึ้นโดยใช้สิ่งประดิษฐ์ของโมเดลที่เก็บไว้ใน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) อุปกรณ์ปลายทางหลายรุ่นจะยกเลิกการโหลดโมเดลที่ใช้งานน้อยที่สุดบางรุ่นแบบไดนามิกเพื่อรองรับรุ่นที่ใหม่กว่า

ในโพสต์นี้ เราจะแสดงวิธีโฮสต์โมเดลคอมพิวเตอร์วิชันซิสเต็มสองรุ่นที่ได้รับการฝึกฝนโดยใช้เฟรมเวิร์ก TensorFlow ที่อยู่เบื้องหลังตำแหน่งข้อมูลหลายรุ่นของ SageMaker เดียว เราใช้ การให้บริการ TensorFlow คอนเทนเนอร์ที่เปิดใช้งานสำหรับปลายทางหลายรุ่นเพื่อโฮสต์โมเดลเหล่านี้ สำหรับรุ่นแรกของเรา เราฝึกรุ่นที่เล็กกว่าของ อเล็กซ์เน็ต ซีเอ็นเอ็น เพื่อจำแนกภาพจาก images ซิฟาร์ -10 ชุดข้อมูล สำหรับรุ่นที่สอง เราใช้ a วีจีจี16 โมเดล CNN ได้รับการฝึกฝนบน on อิมเมจเน็ต ชุดข้อมูลและปรับแต่งบน ชุดข้อมูลตัวเลขภาษามือ เพื่อจำแนกภาพสัญลักษณ์มือ นอกจากนี้เรายังมีฟังก์ชั่นครบครัน สมุดบันทึก เพื่อแสดงทุกขั้นตอน

รุ่น 1: การจัดประเภทภาพ CIFAR-10

CIFAR-10 เป็นชุดข้อมูลมาตรฐานสำหรับการจำแนกประเภทภาพในคอมพิวเตอร์วิทัศน์และ ML ภาพ CIFAR ถูกลงสี (สามช่องสัญญาณ) โดยมีความแตกต่างอย่างมากในรูปลักษณ์ของวัตถุ ประกอบด้วยภาพสี 32 × 32 ใน 10 คลาส โดยมี 6,000 ภาพต่อคลาส ประกอบด้วยภาพการฝึก 50,000 ภาพและภาพทดสอบ 10,000 ภาพ รูปภาพต่อไปนี้แสดงตัวอย่างรูปภาพที่จัดกลุ่มตามป้ายกำกับ

ในการสร้างตัวแยกประเภทรูปภาพ เราใช้ AlexNet CNN รุ่นคลาสสิกที่เรียบง่าย เครือข่ายประกอบด้วยชั้น Convolutional และ Pooling จำนวน XNUMX ชั้น และชั้นที่เชื่อมต่อกันทั้งหมด XNUMX ชั้น สถาปัตยกรรมแบบง่ายของเราประกอบด้วยเลเยอร์แบบโค้งสามชั้นและสองชั้น (หนาแน่น) ที่เชื่อมต่ออย่างสมบูรณ์

ขั้นตอนแรกคือการโหลดชุดข้อมูลลงในรถไฟและวัตถุทดสอบ กรอบงาน TensorFlow จัดเตรียมชุดข้อมูล CIFAR ให้เราโหลดโดยใช้เมธอด load_data() ต่อไป เราปรับขนาดภาพอินพุตโดยหารค่าพิกเซลด้วย 255: [0,255] ⇒ [0,1] เรายังต้องเตรียมฉลากโดยใช้ การเข้ารหัสแบบร้อนครั้งเดียว การเข้ารหัสแบบร้อนอย่างหนึ่งคือกระบวนการที่ตัวแปรหมวดหมู่ถูกแปลงเป็นรูปแบบตัวเลข ข้อมูลโค้ดต่อไปนี้แสดงขั้นตอนเหล่านี้ในการดำเนินการ:

from tensorflow.keras.datasets import cifar10 # load dataset
(X_train, y_train), (X_test, y_test) = cifar10.load_data() # rescale input images
X_train = X_train.astype('float32')/255
X_test = X_test.astype('float32')/255 # one hot encode target labels
num_classes = len(np.unique(y_train))
y_train = utils.to_categorical(y_train, num_classes)
y_test = utils.to_categorical(y_test, num_classes)

หลังจากเตรียมชุดข้อมูลและพร้อมสำหรับการฝึกอบรมแล้ว SageMaker จะบันทึกชุดข้อมูลดังกล่าวลงใน Amazon S3 สถาปัตยกรรมแบบจำลองและรหัสการฝึกอบรมสำหรับตัวแยกประเภทรูปภาพถูกประกอบเป็นสคริปต์การฝึกอบรม (cifar_train.py). ในการสร้างชุดข้อมูลภาพเทนเซอร์สำหรับกระบวนการฝึกอบรม เราใช้ ImageDataGenerator ซึ่งช่วยให้เราใช้การแปลงข้อมูลเสริม เช่น การหมุน ความกว้าง และความสูง กับข้อมูลการฝึกของเรา

ในขั้นตอนต่อไป เราใช้สคริปต์การฝึกอบรมเพื่อสร้างตัวประมาณ TensorFlow โดยใช้ SageMaker SDK (ดูโค้ดต่อไปนี้) เราใช้ตัวประมาณเพื่อให้พอดีกับโมเดล CNN บนอินพุต CIFAR-10 เมื่อการฝึกอบรมเสร็จสิ้น โมเดลจะถูกบันทึกไว้ใน Amazon S3

from sagemaker.tensorflow import TensorFlow model_name = 'cifar-10' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'cifar_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'model_dir': f'/opt/ml/model', 'role': role, 'hyperparameters': hyperparameters, 'output_path': f's3://{BUCKET}/{PREFIX}/cifar_10/out', 'base_job_name': f'mme-cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_1 = TensorFlow(**estimator_parameters) estimator_1.fit(inputs)

ต่อมา เราสาธิตวิธีการโฮสต์โมเดลนี้โดยใช้จุดสิ้นสุดหลายโมเดลของ SageMaker ควบคู่ไปกับโมเดลที่สองของเรา (ตัวแยกประเภทตัวเลขภาษามือ)

แบบที่ 2: การจำแนกตัวเลขภาษามือ

สำหรับรุ่นที่สองของเรา เราใช้ชุดข้อมูลตัวเลขภาษามือ ชุดข้อมูลนี้แยกความแตกต่างของตัวเลขภาษามือจาก 0–9 รูปภาพต่อไปนี้แสดงตัวอย่างของชุดข้อมูล

ชุดข้อมูลประกอบด้วยรูปภาพ 100 x 100 สี RGB และมี 10 คลาส (ตัวเลข 0–9) ชุดฝึกอบรมประกอบด้วย 1,712 ภาพ ชุดตรวจสอบความถูกต้อง 300 และชุดทดสอบ 50

ชุดข้อมูลนี้มีขนาดเล็กมาก การฝึกเครือข่ายตั้งแต่เริ่มต้นบนชุดข้อมูลขนาดเล็กนี้ไม่ได้ผลลัพธ์ที่ดี เพื่อให้ได้ความแม่นยำที่สูงขึ้น เราใช้ โอน การเรียนรู้. การโอนย้ายการเรียนรู้มักเป็นแนวทางปฏิบัติเมื่อเริ่มต้นโครงการจัดหมวดหมู่ โดยเฉพาะอย่างยิ่งเมื่อคุณไม่มีข้อมูลการฝึกอบรมมากนัก โดยจะย้ายความรู้ที่เรียนรู้จากชุดข้อมูลต้นทางไปยังชุดข้อมูลเป้าหมาย เพื่อประหยัดเวลาในการฝึกอบรมและค่าใช้จ่ายในการคำนวณ

ในการฝึกโมเดลนี้ เราใช้โมเดล VGG16 CNN ที่ได้รับการฝึกฝนล่วงหน้าซึ่งฝึกฝนบนชุดข้อมูล ImageNet และปรับแต่งให้ทำงานกับชุดข้อมูลตัวเลขภาษามือของเรา โมเดลที่ได้รับการฝึกอบรมล่วงหน้าคือเครือข่ายที่ได้รับการฝึกอบรมมาก่อนหน้านี้เกี่ยวกับชุดข้อมูลขนาดใหญ่ ซึ่งโดยทั่วไปแล้วจะเป็นงานการจำแนกรูปภาพขนาดใหญ่ สถาปัตยกรรมโมเดล VGG16 ที่เราใช้มีทั้งหมด 13 เลเยอร์แบบ Convolutional สำหรับชุดข้อมูลภาษามือ เนื่องจากโดเมนนั้นแตกต่างจากโดเมนต้นทางของชุดข้อมูล ImageNet เราจึงปรับแต่งเฉพาะเลเยอร์สองสามชั้นสุดท้ายเท่านั้น การปรับละเอียดในที่นี้หมายถึงการหยุดเลเยอร์เครือข่ายบางส่วนที่ใช้สำหรับการดึงข้อมูลคุณลักษณะ และร่วมกันฝึกอบรมทั้งเลเยอร์ที่ไม่ตรึงไว้และเลเยอร์ตัวแยกประเภทที่เพิ่มใหม่ของโมเดลที่ได้รับการฝึก

สคริปต์การฝึกอบรม (sign_ language_train.py) สรุปสถาปัตยกรรมแบบจำลองและตรรกะการฝึกอบรมสำหรับตัวแยกประเภทตัวเลขภาษามือ อันดับแรก เราโหลดตุ้มน้ำหนักที่ฝึกไว้ล่วงหน้าจากเครือข่าย VGG16 ที่ฝึกบนชุดข้อมูล ImageNet ต่อไป เราตรึงส่วนของส่วนแยกคุณลักษณะ ตามด้วยการเพิ่มเลเยอร์ตัวแยกประเภทใหม่ สุดท้าย เรารวบรวมเครือข่ายและเรียกใช้กระบวนการฝึกอบรมเพื่อปรับโมเดลให้เหมาะสมสำหรับชุดข้อมูลที่มีขนาดเล็กลง

ต่อไป เราใช้สคริปต์การฝึกอบรมนี้เพื่อสร้างตัวประมาณ TensorFlow โดยใช้ SageMaker SDK ตัวประมาณนี้ใช้เพื่อให้พอดีกับตัวแยกประเภทตัวเลขภาษามือบนอินพุตที่ให้มา เมื่อการฝึกอบรมเสร็จสิ้น โมเดลจะถูกบันทึกไว้ใน Amazon S3 เพื่อโฮสต์โดยตำแหน่งข้อมูลหลายรุ่นของ SageMaker ดูรหัสต่อไปนี้:

model_name = 'sign-language' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'sign_language_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'hyperparameters': hyperparameters, 'model_dir': f'/opt/ml/model', 'role': role, 'output_path': f's3://{BUCKET}/{PREFIX}/sign_language/out', 'base_job_name': f'cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_2 = TensorFlow(**estimator_parameters) estimator_2.fit({'train': train_input, 'val': val_input})

ปรับใช้ปลายทางหลายรุ่นmodel

จุดปลายหลายรุ่นของ SageMaker มอบโซลูชันที่ปรับขนาดได้และคุ้มค่าในการปรับใช้รุ่นจำนวนมาก มันใช้คอนเทนเนอร์ที่ให้บริการที่ใช้ร่วมกันที่เปิดใช้งานเพื่อโฮสต์หลายรุ่น ซึ่งช่วยลดต้นทุนการโฮสต์ด้วยการปรับปรุงการใช้งานจุดสิ้นสุดเมื่อเปรียบเทียบกับการใช้ปลายทางแบบรุ่นเดียว นอกจากนี้ยังลดค่าใช้จ่ายในการปรับใช้เนื่องจาก SageMaker จัดการโมเดลการโหลดในหน่วยความจำและปรับขนาดตามรูปแบบการรับส่งข้อมูล

ในการสร้างจุดสิ้นสุดแบบหลายรุ่น อันดับแรก เราต้องคัดลอกแบบจำลองที่ผ่านการฝึกอบรมสำหรับผู้ประมาณค่าแต่ละรายการ (1 และ 2) จากตำแหน่ง S3 ที่บันทึกไว้ไปยังคำนำหน้า S3 ทั่วไปที่ตำแหน่งข้อมูลหลายรุ่นสามารถใช้ได้

tf_model_1 = estimator_1.model_data
output_1 = f's3://{BUCKET}/{PREFIX}/mme/cifar.tar.gz' tf_model_2 = estimator_2.model_data
output_2 = f's3://{BUCKET}/{PREFIX}/mme/sign-language.tar.gz' !aws s3 cp {tf_model_1} {output_1}
!aws s3 cp {tf_model_2} {output_2}

หลังจากที่คัดลอกโมเดลไปยังตำแหน่งทั่วไปที่กำหนดโดยคำนำหน้า S3 แล้ว เราจะสร้างโมเดลการให้บริการโดยใช้คลาส TensorFlowModel จาก SageMaker SDK โมเดลการแสดงผลถูกสร้างขึ้นสำหรับหนึ่งในโมเดลที่จะโฮสต์ภายใต้ปลายทางแบบหลายโมเดล ในกรณีนี้ เราใช้โมเดลแรก (ตัวแยกประเภทรูปภาพ CIFAR-10) ต่อไป เราใช้คลาส MultiDataModel จาก SageMaker SDK เพื่อสร้างโมเดลข้อมูลแบบหลายโมเดลโดยใช้โมเดลการให้บริการสำหรับ model-1 ซึ่งเราสร้างในขั้นตอนก่อนหน้านี้:

from sagemaker.tensorflow.serving import TensorFlowModel
from sagemaker.multidatamodel import MultiDataModel model_1 = TensorFlowModel(model_data=output_1, role=role, image_uri=IMAGE_URI) mme = MultiDataModel(name=f'mme-tensorflow-{current_time}', model_data_prefix=model_data_prefix, model=model_1, sagemaker_session=sagemaker_session)

สุดท้าย เราปรับใช้ MultiDataModel โดยการเรียกเมธอด deploy() โดยให้แอตทริบิวต์ที่จำเป็นในการสร้างโครงสร้างพื้นฐานการโฮสต์ที่จำเป็นในการสนับสนุนจุดสิ้นสุดแบบหลายรุ่น:

predictor = mme.deploy(initial_instance_count=2, instance_type='ml.m5.2xlarge', endpoint_name=f'mme-tensorflow-{current_time}')

การโทรปรับใช้จะส่งคืนอินสแตนซ์ตัวทำนาย ซึ่งเราสามารถใช้เพื่อทำการอนุมานได้ เราจะเห็นสิ่งนี้ในหัวข้อถัดไป

ทดสอบจุดสิ้นสุดแบบหลายโมเดลสำหรับการอนุมานแบบเรียลไทม์

ตำแหน่งข้อมูลหลายรุ่นช่วยให้สามารถแชร์ทรัพยากรหน่วยความจำในรุ่นต่างๆ ของคุณได้ หากโมเดลที่จะอ้างอิงถูกแคชไว้แล้ว ปลายทางหลายรุ่นจะทำการอนุมานทันที ในทางกลับกัน หากโมเดลที่ร้องขอไม่ได้ถูกแคชไว้ SageMaker จะต้องดาวน์โหลดโมเดล ซึ่งจะทำให้เวลาในการตอบสนองเพิ่มขึ้นสำหรับคำขอเริ่มต้นนั้น อย่างไรก็ตาม ใช้เวลาเพียงเศษเสี้ยวของเวลาที่ใช้ในการเปิดตัวโครงสร้างพื้นฐานใหม่ทั้งหมด (อินสแตนซ์) เพื่อโฮสต์โมเดลทีละรายการบน SageMaker หลังจากแคชโมเดลในปลายทางแบบหลายโมเดลแล้ว คำขอที่ตามมาจะเริ่มต้นแบบเรียลไทม์ (เว้นแต่ว่าโมเดลจะถูกลบออก) ด้วยเหตุนี้ คุณสามารถเรียกใช้โมเดลจำนวนมากจากอินสแตนซ์เดียว แยกจำนวนโมเดลของเราออกจากค่าใช้จ่ายในการปรับใช้ของเราได้อย่างมีประสิทธิภาพ สิ่งนี้ทำให้ง่ายต่อการจัดการการปรับใช้ ML ตามขนาด และลดต้นทุนการปรับใช้โมเดลของคุณผ่านการใช้งานที่เพิ่มขึ้นของปลายทางและอินสแตนซ์การประมวลผลพื้นฐาน สำหรับข้อมูลเพิ่มเติมและการสาธิตการประหยัดต้นทุนกว่า 90% สำหรับตัวอย่างรุ่น 1,000 โปรดดูที่ ประหยัดค่าใช้จ่ายในการอนุมานโดยใช้ตำแหน่งข้อมูลหลายรุ่นของ Amazon SageMaker.

ตำแหน่งข้อมูลหลายรุ่นยังยกเลิกการโหลดโมเดลที่ไม่ได้ใช้ออกจากคอนเทนเนอร์เมื่ออินสแตนซ์ที่สำรองปลายทางมีความจุของหน่วยความจำและจำเป็นต้องโหลดโมเดลเพิ่มเติมลงในคอนเทนเนอร์ SageMaker จะลบสิ่งประดิษฐ์ของโมเดลที่ไม่ได้ใช้ออกจากโวลุ่มพื้นที่จัดเก็บอินสแตนซ์เมื่อปริมาณถึงความจุและจำเป็นต้องดาวน์โหลดโมเดลใหม่ การเรียกใช้ครั้งแรกไปยังโมเดลที่เพิ่มใหม่ใช้เวลานานกว่า เนื่องจากปลายทางใช้เวลาในการดาวน์โหลดโมเดลจาก Amazon S3 ไปยังหน่วยความจำคอนเทนเนอร์ของอินสแตนซ์ที่สำรองตำแหน่งข้อมูลหลายรุ่น โมเดลที่ยกเลิกการโหลดจะยังคงอยู่ในโวลุ่มพื้นที่เก็บข้อมูลของอินสแตนซ์ และสามารถโหลดลงในหน่วยความจำของคอนเทนเนอร์ได้ในภายหลังโดยไม่ต้องดาวน์โหลดอีกครั้งจากบัคเก็ต S3

มาดูวิธีการอนุมานจากตัวแยกประเภทรูปภาพ CIFAR-10 (model-1) ที่โฮสต์ภายใต้ปลายทางแบบหลายรุ่น อันดับแรก เราโหลดภาพตัวอย่างจากคลาสใดคลาสหนึ่ง—เครื่องบิน— และเตรียมส่งไปยังปลายทางแบบหลายโมเดลโดยใช้ตัวทำนายที่เราสร้างขึ้นในขั้นตอนก่อนหน้า

ด้วยตัวทำนายนี้ เราสามารถเรียกวิธีการทำนาย () พร้อมกับพารามิเตอร์ initial_args ซึ่งระบุชื่อของโมเดลเป้าหมายที่จะเรียกใช้ ในกรณีนี้ โมเดลเป้าหมายคือ cifar.tar.gz ตัวอย่างต่อไปนี้สาธิตกระบวนการนี้โดยละเอียด:

img = load_img('./data/cifar_10/raw_images/airplane.png', target_size=(32, 32))
data = img_to_array(img)
data = data.astype('float32')
data = data / 255.0
data = data.reshape(1, 32, 32, 3)
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'cifar.tar.gz'})
predicted_label = CIFAR10_LABELS[np.argmax(y_pred)]
print(f'Predicted Label: [{predicted_label}]')

การรันโค้ดก่อนหน้าจะส่งคืนเอาต์พุตการคาดคะเนเป็นเครื่องบินเลเบล ซึ่งถูกตีความอย่างถูกต้องโดยโมเดลที่ให้บริการของเรา:

Predicted Label: [airplane]

ต่อไป เรามาดูวิธีการโหลดตัวแยกประเภทตัวเลขภาษามือ (model-2) แบบไดนามิกลงในตำแหน่งข้อมูลหลายรุ่นโดยเรียกใช้ปลายทางด้วย sign-language.tar.gz เป็นโมเดลเป้าหมาย

เราใช้ภาพตัวอย่างต่อไปนี้ของเครื่องหมายมือหมายเลข 0

ข้อมูลโค้ดต่อไปนี้แสดงวิธีเรียกใช้ปลายทางแบบหลายรุ่นด้วยรูปภาพตัวอย่างเพื่อรับการตอบสนองที่ถูกต้อง:

test_path = './data/sign_language/test'
img = mpimg.imread(f'{test_path}/0/IMG_4159.JPG') def path_to_tensor(img_path): # loads RGB image as PIL.Image.Image type img = image.load_img(img_path, target_size=(224, 224)) # convert PIL.Image.Image type to 3D tensor with shape (224, 224, 3) x = image.img_to_array(img) # convert 3D tensor to 4D tensor with shape (1, 224, 224, 3) and return 4D tensor return np.expand_dims(x, axis=0) data = path_to_tensor(f'{test_path}/0/IMG_4159.JPG')
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'sign-language.tar.gz'})predicted_label = np.argmax(y_pred)
print(f'Predicted Label: [{predicted_label}]')

รหัสต่อไปนี้คือคำตอบของเรา โดยมีป้ายกำกับ 0:

Predicted Label: [0]

สรุป

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

โพสต์นี้กล่าวถึงวิธีการโฮสต์โมเดลคอมพิวเตอร์วิทัศน์หลายตัวที่ได้รับการฝึกฝนโดยใช้เฟรมเวิร์ก TensorFlow ภายใต้ปลายทางหลายรุ่นของ SageMaker โมเดลการจัดประเภทรูปภาพมีสถาปัตยกรรมแบบจำลองที่แตกต่างกันและได้รับการฝึกฝนบนชุดข้อมูลที่แตกต่างกัน สมุดบันทึก รวมอยู่ในโพสต์ให้คำแนะนำโดยละเอียดเกี่ยวกับการฝึกอบรมและการโฮสต์โมเดล

ลองใช้จุดปลายหลายรุ่นของ SageMaker สำหรับกรณีการใช้งานของคุณและแสดงความคิดเห็นในความคิดเห็น


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

อรุณประศาสน์ เป็นสถาปนิกโซลูชันผู้เชี่ยวชาญด้านปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง (AI/ML) กับ AWS ซึ่งช่วยให้ลูกค้าทั่วโลกปรับขนาดโซลูชัน AI ของตนในระบบคลาวด์ได้อย่างมีประสิทธิภาพและประสิทธิผล ในเวลาว่าง อรุณชอบดูหนังไซไฟและฟังเพลงคลาสสิก

มาร์ครอย Ro เป็น Principal Machine Learning Architect สำหรับ AWS ซึ่งช่วยลูกค้า AWS ออกแบบและสร้างโซลูชัน AI/ML งานของ Mark ครอบคลุมกรณีการใช้งาน ML ที่หลากหลาย โดยมีความสนใจหลักในด้านการมองเห็นคอมพิวเตอร์ การเรียนรู้เชิงลึก และการปรับขนาด ML ทั่วทั้งองค์กร เขาได้ช่วยเหลือบริษัทต่างๆ ในหลายอุตสาหกรรม รวมถึงการประกันภัย บริการทางการเงิน สื่อและความบันเทิง การดูแลสุขภาพ สาธารณูปโภค และการผลิต Mark มีใบรับรอง AWS หกใบ รวมถึง ML Specialty Certification ก่อนร่วมงานกับ AWS Mark เคยเป็นสถาปนิก นักพัฒนา และผู้นำด้านเทคโนโลยีมากกว่า 25 ปี รวมถึง 19 ปีในด้านบริการทางการเงิน

ที่มา: https://aws.amazon.com/blogs/machine-learning/host-multiple-tensorflow-computer-vision-models-using-amazon-sagemaker-multi-model-endpoints/

ประทับเวลา:

เพิ่มเติมจาก บล็อก AWS Machine Learning