ติดตามการทดลอง ML ของคุณตั้งแต่ต้นจนจบด้วยการควบคุมเวอร์ชันข้อมูลและ Amazon SageMaker Experiments PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ติดตามการทดลอง ML ของคุณตั้งแต่ต้นจนจบด้วยการควบคุมเวอร์ชันข้อมูลและ Amazon SageMaker Experiments

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

โพสต์นี้จะอธิบายตัวอย่างวิธีติดตามการทดสอบของคุณในโค้ด ข้อมูล สิ่งประดิษฐ์ และเมตริกโดยใช้ การทดลอง Amazon SageMaker ร่วมกับ การควบคุมเวอร์ชันข้อมูล (DVC). เราแสดงให้เห็นว่าคุณสามารถใช้ DVC เคียงข้างกันได้อย่างไร อเมซอน SageMaker งานแปรรูปและฝึกอบรม เราฝึกโมเดล CatBoost ต่างๆ บนชุดข้อมูลที่อยู่อาศัยในแคลิฟอร์เนียจาก ที่เก็บ StatLibและเปลี่ยนกลยุทธ์การระงับในขณะที่ติดตามเวอร์ชันข้อมูลด้วย DVC ในการทดสอบแต่ละครั้ง เราติดตามอาร์ติแฟกต์ โค้ด และเมตริกอินพุตและเอาต์พุตโดยใช้ SageMaker Experiments

การทดลอง SageMaker

SageMaker Experiments เป็นบริการของ AWS สำหรับการติดตามการทดลองของแมชชีนเลิร์นนิง (ML) ดิ SageMaker ทดลอง Python SDK เป็นอินเทอร์เฟซระดับสูงสำหรับบริการนี้ ซึ่งช่วยให้คุณติดตามข้อมูลการทดลองโดยใช้ Python

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

เมื่อพูดถึงการทดลอง SageMaker เราอ้างอิงถึงแนวคิดต่อไปนี้:

  • การทดลอง – คอลเลกชันของการทดลองที่เกี่ยวข้อง คุณเพิ่มการทดลองลงในการทดสอบที่คุณต้องการเปรียบเทียบด้วยกัน
  • ทดลอง – คำอธิบายของเวิร์กโฟลว์ ML แบบหลายขั้นตอน แต่ละขั้นตอนในเวิร์กโฟลว์มีการอธิบายโดยองค์ประกอบการทดลองใช้
  • ส่วนประกอบทดลอง – คำอธิบายของขั้นตอนเดียวในเวิร์กโฟลว์ ML เช่น การล้างข้อมูล การแยกคุณลักษณะ การฝึกแบบจำลอง หรือการประเมินแบบจำลอง
  • ติดตาม – ตัวจัดการบริบทของ Python สำหรับบันทึกข้อมูลเกี่ยวกับองค์ประกอบการทดลองใช้เดียว (เช่น พารามิเตอร์ ตัวชี้วัด หรือสิ่งประดิษฐ์)

การควบคุมเวอร์ชันข้อมูล

การควบคุมเวอร์ชันข้อมูล (DVC) คือซอฟต์แวร์การกำหนดเวอร์ชันข้อมูล เวิร์กโฟลว์ และการจัดการการทดสอบรูปแบบใหม่ที่สร้างขึ้นจาก ไป (แม้ว่าจะทำงานแบบสแตนด์อโลนได้ก็ตาม) DVC ช่วยลดช่องว่างระหว่างชุดเครื่องมือทางวิศวกรรมที่จัดตั้งขึ้นและความต้องการด้านวิทยาศาสตร์ข้อมูล ช่วยให้คุณใช้ประโยชน์จากสิ่งใหม่ คุณสมบัติ ในขณะที่นำทักษะและสัญชาตญาณที่มีอยู่กลับมาใช้ใหม่

การแบ่งปันการทดลองวิทยาศาสตร์ข้อมูลและการทำงานร่วมกันสามารถทำได้ผ่านโฟลว์ Git ปกติ (การคอมมิต การโยงหัวข้อ การแท็ก การดึงคำขอ) ในลักษณะเดียวกับที่ใช้กับวิศวกรซอฟต์แวร์ ด้วย Git และ DVC ทีมวิทยาศาสตร์ข้อมูลและ ML สามารถกำหนดเวอร์ชันการทดลอง จัดการชุดข้อมูลขนาดใหญ่ และทำให้โครงการสามารถทำซ้ำได้

DVC มีคุณสมบัติดังต่อไปนี้:

  • DVC เป็น ฟรี, โอเพ่นซอร์ส บรรทัดคำสั่ง เครื่องมือ
  • DVC ทำงานบนที่เก็บ Git และมีอินเทอร์เฟซบรรทัดคำสั่งที่คล้ายกันและโฟลว์เป็น Git DVC ยังสามารถทำงานแบบสแตนด์อโลนได้ แต่ไม่มี เวอร์ชัน ความสามารถในการ
  • การกำหนดเวอร์ชันข้อมูลเปิดใช้งานได้โดยการแทนที่ไฟล์ขนาดใหญ่ ไดเร็กทอรีชุดข้อมูล โมเดล ML และอื่นๆ ด้วย small เมตาไฟล์ (ง่ายต่อการจัดการกับ Git) ตัวยึดตำแหน่งเหล่านี้ชี้ไปที่ข้อมูลดั้งเดิม ซึ่งแยกจากการจัดการซอร์สโค้ด
  • คุณสามารถใช้ที่เก็บข้อมูลภายในองค์กรหรือระบบคลาวด์เพื่อจัดเก็บข้อมูลของโปรเจ็กต์แยกจากฐานโค้ด นี่คือวิธีที่นักวิทยาศาสตร์ข้อมูลสามารถถ่ายโอนชุดข้อมูลขนาดใหญ่หรือแชร์โมเดลที่ได้รับการฝึกอบรมด้วย GPU กับผู้อื่นได้
  • DVC ทำให้โครงการวิทยาศาสตร์ข้อมูลสามารถทำซ้ำได้โดยการสร้างน้ำหนักเบา ท่อ โดยใช้กราฟการพึ่งพาโดยปริยาย และโดยการเข้ารหัสข้อมูลและสิ่งประดิษฐ์ที่เกี่ยวข้อง
  • DVC เป็นแพลตฟอร์มที่ไม่เชื่อเรื่องพระเจ้า มันทำงานบนระบบปฏิบัติการหลักทั้งหมด (Linux, macOS และ Windows) และทำงานโดยไม่ขึ้นอยู่กับภาษาการเขียนโปรแกรม (Python, R, Julia, เชลล์สคริปต์ และอื่นๆ) หรือไลบรารี ML (Keras, TensorFlow, PyTorch, Scipy และ เพิ่มเติม) ที่ใช้ในโครงการ
  • DVC นั้นรวดเร็วเพื่อ ติดตั้ง และไม่ต้องการโครงสร้างพื้นฐานพิเศษ และไม่ขึ้นอยู่กับ API หรือบริการภายนอก เป็นเครื่องมือ CLI แบบสแตนด์อโลน

การทดลอง SageMaker และตัวอย่าง DVC

ดังต่อไปนี้ ตัวอย่าง GitHub แสดงวิธีใช้ DVC ภายในสภาพแวดล้อม SageMaker โดยเฉพาะอย่างยิ่ง เราดูวิธีสร้างอิมเมจแบบกำหนดเองด้วยไลบรารี DVC ที่ติดตั้งโดยค่าเริ่มต้น เพื่อให้สภาพแวดล้อมการพัฒนาที่สอดคล้องกันสำหรับนักวิทยาศาสตร์ข้อมูลของคุณ สตูดิโอ Amazon SageMakerและวิธีเรียกใช้ DVC ควบคู่ไปกับโครงสร้างพื้นฐานที่มีการจัดการของ SageMaker สำหรับการประมวลผลและการฝึกอบรม นอกจากนี้ เราแสดงวิธีเพิ่มข้อมูลการติดตาม SageMaker ด้วยข้อมูลการกำหนดเวอร์ชันข้อมูลจาก DVC และแสดงภาพข้อมูลภายในคอนโซล Studio

ไดอะแกรมต่อไปนี้แสดงสถาปัตยกรรมโซลูชันและเวิร์กโฟลว์

สร้างอิมเมจ Studio แบบกำหนดเองโดยติดตั้ง DVC แล้ว

ในการนี​​้ พื้นที่เก็บข้อมูล GitHubเราอธิบายวิธีสร้างอิมเมจแบบกำหนดเองสำหรับ Studio ที่ติดตั้ง DVC แล้ว ข้อดีของการสร้างอิมเมจและทำให้ผู้ใช้ Studio ทุกคนใช้งานได้คือ การสร้างสภาพแวดล้อมที่สอดคล้องกันสำหรับผู้ใช้ Studio ซึ่งพวกเขาสามารถเรียกใช้ในเครื่องได้เช่นกัน แม้ว่ากลุ่มตัวอย่างจะขึ้นอยู่กับ AWS Cloud9คุณยังสามารถสร้างคอนเทนเนอร์บนเครื่องท้องถิ่นของคุณได้ตราบใดที่คุณติดตั้งและใช้งาน Docker ตัวอย่างนี้มีพื้นฐานมาจากข้อมูลต่อไปนี้ ไฟล์นักเทียบท่า และ สภาพแวดล้อม.yml. อิมเมจ Docker ที่ได้จะถูกเก็บไว้ใน การลงทะเบียน Amazon Elastic Container (Amazon EMR) ในบัญชี AWS ของคุณ ดูรหัสต่อไปนี้:

# Login to ECR
aws --region ${REGION} ecr get-login-password | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom

# Create the ECR repository
aws --region ${REGION} ecr create-repository --repository-name smstudio-custom

# Build the image - it might take a few minutes to complete this step
docker build . -t ${IMAGE_NAME} -t ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}

# Push the image to ECR
docker push ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}

ขณะนี้คุณสามารถ สร้างโดเมน Studio ใหม่ or อัปเดตโดเมน Studio ที่มีอยู่ ที่สามารถเข้าถึงอิมเมจ Docker ที่สร้างขึ้นใหม่

เราใช้ ชุดพัฒนา AWS Cloud (AWS CDK) เพื่อสร้างทรัพยากรต่อไปนี้ผ่าน การก่อตัวของ AWS Cloud:

  • บทบาทการดำเนินการ SageMaker พร้อมสิทธิ์ที่ถูกต้องสำหรับโดเมน Studio ใหม่หรือที่มีอยู่ของคุณ
  • อิมเมจ SageMaker และเวอร์ชันอิมเมจ SageMaker จากอิมเมจ Docker conda-env-dvc-kernel ที่เราสร้างไว้ก่อนหน้านี้
  • An AppImageConfig ที่ระบุว่าควรกำหนดค่าเคอร์เนลเกตเวย์อย่างไร
  • ผู้ใช้สตูดิโอ (data-scientist-dvc) ด้วยบทบาทการดำเนินการ SageMaker ที่ถูกต้องและอิมเมจ Studio แบบกำหนดเองที่มีให้

สำหรับคำแนะนำโดยละเอียด โปรดดูที่ เชื่อมโยงรูปภาพที่กำหนดเองกับ SageMaker Studio.

เรียกใช้ห้องปฏิบัติการ

ในการรันแล็บ ให้ทำตามขั้นตอนต่อไปนี้:

  1. ในโดเมน Studio ให้เปิด Studio สำหรับ data-scientist-dvc ผู้ใช้
  2. เลือกไอคอน Git จากนั้นเลือก โคลนที่เก็บ.
    โคลนที่เก็บ
  3. ป้อน URL ของที่เก็บ (https://github.com/aws-samples/amazon-sagemaker-experiments-dvc-demo) และเลือก โคลน.โคลนปุ่ม repo
  4. ในไฟล์เบราว์เซอร์ ให้เลือก amazon-sagemaker-experiments-dvc-demo กรุ
  5. เปิด dvc_sagemaker_script_mode.ipynb สมุดบันทึก.
  6. สำหรับ ภาพที่กำหนดเองเลือกรูปภาพ conda-env-dvc-kernel
  7. Choose เลือก.
    conda-env-dvc-เคอร์เนล

กำหนดค่า DVC สำหรับการกำหนดเวอร์ชันข้อมูล

เราสร้างไดเร็กทอรีย่อยที่เราจัดเตรียมข้อมูล: sagemaker-dvc-sample ภายในไดเร็กทอรีย่อยนี้ เราเริ่มต้นที่เก็บ Git ใหม่และตั้งค่ารีโมตเป็นที่เก็บที่เราสร้างขึ้น AWS CodeCommit. เป้าหมายคือการมีการกำหนดค่า DVC และไฟล์สำหรับการติดตามข้อมูลในเวอร์ชันในที่เก็บนี้ อย่างไรก็ตาม Git นำเสนอความสามารถดั้งเดิมในการจัดการโปรเจ็กต์ย่อยผ่าน ตัวอย่างเช่น โมดูลย่อย git และทรีย่อยของ git และคุณสามารถขยายตัวอย่างนี้เพื่อใช้เครื่องมือใดๆ ที่กล่าวมาซึ่งเหมาะสมกับเวิร์กโฟลว์ของคุณมากที่สุด

ข้อได้เปรียบหลักของการใช้ CodeCommit กับ SageMaker ในกรณีของเราคือการรวมเข้ากับ AWS Identity และการจัดการการเข้าถึง (IAM) สำหรับการตรวจสอบสิทธิ์และการอนุญาต หมายความว่าเราสามารถใช้บทบาท IAM เพื่อผลักและดึงข้อมูลโดยไม่ต้องดึงข้อมูลรับรอง (หรือคีย์ SSH) การตั้งค่าสิทธิ์ที่เหมาะสมในบทบาทการดำเนินการ SageMaker ยังช่วยให้โน้ตบุ๊ก Studio และงานการฝึกอบรมและการประมวลผล SageMaker สามารถโต้ตอบกับ CodeCommit ได้อย่างปลอดภัย

แม้ว่าคุณจะสามารถแทนที่ CodeCommit ด้วยบริการควบคุมต้นทางอื่นๆ เช่น GitHub, Gitlab หรือ Bitbucket ได้ คุณจำเป็นต้องพิจารณาวิธีจัดการกับข้อมูลประจำตัวสำหรับระบบของคุณ ความเป็นไปได้อย่างหนึ่งคือการจัดเก็บข้อมูลรับรองเหล่านี้บน ผู้จัดการความลับของ AWS และดึงข้อมูลในขณะใช้งานจากโน้ตบุ๊ก Studio รวมทั้งจากงานการประมวลผลและการฝึกอบรมของ SageMaker

เริ่มต้น DVC

ประมวลผลและฝึกอบรมด้วย DVC และ SageMaker

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

ตั้งค่าการทดลอง SageMaker

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

เราสร้างการทดลองชื่อ DEMO-sagemaker-experiments-dvc ด้วยการทดลองสองครั้ง dvc-trial-single-file และ dvc-trial-multi-filesแต่ละรายการเป็นตัวแทนของชุดข้อมูลเวอร์ชันต่างๆ

มาสร้าง DEMO-sagemaker-experiments-dvc การทดลอง:

from smexperiments.experiment import Experiment
from smexperiments.trial import Trial
from smexperiments.trial_component import TrialComponent
from smexperiments.tracker import Tracker

experiment_name = 'DEMO-sagemaker-experiments-dvc'

# create the experiment if it doesn't exist
try:
    my_experiment = Experiment.load(experiment_name=experiment_name)
    print("existing experiment loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_experiment = Experiment.create(
            experiment_name = experiment_name,
            description = "How to integrate DVC"
        )
        print("new experiment created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

การทดสอบที่ 1: สร้างไฟล์เดียวสำหรับการฝึกอบรมและการตรวจสอบ

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

ขั้นแรก เราสร้าง dvc-trial-single-file ทดลองและเพิ่มลงใน DEMO-sagemaker-experiments-dvc การทดลอง. การทำเช่นนี้จะทำให้องค์ประกอบการทดลองใช้ทั้งหมดที่เกี่ยวข้องกับการทดสอบนี้ได้รับการจัดระเบียบอย่างมีความหมาย

first_trial_name = "dvc-trial-single-file"

try:
    my_first_trial = Trial.load(trial_name=first_trial_name)
    print("existing trial loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_first_trial = Trial.create(
            experiment_name=experiment_name,
            trial_name=first_trial_name,
        )
        print("new trial created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

ใช้ DVC ในงานประมวลผล SageMaker เพื่อสร้างเวอร์ชันไฟล์เดียว

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

สุดท้าย เรารวมความสามารถในการติดตาม DVC เข้ากับความสามารถในการติดตามของ SageMaker เมื่อเรียกใช้งานการประมวลผลผ่าน SageMaker Experiments

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

  • DVC_REPO_URL
  • DVC_BRANCH
  • USER
  • data_commit_hash
  • train_test_split_ratio

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

สคริปต์ Python ที่ประมวลผลล่วงหน้าแบบเต็มมีอยู่ในไฟล์ repo GitHub.

with Tracker.load() as tracker:
    tracker.log_parameters({"data_commit_hash": commit_hash})
    for file_type in file_types:
        path = dvc.api.get_url(
            f"{data_path}/{file_type}/california_{file_type}.csv",
            repo=dvc_repo_url,
            rev=dvc_branch
        )
        tracker.log_output(name=f"california_{file_type}",value=path)

SageMaker เปิดโอกาสให้เราเรียกใช้สคริปต์การประมวลผลบนอิมเมจคอนเทนเนอร์ที่จัดการโดย AWS ซึ่งได้รับการปรับให้เหมาะสมให้ทำงานบนโครงสร้างพื้นฐานของ AWS หากสคริปต์ของเราต้องการการพึ่งพาเพิ่มเติม เราสามารถจัดหา a requirements.txt ไฟล์. เมื่อเราเริ่มงานการประมวลผล SageMaker จะใช้ pip-install เพื่อติดตั้งไลบรารีทั้งหมดที่เราต้องการ (เช่น ไลบรารีที่เกี่ยวข้องกับ DVC) หากคุณต้องการควบคุมไลบรารีทั้งหมดที่ติดตั้งบนคอนเทนเนอร์อย่างเข้มงวดยิ่งขึ้น คุณสามารถนำคอนเทนเนอร์ของคุณเองมาไว้ใน SageMaker เช่น การประมวลผล และการฝึกอบรม

ตอนนี้เรามีส่วนผสมทั้งหมดเพื่อใช้งานการประมวลผล SageMaker ของเรา:

  • สคริปต์การประมวลผลที่สามารถประมวลผลหลายอาร์กิวเมนต์ (--train-test-split-ratio) และสองตัวแปรด้านสิ่งแวดล้อม (DVC_REPO_URL และ DVC_BRANCH)
  • A requiremets.txt ไฟล์
  • ที่เก็บ Git (ใน CodeCommit)
  • การทดลองและทดลองใช้ SageMaker
from sagemaker.processing import FrameworkProcessor, ProcessingInput
from sagemaker.sklearn.estimator import SKLearn

dvc_repo_url = "codecommit::{}://sagemaker-dvc-sample".format(region)
dvc_branch = my_first_trial.trial_name

script_processor = FrameworkProcessor(
    estimator_cls=SKLearn,
    framework_version='0.23-1',
    instance_count=1,
    instance_type='ml.m5.xlarge',
    env={
        "DVC_REPO_URL": dvc_repo_url,
        "DVC_BRANCH": dvc_branch,
        "USER": "sagemaker"
    },
    role=role
)

experiment_config={
    "ExperimentName": my_experiment.experiment_name,
    "TrialName": my_first_trial.trial_name
}

จากนั้นเราเรียกใช้งานการประมวลผลด้วย preprocessing-experiment.py สคริปต์ experiment_config, dvc_repo_urlและ dvc_branch เรากำหนดไว้ก่อนหน้านี้

%%time

script_processor.run(
    code='./source_dir/preprocessing-experiment.py',
    dependencies=['./source_dir/requirements.txt'],
    inputs=[ProcessingInput(source=s3_data_path, destination="/opt/ml/processing/input")],
    experiment_config=experiment_config,
    arguments=["--train-test-split-ratio", "0.2"]
)

งานประมวลผลใช้เวลาประมาณ 5 นาทีจึงจะเสร็จสมบูรณ์ ตอนนี้คุณสามารถดูรายละเอียดการทดลองใช้สำหรับชุดข้อมูลไฟล์เดียว

ภาพหน้าจอต่อไปนี้แสดงตำแหน่งที่คุณสามารถค้นหาข้อมูลที่จัดเก็บไว้ใน Studio สังเกตค่าสำหรับ dvc-trial-single-file in DVC_BRANCH, DVC_REPO_URLและ data_commit_hash บน พารามิเตอร์ แถบ

แท็บพารามิเตอร์การทดสอบ SageMaker

ให้สังเกตรายละเอียดอินพุตและเอาต์พุตบน ศิลปวัตถุ แถบ

แท็บสิ่งประดิษฐ์การทดสอบ SageMaker

สร้างตัวประมาณค่าและปรับโมเดลให้พอดีกับเวอร์ชันข้อมูลไฟล์เดียว

ในการใช้การรวม DVC ภายในงานการฝึกอบรม SageMaker เราผ่าน a dvc_repo_url และ dvc_branch เป็นตัวแปรสภาพแวดล้อมเมื่อคุณสร้างอ็อบเจ็กต์ Estimator

เราฝึกบน dvc-trial-single-file สาขาแรก.

เมื่อดึงข้อมูลด้วย DVC เราใช้โครงสร้างชุดข้อมูลต่อไปนี้:

dataset
    |-- train
    |   |-- california_train.csv
    |-- test
    |   |-- california_test.csv
    |-- validation
    |   |-- california_validation.csv

ตอนนี้เราสร้าง Scikit-learn Estimator โดยใช้ SageMaker Python SDK. ซึ่งช่วยให้เราสามารถระบุสิ่งต่อไปนี้:

  • พาธไปยังไฟล์ต้นทางของ Python ซึ่งควรรันเป็นจุดเริ่มต้นของการฝึก
  • บทบาท IAM ที่ควบคุมการอนุญาตสำหรับการเข้าถึงข้อมูล Amazon S3 และ CodeCommit และการเรียกใช้ฟังก์ชัน SageMaker
  • รายชื่อพจนานุกรมที่กำหนดตัวชี้วัดที่ใช้ในการประเมินงานการฝึกอบรม
  • จำนวนและประเภทของอินสแตนซ์การฝึกอบรม เราใช้หนึ่งอินสแตนซ์ ml.m5.large
  • ไฮเปอร์พารามิเตอร์ที่ใช้สำหรับการฝึก
  • ตัวแปรสภาพแวดล้อมที่จะใช้ในระหว่างการฝึกอบรมงาน เราใช้ DVC_REPO_URL, DVC_BRANCHและ USER.
metric_definitions = [{'Name': 'median-AE', 'Regex': "AE-at-50th-percentile: ([0-9.]+).*$"}]

hyperparameters={ 
        "learning_rate" : 1,
        "depth": 6
    }
estimator = SKLearn(
    entry_point='train.py',
    source_dir='source_dir',
    role=role,
    metric_definitions=metric_definitions,
    hyperparameters=hyperparameters,
    instance_count=1,
    instance_type='ml.m5.large',
    framework_version='0.23-1',
    base_job_name='training-with-dvc-data',
    environment={
        "DVC_REPO_URL": dvc_repo_url,
        "DVC_BRANCH": dvc_branch,
        "USER": "sagemaker"
    }
)

experiment_config={
    "ExperimentName": my_experiment.experiment_name,
    "TrialName": my_first_trial.trial_name
}

เราเรียกเมธอด fit ของ Estimator ด้วย Experiment_config ที่เรากำหนดไว้ก่อนหน้านี้เพื่อเริ่มการฝึก

%%time
estimator.fit(experiment_config=experiment_config)

งานฝึกอบรมใช้เวลาประมาณ 5 นาทีจึงจะเสร็จสมบูรณ์ บันทึกแสดงบรรทัดเหล่านั้น ซึ่งระบุไฟล์ที่ DVC ดึง:

Running dvc pull command
A       train/california_train.csv
A       test/california_test.csv
A       validation/california_validation.csv
3 files added and 3 files fetched
Starting the training.
Found train files: ['/opt/ml/input/data/dataset/train/california_train.csv']
Found validation files: ['/opt/ml/input/data/dataset/train/california_train.csv']

การทดสอบ 2: สร้างหลายไฟล์สำหรับการฝึกอบรมและการตรวจสอบ

เราสร้างใหม่ dvc-trial-multi-files ทดลองและเพิ่มเป็นปัจจุบัน DEMO-sagemaker-experiments-dvc การทดลอง

second_trial_name = "dvc-trial-multi-files"
try:
    my_second_trial = Trial.load(trial_name=second_trial_name)
    print("existing trial loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_second_trial = Trial.create(
            experiment_name=experiment_name,
            trial_name=second_trial_name,
        )
        print("new trial created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

ต่างจากสคริปต์ประมวลผลแรก ตอนนี้เราสร้างไฟล์หลายไฟล์จากชุดข้อมูลดั้งเดิมสำหรับการฝึกอบรมและการตรวจสอบ และจัดเก็บข้อมูลเมตา DVC ในสาขาอื่น

คุณสามารถสำรวจสคริปต์ Python ที่ประมวลผลล่วงหน้าตัวที่สองได้บน GitHub.

%%time

script_processor.run(
    code='./source_dir/preprocessing-experiment-multifiles.py',
    dependencies=['./source_dir/requirements.txt'],
    inputs=[ProcessingInput(source=s3_data_path, destination="/opt/ml/processing/input")],
    experiment_config=experiment_config,
    arguments=["--train-test-split-ratio", "0.1"]
)

งานประมวลผลใช้เวลาประมาณ 5 นาทีจึงจะเสร็จสมบูรณ์ ตอนนี้คุณสามารถดูรายละเอียดการทดลองใช้สำหรับชุดข้อมูลหลายไฟล์

ภาพหน้าจอต่อไปนี้แสดงตำแหน่งที่คุณสามารถค้นหาข้อมูลที่จัดเก็บไว้ภายใน SageMaker Experiments ในส่วน ส่วนประกอบทดลอง ส่วนภายใน Studio UI สังเกตค่าสำหรับ dvc-trial-multi-files in DVC_BRANCH, DVC_REPO_URLและ data_commit_hash บน พารามิเตอร์ แถบ

แท็บพารามิเตอร์การทดลองหลายไฟล์ของ SageMaker

คุณยังสามารถตรวจสอบรายละเอียดอินพุตและเอาต์พุตบน ศิลปวัตถุ แถบ

แท็บสิ่งประดิษฐ์การทดลองหลายไฟล์ของ SageMaker

ตอนนี้เราฝึกบน dvc-trial-multi-files สาขา. เมื่อดึงข้อมูลด้วย DVC เราใช้โครงสร้างชุดข้อมูลต่อไปนี้:

dataset
    |-- train
    |   |-- california_train_1.csv
    |   |-- california_train_2.csv
    |   |-- california_train_3.csv
    |   |-- california_train_4.csv
    |   |-- california_train_5.csv
    |-- test
    |   |-- california_test.csv
    |-- validation
    |   |-- california_validation_1.csv
    |   |-- california_validation_2.csv
    |   |-- california_validation_3.csv

เช่นเดียวกับที่เราทำก่อนหน้านี้ เราสร้าง Scikit-learn Estimator ใหม่ด้วยชื่อการทดลอง dvc-trial-multi-files และเริ่มงานฝึกอบรม

%%time

estimator.fit(experiment_config=experiment_config)

งานฝึกอบรมใช้เวลาประมาณ 5 นาทีจึงจะเสร็จสมบูรณ์ ในการส่งออกบันทึกงานการฝึกไปที่โน้ตบุ๊ก คุณสามารถดูบรรทัดเหล่านั้น ซึ่งระบุไฟล์ที่ DVC ดึงมา:

Running dvc pull command
A       validation/california_validation_2.csv
A       validation/california_validation_1.csv
A       validation/california_validation_3.csv
A       train/california_train_4.csv
A       train/california_train_5.csv
A       train/california_train_2.csv
A       train/california_train_3.csv
A       train/california_train_1.csv
A       test/california_test.csv
9 files added and 9 files fetched
Starting the training.
Found train files: ['/opt/ml/input/data/dataset/train/california_train_2.csv', '/opt/ml/input/data/dataset/train/california_train_5.csv', '/opt/ml/input/data/dataset/train/california_train_4.csv', '/opt/ml/input/data/dataset/train/california_train_1.csv', '/opt/ml/input/data/dataset/train/california_train_3.csv']
Found validation files: ['/opt/ml/input/data/dataset/validation/california_validation_2.csv', '/opt/ml/input/data/dataset/validation/california_validation_1.csv', '/opt/ml/input/data/dataset/validation/california_validation_3.csv']

โฮสต์โมเดลของคุณใน SageMaker

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

from sagemaker.serializers import CSVSerializer

predictor = estimator.deploy(1, "ml.t2.medium", serializer=CSVSerializer())

อันดับแรก เราได้รับชุดข้อมูลการทดสอบล่าสุดในเครื่องโน้ตบุ๊กสำหรับการพัฒนาใน Studio เพื่อจุดประสงค์นี้ เราสามารถใช้ dvc.api.read() เพื่อโหลดข้อมูลดิบที่จัดเก็บไว้ใน Amazon S3 โดยงานประมวลผล SageMaker

import io
import dvc.api

raw = dvc.api.read(
    "dataset/test/california_test.csv",
    repo=dvc_repo_url,
    rev=dvc_branch
)

จากนั้นเราก็เตรียมข้อมูลโดยใช้ Pandas โหลดไฟล์ CSV ทดสอบ แล้วโทร predictor.predict เพื่อเรียกใช้ตำแหน่งข้อมูล SageMaker ที่สร้างขึ้นก่อนหน้านี้ พร้อมข้อมูล และรับการคาดคะเน

test = pd.read_csv(io.StringIO(raw), sep=",", header=None)
X_test = test.iloc[:, 1:].values
y_test = test.iloc[:, 0:1].values

predicted = predictor.predict(X_test)
for i in range(len(predicted)-1):
    print(f"predicted: {predicted[i]}, actual: {y_test[i][0]}")

ลบปลายทาง

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

predictor.delete_endpoint()

ทำความสะอาด

ก่อนที่คุณจะลบทรัพยากรทั้งหมดที่คุณสร้างขึ้น ตรวจสอบให้แน่ใจว่าแอพทั้งหมดถูกลบออกจาก data-scientist-dvc ผู้ใช้ รวมถึงแอป KernelGateway ทั้งหมด ตลอดจนแอป JupiterServer เริ่มต้น

จากนั้น คุณสามารถทำลายสแต็ก AWS CDK ได้โดยเรียกใช้คำสั่งต่อไปนี้:

cdk destroy

หากคุณใช้โดเมนที่มีอยู่ ให้รันคำสั่งต่อไปนี้ด้วย:

# inject your DOMAIN_ID into the configuration file
sed -i 's/<your-sagemaker-studio-domain-id>/'"$DOMAIN_ID"'/' ../update-domain-no-custom-images.json
# update the sagemaker studio domain
aws --region ${REGION} sagemaker update-domain --cli-input-json file://../update-domain-no-custom-images.json

สรุป

ในโพสต์นี้ คุณจะได้ดูตัวอย่างวิธีติดตามการทดสอบของคุณในโค้ด ข้อมูล สิ่งประดิษฐ์ และเมตริกโดยใช้ SageMaker Experiments และงานการประมวลผลและการฝึกอบรมของ SageMaker ร่วมกับ DVC เราสร้างอิมเมจ Docker ที่มี DVC ซึ่งจำเป็นสำหรับ Studio เป็นโน้ตบุ๊กสำหรับการพัฒนา และแสดงให้เห็นว่าคุณสามารถใช้การประมวลผลและงานฝึกอบรมกับ DVC ได้อย่างไร เราเตรียมข้อมูลสองเวอร์ชันและใช้ DVC เพื่อจัดการกับ Git จากนั้นคุณใช้ SageMaker Experiments เพื่อติดตามการประมวลผลและการฝึกอบรมด้วยข้อมูลสองเวอร์ชันเพื่อให้มีมุมมองที่เป็นหนึ่งเดียวของพารามิเตอร์ สิ่งประดิษฐ์ และหน่วยเมตริกในบานหน้าต่างกระจกเดียว สุดท้าย คุณปรับใช้โมเดลกับตำแหน่งข้อมูล SageMaker และใช้ชุดข้อมูลการทดสอบจากเวอร์ชันชุดข้อมูลที่สองเพื่อเรียกใช้จุดข้อมูล SageMaker และรับการคาดการณ์

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

สำหรับการอ่านเพิ่มเติม โปรดดูแหล่งข้อมูลต่อไปนี้:


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

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

เอตัน เซล่าเอตัน เซล่า เป็นสถาปนิกโซลูชันผู้เชี่ยวชาญด้านการเรียนรู้ของเครื่องด้วย Amazon Web Services เขาทำงานร่วมกับลูกค้าของ AWS เพื่อให้คำแนะนำและความช่วยเหลือด้านเทคนิค ช่วยสร้างและใช้งานโซลูชันแมชชีนเลิร์นนิงบน AWS ในเวลาว่าง Eitan สนุกกับการวิ่งจ็อกกิ้งและอ่านบทความแมชชีนเลิร์นนิงล่าสุด

ประทับเวลา:

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