ทดลองใช้ Amazon SageMaker Studio กับ SageMaker Autopilot ทำงาน Machine Learning

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「Amazon SageMaker Studioを使って機械学習をやってみる」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

What is Amazon SageMaker?

Amazon SageMaker คือ Service บริการจัดการ Machine learning ตั้งแต่การสร้าง Machine learning model ถึง Training ~ Deploy ครับ
ที่จะจัดการในปัญหาโครงสร้างพื้นฐาน, Training, การตั้งค่าพาราเมเตอร์ หรือ Model evaluation ที่เกิดขึ้นในการใช้ Machine learning จริงๆ
*ไม่ได้ทำให้ทั้งหมด จำเป็นต้องมีความรู้เกี่ยวกับ Machine learning ด้วย

งานของ Sage Maker จะทำใน Jupyter Notebook ครับ
ตั้งแต่ Data cleansing ~ model training ~ ถึง deploy ครับ เราจะบันทึกผลข้อมูล ไปพร้อมๆกับวิเคราะห์ข้อมูลครับ

What is Jupyter Notebook?

Jupyter Notebook คือ เครื่องมือการวิเคราะห์ข้อมูลเชิงโต้ตอบผ่าน browser ครับ
(หรือเรียกง่ายๆว่า เครื่องมือเขียนโค้ดบน browser ครับ)
เราจะเขียนโปรแกรมและรันผ่านไฟล์ที่เรียกว่า Notebook
สามารถใช้งานแสลงผลได้ทั้ง บทความ(ใช้ Markdown ได้) หรือผลลัพท์ของโปรแกรมได้ในตัวเดียว ถือว่าสะดวกดีครับ

What is Amazon SageMaker Studio?

Amazon SageMaker Studioคือ「Fully Integrated Development Environment For Machine Learning」ครับ

ถ้าเป็น Amazon SageMaker ธรรมดาๆล่ะก็ ก็แค่การรันโค้ด Python ตามลำดับไปบน Jupyter Notebook ครับ
ยกตัวอย่างเช่น ตอน tuning พาราเมเตอร์ใน Machine learning เราจะเทสหรือตรวจสอบอะไรหลายๆอย่าง เราจำเป็นต้องควบคุมผลลัพท์เองทุกอย่าง ซึ่งมันยุ่งยากมากๆ แต่เหมือนว่าเราสามารถรวบรวมงานเหล่านั้นมาไว้ทำที่เดียวได้ที่ Amazon SageMaker Studio ครับ

Amazon SageMaker Studio มี Web base UI
สามารถทำงานทุกขั้นตอนที่เกี่ยวกับ Machine learning ในตัวเองได้
การสร้าง Model, การ Training Model, การปรับพาราเมเตอร์ หรือ Deploy
รวมไปทั้ง การสร้าง หรือ การดำเนินการการคาดการณ์ผลสรุป endpoint ก็สามารถทำได้บน UI ของ Amazon SageMaker Studio เอง

What is Amazon SageMaker Autopilot?

Amazon SageMaker Autopilot คือ Service ที่จะ Training ปรับแต่ง Machine learning model ตามข้อมูลที่มีที่เหมาะสมที่สุดสำหรับการ For classification / regression "โดยอัตโนมัติ"

แค่คลิก Amazon SageMaker Studio เพียงไม่กี่คลิก คุณก็สามารถทำ Autopilot task ตามด้านล่างได้

  • ตรวจสอบชุดข้อมูลและประมวลผลข้อมูลล่วงหน้า
  • Machine learning algorithm, ทดลองการหาชุดค่าผสมที่เหมาะสมของไฮเปอร์พารามิเตอร์

โดยพวกนี้จะถูกดำเนินการบน Fully managed infrastructure ครับ

แล้ว Autopilot ยังสามารถสร้าง Python เพื่อแสดงให้เห็นได้ข้อมูลจะถูกประมวณผลล่างหน้าอย่างได้อย่างไร
ทำให้เราสามารถดูได้ว่า Autopilot จะมีการทำงานอย่างไร
แล้วสามารถ customize โดยใช้โค้ดนั้นได้

Machine Learning work with Amazon SageMaker Studio

Setup Amazon SageMaker Studio

ก่อนอื่นเราต้องทำให้ SageMaker Studio อยู่ในสภาพที่ใช้งานได้
โดยเราจะ Set Up SageMaker Studio ตาม บทความนี้
ก่อนอื่นให้เปิด SageMaker จาก AWS Management Console tool

แล้วให้เรากด Getting Started แล้วกด Set up SageMaker Domain ตามรูปเลยครับ

แล้วให้ใส่ชื่อที่ name ของ studio เรานะครับ

แล้วในช่องต่อมาของ Default execution role ให้เราเลือก Create a new role ครับ

แล้วให้เราเลือก Any S3 bucket แล้วเลือก Create role ครับ

จากนั้นให้เรากด ปุ่มส้มๆ Submit ได้เลยครับ

ถ้าเรากด Submit แล้วมีหน้า VPC ขึ้นมาให้เราเลือก
เพื่อความเข้าใจง่ายของบทความ ให้เราเลือกตามภาพด้านล่างที่เห็นได้เลยครับ

จากนั้นให้รอ SageMaker Studio สร้างเสร็จครับ...
.
.
.
เมื่อสร้างเสร็จแล้วจะมี Studio ที่เราสร้างโผล่ขึ้นมา ให้กด Launch app Studio ตามภาพที่เห็นได้เลยครับ

จากนั้นเมื่อกดเข้าไปจะใช้เวลานานนิดนึงในการเข้าครั้งแรก ให้เรารอครับ... .
.
.
เมื่อเข้ามาแล้ว ให้เรามาโฟกัสที่ Launcher เลื่อนลงไปด้านล่างจะเห็น Image Terminal ให้เรากดเพื่อเปิดใช้งาน Terminal ครับ

เมือเปิดใช้งาน Terminal แล้วให้ใช้คำสั่งด้านล่าง↓ เพื่อดึงตัวอย่างไฟล์ที่จะทดลองในบทความนี้มากจาก Github ครับ

git clone https://github.com/awslabs/amazon-sagemaker-examples.git

พอโหลดเสร็จแล้วเราจะได้ไฟล์โฟล์เดอร์ amazon-sagemaker-examples/
สังเกตด้านซ้ายมือจะเห็นรูปโฟล์เดอร์ ให้เรากดไป จะมีรายชื่อไฟล์ต่างๆที่อยู่ในนี้
ให้เราเข้าไป amazon-sagemaker-examples/aws_sagemaker_studio/getting_started
แล้วเปิดไฟล์ที่มีชื่อว่า xgboost_customer_churn_studio.ipynb ครับ
เปิดมาครั้งแรกจะเห็นหน้าต่างนี้ให้กด Select ได้เลยครับ

ในหน้าต่างนี้จะสอนเราเกี่ยวกับการใช้งานต่างๆใน Amazon SageMaker Studio โดยเราสามารถกดปุ่ม ▶ เพื่อรันโค้ดที่อยู่ในช่องนั้นได้

*ในการรันโค้ดต่างๆอาจจะใช้เวลา ให้รอสักพักนึงก่อน (โดยเฉพาะประเภทที่ต้องลงโปรแกรมต่างๆ)

ลองใช้ Amazon SageMaker Autopilot

ในการทดลองครับนี้ หากไม่มีการปรับแต่งเพิ่มเติม(ทำตามขั้นในบทความนี้ทุกอย่าง) จะมีค่าใช้จ่ายราว 100$+ (ราว 3500 บาท)
กรุณาพิจารณาให้ถี่ถ้วนก่อนการดำเนินการ

งั้นเราจะลองสร้าง experiment ใน Amazon SageMaker Autopilot แล้วลองใช้ Training Model กันครับ
พอสร้าง experiment หลังจากนั้นเราใช้ SageMaker วิเคราะห์ข้อมูล
แล้วกำหนดคำจำกัดความของโมเดลกับ Jupyter Notebook
แล้ว SageMaker จะจัดการ Training Model หรือปรับแต่ง พาราเมเตอร์ให้ครับ

โดยในการทดลองครั้งนี้เราจะใช้ "direct marketing dataset" ที่เตรียมมาให้ แล้วใช้ Machine Learning Model อนุมานตรวจสอบ
โดย dataset นี้เป็น csv ที่เกี่ยวกับ direct marketing ของธนาคาร ที่มีข้อมูลเกี่ยวกับ อายุ หรือ งานต่างๆ มากมาย
และข้อมูล "y" ที่อยู่ใน field สุดท้าย จะเป็นผลลัพท์ว่า "คุณลูกค้าคนนี้จะสมัครเงินฝากประจำหรือไม่"
โดยเราจะใช้ Machine Learning Model ที่เราได้จากการ Training มาคาดเดาว่าผลลัพท์นี้

โดยก่อนอื่นให้โหลด Dataset ก่อนจากฟังก์ชั่นด้านล่างโดยการสร้าง notebook ใหม่

แล้วเขียนฟังก์ชั่นนี้จะสร้างโฟล์เดอร์ bank-additional ที่ Root Directory

!wget -N https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
!unzip -o bank-additional.zip

local_data_path = './bank-additional/bank-additional-full.csv'


(สำหรับคนที่มีปัญหาลองไปโหลดไฟล์มาลงเองแบบ Manual ได้ที่
https://archive.ics.uci.edu/ml/datasets/bank+marketing)
* โดยถ้าโหลดไฟล์มาให้อัพ bank-full.csv ลง แล้วอย่าลืมเปลี่ยน path ของ data ในขั้นตอนต่อไปนะครับ
   โดยเมื่อโหลดเสร็จแล้วเราสามารถเปิดดู csv ได้
* ถ้าเปิดแล้วไม่เหมือน ให้ลองเปลี่ยนเป็น data = pd.read_csv('.pathไฟล์csvของคุณ', sep=';')

import pandas as pd

data = pd.read_csv('./path/your/bank-additional-full.csv')
pd.set_option('display.max_columns', 500)     # Make sure we can see all of the columns
pd.set_option('display.max_rows', 50)         # Keep the output on one page
data[:10] # Show the first 10 lines


ต่อไปเราจะเตรียมไฟล์ที่จะเอาไป Train training-set.csv และไป Test test-set.csv กันนะครับ

import numpy as np

train_data, test_data, _ = np.split(data.sample(frac=1, random_state=123), 
                                                  [int(0.95 * len(data)), int(len(data))])  

# Save to CSV files
train_data.to_csv('training-set.csv', index=False, header=True, sep=',')
test_data.to_csv('test-set.csv', index=False, header=True, sep=',')

เมื่อเรารันโค้ดเสร็จก็จะได้ไฟล์ training-set.csv และ test-set.csv ครับ

แล้วให้เราโหลดเก็บไฟล์ training-set.csv ไว้ในเครื่องเราครับ โดยคลิกขวาที่ไฟล์ แล้วเลือก Download ครับ

จากนั้นให้เรากลับมาที่ AWS Management Console ให้ไปที่ Service S3 แล้วเลือกสร้าง Bucket ใหม่
โดยให้เราจด Bucket name ที่สร้างสร้างนะครับ เพราะต้องใช้ในขั้นตอนต่อไป

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ S3 สามารถดูได้ที่ลิ้งค์ด้านล่างครับ

แล้วทำการอัพโหลดไฟล์ training-set.csv ที่เราโหลดมาเมื่อกี้ลงใน S3 ที่เราสร้างขึ้น

แล้วกลับไปที่ SageMaker Studio
กดแถบทางด้านซ้าย สีส้มๆ แล้วเลือก Experiments and trials แล้วกดปุ่ม Create Autopilot Experiment

จากนั้นให้ตั้งค่าตามนี้

Experiment name: ตั้งชื่อการทดลอง
Connect your data: ⚫ Find S3 Bucket
S3 bucket name: เลือก bucket ที่เราสร้างขึ้น
Dataset file name: training-set.csv
Output data location (S3 bucket): ⚫ Find S3 Bucket
S3 bucket name: เลือก bucket ที่เราสร้างขึ้น
Target: y
Auto deploy: Off

แล้วหลังจากนั้นให้เรากด Create Experiment

จากนั้นให้เรารอ Experiment เสร็จ ซึ่งในส่วนนี้ใช้เวลาค่อนข้างนาน (จากการเทสตอนเขียนบทความนี้ ขั้นตอนนี้ใช้เวลาไปประมาณ 6 ชม+)
เราจึงแนะนำว่า หากไม่มีธุระที่ต้องใช้คอมให้ปิดคอมไปก่อนเลย แล้วค่อยกลับมาเปิดใหม่ได้(ทำงานบนคลาวด์ไม่ได้ใช้ CPU GPU เครื่องเรา)
โดยวิธีในการเปิดใหม่คือ คลิกขวาที่ชื่อ Experiment แล้วเลือก Describe AutoML Job หรือ Open in trial component list จะสามารถดูหน้าต่างการทดลองได้

.
.
.
เมื่อเราเสร็จการทดลองแล้วให้ไปดู ในหมวด Describe AutoML Jobจะมีผลการทดลองของเราอยู่
โดยอันที่มีเขียนว่า Best model คือตัว Training ที่มีผลการทดลองดีที่สุด

Deploy Model & inference

เมื่อเราได้ผลการทดลองที่สุดแล้วเราก็จะนำมันไป Deploy เพื่อใช้ในการอนุมาน หรือ คาดเดา ครับ
โดนการคลิกขวาที่ Best model แล้วเลือก Deploy model ครับ

โดยต่อไปในหน้า Deployment options   มีการตั้งค่าหลายอย่าง แต่ที่จำเป็นคือมีดังนี้

  1. จำชื่อ Endpoint name
  2. Instance type ถ้าแค่การทดลองใช้ให้เลือกตัวเล็กๆ จะได้ไม่เปลืองตัง
  3. เลือก S3 ที่จะเอาข้อมูลไปเก็บ

    เมื่อกรอกข้อมูลเสร็จแล้วกด Deploy model แล้วก็รอไปอีกสักพักนึง(ใช้เวลาประมาณ 30 นาที ถึง 1 ชั่วโมง)
    เพราะต้องใช้เวลาในการสร้าง Endpoint .
    .
    .
    โดยเราสามารถดูว่า Endpoint เราสร้างเสร็จรึยังในหน้า Endpoint
    ถ้าขึ้น Status ว่า InService หมายความว่าสร้างเสร็จแล้ว

แล้วจากนั้นเราจะมาลองใช้ model ที่เราได้ไป Test กับ test_data.to_csv กันครับ

โดยใช้โค้ดด้านล่างครับ

import boto3

runtime_client = boto3.client('runtime.sagemaker')
endpoint_name = 'your Experiment Endpoint name'

#ให้อนุมานตัวหมายเลข 1
s = test_data.to_csv(index=False).split()[1]
l = s.split(',')
l.pop() #ลบ data ใน y field
single_data = ','.join(l)

#ทดสอบอนุมาน คาดคะเน
response = runtime_client.invoke_endpoint(EndpointName = endpoint_name,
                                         ContentType = 'text/csv',
                                         Body = single_data.encode())
result = response['Body'].read().decode('ascii')
print('Predicted result is {}'.format(result))

*หากรันไม่ผ่านให้รัน หมายเลข [9] ที่เห็นในรูปแล้วค่อยกดรันอีกที (หรือให้เช็ค endpoint ว่าเขียนถูกไหม)

โดยจะได้ผลลัพท์ตามด้านล่างนี้ครับ

#ผลลัพท์
Predicted result is no

ขั้นตอนการลบ Resource ที่สร้างขึ้นมาในครั้งนี้

ฝั่ง SageMaker

เราสามารถปิดการใช้งาน Instance ที่ใช้สำหรับการทำงาน SageMaker Studio ได้ที่ปุ่มนี้
โดยกดแล้วให้เราเลือก Shut down all

* หรือเราสามารถกดปิดได้เลยโดยกดแถบเมนูด้านบน เลือก FileShut DownShutdown All

ต่อมาเราทำการลบ App Default โดยมาที่ SageMaker Service → Control panelชื่อ Studio ที่เราสร้างขึ้น

แล้วเลือก ActionDelete

แล้วกดปุ่ม Yes, delete app หลังจากนั้นพิมพ์ delete แล้วกดปุ่ม Delete

แล้วให้เรารอขึ้น Status Deleted สีแดง (แปลว่าลบเสร็จแล้ว)

เมื่อขึ้น Deleted แล้วให้เรากดปุ่ม Edit ที่ขวาล่าง

แล้วเลือก Delete user

แล้วกดปุ่ม Yes, delete app หลังจากนั้นพิมพ์ delete แล้วกดปุ่ม Delete

เป็นอันเสร็จสิ้นการลบ SageMaker ครับ

ลบ SageMaker Endpoint

ให้เราไปที่ Service SageMaker แล้วเลือกดูฟังก์ชัน Endpoints แล้วเลือก Endpoint ที่จะลบ กด Actions Delete จะมีหน้าต่างขึ้นมาให้ยืนยัน กด Delete อีกที

ลบ IAM Role

เราจำเป็นต้องลบ IAM Role ที่สร้างขึ้นมาใส่ให้กับ SageMaker ด้วยครับ
โดยให้ไปที่ IAM Service แล้วให้กดที่ Roleพิมพ์ sagemakerเลือก Roleที่เราสร้างขึ้น

แล้วกดปุ่ม Delete ด้านขวาบนครับ

แล้วพิมพ์ชื่อ Role ลงในช่อง แล้วกด Delete ได้เลยครับ

ลบ S3 Bucket

ให้เราไปที่ Service S3 เพื่อดูว่ามี Bucket ที่เราสร้างขึ้นจากการใช้งาน SageMaker รึเปล่า
โดยถ้ามีให้เราเลือก S3 Bucket ที่เราต้องการลบ
จากนั้นกด (1) Empty แล้วพิมพ์ permanently delete กด Empty
จากนั้นกด (2) Delete แล้วพิมพ์ ชื่อของ bucket กด Delete bucket

ลบ Elastic File System

ให้เราไปที่ Service Elastic File System เพื่อดูว่ามี File systems ที่เราสร้างขึ้นจากการใช้งาน SageMaker รึเปล่า โดยถ้ามีให้เราเลือก File system ที่เราต้องการลบ
กดไปที่ File systems แล้วเลือกไฟล์ของเรา กด Delete ใส่ชื่อไฟล์เรา กด Confirm

สรุป

เป็นยังไงกันบ้างครับกับ SageMaker Studio ด้วยการแลกกับค่าใช้จ่ายที่สูง มันสามารถเริ่มได้ทุกอย่างในตัวมันเอง
โดยส่วนตัวเจ้าของบทความเคยทำเกี่ยวกับ Machine Learning มาก่อนในช่วงเรียน
รู้สึกได้เลยครับว่าการทำงานบน Cloud นี่มันเบาเครื่องดีจริงๆ ขอแค่เรามีข้อมูลก็สามารถทำงานได้แล้ว
โดบทความนี้เป็นการใช้ที่เบสิกมากจริงๆ อาจจะมีหลายอย่างที่ตกหล่นไป
และไม่ได้โชว์ความสามารถเจ้าตัวนี้ไม่ได้หมด ถ้าหากท่านผู้ใดสนใจอยากลองใช้ Machine Learning บน Cloud ก็สามารถไปลองกันได้ครับกับ SageMaker Studio

บทความต้นฉบับ

Amazon SageMaker Studioを使って機械学習をやってみる | DevelopersIO

บทความที่เกี่ยวข้อง

ดูรายละเอียดเพิ่มเติมได้ที่นี่ สอบถามเพิ่มเติมเกี่ยวกับ AWS คลิกที่นี่