รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | อเมซอนเว็บเซอร์วิส

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | อเมซอนเว็บเซอร์วิส

อเมซอน SageMaker คือบริการที่มีการจัดการเต็มรูปแบบซึ่งช่วยให้นักพัฒนาและนักวิทยาศาสตร์ข้อมูลสามารถสร้าง ฝึกอบรม และปรับใช้โมเดลการเรียนรู้ของเครื่อง (ML) ได้อย่างรวดเร็วและง่ายดายในทุกขนาด SageMaker ช่วยให้ปรับใช้โมเดลในการผลิตโดยตรงผ่านการเรียก API ไปยังบริการได้อย่างง่ายดาย โมเดลต่างๆ ได้รับการบรรจุลงในคอนเทนเนอร์เพื่อการปรับใช้ที่มีประสิทธิภาพและปรับขนาดได้ แม้ว่าจะมีจุดเริ่มต้นที่หลากหลาย เช่น SageMaker Python SDK, AWS SDK, คอนโซล SageMaker และ สตูดิโอ Amazon SageMaker โน้ตบุ๊กเพื่อลดความซับซ้อนของกระบวนการฝึกอบรมและการปรับใช้โมเดล ML ในวงกว้าง ลูกค้ายังคงมองหาวิธีที่ดีกว่าในการปรับใช้โมเดลสำหรับการทดสอบสนามเด็กเล่น และเพื่อเพิ่มประสิทธิภาพการใช้งานจริง

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

ในโพสต์นี้ เราขอแนะนำ SageMaker Python SDK ใหม่ ModelBuilder ประสบการณ์ซึ่งมีจุดมุ่งหมายเพื่อลดเส้นโค้งการเรียนรู้สำหรับผู้ใช้ SageMaker ใหม่ เช่น นักวิทยาศาสตร์ข้อมูล ขณะเดียวกันก็ช่วยให้วิศวกร MLOps ที่มีประสบการณ์สามารถใช้ประโยชน์จากบริการโฮสติ้งของ SageMaker ให้เกิดประโยชน์สูงสุด ลดความซับซ้อนของการตั้งค่าเริ่มต้นและการปรับใช้ และโดยการให้คำแนะนำเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ประโยชน์จากความสามารถเต็มรูปแบบของ SageMaker เราให้ข้อมูลโดยละเอียดและตัวอย่าง GitHub สำหรับความสามารถ SageMaker ใหม่นี้

การเปิดตัวใหม่อีกอย่างคือการใช้ประสบการณ์การใช้งานแบบโต้ตอบใหม่ใน SageMaker Studio เราจะหารือเรื่องนี้ในส่วนที่ 2

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

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

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

โดยรวมแล้ว SageMaker ModelBuilder ลดความซับซ้อนและปรับปรุงกระบวนการบรรจุแบบจำลองสำหรับการอนุมานของ SageMaker โดยการจัดการรายละเอียดระดับต่ำ และจัดเตรียมเครื่องมือสำหรับการทดสอบ การตรวจสอบ และการปรับจุดสิ้นสุดให้เหมาะสม สิ่งนี้ช่วยปรับปรุงประสิทธิภาพการทำงานของนักพัฒนาและลดข้อผิดพลาด

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

ทำความรู้จักกับ SageMaker ModelBuilder

ใหม่ ModelBuilder เป็นคลาส Python ที่เน้นไปที่การนำโมเดล ML ที่สร้างขึ้นโดยใช้เฟรมเวิร์ก เช่น XGBoost หรือ PyTorch มาแปลงเป็นโมเดลที่พร้อมสำหรับการใช้งานบน SageMaker ModelBuilder ให้ build() ฟังก์ชั่นซึ่งสร้างสิ่งประดิษฐ์ตามเซิร์ฟเวอร์รุ่นและ deploy() ฟังก์ชั่นเพื่อปรับใช้ภายในเครื่องหรือไปยังจุดสิ้นสุด SageMaker การเปิดตัวฟีเจอร์นี้ทำให้การรวมโมเดลเข้ากับสภาพแวดล้อม SageMaker ง่ายขึ้น โดยปรับให้เหมาะสมเพื่อประสิทธิภาพและความสามารถในการปรับขนาด แผนภาพต่อไปนี้แสดงวิธีการ ModelBuilder ทำงานในระดับสูง

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.

