Từ khóa AI đã và đang phủ sóng ở nhiều nơi, được nhắc đến nhiều hơn trên các mặt báo, xuất hiện giữa các cuộc hội thoại về công nghệ khi nó ngày càng được ứng dụng phổ biến hơn trong các hệ thống hiện đại. AI hiện diện trong nhiều lĩnh vực từ y tế, tài chính, bán lẻ, cho đến truyền thông, giải trí… Dù chuyên môn của bản thân không hẳn là AI, nhưng tôi cho rằng kỹ sư phần mềm chúng ta ít nhiều cũng cần có chút hiểu biết về AI để có thể nắm bắt được xu hướng cũng như tiếp cận nhiều cơ hội hơn.

Thực tế, AI không chỉ toàn là nghiên cứu và “chế tạo” model. Việc triển khai model và tích hợp với những component khác của hệ thống (serving model) cũng là công việc rất “khoai” và quan trọng. Dù để đạt trình bậc thầy trong việc serving model cần nhiều thời gian để nghiên cứu học hỏi, nhưng việc bắt đầu “làm thử” thì lại không khó chút nào. Đặc biệt khi ngày nay, các cloud provider đã hỗ trợ rất nhiều để đơn giản hóa, thúc đẩy nhanh chóng quá trình này.

Trong bài viết hôm nay, tôi sẽ giới thiệu về Azure Machine Learning qua một bài hướng dẫn step-by-step về cách thức triển khai custom model bằng Azure Machine Learning và tích hợp với Azure Stream Analytics để làm một processing pipeline có khả năng ứng dụng vào nhiều hệ thống.

Trong bài này, tôi sẽ sử dụng một model phân tích cảm xúc của người đăng trạng thái (status), đưa ra kết quả là positive (tích cực) hoặc negative (tiêu cực). Nhiệm vụ của tôi sẽ là triển khai AI model này bằng Azure Machine Learning để publish API cho các component khác sử dụng.

Để thực hiện bài viết, tôi chuẩn bị các file sau đây:

  • svm.pkl
  • tfidf_vect.pkl
  • score.py: python file sử dụng các model trên để xử lý và xuất ra kết quả cuối cùng (cảm xúc tiêu cực/tích cực)

Cuối cùng là tạo service Azure Machine Learning.

“Quảng cáo hộ” về Azure Machine Learning một chút nếu bạn chưa nghe qua: AzureML là dịch vụ của Azure, cung cấp môi trường cho việc phát triển dự án AI. AzureML có khả năng thực hiện những tác vụ liên quan đến AI như: train, deploy, automate, manage và track model.

Chi phí phát sinh của Azure Machine Learning gồm compute và storage mà bạn đã dùng. Bạn có thể xem chi tiết qua bài viết về chi phí này.

Bạn có thể thực hiện việc serve model trên AzureML bằng Azure CLI hoặc python code. Tôi sẽ chọn dùng python code vì trực quan hơn, nên tôi sẽ tạo một notebook và đặt tên là deployment.ipynb:

Cell 1:

Cell này để test AzureML SDK. Để thực thi cell này, bạn cần tạo một compute instance (tạo một VM).

Chú ý là với Azure Machine Learning, bạn sẽ bị thu phí sử dụng compute và storage. Vì vậy, trong quá trình dev, bạn hãy nhớ việc stop/start các compute instance tùy theo nhu cầu sử dụng để tiết kiệm chi phí. Bạn có thể kiểm tra compute trong menu Compute.

Trong bài viết này, chúng ta sẽ tạo một Compute Instance để thực thi các đoạn deployment script, và một Inference Cluster để serve model như web service.

Cell 2:

Cell 2 để import Workspace, cần phải login trong bước này.

Cell 3:

Cell 3 để register model vào Azure Machine Learning để sử dụng trong score.py. Sau khi thực thi cell này, bạn có thể kiểm tra menu Models để thấy model đã đăng kí và version tương ứng.

Chú ý rằng mỗi khi thực thi cell này, một version mới của model sẽ được đăng kí với Azure Machine Learning.

Cell 4:

Như đã giải thích trong đoạn code, cell này để tạo lập môi trường, bao gồm định nghĩa conda package, để thực thi score.py script.

Cell 5:

Cell 5 là đoạn code để deploy model trên AKS – Azure Kubernetes Service (target được chọn).

Bạn có thể deploy model lên nhiều môi trường khác nhau, bạn có thể tham khảo tài liệu của Azure để biết thêm chi tiết. Với mỗi deployment target, bạn cần phải điều chỉnh lại nội dung của cell 5 cho tương thích.

Trong ví dụ của tôi, tôi chọn AKS làm deployment target vì AKS được khuyên dùng cho real-time inference, phù hợp với requirement của tôi. Ngoài ra, tôi cần publish model thành web service để tích hợp với Stream Analytics mà tôi sẽ trình bày trong phần kế tiếp.

Sau cell 5, model đã được published thành endpoint. À mà đây là giả sử bạn đã thực thi được cell 5 thành công nha, vì lúc tôi làm, tôi đã phải chỉnh đi chỉnh lại “score.py” nhiều lần trước khi publish được.

Để kiểm tra việc publish, bạn có thể check trong menu Endpoints để thấy endpoint mới được tạo ra tương ứng với published model.

Ta có thể lấy service url, authentication token… trong chi tiết của mục Endpoints.

Ta có thể test url với đoạn script bên dưới:

Như vậy, tôi đã serve model thành web service thành công.

Tích hợp với Azure Stream Analytics

Để tích hợp với Azure Stream Analytics, cần điều chỉnh file score.py như bên dưới:

Tại bước này thì chúng ta cần chú ý là:

  • Cả input và output parameter cần là np.array
  • Parameter đầu tiên của input_schema cần tên là “Inputs”

Thêm một lưu ý nữa: Những điểm trên là kết quả sau việc tìm đọc sample và thử-sai của tôi, có thể trong tương lai sẽ không còn đúng nữa. Nếu có tài liệu chính thức nào về việc cấu hình parameter để tích hợp với Azure Stream Analytics, bạn hãy trao đổi với tôi nhé.

Với điều chỉnh trên và update lại service, AzureML đã có thể tích hợp với Azure Stream Analytics như một function.

Đánh giá

Tôi tự đánh giá có 2 điều khó khăn khi thực hiện công việc này.

Đầu tiên là cần tìm hiểu, nghiên cứu nhiều. Để hiểu được ý nghĩa mỗi đoạn script trong quá trình triển khai và cô đọng thành bài viết này, tôi đã đọc khá nhiều tài liệu, bài viết, và tham khảo sample. Tuy nhiên, sau cùng tôi nghĩ tài liệu chính thức về Azure Machine Learning vẫn là phù hợp nhất để học rõ về service này.

Điểm khó tiếp theo là tích hợp với Azure Stream Analytics. Để Stream Analytics có thể “thấy” được scoring API, tôi đã phải điều chỉnh nội dung của “score.py” và format của input và output khá nhiều lần. Các tài liệu không nói rõ chi tiết về phần này lắm.

Về ưu điểm, tôi thấy là:

All-in-one service: bạn có thể làm hầu hết các công việc liên quan đến AI với Azure Machine Learning. Nhưng dù đây là service rất tiện dụng trong dự án AI, bạn cũng cần học cách quản lí chi phí để sử dụng hiệu quả.

Dễ dàng sử dụng: tuy tôi gặp khó khăn trong việc host model bằng Azure Machine Learning lần đầu tiên, nhưng khi đã hiểu được service này thì việc cập nhật model, host model mới hoặc thiết đặt CI/CD pipeline cho dự án AI đã trở nên dễ dàng hơn.

Khả năng tích hợp với những Azure service khác: “anh em” một nhà thì tất nhiên là dễ “nói chuyện” với nhau rồi, bạn có thể tham khảo thêm tài liệu này để biết thêm chi tiết.

Qua bài viết này, tôi đã demo việc serving custom model bằng Azure Machine Learning từ việc tự nghiên cứu, đọc hiểu tài liệu. Ban đầu bạn sẽ thấy rắc rối vì nhiều thông tin, nhưng khi bắt tay vào làm thì sẽ thấy cũng khá thú vị đó. Hy vọng bài viết này giúp bạn có cảm hứng để bắt đầu bước vào thế giới AI.

Trần Gia Quốc Hưng
Ban Giải pháp & Công nghệ, FPT Software

Tin liên quan: