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ẽ:

  1. Tạo phiên bản sổ ghi chép
  2. Chuẩn bị dữ liệu
  3. Đào tạo mô hình để học từ dữ liệu
  4. Triển khai mô hình
  5. Đánh giá hiệu năng của mô hình ML
 
Các tài nguyên mà bạn tạo và sử dụng trong hướng dẫn này đủ điều kiện hưởng bậc miễn phí AWS. Hãy nhớ hoàn tất Bước 7 và chấm dứt tài nguyên của bạn. Nếu tài khoản của bạn vẫn hoạt động với các tài nguyên này lâu hơn 2 tháng, thì tài khoản sẽ bị tính phí chưa đến 0,5 USD.
 

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í. 

Thông tin thêm về 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ụ.

(Nhấp vào để phóng to)


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. 


2a. Từ bảng thông tin Amazon SageMaker, chọn Phiên bản sổ ghi chép

(Nhấp vào để phóng to)


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.

(Nhấp vào để phóng to)


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ò.

(Nhấp vào để phóng to)


2d. Chú ý rằng Amazon SageMaker đã tạo cho bạn một vai trò với tên gọi AmazonSageMaker-ExecutionRole-***.

Đối với hướng dẫn này, chúng ta sẽ sử dụng giá trị mặc định cho các trường khác. Chọn Tạo phiên bản sổ ghi chép.

(Nhấp vào để phóng to)


2e. Trên trang Phiên bản sổ ghi chép, bạn sẽ thấy phiên bản sổ ghi chép mới MySageMakerInstance của mình ở trạng thái Đang chờ xử lý.

Phiên bản sổ ghi chép của bạn sẽ chuyển từ trạng thái Đang chờ xử lý sang Đang hoạt động trong chưa đến 2 phút.

(Nhấp vào để phóng to)


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.

(Nhấp vào để phóng to)

(Nhấp vào để phóng to)


3b. Sau khi Jupyter đã mở, từ tab Tệp, hãy chọn Mới rồi chọn conda_python3

(Nhấp vào để phóng to)


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.")

(Nhấp vào để phóng to)

(Nhấp vào để phóng to)


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)

(Nhấp vào để phóng to)


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)

(Nhấp vào để phóng to)


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)

(Nhấp vào để phóng to)


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})

(Nhấp vào để phóng to)


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.


5a. Để triển khai mô hình trên máy chủ và tạo điểm cuối mà bạn có thể truy cập, hãy sao chép đoạn mã sau vào ô mã tiếp theo rồi chọn Chạy:

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')

(Nhấp vào để phóng to)


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)

(Nhấp vào để phóng to)


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))

(Nhấp vào để phóng to)


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í.


7a. Để xóa điểm cuối Amazon SageMaker và các đối tượng trong bộ chứa S3, hãy sao chép, dán rồi Chạy đoạn mã sau:  

sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)
bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()

(Nhấp vào để phóng to)


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.


 

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ìnhbà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!