คลาส ModelBuilder

พื้นที่ ModelBuilder คลาสมีตัวเลือกต่าง ๆ สำหรับการปรับแต่ง อย่างไรก็ตาม ในการปรับใช้โมเดลเฟรมเวิร์ก ตัวสร้างโมเดลเพียงคาดหวังโมเดล อินพุต เอาท์พุต และบทบาท:

class ModelBuilder( model, # model id or model object role_arn, # IAM role schema_builder, # defines the input and output mode, # select between local deployment and depoy to SageMaker Endpoints ...
)

SchemaBuilder

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

class SchemaBuilder( sample_input: Any, sample_output: Any, input_translator: CustomPayloadTranslator = None, output_translator: CustomPayloadTranslator = None
)

อย่างไรก็ตาม ในกรณีส่วนใหญ่ เพียงแค่อินพุตและเอาต์พุตตัวอย่างก็ใช้งานได้ ตัวอย่างเช่น:

input = "How is the demo going?"
output = "Comment la démo va-t-elle?"
schema = SchemaBuilder(input, output)

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

ประสบการณ์โหมดท้องถิ่น

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

# Train the model
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")

จากนั้นเราสร้างออบเจ็กต์ ModelBuilder โดยส่งผ่านออบเจ็กต์โมเดลจริง SchemaBuilder ที่ใช้ออบเจ็กต์อินพุตและเอาต์พุตทดสอบตัวอย่าง (อินพุตและเอาต์พุตเดียวกับที่เราใช้เมื่อฝึกอบรมและทดสอบโมเดล) เพื่อสรุปซีเรียลไลซ์ที่จำเป็น โปรดทราบว่าเราใช้ Mode.LOCAL_CONTAINER เพื่อระบุการปรับใช้ภายในเครื่อง หลังจากนั้นเราก็เรียก. สร้าง ฟังก์ชั่นเพื่อระบุอิมเมจคอนเทนเนอร์ของเฟรมเวิร์กที่รองรับโดยอัตโนมัติ รวมถึงสแกนหาการขึ้นต่อกัน ดูรหัสต่อไปนี้:

model_builder_local = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()

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

# note: all the serialization and deserialization is handled by the model builder.
predictor_local = xgb_local_builder.deploy(
# instance_type='ml.c5.xlarge',
# initial_instance_count=1
) # Make prediction for test data. predictor_local.predict(X_test)

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

โปรดดูที่ model-builder-xgboost.ipynb ตัวอย่างเพื่อทดสอบการใช้งานทั้งภายในเครื่องและกับปลายทาง SageMaker โดยใช้ ModelBuilder.

ปรับใช้โมเดลแบบดั้งเดิมกับตำแหน่งข้อมูล SageMaker

ในตัวอย่างต่อไปนี้ เราจะแสดงวิธีการใช้งาน ModelBuilder เพื่อปรับใช้โมเดล ML แบบดั้งเดิม

รุ่น XGBoost

เช่นเดียวกับส่วนก่อนหน้า คุณสามารถปรับใช้โมเดล XGBoost กับตำแหน่งข้อมูล SageMaker ได้โดยการเปลี่ยน mode พารามิเตอร์เมื่อสร้าง ModelBuilder วัตถุ:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, mode=Mode.SAGEMAKER_ENDPOINT
)
xgb_builder = model_builder.build()
predictor = xgb_builder.deploy( instance_type='ml.c5.xlarge', initial_instance_count=1
)

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

โปรดดูที่ model-builder-xgboost.ipynb ตัวอย่างในการปรับใช้โมเดล XGBoost

รุ่นไทรทัน

คุณสามารถใช้ได้ ModelBuilder เพื่อให้บริการโมเดล PyTorch เซิร์ฟเวอร์การอนุมานไทรทัน. เพื่อที่คุณจะต้องระบุ model_server พารามิเตอร์เป็น ModelServer.TRITONผ่านแบบจำลองและมี SchemaBuilder วัตถุซึ่งต้องการอินพุตและเอาต์พุตตัวอย่างจากโมเดล ModelBuilder จะจัดการส่วนที่เหลือให้คุณ

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, model_server=ModelServer.TRITON, mode=Mode.SAGEMAKER_ENDPOINT
) triton_builder = model_builder.build() predictor = triton_builder.deploy( instance_type='ml.g4dn.xlarge', initial_instance_count=1
)

เอ่ยถึง model-builder-triton.ipynb เพื่อปรับใช้โมเดลกับ Triton

โมเดลกอดใบหน้า

ในตัวอย่างนี้ เราจะแสดงวิธีปรับใช้โมเดลหม้อแปลงที่ได้รับการฝึกอบรมล่วงหน้าที่ Hugging Face มอบให้กับ SageMaker เราต้องการใช้ใบหน้ากอด pipeline เพื่อโหลดโมเดล ดังนั้นเราจึงสร้างข้อกำหนดการอนุมานแบบกำหนดเองสำหรับ ModelBuilder:

# custom inference spec with hugging face pipeline
class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return pipeline("translation_en_to_fr", model="t5-small") def invoke(self, input, model): return model(input) inf_spec = MyInferenceSpec()

นอกจากนี้เรายังกำหนดอินพุตและเอาต์พุตของปริมาณงานการอนุมานโดยการกำหนด SchemaBuilder วัตถุขึ้นอยู่กับอินพุตและเอาต์พุตของโมเดล:

schema = SchemaBuilder(value,output)

จากนั้นเราก็สร้าง ModelBuilder วัตถุและปรับใช้โมเดลบนตำแหน่งข้อมูล SageMaker ตามตรรกะเดียวกันกับที่แสดงในตัวอย่างอื่น:

builder = ModelBuilder( inference_spec=inf_spec, mode=Mode.SAGEMAKER_ENDPOINT, # you can change it to Mode.LOCAL_CONTAINER for local testing schema_builder=schema, image_uri=image,
)
model = builder.build( role_arn=execution_role, sagemaker_session=sagemaker_session,
)
predictor = model.deploy( initial_instance_count=1, instance_type='ml.g5.2xlarge'
)

เอ่ยถึง model-builder-huggingface.ipynb เพื่อปรับใช้โมเดลไปป์ไลน์ Hugging Face

ปรับใช้โมเดลพื้นฐานกับตำแหน่งข้อมูล SageMaker

ในตัวอย่างต่อไปนี้ เราจะแสดงวิธีการใช้งาน ModelBuilder เพื่อปรับใช้โมเดลพื้นฐาน เช่นเดียวกับโมเดลที่กล่าวถึงก่อนหน้านี้ สิ่งเดียวที่ต้องมีคือรหัสโมเดล

กอดใบหน้าฮับ

หากคุณต้องการปรับใช้โมเดลพื้นฐานจาก กอดใบหน้าฮับสิ่งที่คุณต้องทำคือส่งรหัสโมเดลที่ได้รับการฝึกล่วงหน้า ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้จะปรับใช้ไฟล์ เมตา-ลามะ/ลามะ-2-7b-hf โมเดลในท้องถิ่น คุณสามารถเปลี่ยนโหมดเป็น Mode.SAGEMAKER_ENDPOINT เพื่อปรับใช้กับตำแหน่งข้อมูล SageMaker

model_builder = ModelBuilder( model="meta-llama/Llama-2-7b-hf", schema_builder=SchemaBuilder(sample_input, sample_output), model_path="/home/ec2-user/SageMaker/LoadTestResources/meta-llama2-7b", #local path where artifacts will be saved mode=Mode.LOCAL_CONTAINER, env_vars={ # Llama 2 is a gated model and requires a Hugging Face Hub token. "HUGGING_FACE_HUB_TOKEN": "<YourHuggingFaceToken>" }
)
model = model_builder.build()
local_predictor = model.deploy()

