1. Tổng quan
Trong lớp học lập trình này, bạn sẽ sử dụng Vertex AI để nhận kết quả dự đoán trực tuyến và hàng loạt từ một mô hình được huấn luyện tuỳ chỉnh.
Lớp học lập trình này nằm trong loạt video Từ nguyên mẫu đến sản phẩm hoàn thiện. Hãy nhớ hoàn tất lớp học lập trình trước trước khi dùng thử bài tập này. Bạn có thể xem video đi kèm để tìm hiểu thêm:
.
Kiến thức bạn sẽ học được
Bạn sẽ tìm hiểu cách:
- Tải mô hình lên Vertex AI Model Registry
- Triển khai mô hình đến một điểm cuối
- Nhận thông tin dự đoán trực tuyến và hàng loạt thông tin dự đoán bằng giao diện người dùng và SDK
Tổng chi phí để chạy lớp học này trên Google Cloud là khoảng 1 USD.
2. Giới thiệu về Vertex AI
Lớp học này sử dụng sản phẩm AI mới nhất có trên Google Cloud. Vertex AI tích hợp các giải pháp học máy trên Google Cloud vào một trải nghiệm phát triển liền mạch. Trước đây, bạn có thể truy cập vào các mô hình được huấn luyện bằng AutoML và mô hình tuỳ chỉnh thông qua các dịch vụ riêng biệt. Sản phẩm mới kết hợp cả hai thành một API duy nhất, cùng với các sản phẩm mới khác. Bạn cũng có thể di chuyển các dự án hiện có sang Vertex AI.
Vertex AI bao gồm nhiều sản phẩm để hỗ trợ quy trình làm việc toàn diện về máy học. Lớp học này sẽ tập trung vào các sản phẩm được nêu dưới đây: Dự đoán và Workbench
3. Thiết lập môi trường
Hoàn tất các bước trong lớp học Huấn luyện mô hình tuỳ chỉnh bằng Vertex AI để thiết lập môi trường.
4. Tải mô hình lên sổ đăng ký
Trước khi có thể sử dụng mô hình để nhận kết quả dự đoán, chúng ta cần tải mô hình đó lên Đăng ký mô hình Vertex AI. Đây là kho lưu trữ nơi bạn có thể quản lý vòng đời của các mô hình học máy.
Bạn có thể tải mô hình lên khi thiết lập một công việc đào tạo tuỳ chỉnh, như trình bày dưới đây.
Hoặc bạn có thể nhập mô hình sau khi công việc huấn luyện hoàn tất, miễn là bạn lưu trữ các cấu phần phần mềm mô hình đã lưu trong một bộ chứa trên Cloud Storage. Đây là tuỳ chọn mà chúng ta sẽ sử dụng trong lớp học lập trình này.
Chuyển đến phần Mô hình trong bảng điều khiển.
Chọn NHẬP
Chọn Nhập dưới dạng mô hình mới rồi đặt tên cho mô hình
Trong phần Cài đặt mô hình, hãy nhập mô hình bằng vùng chứa tạo sẵn và sử dụng TensorFlow 2.8. Bạn có thể xem danh sách đầy đủ các vùng chứa dự đoán được tạo sẵn tại đây.
Sau đó, hãy cung cấp đường dẫn đến bộ chứa bộ nhớ trên đám mây nơi bạn đã lưu các cấu phần phần mềm của mô hình trong công việc huấn luyện tuỳ chỉnh. Hàm này sẽ có dạng như gs://{PROJECT_ID}-bucket/model_output
Chúng tôi sẽ bỏ qua phần Giải thích, nhưng nếu bạn muốn tìm hiểu thêm về Vertex Explainable AI, hãy xem tài liệu.
Khi mô hình được nhập, bạn sẽ thấy mô hình đó trong sổ đăng ký.
Xin lưu ý rằng nếu muốn thực hiện việc này thông qua SDK thay vì giao diện người dùng, bạn có thể chạy mã sau từ sổ tay Workbench để tải mô hình lên.
from google.cloud import aiplatform
my_model = aiplatform.Model.upload(display_name='flower-model',
artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')
5. Triển khai mô hình đến điểm cuối
Có hai loại công việc dự đoán mà chúng ta có thể chạy trong Vertex AI: hàng loạt và trực tuyến.
Dự đoán theo lô là một yêu cầu không đồng bộ. Phương thức này phù hợp khi bạn không yêu cầu phản hồi ngay và muốn xử lý dữ liệu được tích luỹ trong một yêu cầu duy nhất.
Mặt khác, nếu muốn nhận kết quả dự đoán có độ trễ thấp từ dữ liệu được truyền trực tiếp đến mô hình, bạn sẽ sử dụng tính năng dự đoán trực tuyến.
Giờ đây, khi mô hình đã có trong sổ đăng ký, chúng ta có thể sử dụng mô hình đó để dự đoán hàng loạt.
Nhưng nếu muốn nhận được thông tin dự đoán trực tuyến, chúng ta phải triển khai mô hình đến một điểm cuối. Thao tác này liên kết các cấu phần phần mềm của mô hình đã lưu với tài nguyên thực tế để dự đoán có độ trễ thấp.
Để triển khai cho một điểm cuối, hãy chọn biểu tượng ba dấu chấm ở ngoài cùng bên phải của mô hình, sau đó chọn Deploy to Endpoint (Triển khai cho điểm cuối).
Đặt tên cho điểm cuối, sau đó giữ nguyên các chế độ cài đặt còn lại rồi nhấp vào TIẾP TỤC
Điểm cuối hỗ trợ phương thức tự động cấp tài nguyên bổ sung, tức là bạn có thể đặt mức tối thiểu và tối đa, sau đó, các nút điện toán sẽ điều chỉnh tỷ lệ để đáp ứng nhu cầu về lưu lượng truy cập trong những ranh giới đó.
Vì lớp học này chỉ để minh hoạ và chúng ta sẽ không sử dụng điểm cuối này cho lưu lượng truy cập cao, nên bạn có thể đặt Số lượng ghi chú điện toán tối đa thành 1 và chọn n1-standard-4 làm Loại máy.
Chúng ta sẽ bỏ qua tính năng Giám sát mô hình, nhưng nếu bạn muốn tìm hiểu thêm về tính năng này, hãy xem tài liệu.
Sau đó, nhấp vào TRÌNH DƯƠNG
Quá trình triển khai sẽ mất vài phút. Sau khi hoàn tất, bạn sẽ thấy trạng thái triển khai của mô hình đã thay đổi thành Đã triển khai trên Vertex AI.
Nếu bạn muốn triển khai một mô hình thông qua SDK, hãy chạy lệnh bên dưới.
my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
endpoint = my_model.deploy(
deployed_model_display_name='my-endpoint',
traffic_split={"0": 100},
machine_type="n1-standard-4",
accelerator_count=0,
min_replica_count=1,
max_replica_count=1,
)
6. Nhận gợi ý
Dự đoán trực tuyến
Khi mô hình được triển khai đến một điểm cuối, bạn có thể nhấn vào điểm cuối đó như bất kỳ điểm cuối nghỉ nào khác, tức là bạn có thể gọi mô hình từ một hàm đám mây, bot trò chuyện, ứng dụng web, v.v.
Để minh hoạ, chúng ta sẽ gọi điểm cuối này từ Workbench.
Quay lại sổ tay mà bạn đã tạo trong lớp học trước. Trong trình chạy, hãy tạo một sổ tay TensorFlow 2 mới.
Nhập SDK Vertex AI Python, numpy và PIL
from google.cloud import aiplatform
import numpy as np
from PIL import Image
Tải hình ảnh bên dưới xuống rồi tải lên phiên bản workbench của bạn. Chúng ta sẽ thử nghiệm mô hình này trên hình ảnh một cây bồ công anh.
Trước tiên, hãy xác định điểm cuối. Bạn cần thay thế {PROJECT_NUMBER}
và {ENDPOINT_ID}
bên dưới.
endpoint = aiplatform.Endpoint(
endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")
Bạn có thể tìm thấy Endpoint_id trong mục Điểm cuối của Cloud Console.
Bạn có thể tìm thấy Số dự án trên trang chủ của bảng điều khiển. Xin lưu ý rằng mã này khác với Mã dự án.
Mã dưới đây sẽ mở và đổi kích thước hình ảnh bằng PIL.
IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)
Sau đó, chuyển đổi dữ liệu numpy thành loại float32 và thành danh sách. Chúng ta chuyển đổi thành danh sách vì dữ liệu numpy không thể chuyển đổi tuần tự JSON nên chúng ta không thể gửi dữ liệu đó trong phần nội dung của yêu cầu.
x_test = np.asarray(im).astype(np.float32).tolist()
Cuối cùng, hãy gọi endpoint.predict
.
endpoint.predict(instances=x_test).predictions
Kết quả bạn nhận được là đầu ra của mô hình, tức là một lớp softmax có 5 đơn vị. Nếu muốn viết logic tuỳ chỉnh để trả về nhãn chuỗi thay vì chỉ mục, bạn có thể sử dụng quy trình dự đoán tuỳ chỉnh.
Dự đoán theo lô
Có nhiều cách để định dạng dữ liệu cho tính năng dự đoán hàng loạt. Để đơn giản, chúng ta sẽ kết xuất dữ liệu numpy vào một tệp json và lưu tệp đó vào Cloud Storage.
with open('test-data.json', 'w') as fp:
json.dump(x_test, fp)
!gsutil cp test-data.json gs://{YOUR_BUCKET}
Tiếp theo, hãy xác định mô hình. Cách này tương tự như việc xác định điểm cuối, ngoại trừ việc bạn cần cung cấp MODEL_ID
thay vì ENDPOINT_ID
.
my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
Bạn có thể tìm mã mô hình bằng cách chọn tên và phiên bản mô hình trong mục Mô hình của bảng điều khiển, sau đó chọn CHI TIẾT Phiên bản
Cuối cùng, hãy sử dụng SDK để gọi một công việc dự đoán hàng loạt, truyền vào đường dẫn Cloud Storage nơi bạn lưu trữ tệp json và cung cấp vị trí Cloud Storage để lưu trữ kết quả dự đoán.
batch_prediction_job = my_model.batch_predict(
job_display_name='flower_batch_predict',
gcs_source='gs://{YOUR_BUCKET}/test-data.json',
gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
machine_type='n1-standard-4',)
Bạn có thể theo dõi tiến trình công việc trong mục Dự đoán hàng loạt của bảng điều khiển. Xin lưu ý rằng việc chạy một công việc dự đoán hàng loạt cho một hình ảnh sẽ không hiệu quả.
Bước tiếp theo
Trong ví dụ này, trước tiên, chúng ta đã chuyển đổi hình ảnh kiểm thử thành NumPy trước khi thực hiện lệnh gọi dự đoán. Đối với các trường hợp sử dụng thực tế hơn, bạn có thể muốn gửi chính hình ảnh mà không cần phải tải hình ảnh đó vào NumPy trước. Để làm việc này, bạn cần điều chỉnh hàm phân phát TensorFlow để giải mã các byte hình ảnh. Việc này đòi hỏi bạn phải làm thêm một chút, nhưng sẽ hiệu quả hơn nhiều đối với các hình ảnh lớn hơn và việc xây dựng ứng dụng. Bạn có thể xem ví dụ trong sổ tay này.
🎉 Xin chúc mừng! 🎉
Bạn đã tìm hiểu cách sử dụng Vertex AI để:
- Tải các mô hình lên Vertex AI Model Registry
- Nhận thông tin dự đoán hàng loạt và trực tuyến
Để tìm hiểu thêm về các phần khác nhau của Vertex, hãy xem tài liệu.
7. Dọn dẹp
Bạn nên huỷ triển khai các mô hình khỏi điểm cuối nếu không có kế hoạch sử dụng các mô hình đó. Bạn cũng có thể xoá hoàn toàn điểm cuối. Bạn luôn có thể triển khai lại mô hình cho một điểm cuối nếu cần.
Sổ tay do Workbench quản lý sẽ tự động hết thời gian chờ sau 180 phút không hoạt động, vì vậy, bạn không cần phải lo lắng về việc tắt thực thể. Nếu bạn muốn tắt thực thể theo cách thủ công, hãy nhấp vào nút Dừng trong mục Vertex AI Workbench (Bảng điều khiển Vertex AI) của bảng điều khiển. Nếu bạn muốn xoá toàn bộ sổ tay, hãy nhấp vào nút Xoá.
Để xoá Bộ nhớ, hãy sử dụng trình đơn Điều hướng trong Cloud Console, chuyển đến Bộ nhớ, chọn bộ nhớ của bạn rồi nhấp vào Xoá: