Xây dựng, huấn luyện và triển khai mô hình XGTăng trên Cloud AI Platform

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ thực hiện một quy trình học máy hoàn chỉnh trên GCP. Từ môi trường Cloud AI Platform Notebooks, bạn sẽ nhập dữ liệu từ một tập dữ liệu công khai của BigQuery, xây dựng và huấn luyện một mô hình XGBoost, đồng thời triển khai mô hình đó lên Nền tảng Trí tuệ nhân tạo để dự đoán.

Kiến thức bạn sẽ học được

Bạn sẽ tìm hiểu cách:

  • Nhập và phân tích một tập dữ liệu BigQuery trong Sổ tay Nền tảng Trí tuệ nhân tạo
  • Xây dựng mô hình XGBoost
  • Triển khai mô hình XGBoost cho Nền tảng Trí tuệ nhân tạo và nhận thông tin dự đoán

Tổng chi phí để chạy bài tập này trên Google Cloud là khoảng 1 USD.

2. Thiết lập môi trường

Bạn cần có một dự án trên Google Cloud Platform đã bật tính năng thanh toán để chạy lớp học lập trình này. Để tạo một dự án, hãy làm theo hướng dẫn tại đây.

Bước 1: Bật Cloud AI Platform Models API

Chuyển đến phần Mô hình Nền tảng Trí tuệ nhân tạo của bảng điều khiển Cloud rồi nhấp vào Enable (Bật) nếu bạn chưa bật.

d0d38662851c6af3.png

Bước 2: Bật Compute Engine API

Chuyển đến Compute Engine rồi chọn Bật nếu bạn chưa bật. Bạn sẽ cần thông tin này để tạo phiên bản sổ tay.

Bước 3: Tạo một phiên bản AI Platform Notebooks

Chuyển đến mục AI Platform Notebooks của bảng điều khiển Cloud rồi nhấp vào New Instance (Phiên bản mới). Sau đó, hãy chọn loại phiên bản Python mới nhất:

a81c82876c6c16f9.png

Sử dụng các lựa chọn mặc định rồi nhấp vào Tạo. Sau khi tạo phiên bản, hãy chọn Open JupyterLab (Mở JupyterLab):

Bước 4: Cài đặt XGBoost

Sau khi mở phiên bản JupyterLab, bạn sẽ cần thêm gói XGBoost.

Để làm việc này, hãy chọn Terminal (Thiết bị đầu cuối) trong trình chạy:

28dcf2790ce77c96.png

Sau đó, hãy chạy lệnh sau để cài đặt phiên bản XGBoost mới nhất mà Nền tảng Trí tuệ nhân tạo hỗ trợ:

pip3 install xgboost==0.82

Sau khi quá trình này hoàn tất, hãy mở một phiên bản Sổ tay Python 3 từ trình chạy. Bạn đã sẵn sàng bắt đầu trong sổ tay của mình!

Bước 5: Nhập các gói Python

Trong ô đầu tiên của sổ tay, hãy thêm các mục nhập sau và chạy ô. Bạn có thể kích hoạt lệnh này bằng cách nhấn nút mũi tên phải trong trình đơn trên cùng hoặc nhấn tổ hợp phím command-enter:

import pandas as pd
import xgboost as xgb
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery

3. Khám phá tập dữ liệu BigQuery

BigQuery đã cung cấp công khai nhiều tập dữ liệu để bạn khám phá. Trong lớp học lập trình này, chúng ta sẽ sử dụng tập dữ liệu về tỷ lệ sinh. Tập dữ liệu này chứa thông tin về gần như mọi ca sinh ở Hoa Kỳ trong khoảng thời gian 40 năm, bao gồm cả cân nặng khi sinh của trẻ và thông tin nhân khẩu học về cha mẹ của trẻ. Chúng ta sẽ sử dụng một tập hợp con của các đặc điểm để dự đoán cân nặng của trẻ sơ sinh khi chào đời.

Bước 1: Tải dữ liệu BigQuery xuống sổ tay của chúng ta

Chúng ta sẽ sử dụng thư viện ứng dụng Python cho BigQuery để tải dữ liệu xuống một Pandas DataFrame. Tập dữ liệu ban đầu có dung lượng 21 GB và chứa 123 triệu hàng. Để đơn giản hoá,chúng ta sẽ chỉ sử dụng 10.000 hàng trong tập dữ liệu.

Tạo truy vấn và xem trước DataFrame kết quả bằng mã sau. Ở đây, chúng ta sẽ lấy 4 đặc điểm từ tập dữ liệu ban đầu, cùng với cân nặng của trẻ sơ sinh (điều mà mô hình của chúng ta sẽ dự đoán). Tập dữ liệu này có từ nhiều năm trước, nhưng đối với mô hình này, chúng ta sẽ chỉ sử dụng dữ liệu từ sau năm 2000:

query="""
SELECT
  weight_pounds,
  is_male,
  mother_age,
  plurality,
  gestation_weeks
FROM
  publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()

Để xem thông tin tóm tắt về các đối tượng bằng số trong tập dữ liệu, hãy chạy:

df.describe()

Điều này cho thấy giá trị trung bình, độ lệch chuẩn, giá trị tối thiểu và các chỉ số khác cho các cột số của chúng tôi. Cuối cùng, hãy lấy một số dữ liệu trên cột boolean cho biết giới tính của em bé. Chúng ta có thể thực hiện việc này bằng phương thức value_counts của Pandas:

df['is_male'].value_counts()

Có vẻ như tập dữ liệu gần như cân bằng 50/50 theo giới tính.

4. Chuẩn bị dữ liệu để huấn luyện

Trong phần này, chúng ta sẽ chia dữ liệu thành các tập huấn luyện và kiểm thử để chuẩn bị cho việc huấn luyện mô hình.

Bước 1: Trích xuất cột nhãn

Trước tiên, hãy loại bỏ các hàng có giá trị rỗng khỏi tập dữ liệu và xáo trộn dữ liệu:

df = df.dropna()
df = shuffle(df, random_state=2)

Tiếp theo, hãy trích xuất cột nhãn thành một biến riêng biệt và tạo DataFrame chỉ có các đối tượng của chúng ta:

labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])

Giờ đây, nếu xem trước tập dữ liệu bằng cách chạy data.head(), bạn sẽ thấy 4 đặc điểm mà chúng ta sẽ dùng để huấn luyện.

Bước 2: Chuyển đổi các đặc điểm phân loại thành số nguyên

Vì XGBoost yêu cầu tất cả dữ liệu phải là dạng số, nên chúng ta cần thay đổi cách biểu thị dữ liệu trong cột is_male. Hiện tại, cột này là các chuỗi True / False. Chúng ta có thể thực hiện việc đó bằng cách thay đổi loại cột:

data['is_male'] = data['is_male'].astype(int)

Bước 3: Chia dữ liệu thành tập huấn luyện và tập kiểm thử

Chúng ta sẽ sử dụng tiện ích train_test_split của Scikit Learn mà chúng ta đã nhập vào đầu sổ tay để chia dữ liệu thành các tập hợp huấn luyện và kiểm thử:

x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)

Giờ đây, chúng ta đã sẵn sàng xây dựng và huấn luyện mô hình của mình!

5. Kiến thức cơ bản về XGBoost

XGBoost là một khung học máy sử dụng cây quyết địnhtăng cường độ dốc để xây dựng các mô hình dự đoán. Thuật toán này hoạt động bằng cách kết hợp nhiều cây quyết định dựa trên điểm số liên kết với các nút lá khác nhau trong một cây.

Biểu đồ dưới đây là hình ảnh minh hoạ đơn giản về mạng lưới cây kết hợp cho một mô hình đánh giá xem một người có thích một trò chơi máy tính cụ thể hay không (ví dụ này lấy từ tài liệu XGBoost):

fb061cd8c8f69999.png

Tại sao chúng tôi sử dụng XGBoost cho mô hình này? Mặc dù các mạng nơ-ron truyền thống đã được chứng minh là hoạt động hiệu quả nhất trên dữ liệu không có cấu trúc như hình ảnh và văn bản, nhưng cây quyết định thường hoạt động cực kỳ hiệu quả trên dữ liệu có cấu trúc như tập dữ liệu thế chấp mà chúng ta sẽ sử dụng trong lớp học lập trình này.

6. Xây dựng, huấn luyện và đánh giá mô hình XGBoost

Bước 1: Xác định và huấn luyện mô hình XGBoost

Việc tạo mô hình trong XGBoost rất đơn giản. Chúng ta sẽ dùng lớp XGBRegressor để tạo mô hình và chỉ cần truyền tham số objective phù hợp cho tác vụ cụ thể của mình. Ở đây, chúng ta đang sử dụng một mô hình hồi quy vì chúng ta đang dự đoán một giá trị bằng số (trọng lượng của em bé). Nếu thay vào đó, chúng ta phân loại dữ liệu để xác định xem một em bé nặng hơn hay nhẹ hơn 6 pound, thì chúng ta sẽ sử dụng mô hình phân loại.

Trong trường hợp này, chúng ta sẽ dùng reg:squarederror làm mục tiêu của mô hình.

Đoạn mã sau đây sẽ tạo một mô hình XGBoost:

model = xgb.XGBRegressor(
    objective='reg:linear'
)

Bạn có thể huấn luyện mô hình bằng một dòng mã, gọi phương thức fit() và truyền cho phương thức này dữ liệu huấn luyện và nhãn.

model.fit(x_train, y_train)

Bước 2: Đánh giá mô hình của bạn trên dữ liệu kiểm thử

Giờ đây, chúng ta có thể dùng mô hình đã huấn luyện để tạo dự đoán về dữ liệu kiểm thử bằng hàm predict():

y_pred = model.predict(x_test)

Hãy xem mô hình hoạt động như thế nào trên 20 giá trị đầu tiên trong tập kiểm định của chúng ta. Dưới đây, chúng ta sẽ in trọng lượng dự đoán của em bé cùng với trọng lượng thực tế của em bé cho từng ví dụ kiểm thử:

for i in range(20):
    print('Predicted weight: ', y_pred[i])
    print('Actual weight: ', y_test.iloc[i])
    print()

Bước 3: Lưu mô hình

Để triển khai mô hình, hãy chạy mã sau để lưu mô hình vào một tệp cục bộ:

model.save_model('model.bst')

7. Triển khai mô hình lên Nền tảng Trí tuệ nhân tạo Cloud

Chúng ta đã có mô hình hoạt động cục bộ, nhưng sẽ rất tốt nếu chúng ta có thể đưa ra dự đoán về mô hình đó ở mọi nơi (không chỉ trong sổ tay này!). Trong bước này, chúng ta sẽ triển khai ứng dụng lên đám mây.

Bước 1: Tạo một bộ chứa Cloud Storage cho mô hình của chúng ta

Trước tiên, hãy xác định một số biến môi trường mà chúng ta sẽ sử dụng trong phần còn lại của lớp học lập trình. Điền các giá trị bên dưới bằng tên dự án trên đám mây của Google Cloud, tên của vùng bộ nhớ trên đám mây mà bạn muốn tạo (phải là tên duy nhất trên toàn cầu) và tên phiên bản cho phiên bản đầu tiên của mô hình:

# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'

Giờ đây, chúng ta đã sẵn sàng tạo một vùng lưu trữ để lưu trữ tệp mô hình XGBoost. Chúng ta sẽ trỏ Nền tảng Trí tuệ nhân tạo của Cloud đến tệp này khi triển khai.

Chạy lệnh gsutil này trong sổ tay để tạo một nhóm:

!gsutil mb $MODEL_BUCKET

Bước 2: Sao chép tệp mô hình vào Cloud Storage

Tiếp theo, chúng ta sẽ sao chép tệp mô hình đã lưu XGBoost vào Cloud Storage. Chạy lệnh gsutil sau:

!gsutil cp ./model.bst $MODEL_BUCKET

Chuyển đến trình duyệt bộ nhớ trong Cloud Console để xác nhận rằng tệp đã được sao chép:

31e2567fa0117214.png

Bước 3: Tạo và triển khai mô hình

Lệnh ai-platform gcloud sau đây sẽ tạo một mô hình mới trong dự án của bạn. Chúng ta sẽ gọi số này là xgb_mortgage:

!gcloud ai-platform models create $MODEL_NAME

Giờ là lúc triển khai mô hình. Chúng ta có thể thực hiện việc đó bằng lệnh gcloud sau:

!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT

Trong khi quá trình này đang chạy, hãy kiểm tra mục mô hình trong bảng điều khiển Nền tảng Trí tuệ nhân tạo. Bạn sẽ thấy phiên bản mới của mình được triển khai ở đó:

a431661f9c3e6cb2.png

Khi quá trình triển khai hoàn tất thành công, bạn sẽ thấy dấu kiểm màu xanh lục ở vị trí của biểu tượng tải. Quá trình triển khai sẽ mất 2-3 phút.

Bước 4: Kiểm thử mô hình đã triển khai

Để đảm bảo mô hình đã triển khai của bạn đang hoạt động, hãy kiểm thử bằng cách sử dụng gcloud để đưa ra một dự đoán. Trước tiên, hãy lưu một tệp JSON có 2 ví dụ trong tập kiểm định của chúng ta:

%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]

Kiểm thử mô hình của bạn bằng cách lưu đầu ra của lệnh gcloud sau vào một biến và in biến đó:

prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)

Bạn sẽ thấy kết quả dự đoán của mô hình trong đầu ra. Trọng lượng thực tế của trẻ sơ sinh trong hai ví dụ này lần lượt là 1,9 và 8,1 pound.

8. Dọn dẹp

Nếu muốn tiếp tục sử dụng sổ tay này, bạn nên tắt sổ tay khi không dùng. Trong giao diện người dùng Notebooks của Cloud Console, hãy chọn sổ tay rồi chọn Dừng:

879147427150b6c7.png

Nếu bạn muốn xoá tất cả tài nguyên đã tạo trong phòng thí nghiệm này, chỉ cần xoá phiên bản sổ tay thay vì dừng phiên bản đó.

Sử dụng trình đơn Điều hướng trong Cloud Console, duyệt tìm Storage rồi xoá cả hai vùng chứa mà bạn đã tạo để lưu trữ các thành phần mô hình.