Hướng dẫn deploy một mô hình Deep Learning trong thực tế (Phần 1)
Những năm gần đây, lĩnh vực nghiên cứu về Deep Learning đã và đang phát triển một cách nhanh chóng với nhiều thành tựu đáng chú ý. Các nhà khoa học dữ liệu đã thiết kế nhiều mô hình rất mạnh mẽ và phức tạp để giải quyết các bài toán mà trước đây không dễ dàng để giải quyết. Tuy nhiên, phần lớn những mô hình này đều chỉ dừng lại ở mức nghiên cứu mà không triển khai dưới dạng một ứng dụng sản phẩm. Mặc dù đã có rất nhiều các bài báo khoa học với những mô tả chi tiết về mô hình sử dụng (thậm chí còn công bố mã nguồn mở của mô hình) nhưng việc áp dụng những mô hình này vào sản xuất vẫn là một vấn đề nan giải. Bài viết này sẽ mô tả một cách tổng quát những phương thức để triển khai các mô hình Machine Learning và những điểm mạnh/điểm yếu của các phương thức này.
Những khó khăn
Trước khi đến bước triển khai, bạn cần đảm bảo mô hình của mình đã được huấn luyện. Để có thể sử dụng mô hình trong một ứng dụng cần theo các bước:
- Nạp mô hình đã qua huấn luyện vào bộ nhớ.
- Tiền xử lý dữ liệu
- Chạy các dự đoán
- Xử lý đầu ra của các dự đoán
Nghe có vẻ đơn gian phải không :D. Nhưng trong thực tế thì quá trình này tương đối phức tạp.
Nếu bạn đã từng đọc định lý No Free Lunch thì định lý này cũng đúng trong quá trình triển khai mô hình, đó là không có một phương pháp triển khai mô hình Machine Learning nào là tốt nhất cho tất cả các trường hợp. Vì vậy, mỗi khi cần triển khai một mô hình, bạn nên tự hỏi mình những câu hỏi như:
- Ứng dụng này có những yêu cầu gì ? ( Có thể đáp ứng bao nhiêu request trong 1 giây? Độ trễ tối thiểu là bao nhiêu?)
- Làm cách nào tôi có thể đánh giá hiệu suất của mô hình sau khi đã triển khai? (Làm thế nào để tôi có thể thu thập và lưu trữ các dữ liệu tương tác của người dùng?)
- Chu kỳ huấn luyện lại mô hình là bao lâu?
- Quá trình tiền xử lý cần những gì?
- Liệu định dạng của dữ liệu thu được sau khi triển khai có khác với định dạng của dữ liệu dùng cho huấn luyện mô hình hay không?
- Liệu tính năng chạy offline có cần thiết cho mô hình không?
Tải trực tiếp mô hình vào ứng dụng
Trong phương pháp này, mô hình sẽ được coi là một thành phần của ứng dụng và được tải trực tiếp vào trong ứng dụng. Phương pháp này khá đơn giản để thực hiện so với các phương pháp khác.
Ví dụ, nếu lõi của ứng dụng được viết bằng Python thì phương pháp này sẽ đơn giản hơn rất nhiều khi chỉ cần chỉnh sửa những file config và thêm những module dependencies. Hàm dự đoán của mô hình cần được tinh chỉnh để có thể được gọi từ chương trình chính qua những tương tác của người dùng.
Tuy nhiên, phương pháp này trở nên phức tạp hơn nên ứng dụng của bạn không viết trên Python. Hiện tại chưa có cách thức tối ưu nào để tải một mô hình viết bằng PyTorch hay Caffe vào một ứng dụng viết bằng Java. Ngay cả với Tensorflow có những thư viện viết bằng Java cũng yêu cầu phải tạo thêm khá nhiều đoạn code để kết hợp mô hình vào trong ứng dụng. Khả năng mở rộng ứng dụng cũng sẽ bị hạn chế với phương pháp triển khai này. Như đã nói, phương pháp này chỉ phù hợp khi bạn muón triển khai một cách nhanh chóng mô hình vào một ứng dụng được viết trên Python. Phương pháp này cũng phù hợp cho những môi trường thực thi ứng dụng không có mạng internet.
Sử dụng API
Phương pháp thử hai là triển khai mô hình của bạn dưới dạng một API và ứng dụng sẽ gọi API này để xử lý. Điều này có thể được thực hiện theo nhiều cách, dưới đây là những cách phổ biến nhất:
Kubernetes
Docker theo nhiều mặt là một lựa chọn hợp lý để triển khai mô hình Machine Learning. Một mô hình và tất cả các dependencies của nó đều được đóng gói vào một thùng chứa. Máy chủ có thể mở rộng một cách tự động với việc thêm những thùng chứa Docker. Kubernetes là một trong những phương pháp tốt nhất để quản lý những thùng chứa Dọcker, vì vậy rất phù hợp cho việc triển khai Machine Learning.
Hiện nay, Kubernetes đã ra mắt Kubeflow với những tính năng đơn giản hóa quá trình huấn luyện và đánh giá mô hình, khiến việc xây dựng và triển khai mô hình Machine Learning trở nên nhanh chóng và tiện lợi hơn.
REST-API với Flask/Django
Một lựa chọn khác là tạo một REST-API cho mô hình của mình sử dụng Flask. Chi tiết về phần này các bạn có thể tham khảo tại:
AWS Lambda/Serverless
Sử dụng AWS cũng là một lựa chọn không tồi. Chi tiết các bạn có thể tham khảo tại:
Cảm ơn các bạn đã đọc bài viết.
Nguồn: towardsdatascience Deploying deep learning models: Part 1 an overview