การปรับใช้โมเดลตามขนาดอาจเป็นงานที่ยุ่งยากสำหรับนักวิทยาศาสตร์ข้อมูลและวิศวกรการเรียนรู้ของเครื่อง อย่างไรก็ตาม ตำแหน่งข้อมูล Amazon SageMaker เป็นโซลูชันง่ายๆ สำหรับการปรับใช้และปรับขนาดการอนุมานโมเดลแมชชีนเลิร์นนิง (ML) ของคุณ สุดท้ายของเรา โพสต์บล็อก และ repo GitHub ในการเป็นเจ้าภาพก โยลอฟ5 TensorFlowModel
on อเมซอน SageMaker ปลายทาง จุดประกายความสนใจอย่างมากจากผู้อ่านของเรา ผู้อ่านหลายคนสนใจที่จะเรียนรู้วิธีโฮสต์โมเดล YOLOv5 โดยใช้ PyTorch
. เพื่อแก้ไขปัญหานี้และด้วยการเปิดตัวล่าสุดของ โยลอฟ8 แบบจำลองจาก อุลตร้าไลติกส์เรานำเสนอโพสต์นี้เกี่ยวกับวิธีโฮสต์ YOLOv8 PyTorchModel
บนจุดสิ้นสุดของ SageMaker โมเดล YOLOv8 ซึ่งเผยแพร่ภายใต้ลิขสิทธิ์ GNU GPL3 เป็นโมเดลการตรวจจับวัตถุที่ได้รับความนิยม ซึ่งเป็นที่รู้จักในด้านประสิทธิภาพรันไทม์รวมถึงความแม่นยำในการตรวจจับ ตำแหน่งข้อมูล Amazon SageMaker มอบโซลูชันที่ปรับขนาดได้ง่ายและปรับต้นทุนให้เหมาะสมสำหรับการปรับใช้โมเดล
ภาพรวมโซลูชัน
รูปภาพต่อไปนี้สรุปบริการของ AWS ที่ใช้ในการโฮสต์โมเดล YOLOv8 โดยใช้ตำแหน่งข้อมูล SageMaker และเรียกใช้ตำแหน่งข้อมูลในฐานะผู้ใช้ วิธีแก้ปัญหาใช้ การก่อตัวของ AWS Cloud เพื่อสร้างอินสแตนซ์ SageMaker โดยอัตโนมัติและโคลนของเรา GitHub พื้นที่เก็บข้อมูลไปยังอินสแตนซ์ โน้ตบุ๊ก SageMaker เข้าถึงและดาวน์โหลดโมเดล YOLOv8 PyTorch และจัดเก็บรหัสการอนุมานแบบกำหนดเองพร้อมกับโมเดลใน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon ที่เก็บข้อมูล (Amazon S3) ขั้นตอนภายในสมุดบันทึกเน้นที่การสร้างจุดสิ้นสุด SageMaker ที่โฮสต์โมเดล YOLOv8 PyTorch และรหัสการอนุมานแบบกำหนดเอง สมุดบันทึกยังสาธิตวิธีทดสอบจุดสิ้นสุดและพล็อตผลลัพธ์ การแก้ปัญหาประกอบด้วยขั้นตอนต่อไปนี้:
- เราได้สร้างที่เก็บ GitHub ด้วยโน้ตบุ๊กสองเครื่อง
1_DeployEndpoint.ipynb
และ2_TestEndpoint.ipynb
ภายใต้sm-notebook/
ไดเรกทอรี - เรียกใช้เทมเพลต AWS CloudFormation สร้างอินสแตนซ์ SageMaker Notebook จากนั้นโคลนที่เก็บ GitHub
- คอมพิวเตอร์พกพา
1_DeployEndpoint.ipynb
ใช้เพื่อดาวน์โหลดโมเดล YOLOv8 - โมเดล YOLOv8 และรหัสอนุมานถูกจัดเก็บเป็น
model.tar.gz
ใน Amazon S3 - ตำแหน่งข้อมูล SageMaker สร้างขึ้นโดยการโฮสต์
model.tar.gz
. - คอมพิวเตอร์พกพา
2_TestEndpoint.ipynb
ใช้เพื่อทดสอบจุดสิ้นสุดและรวบรวมผลลัพธ์
เบื้องต้น
บัญชี AWS กับ บทบาท AWS Identity and Access Management (IAM) ที่ให้การเข้าถึง:
- การก่อตัวของ AWS Cloud
- อเมซอน SageMaker
- Amazon S3
1. โฮสต์ YOLOv8 บนตำแหน่งข้อมูล SageMaker
Ultralytics มี YOLOv8 หลายรุ่นพร้อมความสามารถที่แตกต่างกัน แบ่งออกเป็นดังต่อไปนี้:
- การตรวจจับวัตถุ (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - การแบ่งกลุ่ม (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - การจัดหมวดหมู่ (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
ในบล็อกนี้ เรามุ่งเน้นไปที่การตรวจจับวัตถุโดยใช้ yolov8l.pt
รุ่น PyTorch ในการโฮสต์โมเดล YOLOv8 และรหัสการอนุมานแบบกำหนดเองบนตำแหน่งข้อมูล SageMaker จำเป็นต้องบีบอัดข้อมูลเหล่านี้เข้าด้วยกันเป็นรายการเดียว model.tar.gz
โดยมีโครงสร้างดังนี้
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
น้ำหนักของโมเดล yolov8l.pt
ไฟล์ต้องอยู่นอก code/
ไดเรกทอรีและสคริปต์หลามอนุมานหลัก inference.py
ซึ่งประกอบด้วยฟังก์ชันที่จำเป็นสำหรับการโหลดโมเดล แยกวิเคราะห์อินพุต รันการอนุมาน และประมวลผลเอาต์พุตภายหลัง ควรอยู่ภายใต้ code/
ไดเรกทอรี รายละเอียดเพิ่มเติมที่ inference.py
จะนำเสนอในหัวข้อต่อไปนี้
1.1. รหัสอนุมานที่กำหนดเอง
ขึ้นอยู่กับไปป์ไลน์และเวิร์กโฟลว์โค้ดของคุณ อินพุตและเอาต์พุตจากตำแหน่งข้อมูล SageMaker อาจแตกต่างกันไป ในโพสต์นี้ เราขอนำเสนอขั้นตอนการผ่าน ก numpy
อาร์เรย์ไปยังปลายทางและการประมวลผล อย่างไรก็ตาม อินพุตไปยังจุดสิ้นสุดสามารถเป็นได้ json
หรือข้อความได้เช่นกัน ขึ้นอยู่กับเวิร์กโฟลว์ของคุณ คุณต้องปรับเปลี่ยนฟังก์ชันใน inference.py
เพื่อรองรับอินพุตและเอาต์พุตที่แตกต่างกัน นอกจากนี้ ด้วยการเปิดตัว YOLOv8 ล่าสุด ทีม Ultralytics ได้เปิดตัว Python API ซึ่งช่วยให้เราสามารถติดตั้งไลบรารี YOLO ได้โดยตรงผ่าน requirements.txt
และนำเข้าโมเดล inference.py
.
1.1.1. เนื้อหาของ code/inference.py
:
import numpy as np
import torch, os, json, io, cv2, time
from ultralytics import YOLO def model_fn(model_dir): print("Executing model_fn from inference.py ...") env = os.environ model = YOLO("/opt/ml/model/code/" + env['YOLOV8_MODEL']) return model def input_fn(request_body, request_content_type): print("Executing input_fn from inference.py ...") if request_content_type: jpg_original = np.load(io.BytesIO(request_body), allow_pickle=True) jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8) img = cv2.imdecode(jpg_as_np, flags=-1) else: raise Exception("Unsupported content type: " + request_content_type) return img def predict_fn(input_data, model): print("Executing predict_fn from inference.py ...") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) with torch.no_grad(): result = model(input_data) return result def output_fn(prediction_output, content_type): print("Executing output_fn from inference.py ...") infer = {} for result in prediction_output: if result.boxes: infer['boxes'] = result.boxes.numpy().data.tolist() if result.masks: infer['masks'] = result.masks.numpy().data.tolist() if result.probs: infer['probs'] = result.probs.numpy().data.tolist() return json.dumps(infer)
1.1.2. เนื้อหาของ code/requirements.txt
:
เมื่อเนื้อหาไฟล์ทั้งหมดสำหรับ model.tar.gz
เสร็จสิ้น ให้รันคำสั่งต่อไปนี้เพื่อสร้าง tar ball:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. โฮสต์ model.tar.gz
ไปยังจุดสิ้นสุดของ SageMaker:
นี้เกี่ยวข้องกับบางขั้นตอนที่ model.tar.gz
จะถูกอัปโหลดไปยังบัคเก็ต S3 เป็นครั้งแรก สิ่งประดิษฐ์ที่อัปโหลดใช้เพื่อสร้าง SageMaker PyTorchModel และสุดท้าย PyTorchModel นี้ใช้เพื่อปรับใช้โมเดลกับ SageMaker Endpoint
1.2.1. อัปโหลดโมเดลและรหัสอนุมานไปยัง S3:
from sagemaker import s3 bucket = "s3://NAME_OF_BUCKET"
prefix = "yolov8/demo-custom-endpoint"
model_data = s3.S3Uploader.upload("model.tar.gz", bucket + "/" + prefix)
1.2.2. สร้าง SageMaker PyTorchModel:
from sagemaker.pytorch import PyTorchModel model_name = 'yolov8l.pt' model = PyTorchModel(entry_point='inference.py', model_data=model_data, framework_version='1.12', py_version='py38', role=role, env={'TS_MAX_RESPONSE_SIZE':'20000000', 'YOLOV8_MODEL': model_name}, sagemaker_session=sess)
1.2.3. รวบรวมและโฮสต์โมเดลไปยังจุดสิ้นสุด:
from sagemaker.deserializers import JSONDeserializer INSTANCE_TYPE = 'ml.m5.4xlarge'
ENDPOINT_NAME = 'yolov8-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f')) predictor = model.deploy(initial_instance_count=1, instance_type=INSTANCE_TYPE, deserializer=JSONDeserializer(), endpoint_name=ENDPOINT_NAME)
2. ทดสอบจุดสิ้นสุดของ SageMaker
เมื่อปลายทางได้รับการโฮสต์เรียบร้อยแล้ว จะสามารถใช้เพื่อเรียกใช้การอนุมานได้ ในขั้นตอนนี้ เราจะอ่านอิมเมจก่อน แปลงเป็นไบต์ และเรียกใช้การอนุมานโดยส่งไบต์เป็นอินพุตไปยังจุดสิ้นสุด ผลลัพธ์ที่สร้างขึ้นจะมีกรอบหรือมาสก์หรือคะแนนความเชื่อมั่นตามประเภทของโมเดล YOLOv8 ที่ใช้สำหรับการโฮสต์ ผลลัพธ์สามารถลงจุดตามนั้น
2.1.1. สร้างผลการอนุมานและผลลัพธ์ของพล็อต:
import cv2, random
import numpy as np
import matplotlib.pyplot as plt orig_image = cv2.imread('bus.jpg') image_height, image_width, _ = orig_image.shape
model_height, model_width = 300, 300
x_ratio = image_width/model_width
y_ratio = image_height/model_height resized_image = cv2.resize(orig_image, (model_height, model_width))
payload = cv2.imencode('.jpg', resized_image)[1].tobytes()
result = predictor.predict(payload) if 'boxes' in result: for idx,(x1,y1,x2,y2,conf,lbl) in enumerate(result['boxes']): # Draw Bounding Boxes x1, x2 = int(x_ratio*x1), int(x_ratio*x2) y1, y2 = int(y_ratio*y1), int(y_ratio*y2) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.rectangle(orig_image, (x1,y1), (x2,y2), color, 4) cv2.putText(orig_image, f"Class: {int(lbl)}", (x1,y1-40), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) cv2.putText(orig_image, f"Conf: {int(conf*100)}", (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) if 'masks' in result: # Draw Masks mask = cv2.resize(np.asarray(result['masks'][idx]), dsize=(image_width, image_height), interpolation=cv2.INTER_CUBIC) for c in range(3): orig_image[:,:,c] = np.where(mask>0.5, orig_image[:,:,c]*(0.5)+0.5*color[c], orig_image[:,:,c]) if 'probs' in result: # Find Class lbl = result['probs'].index(max(result['probs'])) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.putText(orig_image, f"Class: {int(lbl)}", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) plt.imshow(cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB))
plt.show()
2.1.2. ผล:
ผลลัพธ์ของการตรวจจับวัตถุและการแบ่งส่วนโมเดล YOLOv8 แสดงในรูปภาพต่อไปนี้:
3. ทำความสะอาด
การลบสแต็ก CloudFormation จะลบทรัพยากรทั้งหมดที่สร้างขึ้นในตอนแรก อย่างไรก็ตาม ขณะนี้ CloudFormation ไม่ได้กำหนดค่าให้ลบจุดสิ้นสุด การกำหนดค่าจุดสิ้นสุด และโมเดลโดยอัตโนมัติ หากไม่ได้ใช้ปลายทางที่เป็นโฮสต์ แนวทางปฏิบัติที่ดีคือการลบออกเพื่อประหยัดค่าใช้จ่าย สามารถทำได้ดังนี้:
import boto3 sm_client = boto3.client(service_name="sagemaker") response = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_name)
print(response)
endpoint_config_name = response['EndpointConfigName'] # Delete Endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name) # Delete Endpoint Configuration
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) # Delete Model
for prod_var in response['ProductionVariants']: model_name = prod_var['ModelName'] sm_client.delete_model(ModelName=model_name)
สรุป
ในโพสต์นี้ เราได้สาธิตวิธีโฮสต์ YOLOv8 ที่ผ่านการฝึกอบรมมาแล้ว PyTorchModel
บนจุดสิ้นสุดของ SageMaker และทดสอบผลการอนุมานโดยเรียกใช้จุดสิ้นสุด รหัสรายละเอียดมีอยู่ที่ GitHubและเทมเพลต CloudFormation stack ก็มีอยู่บน GitHub เช่นกัน
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตำแหน่งข้อมูล SageMaker โปรดดู สร้างปลายทางของคุณและปรับใช้โมเดลของคุณ และ ใช้ PyTorch กับ Amazon SageMakerซึ่งเน้นการใช้ PyTorchModel
บน SageMaker กระบวนการนี้สามารถทำได้โดยอัตโนมัติโดยใช้ รองรับ CloudFormation สำหรับ SageMaker.
เกี่ยวกับผู้แต่ง
เควิน ซง เป็นนักวิทยาศาสตร์ข้อมูลที่ AWS Professional Services เขาสำเร็จการศึกษาระดับปริญญาเอกด้านชีวฟิสิกส์และมีประสบการณ์ในอุตสาหกรรมมากกว่าห้าปีในการสร้างวิสัยทัศน์คอมพิวเตอร์และโซลูชันการเรียนรู้ของเครื่อง
โรมิล ชาห์ เป็นนักวิทยาศาสตร์ข้อมูล IoT Edge ที่ AWS Professional Services Romil มีประสบการณ์ในอุตสาหกรรมมากกว่าหกปีในด้านคอมพิวเตอร์วิทัศน์ การเรียนรู้ของเครื่อง และอุปกรณ์ IoT edge เขามีส่วนร่วมในการช่วยลูกค้าเพิ่มประสิทธิภาพและปรับใช้โมเดลแมชชีนเลิร์นนิงสำหรับอุปกรณ์เอดจ์ในการตั้งค่าอุตสาหกรรม
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- เพลโตบล็อคเชน Web3 Metaverse ข่าวกรอง ขยายความรู้. เข้าถึงได้ที่นี่.
- ที่มา: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :เป็น
- 1
- 10
- 100
- 7
- a
- เกี่ยวกับเรา
- เข้า
- อำนวยความสะดวก
- ตาม
- ลงชื่อเข้าใช้
- ความถูกต้อง
- นอกจากนี้
- ที่อยู่
- ทั้งหมด
- ช่วยให้
- อเมซอน
- อเมซอน SageMaker
- และ
- API
- เป็น
- แถว
- AS
- At
- โดยอัตโนมัติ
- อัตโนมัติ
- อัตโนมัติ
- ใช้ได้
- AWS
- บริการระดับมืออาชีพของ AWS
- ลูกบอล
- ตาม
- BE
- กำลัง
- ชีวฟิสิกส์
- บล็อก
- ในกล่องสี่เหลี่ยม
- การก่อสร้าง
- รถบัส
- by
- CAN
- ความสามารถในการ
- ตรวจสอบ
- ชั้น
- รหัส
- สี
- COM
- คอมพิวเตอร์
- วิสัยทัศน์คอมพิวเตอร์
- ความมั่นใจ
- องค์ประกอบ
- มี
- เนื้อหา
- เนื้อหา
- แปลง
- ค่าใช้จ่าย
- สร้าง
- ที่สร้างขึ้น
- สร้าง
- การสร้าง
- ขณะนี้
- ประเพณี
- ลูกค้า
- ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- วันเวลา
- แสดงให้เห็นถึง
- แสดงให้เห็นถึง
- ทั้งนี้ขึ้นอยู่กับ
- ปรับใช้
- ปรับใช้
- การใช้งาน
- รายละเอียด
- รายละเอียด
- การตรวจพบ
- เครื่อง
- อุปกรณ์
- ต่าง
- โดยตรง
- กระจาย
- ดาวน์โหลด
- ดาวน์โหลด
- วาด
- อย่างง่ายดาย
- ขอบ
- อย่างมีประสิทธิภาพ
- ทั้ง
- ปลายทาง
- วิศวกร
- การดำเนินงาน
- ประสบการณ์
- สองสาม
- เนื้อไม่มีมัน
- สรุป
- ในที่สุด
- หา
- ชื่อจริง
- โฟกัส
- ดังต่อไปนี้
- ดังต่อไปนี้
- สำหรับ
- ราคาเริ่มต้นที่
- ฟังก์ชั่น
- ต่อไป
- สร้าง
- สร้าง
- GitHub
- ดี
- มี
- การช่วยเหลือ
- เน้น
- ไฮไลท์
- ถือ
- เจ้าภาพ
- เป็นเจ้าภาพ
- โฮสติ้ง
- เจ้าภาพ
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- อย่างไรก็ตาม
- HTML
- HTTPS
- เอกลักษณ์
- IDX
- ภาพ
- ภาพ
- นำเข้า
- in
- อุตสาหกรรม
- อุตสาหกรรม
- อินพุต
- ติดตั้ง
- ตัวอย่าง
- อยากเรียนรู้
- สนใจ
- ร่วมมือ
- IOT
- ปัญหา
- IT
- ITS
- jpg
- JSON
- ที่รู้จักกัน
- ชื่อสกุล
- เรียนรู้
- การเรียนรู้
- ห้องสมุด
- License
- โหลด
- Lot
- เครื่อง
- เรียนรู้เครื่อง
- หลัก
- การจัดการ
- หลาย
- หน้ากาก
- มาสก์
- matplotlib
- ML
- แบบ
- โมเดล
- แก้ไข
- ข้อมูลเพิ่มเติม
- หลาย
- จำเป็นต้อง
- สมุดบันทึก
- มึน
- วัตถุ
- การตรวจจับวัตถุ
- of
- on
- เพิ่มประสิทธิภาพ
- ใบสั่ง
- แต่เดิม
- OS
- โครงร่าง
- เอาท์พุต
- ด้านนอก
- ที่ผ่านไป
- ท่อ
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- กรุณา
- ยอดนิยม
- โพสต์
- การปฏิบัติ
- Predictor
- นำเสนอ
- นำเสนอ
- กระบวนการ
- การประมวลผล
- มืออาชีพ
- ให้
- ให้
- หลาม
- ไฟฉาย
- ยก
- สุ่ม
- อ่าน
- ผู้อ่าน
- เมื่อเร็ว ๆ นี้
- ปล่อย
- การเผยแพร่
- เอาออก
- กรุ
- ความต้องการ
- แหล่งข้อมูล
- คำตอบ
- ผล
- ผลสอบ
- กลับ
- วิ่ง
- วิ่ง
- sagemaker
- ลด
- ที่ปรับขนาดได้
- ขนาด
- ปรับ
- นักวิทยาศาสตร์
- นักวิทยาศาสตร์
- ทะเลบอร์น
- Section
- การแบ่งส่วน
- บริการ
- การติดตั้ง
- รูปร่าง
- น่า
- แสดง
- ง่าย
- เดียว
- หก
- ทางออก
- โซลูชัน
- กอง
- ขั้นตอน
- ขั้นตอน
- การเก็บรักษา
- เก็บไว้
- ร้านค้า
- โครงสร้าง
- ประสบความสำเร็จ
- สนับสนุน
- งาน
- ทีม
- เทมเพลต
- ทดสอบ
- ที่
- พื้นที่
- ของพวกเขา
- เวลา
- ไปยัง
- ร่วมกัน
- ไฟฉาย
- คบเพลิง
- ภายใต้
- อัปโหลด
- us
- ผู้ใช้งาน
- วิสัยทัศน์
- ดี
- ที่
- จะ
- กับ
- ภายใน
- จะ
- ปี
- Yolo
- คุณ
- ของคุณ
- ลมทะเล