Giới thiệu
Bài viết này sẽ hướng dẫn bạn cách sử dụng Amazon SageMaker để phát triển, đào tạo, điều chỉnh và triển khai mô hình máy học (ML) dựa trên Scikit-learn, cụ thể là mô hình Random Forest. Dữ liệu mẫu được sử dụng trong bài viết này là California Housing dataset, một tập dữ liệu nổi tiếng trong lĩnh vực học máy.
Mục tiêu
Mục tiêu chính của bài viết là giúp bạn hiểu được quy trình chuẩn bị dữ liệu, triển khai mã nguồn và thực hiện đào tạo mô hình trên nền tảng Amazon SageMaker.
Chuẩn bị môi trường
Để bắt đầu, bạn cần thiết lập môi trường với các thư viện cần thiết. Dưới đây là đoạn mã để thiết lập môi trường:
python
import datetime
import tarfile
import boto3
import pandas as pd
import numpy as np
from sagemaker import get_execution_role
import sagemaker
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing
sm_boto3 = boto3.client("sagemaker")
sess = sagemaker.Session()
region = sess.boto_session.region_name
bucket = sess.default_bucket()
print("Sử dụng bucket: " + bucket)
Chuẩn bị dữ liệu
Sử dụng tập dữ liệu California Housing từ thư viện sklearn, chúng ta sẽ chia nhỏ dữ liệu và tải lên Amazon S3:
python
data = fetch_california_housing()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.25, random_state=42)
trainX = pd.DataFrame(X_train, columns=data.feature_names)
trainX["target"] = y_train
testX = pd.DataFrame(X_test, columns=data.feature_names)
testX["target"] = y_test
trainX.to_csv("california_housing_train.csv")
testX.to_csv("california_housing_test.csv")
trainpath = sess.upload_data(path="california_housing_train.csv", bucket=bucket, key_prefix="sagemaker/sklearncontainer")
testpath = sess.upload_data(path="california_housing_test.csv", bucket=bucket, key_prefix="sagemaker/sklearncontainer")
Tạo mã Script Mode
Tiếp theo, chúng ta sẽ tạo mã nguồn cho cả việc đào tạo và suy luận trong mô hình. Đây là tập lệnh cơ bản:
python
import argparse
import joblib
import os
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
# Hàm để tải mô hình
def model_fn(model_dir):
clf = joblib.load(os.path.join(model_dir, "model.joblib"))
return clf
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--n-estimators", type=int, default=10)
parser.add_argument("--min-samples-leaf", type=int, default=3)
parser.add_argument("--model-dir", type=str, default=os.environ.get("SM_MODEL_DIR"))
parser.add_argument("--train", type=str, default=os.environ.get("SM_CHANNEL_TRAIN"))
parser.add_argument("--test", type=str, default=os.environ.get("SM_CHANNEL_TEST"))
parser.add_argument("--train-file", type=str, default="california_housing_train.csv")
parser.add_argument("--test-file", type=str, default="california_housing_test.csv")
parser.add_argument("--features", type=str)
parser.add_argument("--target", type=str)
args, _ = parser.parse_known_args()
train_df = pd.read_csv(os.path.join(args.train, args.train_file))
test_df = pd.read_csv(os.path.join(args.test, args.test_file))
X_train = train_df[args.features.split()]
y_train = train_df[args.target]
model = RandomForestRegressor(n_estimators=args.n_estimators, min_samples_leaf=args.min_samples_leaf)
model.fit(X_train, y_train)
joblib.dump(model, os.path.join(args.model_dir, "model.joblib"))
Đào tạo mô hình
Chúng ta sẽ sử dụng Estimator từ SDK của SageMaker để tiến hành đào tạo:
python
from sagemaker.sklearn.estimator import SKLearn
FRAMEWORK_VERSION = "0.23-1"
sklearn_estimator = SKLearn(...)
sklearn_estimator.fit({"train": trainpath, "test": testpath}, wait=True)
Điều chỉnh mô hình
Việc điều chỉnh siêu tham số có thể được thực hiện bằng cách sử dụng Hyperparameter Tuner:
python
from sagemaker.tuner import IntegerParameter
hyperparameter_ranges = {...}
Optimizer = sagemaker.tuner.HyperparameterTuner(...)
Optimizer.fit({"train": trainpath, "test": testpath})
Triển khai mô hình
Sau khi đào tạo xong, bạn có thể triển khai mô hình để sử dụng:
python
from sagemaker.sklearn.model import SKLearnModel
model = SKLearnModel(...)
predictor = model.deploy(...)
Gọi dự đoán
Cuối cùng, ta có thể thực hiện dự đoán bằng cách gọi mô hình đã được triển khai:
python
response = runtime.invoke_endpoint(...)
print(response["Body"].read())
Kết luận
Bài viết đã hướng dẫn chi tiết các bước triển khai, đào tạo và điều chỉnh mô hình Random Forest bằng Amazon SageMaker. Qua đó, bạn có thể ứng dụng vào các bài toán thực tế trong lĩnh vực học máy.