สำหรับรุ่นที่มีรั้วรอบขอบชิดบน Hugging Face Hub คุณจะต้องขอการเข้าถึงผ่าน Hugging Face Hub และใช้คีย์ที่เกี่ยวข้องโดยส่งเป็นตัวแปรสภาพแวดล้อม HUGGING_FACE_HUB_TOKEN. Hugging Face บางรุ่นอาจต้องใช้โค้ดระยะไกลที่เชื่อถือได้ สามารถตั้งค่าเป็นตัวแปรสภาพแวดล้อมได้เช่นกัน HF_TRUST_REMOTE_CODE. โดยค่าเริ่มต้น, ModelBuilder จะใช้การอนุมานการสร้างข้อความใบหน้ากอด (TGI) คอนเทนเนอร์เป็นคอนเทนเนอร์ต้นแบบสำหรับโมเดล Hugging Face หากคุณต้องการใช้ AWS Large Model Inference (LMI) คอนเทนเนอร์คุณสามารถตั้งค่า model_server พารามิเตอร์เป็น ModelServer.DJL_SERVING เมื่อคุณกำหนดค่า ModelBuilder วัตถุ.

คุณสมบัติเรียบร้อยของ ModelBuilder คือความสามารถในการเรียกใช้การปรับพารามิเตอร์คอนเทนเนอร์ภายในเครื่องเมื่อคุณใช้งาน LOCAL_CONTAINER โหมด. คุณสมบัตินี้สามารถใช้งานได้เพียงแค่เรียกใช้ tuned_model = model.tune().

เอ่ยถึง การสาธิตโมเดลผู้สร้างกอดใบหน้า llama2.ipynb เพื่อปรับใช้โมเดล Hugging Face Hub

SageMaker JumpStart

Amazon SageMaker JumpStart ยังมีโมเดลพื้นฐานที่ได้รับการฝึกอบรมล่วงหน้าจำนวนหนึ่งอีกด้วย เช่นเดียวกับกระบวนการปรับใช้โมเดลจาก Hugging Face Hub จำเป็นต้องมี ID โมเดล การปรับใช้โมเดล SageMaker JumpStart กับตำแหน่งข้อมูล SageMaker นั้นตรงไปตรงมาเหมือนกับการรันโค้ดต่อไปนี้:

model_builder = ModelBuilder( model="huggingface-llm-falcon-7b-bf16", schema_builder=SchemaBuilder(sample_input, sample_output), role_arn=execution_role
) sm_ep_model = model_builder.build() predictor = sm_ep_model.deploy()

สำหรับรหัสโมเดล SageMaker JumpStart ที่มีอยู่ทั้งหมด โปรดดูที่ อัลกอริธึมในตัวพร้อมตารางโมเดลที่ผ่านการฝึกอบรมมาแล้ว. เอ่ยถึง model-builder-jumpstart-falcon.ipynb เพื่อปรับใช้โมเดล SageMaker JumpStart

องค์ประกอบการอนุมาน

ModelBulder ช่วยให้คุณใช้ความสามารถองค์ประกอบการอนุมานใหม่ใน SageMaker เพื่อปรับใช้โมเดล สำหรับข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบการอนุมาน โปรดดู ลดต้นทุนการปรับใช้โมเดลโดยเฉลี่ย 50% โดยใช้คุณสมบัติล่าสุดของ SageMaker. คุณสามารถใช้ส่วนประกอบการอนุมานสำหรับการปรับใช้ด้วย ModelBuilder โดยระบุ endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED ใน deploy() วิธี. คุณยังสามารถใช้ tune() ซึ่งดึงข้อมูลจำนวนตัวเร่งความเร็วที่เหมาะสมที่สุด และแก้ไขหากจำเป็น

resource_requirements = ResourceRequirements( requests={ "num_accelerators": 4, "memory": 1024, "copies": 1, }, limits={},
) goldfinch_predictor_2 = model_2.deploy( mode=Mode.SAGEMAKER_ENDPOINT, endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED, ... )

เอ่ยถึง model-builder-inference-component.ipynb เพื่อปรับใช้โมเดลเป็นองค์ประกอบการอนุมาน

ปรับแต่งคลาส ModelBuilder

พื้นที่ ModelBuilder คลาสช่วยให้คุณปรับแต่งการโหลดโมเดลโดยใช้ InferenceSpec.

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

ข้อมูลจำเพาะการอนุมาน

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

class InferenceSpec(abc.ABC): @abc.abstractmethod def load(self, model_dir: str): pass @abc.abstractmethod def invoke(self, input_object: object, model: object): pass

รหัสต่อไปนี้แสดงตัวอย่างการใช้คลาสนี้:

class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return // model object def invoke(self, input, model): return model(input)

CustomPayloadTranslator

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

  1. การซีเรียลไลซ์คำขอการอนุมาน (จัดการโดยไคลเอนต์)
  2. การดีซีเรียลไลซ์คำขอการอนุมาน (จัดการโดยเซิร์ฟเวอร์หรืออัลกอริทึม)
  3. การเรียกใช้โมเดลกับเพย์โหลด
  4. กำลังส่งเพย์โหลดการตอบกลับกลับ
  5. การทำให้เป็นอนุกรมการตอบสนองการอนุมาน (จัดการโดยเซิร์ฟเวอร์หรืออัลกอริทึม)
  6. การดีซีเรียลไลซ์การตอบสนองการอนุมาน (จัดการโดยไคลเอนต์)

แผนภาพต่อไปนี้แสดงกระบวนการซีเรียลไลซ์และดีซีเรียลไลซ์ระหว่างกระบวนการเรียกใช้

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.

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

from sagemaker.serve import CustomPayloadTranslator # request translator
class MyRequestTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on client side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the input payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on server side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object # response translator class MyResponseTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on server side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the response payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on client side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object

ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร การสาธิตโมเดลผู้สร้าง-pytorch.ipynb ในโน้ตบุ๊ก เราจะสาธิตวิธีการปรับใช้โมเดล PyTorch กับตำแหน่งข้อมูล SageMaker ได้อย่างง่ายดาย ModelBuilder กับ CustomPayloadTranslator และ InferenceSpec ชั้นเรียน

แบบจำลองขั้นสำหรับการปรับใช้

หากคุณต้องการจัดฉากโมเดลสำหรับการอนุมานหรือในการลงทะเบียนโมเดล คุณสามารถใช้ได้ model.create() or model.register(). โมเดลที่เปิดใช้งานจะถูกสร้างขึ้นบนบริการ จากนั้นคุณสามารถปรับใช้ในภายหลังได้ ดูรหัสต่อไปนี้:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, )
deployable_model = model_builder.build() deployable_model.create() # deployable_model.register() for model registry

ใช้คอนเทนเนอร์แบบกำหนดเอง

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

หากต้องการใช้อิมเมจคอนเทนเนอร์ของคุณเองในกรณีนี้ คุณต้องตั้งค่าฟิลด์ image_uri และ model_server เมื่อกำหนด ModelBuilder:

model_builder = ModelBuilder( model=model, # Pass in the actual model object. its "predict" method will be invoked in the endpoint. schema_builder=SchemaBuilder(X_test, y_pred), # Pass in a "SchemaBuilder" which will use the sample test input and output objects to infer the serialization needed. role_arn=execution_role, image_uri=image_uri, # REQUIRED FOR BYOC: Passing in image hosted in personal ECR Repo model_server=ModelServer.TORCHSERVE, # REQUIRED FOR BYOC: Passing in model server of choice mode=Mode.SAGEMAKER_ENDPOINT, dependencies={"auto": True, "custom": ["protobuf==3.20.2"]}
)

ที่นี่ image_uri จะเป็นคอนเทนเนอร์อิมเมจ ARN ที่จัดเก็บไว้ในบัญชีของคุณ การลงทะเบียน Amazon Elastic Container พื้นที่เก็บข้อมูล (Amazon ECR) ตัวอย่างหนึ่งแสดงดังต่อไปนี้:

# Pulled the xgboost:1.7-1 DLC and pushed to personal ECR repo
image_uri = "<your_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-byoc:xgb"

เมื่อราคาของ image_uri ถูกตั้งค่าไว้ในระหว่าง ModelBuilder กระบวนการสร้าง มันจะข้ามการตรวจจับรูปภาพอัตโนมัติเมื่อมีการระบุ URI ของรูปภาพ ถ้า model_server ไม่ได้ตั้งค่าใน ModelBuilder คุณจะได้รับข้อความแสดงข้อผิดพลาดในการตรวจสอบความถูกต้อง เช่น:

ValueError: Model_server must be set when image_uri is set. Supported model servers: {<ModelServer.TRITON: 5>, <ModelServer.DJL_SERVING: 4>, <ModelServer.TORCHSERVE: 1>}

