Xây dựng, đào tạo và triển khai mô hình machine learning
bằng Amazon SageMaker
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng Amazon SageMaker để xây dựng, đào tạo và triển khai mô hình machine learning (ML). Chúng ta sẽ sử dụng thuật toán ML phổ biến XGBoost cho bài tập này. Amazon SageMaker là dịch vụ machine learning dạng mô-đun được quản lý toàn phần, cho phép các nhà phát triển và nhà khoa học dữ liệu xây dựng, đào tạo và triển khai các mô hình machine learning với quy mô bất kỳ.
Việc triển khai mô hình machine learning từ lý thuyết vào giai đoạn sản xuất thường phức tạp và cần nhiều thời gian. Bạn phải quản lý lượng lớn dữ liệu để đào tạo mô hình, chọn thuật toán tốt nhất để đào tạo mô hình, quản lý năng lực điện toán trong khi đào tạo, cuối cùng triển khai mô hình đó vào môi trường sản xuất. Amazon SageMaker giảm thiểu sự phức tạp này bằng cách làm cho việc xây dựng và triển khai các mô hình ML dễ dàng hơn nhiều. Sau khi bạn chọn thuật toán và framework phù hợp từ hàng loạt lựa chọn có sẵn, dịch vụ này quản lý tất cả cơ sở hạ tầng nền tảng để đào tạo mô hình của bạn ở quy mô petabyte và triển khai mô hình đó vào giai đoạn sản xuất.
Trong hướng dẫn này, bạn sẽ đảm nhận vai trò của một nhà phát triển machine learning làm việc tại ngân hàng. Bạn được yêu cầu phát triển một mô hình machine learning để dự đoán liệu khách hàng có đăng ký chứng chỉ tiền gửi (CD) hay không. Mô hình sẽ được đào tạo về tập dữ liệu tiếp thị có chứa thông tin nhân khẩu học của khách hàng, phản hồi về các sự kiện tiếp thị và các yếu tố bên ngoài.
Dữ liệu đã được dán nhãn để thuận tiện cho bạn và một cột trong tập dữ liệu xác định xem khách hàng có được đăng ký cho một sản phẩm được cung cấp bởi ngân hàng hay không. Một phiên bản của tập dữ liệu này có sẵn công khai từ kho lưu trữ ML do Đại học California, Irvine quản lý. Hướng dẫn này triển khai một mô hình machine learning có giám sát kể từ khi dữ liệu được dán nhãn. (Quá trình học không giám sát xảy ra khi các tập dữ liệu không được dán nhãn).
Trong hướng dẫn này, bạn sẽ:
- Tạo phiên bản sổ ghi chép
- Chuẩn bị dữ liệu
- Đào tạo mô hình để học từ dữ liệu
- Triển khai mô hình
- Đánh giá hiệu năng của mô hình ML
Hướng dẫn này yêu cầu tài khoản AWS
Các tài nguyên mà bạn tạo trong hướng dẫn này đủ điều kiện hưởng Bậc miễn phí.
Bước 1. Mở bảng điều khiển Amazon SageMaker
Điều hướng đến bảng điều khiển Amazon SageMaker.
Khi bạn nhấp vào đây, Bảng điều khiển quản lý AWS sẽ mở ra trong cửa sổ mới để bạn có thể giữ hướng dẫn từng bước này luôn mở. Bắt đầu nhập SageMaker vào thanh tìm kiếm và chọn Amazon SageMaker để mở bảng điều khiển dịch vụ.
Bước 2. Tạo phiên bản sổ ghi chép Amazon SageMaker
Trong bước này, bạn sẽ tạo một phiên bản sổ ghi chép Amazon SageMaker.
2b. Trên trang Tạo phiên bản sổ ghi chép, nhập tên trong trường Tên phiên bản sổ ghi chép. Hướng dẫn này sử dụng MySageMakerInstance làm tên phiên bản nhưng bạn có thể chọn tên khác nếu muốn.
Đối với hướng dẫn này, bạn có thể giữ Loại phiên bản sổ ghi chép mặc định là ml.t2.medium.
Để cho phép phiên bản sổ ghi chép truy cập và tải dữ liệu lên Amazon S3 một cách bảo mật, bạn phải chỉ định một vai trò IAM. Trong trường Vai trò IAM, chọn Tạo vai trò mới để Amazon SageMaker tạo vai trò với các quyền cần thiết và gán vai trò đó cho phiên bản của bạn. Ngoài ra, bạn cũng có thể chọn vai trò IAM hiện có trong tài khoản của mình.
2c. Trong ô Tạo vai trò IAM, chọn Bộ chứa S3 bất kỳ. Tùy chọn này cho phép phiên bản Amazon SageMaker của bạn truy cập vào tất cả bộ chứa S3 trong tài khoản của bạn. Ở phần sau của hướng dẫn này, bạn sẽ tạo bộ chứa S3 mới. Tuy nhiên, nếu muốn dùng bộ chứa bạn đã có sẵn, hãy chọn Chỉ định bộ chứa S3 và chỉ định tên bộ chứa đó.
Chọn Tạo vai trò.
Bước 3. Chuẩn bị dữ liệu
Trong bước này, bạn sẽ sử dụng sổ ghi chép Amazon SageMaker của mình để xử lý trước dữ liệu cần thiết để đào tạo mô hình machine learning.
3a. Trên trang Phiên bản sổ ghi chép, hãy đợi cho đến khi MySageMakerInstance chuyển từ trạng thái Đang chờ xử lý sang Đang hoạt động.
Sau khi bạn thấy trạng thái Đang hoạt động, hãy chọn MySageMakerInstance và mở phiên bản này bằng menu thả xuống Hành động hoặc bằng cách chọn Mở Jupyter bên cạnh trạng thái Đang hoạt động.
3c. Để chuẩn bị dữ liệu, đào tạo và triển khai mô hình ML, bạn sẽ cần nhập một số thư viện và xác định một vài biến môi trường trong môi trường sổ ghi chép Jupyter của bạn. Sao chép đoạn mã sau vào ô mã trong phiên bản của bạn rồi chọn Chạy.
Trong khi đoạn mã chạy, một dấu hoa thị * sẽ xuất hiện giữa các dấu ngoặc vuông như được chụp lại trong ảnh chụp màn hình đầu tiên bên phải. Sau vài giây, đoạn mã sẽ thực thi xong. Dấu * sẽ được thay thế bằng số 1 và bạn sẽ thấy một thông báo thành công như được chụp lại trong ảnh chụp màn hình thứ hai bên phải.
# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import Image
from IPython.display import display
from time import gmtime, strftime
from sagemaker.predictor import csv_serializer
# Define IAM role
role = get_execution_role()
prefix = 'sagemaker/DEMO-xgboost-dm'
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'} # each region has its XGBoost container
my_region = boto3.session.Session().region_name # set the region of the instance
print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + containers[my_region] + " container for your SageMaker endpoint.")
3d. Trong bước này, bạn tạo một bộ chứa S3 để lưu trữ dữ liệu dành cho hướng dẫn này.
Sao chép đoạn mã sau vào ô mã tiếp theo trong sổ ghi chép của bạn và đổi tên của bộ chứa S3 để không bị trùng. Tên bộ chứa S3 phải là duy nhất trên toàn cầu và có một số hạn chế cũng như giới hạn khác.
Chọn Chạy. Nếu bạn không nhận được thông báo thành công, hãy đổi tên bộ chứa và thử lại.
bucket_name = 'your-s3-bucket-name' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET
s3 = boto3.resource('s3')
try:
if my_region == 'us-east-1':
s3.create_bucket(Bucket=bucket_name)
else:
s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
print('S3 bucket created successfully')
except Exception as e:
print('S3 error: ',e)
3e. Tiếp theo, bạn cần tải dữ liệu xuống phiên bản Amazon SageMaker của mình và tải dữ liệu vào một dataframe (tập hợp dữ liệu phân tán dạng cột). Sao chép và Chạy đoạn mã sau:
try:
urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
print('Success: downloaded bank_clean.csv.')
except Exception as e:
print('Data load error: ',e)
try:
model_data = pd.read_csv('./bank_clean.csv',index_col=0)
print('Success: Data loaded into dataframe.')
except Exception as e:
print('Data load error: ',e)
3f. Bây giờ, chúng ta sẽ xáo trộn dữ liệu rồi chia thành dữ liệu đào tạo và dữ liệu kiểm thử.
Dữ liệu đào tạo (70% khách hàng) sẽ được sử dụng trong suốt vòng lặp đào tạo mô hình. Chúng ta sẽ sử dụng thuật toán tối ưu hóa dựa trên vector gradient để liên tục tinh chỉnh tham số của mô hình. Phương pháp này là một cách để tìm giá trị tham số giúp giảm thiểu tối đa lỗi mô hình bằng cách sử dụng vector gradient của hàm mất mát cho mô hình.
Dữ liệu kiểm thử (30% khách hàng còn lại) sẽ được sử dụng để đánh giá hiệu năng của mô hình và đo lường mức độ hiệu quả khả năng khái quát hóa của mô hình được đào tạo đối với dữ liệu chưa biết.
Sao chép đoạn mã sau vào ô mã mới và chọn Chạy để xáo trộn và chia dữ liệu:
train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])
print(train_data.shape, test_data.shape)
Bước 4. Đào tạo mô hình từ dữ liệu
Trong bước này, bạn sẽ đào tạo mô hình machine learning bằng tập dữ liệu đào tạo.
4a. Để sử dụng mô hình dựng trước XGBoost của Amazon SageMaker, bạn sẽ cần định dạng lại tiêu đề và cột đầu tiên của dữ liệu đào tạo và tải dữ liệu từ bộ chứa S3.
Sao chép đoạn mã sau vào ô mã mới và chọn Chạy để định dạng lại và tải dữ liệu:
pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')
s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')
4b. Tiếp theo, bạn cần thiết lập phiên Amazon SageMaker, tạo phiên bản cho mô hình XGBoost (một công cụ ước tính) và xác định hyperparameter (tham số có giá trị được đặt trước khi quá trình học bắt đầu) của mô hình. Sao chép đoạn mã dưới đây vào ô mã mới và chọn Chạy:
sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(containers[my_region],role, train_instance_count=1, train_instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),sagemaker_session=sess)
xgb.set_hyperparameters(max_depth=5,eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,silent=0,objective='binary:logistic',num_round=100)
4c. Với dữ liệu đã được tải và công cụ ước tính XGBoost đã được thiết lập, hãy đào tạo mô hình bằng thuật toán tối ưu dựa trên vector gradient trên phiên bản ml.m4.xlarge bằng cách sao chép đoạn mã sau vào ô mã tiếp theo rồi chọn Chạy.
Sau vài phút, bạn sẽ bắt đầu thấy nhật ký đào tạo được tạo.
xgb.fit({'train': s3_input_train})
Bước 5. Triển khai mô hình
Trong bước này, bạn sẽ triển khai mô hình đã được đào tạo đến điểm cuối, định dạng lại sau đó tải dữ liệu CSV, rồi chạy mô hình để tạo dự đoán.
5b. Để dự đoán khách hàng trong dữ liệu kiểm thử có đăng ký sử dụng sản phẩm ngân hàng hay không, hãy sao chép đoạn mã sau vào ô mã tiếp theo rồi chọn Chạy:
test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.content_type = 'text/csv' # set the data type for an inference
xgb_predictor.serializer = csv_serializer # set the serializer type
predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!
predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array
print(predictions_array.shape)
Bước 6. Đánh giá hiệu năng của mô hình
Trong bước này, bạn sẽ đánh giá hiệu năng và độ chính xác của mô hình machine learning.
6a. Sao chép và dán đoạn mã dưới đây rồi chọn Chạy để so sánh giá trị thực tế với giá trị dự đoán trong bảng có tên confusion matrix (ma trận nhầm lẫn).
Dựa trên dự đoán, chúng ta có thể kết luận rằng bạn đã dự đoán chính xác 90% khách hàng trong dữ liệu kiểm thử sẽ đăng ký chứng chỉ tiền gửi, với độ chính xác là 65% (278/429) cho khách hàng đăng ký và 90% (10.785 / 11.928) cho khách hàng không đăng ký.
cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100
print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))
print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))
print("Observed")
print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))
print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))
Bước 7. Chấm dứt tài nguyên
Trong bước này, bạn sẽ chấm dứt các tài nguyên liên quan đến Amazon SageMaker.
Quan trọng: Việc chấm dứt các tài nguyên không được sử dụng chủ động sẽ làm giảm chi phí và là biện pháp tốt nhất. Nếu bạn không chấm dứt tài nguyên thì sẽ phát sinh thêm chi phí.
Xin chúc mừng!
Bạn đã tìm hiểu cách sử dụng Amazon SageMaker để chuẩn bị, đào tạo, triển khai và đánh giá một mô hình machine learning. Amazon SageMaker sẽ khiến việc xây dựng các mô hình ML trở nên dễ dàng bằng cách cung cấp mọi thứ bạn cần để nhanh chóng kết nối với dữ liệu huấn luyện của bạn, cũng như chọn thuật toán và framework tốt nhất cho ứng dụng của bạn. Đồng thời, dịch vụ này cũng quản lý tất cả cơ sở hạ tầng nền tảng để bạn có thể đào tạo mô hình ở quy mô petabyte.
Được đề xuất tiếp theo:
Tìm hiểu thêm
Amazon SageMaker đi kèm các thuật toán machine learning dựng sẵn có thể được sử dụng trong nhiều trường hợp sử dụng khác nhau. Tìm hiểu thêm về việc sử dụng thuật toán tích hợp đi kèm với Amazon SageMaker.
Phân tích chuyên sâu hơn
Bạn có thể sử dụng Machine Learning với tính năng Tự động điều chỉnh mô hình trong Amazon SageMaker. Tính năng này giúp bạn tự động điều chỉnh các hyperparameter trong mô hình của mình để đạt được kết quả tốt nhất có thể. Hãy xem tài liệu dành cho tính năng Tự động điều chỉnh mô hình và bài đăng blog này để tìm hiểu kỹ hơn về tính năng này.
Quan sát cách thức hoạt động
Amazon SageMaker có nhiều sổ ghi chép mẫu để giải quyết rất nhiều trường hợp sử dụng phổ biến cho machine learning. Hãy xem các sổ ghi chép này trên GitHub!