ผู้แต่ง:Vikesh Pandey, Othmane Hamzaoui
ใน “ตอนที่ 1” และ “ตอนที่ 2” เราได้แสดงวิธีที่คุณสามารถฝึกโมเดลของคุณได้อย่างง่ายดายบน Amazon SageMaker พร้อมทั้งให้ข้อมูลและการกำหนดค่าของคุณเองด้วย แม้ว่า Amazon SageMaker จะจัดเตรียมคอนเทนเนอร์สำหรับเฟรมเวิร์ก Deep Learning ที่ได้รับความนิยมส่วนใหญ่ เช่น Tensorflow, PyTorch, MxNet, HuggingFace, XGBoost ฯลฯ อาจมีกรณีที่คุณต้องการใช้ Bring Your Own Container (BYOC) เพื่อฝึกโมเดลของคุณ
ในบล็อกนี้เราจะครอบคลุมประเด็นต่อไปนี้:
- เมื่อใดที่ควรใช้ BYOC และเมื่อใดที่คุณไม่จำเป็นต้อง BYOC จริงๆ
- คุณควรห่อรหัสการฝึกอบรมไว้ในคอนเทนเนอร์หรือไม่?
- วิธี BYOC ใน SageMaker
- สิ่งใดเปลี่ยนแปลงและสิ่งใดไม่เปลี่ยนแปลง เมื่อคุณ BYOC (เปรียบเทียบกับการใช้คอนเทนเนอร์ที่จัดการโดย SageMaker)
หมายเหตุ: บล็อกนี้เน้นเฉพาะการฝึกอบรม แต่คุณสามารถใช้ BYOC สำหรับการประมวลผลข้อมูลและการอนุมานได้เช่นกัน
เมื่อใดจึงจะใช้ BYOC:
- หากคอนเทนเนอร์เฟรมเวิร์กที่ได้รับการจัดการของ SageMaker ไม่ใช่คอนเทนเนอร์ที่คุณต้องการใช้
- หากคอนเทนเนอร์ที่ SageMaker จัดเตรียมไว้มีการขึ้นต่อกันอย่างน้อยหนึ่งรายการที่คุณไม่ต้องการในสภาพแวดล้อมการฝึกอบรม/การอนุมาน คุณสามารถตรวจสอบ Dockerfile สำหรับคอนเทนเนอร์ที่จัดการโดย SageMaker ทั้งหมดได้ ที่นี่
- คุณมีข้อกำหนดด้านกฎระเบียบและการปฏิบัติตามข้อกำหนดให้ใช้เฉพาะคอนเทนเนอร์ที่คุณบำรุงรักษาเท่านั้น
- คุณกำลังจัดหาการอ้างอิงจำนวนมาก (ผ่าน requirement.txt) ให้กับคอนเทนเนอร์ที่ SageMaker จัดเตรียมไว้ และการติดตั้งนี้ใช้เวลานานในขณะที่รันงานการฝึก
- สภาพแวดล้อมของคุณบังคับให้ไม่มีการเชื่อมต่ออินเทอร์เน็ตเพื่อดาวน์โหลดแพ็คเกจ
- คุณต้องมีการรับประกันความสามารถในการทำซ้ำที่เข้มงวดสำหรับคอนเทนเนอร์ที่คุณใช้
เมื่อคุณไม่ต้องการ BYOC จริงๆ:
- คอนเทนเนอร์และเวอร์ชันของเฟรมเวิร์กที่ได้รับการจัดการของ SageMaker (PyTorch, Tensorflow ฯลฯ) ตอบสนองความต้องการของคุณ คุณสามารถเรียกดูรายการคอนเทนเนอร์ที่จัดการโดย SageMaker ได้ "ที่นี่"
- คุณต้องการรวมไลบรารีของบุคคลที่สามจำนวนหนึ่งด้วย ในกรณีนี้ เพียงวาง “requirements.txt” ในไดเร็กทอรีในเครื่องและอ้างอิงโดยใช้พารามิเตอร์
source_dir
ใน SageMaker estimator SageMaker จะติดตั้งไลบรารีเหล่านั้นในขณะรันไทม์ คำเตือน: วิธีการนี้จะติดตั้ง Requirement.txt ที่จุดเริ่มต้นของงานการฝึก หากกระบวนการติดตั้งยาวเกินไป อาจทำให้ประสิทธิภาพการทำงานของคุณช้าลง - คุณต้องการเพิ่มสคริปต์เพิ่มเติม (ข้างไฟล์การฝึกอบรมหลักของคุณ) เช่นเดียวกับจุดก่อนหน้า คุณสามารถวางไว้ในไดเร็กทอรีในเครื่องและอ้างอิงโดยใช้พารามิเตอร์
source_dir
หรือdependencies
parameter ใน SageMaker estimator
คุณรวมรหัสการฝึกอบรมไว้ในคอนเทนเนอร์หรือไม่?
ไม่ คุณไม่จำเป็นต้องทำ หากคุณรวมโค้ดไว้ในคอนเทนเนอร์ ทุกครั้งที่คุณทำการเปลี่ยนแปลงโค้ด คุณจะต้องสร้างมันใหม่ และอาจส่งผลต่อประสิทธิภาพการทำงานของคุณ SageMaker มีวิธีจัดหาโค้ดการฝึกอบรมภายนอกคอนเทนเนอร์ ณ รันไทม์ ดังนั้นคุณจึงสามารถมุ่งเน้นไปที่การวนซ้ำโค้ดของคุณในขณะที่นำคอนเทนเนอร์เดิมกลับมาใช้ใหม่ได้ หากคุณยังคงมีเหตุผลเพียงพอที่จะใส่รหัสการฝึกอบรมลงในคอนเทนเนอร์ คุณก็สามารถทำได้อย่างแน่นอน
มาดูวิธี BYOC ใน SageMaker กันต่อ
วิธี BYOC ใน SageMaker
ในส่วนนี้ เราจะดูวิธีสร้างคอนเทนเนอร์ PyTorch ที่คุณกำหนดเอง และใช้เพื่อฝึกโมเดล เมื่อใช้ BYOC คุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ กับรหัสการฝึกอบรมของคุณเลย นี่คือขั้นตอนที่เราจะปฏิบัติตาม:
- สร้างอิมเมจนักเทียบท่า — เวอร์ชันเดียวกัน (1.12) เหมือนกับเวอร์ชันที่เราใช้ในตัวอย่างก่อนหน้านี้
- พุชอิมเมจนักเทียบท่าบนที่เก็บส่วนตัว Amazon ECR
- ใช้รูปภาพที่กำหนดเองสำหรับการฝึกอบรม — แทนคอนเทนเนอร์ PyTorch ที่จัดการโดย SageMaker นอกจากนี้ ที่นี่คุณยังระบุรหัสการฝึกอบรมภายนอกคอนเทนเนอร์อีกด้วย เพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง
1. สร้างอิมเมจนักเทียบท่า
หมายเหตุ: เราจะไม่กล่าวถึงพื้นฐานของนักเทียบท่าที่นี่ แต่หากคุณไม่คุ้นเคยกับ docker คุณสามารถดูบทช่วยสอนต่อไปนี้ Docker 101 Tutorial
1.1 สร้าง Dockerfile
มีสองวิธีในการปรับคอนเทนเนอร์ที่คุณกำหนดเองให้ทำงานบน SageMaker
- การใช้ ชุดเครื่องมือการฝึกอบรม Pytorch ที่ SageMaker มอบให้— นี่เป็นแนวทางที่แนะนำ เนื่องจากชุดเครื่องมือจะตั้งค่าต่อไปนี้ให้กับคุณ:
– ตำแหน่ง (ภายในคอนเทนเนอร์) สำหรับจัดเก็บโค้ด โมเดล และ ทรัพยากรอื่นๆ
– จุดเริ่มต้นที่มีโค้ดที่จะรันเมื่อคอนเทนเนอร์เริ่มทำงาน ตอนนี้คุณสามารถคัดลอกโค้ดการฝึกของคุณในอิมเมจนักเทียบท่าในขณะที่สร้างอิมเมจนั้นเอง หรือคุณสามารถจัดหาสคริปต์การฝึกของคุณในขณะรันไทม์จากภายนอกคอนเทนเนอร์ได้
– ตัวแปรสภาพแวดล้อมและการกำหนดค่าอื่น ๆ ที่ SageMaker ต้องใช้นักเทียบท่าสำหรับ การฝึกอบรม. - หากไม่มี SageMaker จัดเตรียมชุดเครื่องมือการฝึกอบรม Pytorch — ในกรณีนี้ คุณจะต้องแน่ใจว่านักเทียบท่าปฏิบัติตามแนวทางของ เอกสารประกอบนี้
เราจะใช้ (และแนะนำ) แนวทางแรกที่นี่
ด้านล่างนี้เป็นตัวอย่าง Dockerfile:
from pytorch/pytorch:1.12.0-cuda11.3-cudnn8-runtime RUN apt-get update && apt-get install gcc -y RUN pip install sagemaker-pytorch-training
เราเลือกอิมเมจพื้นฐานจาก ที่เก็บ PyTorch อย่างเป็นทางการ ด้วยเวอร์ชัน 1.12
และติดตั้ง gcc
เนื่องจากจำเป็นต้องมีการพึ่งพานี้โดย sagemaker-pytorch-training
และสุดท้ายเราก็ติดตั้ง sagemaker-pytorch-training.
1.2 สร้างภาพ
สำหรับการสร้างอิมเมจ คุณสามารถเลือกเครื่องภายในเครื่องของคุณ หรืออินสแตนซ์/สภาพแวดล้อมในระบบคลาวด์ที่ติดตั้ง Docker ได้ เพียงนำทางไปยังไดเร็กทอรีที่มี Dockerfile (สร้างใน 1.1) และรันในเทอร์มินัลของคุณ:
docker build -t {Your_AWS_Account_ID}.dkr.ecr. {Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag} .
2. พุช Docker Image ไปที่ Amazon ECR
ขั้นตอนต่อไปคือการส่งอิมเมจนักเทียบท่าไปยังรีจิสทรีนักเทียบท่า SageMaker ได้รับการผสานรวมเข้ากับ Amazon ECR โดยกำเนิด ดังนั้นเราจะผลักดันอิมเมจของเราไปที่นั่น คุณสามารถใช้พื้นที่เก็บข้อมูลส่วนตัวของคุณเองได้เช่นกัน
2.1 ตรวจสอบสิทธิ์ ECR ก่อน
aws ecr get-login-password -region {Your_AWS_Region} | docker login -username AWS -password-stdin {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Account_ID}.amazonaws.com
2.2 สร้างที่เก็บ ECR
aws ecr create-repository -repository-name "custom-pytorch-1-12"
2.3 และดันอิมเมจนักเทียบท่าไปที่ ECR
docker push {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag}
แค่นั้นแหละ ! ตอนนี้เราพร้อมที่จะใช้อิมเมจนี้เพื่อการฝึกอบรมใน SageMaker แล้ว สำหรับคำแนะนำโดยละเอียดเกี่ยวกับการพุชรูปภาพไปที่ ECR โปรดตรวจสอบ "การพุชอิมเมจ Docker"
3. ใช้รูปภาพที่กำหนดเองสำหรับการฝึกอบรม
หากต้องการใช้รูปภาพนี้แทนรูปภาพ PyTorch ของ SageMaker เราจะใช้ PyTorch Estimator แบบเดียวกับที่ใช้ในโพสต์บนบล็อกก่อนหน้านี้ อาร์กิวเมนต์ใหม่เพียงข้อเดียวที่นี่คือ image_uri
นอกจากนั้น ข้อโต้แย้งอื่นๆ ทั้งหมดก็เหมือนกัน
ไม่จำเป็นต้องเปลี่ยนแปลงรหัสการฝึกอบรม
การเปลี่ยนแปลงรหัสการโทรมีดังนี้:
#Create the estimator object for PyTorch from sagemaker.pytorch.estimator import PyTorch # import PyTorch Estimator class estimator = PyTorch( image_uri=custom_image_uri, #our custom pytorch image URI entry_point = "train.py", # training script instance_count = 1, #number of EC2 instances needed for training instance_type = "ml.c5.xlarge", #Type of EC2 instance/s needed for training disable_profiler = True, #Disable profiler, as it's not needed role = execution_role, #Execution role used by training job hyperparameters={'batch_size': 64} ) inputs = {"train":train_input, "test": test_input} #Start the training in the ephemeral remote compute estimator.fit(inputs, wait=True)
สิ่งที่เปลี่ยนแปลงและสิ่งที่ไม่:
ดังนั้น เราจะมาสรุปว่าแนวทางนี้แตกต่างจากที่แสดงใน "ส่วนที่ 1" และ "ส่วนที่ 2" อย่างไร
สิ่งที่เปลี่ยนแปลงไป
- คอนเทนเนอร์การดำเนินการที่สคริปต์การฝึกอบรมของคุณกำลังทำงานอยู่ ตอนนี้มันเป็นคอนเทนเนอร์ของคุณเองแทนที่จะได้รับการจัดการจาก SageMaker ซึ่งหมายความว่าคุณต้องรับผิดชอบในการแพตช์และบำรุงรักษา ดังนั้นต้นทุนรวมในการเป็นเจ้าของของคุณในการจัดการและใช้งานคอนเทนเนอร์จึงสูงกว่า
- เราจัดเตรียม URI รูปภาพที่กำหนดเองของเราผ่านทางอาร์กิวเมนต์
image_uri
ใน PyTorch Estimator
สิ่งที่ไม่เปลี่ยนแปลง
- SageMaker จัดการคลัสเตอร์การประมวลผลการฝึกอบรมชั่วคราว หมุนขึ้นและปิดหลังจากงานฝึกอบรมเสร็จสิ้น
- ไดเร็กทอรีงานคอนเทนเนอร์ ข้อมูล โค้ด และเส้นทางเอาต์พุตโมเดลที่สงวนไว้โดย SageMaker ขอขอบคุณ SageMaker มอบชุดเครื่องมือการฝึกอบรม Pytorch ดังนั้น SageMaker จะรันคอนเทนเนอร์ของคุณในลักษณะเดียวกับที่รันคอนเทนเนอร์ที่มีการจัดการของตัวเอง คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการใช้ ชุดเครื่องมือการฝึกอบรมและการอนุมานของ SageMaker
- รหัสการฝึกอบรม รหัสของคุณนั้นไม่เชื่อว่าคุณใช้คอนเทนเนอร์ที่ได้รับการจัดการหรือ BYOC
- อาร์กิวเมนต์ทั้งหมดที่ให้กับโค้ดการฝึกอบรมทำงานในลักษณะเดียวกัน เครดิตอีกครั้งไปที่ ชุดเครื่องมือการฝึกอบรม Pytorch ที่ SageMaker จัดหาให้
- คุณได้จัดเตรียมสคริปต์การฝึกอบรมภายนอกคอนเทนเนอร์ซึ่งเป็นประโยชน์อย่างมากสำหรับการพัฒนาซ้ำ คุณยังคงสามารถรวมสคริปต์การฝึกอบรมไว้ในคอนเทนเนอร์ของคุณได้ แต่สำหรับการเปลี่ยนแปลงโค้ดทุกครั้ง คุณจะต้องสร้างคอนเทนเนอร์อีกครั้ง ซึ่งใช้เวลานาน จำไว้ว่า เวลาคือเงิน !! :)
บทสรุป
ในบล็อกนี้ คุณได้เรียนรู้วิธีการนำอิมเมจ Docker ของคุณเองมาสู่ SageMaker และใช้สำหรับการฝึกอบรม จุดเด่นสำคัญของแนวทางนี้คือคุณสามารถจัดหารหัสการฝึกอบรมภายนอกคอนเทนเนอร์ได้ในขณะดำเนินการ รหัสอ้างอิงทั้งหมดของบล็อกนี้มีอยู่ใน Github Repository หากต้องการอ่านเพิ่มเติม โปรดชำระเงิน การใช้คอนเทนเนอร์ Docker กับ SageMaker
Twitter จัดการ: @vikep0, @OHamzaoui1