จากการเผยแพร่โพสต์นี้ ModelBuilder รองรับการนำภาชนะของคุณเองที่ขยายมาจากเรา อิมเมจคอนเทนเนอร์ DLC ที่สร้างไว้ล่วงหน้า หรือคอนเทนเนอร์ที่สร้างด้วยโมเดลเซิร์ฟเวอร์เช่น ห้องสมุด Java ลึก (DJL), การอนุมานการสร้างข้อความ (TGI), คบเพลิงให้บริการและ เซิร์ฟเวอร์การอนุมาน Triton.

การพึ่งพาแบบกำหนดเอง

เมื่อวิ่ง ModelBuilder.build()โดยค่าเริ่มต้น มันจะจับสภาพแวดล้อม Python ของคุณโดยอัตโนมัติเป็น requirements.txt ไฟล์และติดตั้งการพึ่งพาเดียวกันในคอนเทนเนอร์ อย่างไรก็ตาม บางครั้งสภาพแวดล้อม Python ในเครื่องของคุณจะขัดแย้งกับสภาพแวดล้อมในคอนเทนเนอร์ ModelBuilder มอบวิธีง่ายๆ สำหรับคุณในการแก้ไขการขึ้นต่อกันที่บันทึกไว้เพื่อแก้ไขข้อขัดแย้งในการขึ้นต่อกันดังกล่าวโดยอนุญาตให้คุณระบุการกำหนดค่าที่กำหนดเองลงใน ModelBuilder. โปรดทราบว่านี่เป็นเพียงสำหรับ TorchServe และ Triton ด้วย InferenceSpec. ตัวอย่างเช่น คุณสามารถระบุการขึ้นต่อกันของพารามิเตอร์อินพุต ซึ่งเป็นพจนานุกรม Python ใน ModelBuilder ได้ดังนี้:

dependency_config = { "auto" = True, "requirements" = "/path/to/your/requirements.txt" "custom" = ["module>=1.2.3,<1.5", "boto3==1.16.*", "some_module@http://some/url"]
} ModelBuilder( # Other params dependencies=dependency_config,
).build()

เรากำหนดฟิลด์ต่อไปนี้:

  • รถยนต์ – จะพยายามบันทึกการขึ้นต่อกันในสภาพแวดล้อมของคุณหรือไม่
  • ความต้องการ – สตริงของเส้นทางของคุณเอง requirements.txt ไฟล์. (นี่เป็นทางเลือก)
  • ประเพณี – รายการการอ้างอิงแบบกำหนดเองอื่นๆ ที่คุณต้องการเพิ่มหรือแก้ไข (นี่เป็นทางเลือก)

หากมีการระบุโมดูลเดียวกันไว้ในหลายแห่ง custom จะมีลำดับความสำคัญสูงสุดแล้ว requirementsและ auto จะมีลำดับความสำคัญต่ำสุด ตัวอย่างเช่น สมมติว่าระหว่างการตรวจจับอัตโนมัติ ModelBuilder ตรวจพบ numpy==1.25และใน requirements.txt มีไฟล์ที่ระบุ numpy>=1.24,<1.26. นอกจากนี้ยังมีการขึ้นต่อกันแบบกำหนดเอง: custom = ["numpy==1.26.1"]. ในกรณีนี้, numpy==1.26.1 จะถูกเลือกเมื่อเราติดตั้งการขึ้นต่อกันในคอนเทนเนอร์

ทำความสะอาด

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

predictor.delete_model()
predictor.delete_endpoint()

สรุป

ความสามารถของ SageMaker ModelBuilder ใหม่ช่วยลดความยุ่งยากในการปรับใช้โมเดล ML ในการผลิตบน SageMaker ด้วยการจัดการรายละเอียดที่ซับซ้อนมากมายเบื้องหลัง ModelBuilder จึงลดช่วงการเรียนรู้สำหรับผู้ใช้ใหม่ และเพิ่มการใช้งานสูงสุดสำหรับผู้ใช้ที่มีประสบการณ์ ด้วยโค้ดเพียงไม่กี่บรรทัด คุณสามารถปรับใช้โมเดลที่มีเฟรมเวิร์กในตัว เช่น XGBoost, PyTorch, Triton และ Hugging Face รวมถึงโมเดลที่ SageMaker JumpStart มอบให้ในจุดสิ้นสุดที่แข็งแกร่งและปรับขนาดได้บน SageMaker

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

ขอขอบคุณเป็นพิเศษสำหรับ Sirisha Upadhyayala, Raymond Liu, Gary Wang, Dhawal Patel, Deepak Garg และ Ram Vegiraju


เกี่ยวกับผู้แต่ง

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.เมลานี ลีปริญญาเอก เป็นผู้เชี่ยวชาญด้าน AI/ML อาวุโส TAM ที่ AWS ในซิดนีย์ ออสเตรเลีย เธอช่วยลูกค้าองค์กรสร้างโซลูชันโดยใช้เครื่องมือ AI/ML ที่ล้ำสมัยบน AWS และให้คำแนะนำเกี่ยวกับการออกแบบสถาปัตยกรรมและการนำโซลูชัน ML ไปใช้งานด้วยแนวทางปฏิบัติที่ดีที่สุด ในเวลาว่างเธอชอบที่จะสำรวจธรรมชาติและใช้เวลากับครอบครัวและเพื่อนฝูง

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.มาร์ค คาร์ป เป็น ML Architect กับทีม Amazon SageMaker Service เขามุ่งเน้นไปที่การช่วยลูกค้าออกแบบ ปรับใช้ และจัดการปริมาณงาน ML ตามขนาด ในเวลาว่างเขาชอบท่องเที่ยวและสำรวจสถานที่ใหม่ๆ

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.แซมเอ็ดเวิร์ดเป็นวิศวกรระบบคลาวด์ (AI/ML) ที่ AWS Sydney ซึ่งเชี่ยวชาญด้าน Machine Learning และ Amazon SageMaker เขามีความกระตือรือร้นในการช่วยลูกค้าแก้ไขปัญหาที่เกี่ยวข้องกับเวิร์กโฟลว์แมชชีนเลิร์นนิงและสร้างสรรค์โซลูชันใหม่ๆ ให้กับลูกค้า นอกเหนือจากการทำงาน เขาชอบเล่นกีฬาแร็กเก็ตและท่องเที่ยว

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.ราหู ราเมชา เป็นสถาปนิกอาวุโสด้านโซลูชัน ML พร้อมทีมบริการ Amazon SageMaker เขามุ่งเน้นที่การช่วยเหลือลูกค้าในการสร้าง ปรับใช้ และโยกย้ายปริมาณงานการผลิต ML ไปยัง SageMaker ในวงกว้าง เขาเชี่ยวชาญด้านการเรียนรู้ของเครื่อง, AI และคอมพิวเตอร์วิทัศน์ และสำเร็จการศึกษาระดับปริญญาโทสาขาวิทยาการคอมพิวเตอร์จาก UT Dallas ในเวลาว่าง เขาชอบท่องเที่ยวและถ่ายรูป

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.พระศิวะราชาโกฏินี ทำงานเป็นผู้จัดการผลิตภัณฑ์หลักในกลุ่มผลิตภัณฑ์การอนุมานของ Amazon SageMaker เขามุ่งเน้นไปที่การปรับใช้โมเดล การปรับแต่งประสิทธิภาพ และการเพิ่มประสิทธิภาพใน SageMaker เพื่อการอนุมาน

รวมแพ็คเกจและปรับใช้ ML และ LLM แบบคลาสสิกได้อย่างง่ายดายด้วย Amazon SageMaker ตอนที่ 1: การปรับปรุง PySDK | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.โมฮัน คานธี เป็นวิศวกรซอฟต์แวร์อาวุโสที่ AWS เขาทำงานกับ AWS ในช่วง 10 ปีที่ผ่านมา และเคยทำงานในบริการต่างๆ ของ AWS เช่น EMR, EFA และ RDS ปัจจุบัน เขามุ่งเน้นไปที่การปรับปรุงประสบการณ์การอนุมานของ SageMaker ในเวลาว่าง เขาชอบเดินป่าและวิ่งมาราธอน

ประทับเวลา:

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