Làm thế nào để hệ thống sản xuất máy học thế giới thực chạy?


7

Kính gửi cộng đồng Machine Learning / AI,

Tôi chỉ là một Người học máy vừa chớm nở và khao khát, người đã làm việc trên các bộ dữ liệu trực tuyến mở và một số POC được xây dựng tại địa phương cho dự án của tôi. Tôi đã xây dựng một số mô hình và chuyển đổi thành các đối tượng dưa chua để tránh đào tạo lại.

Và câu hỏi này luôn đánh đố tôi. Làm thế nào để một hệ thống sản xuất thực sự hoạt động cho các thuật toán ML?

Giả sử, tôi đã đào tạo thuật toán ML của mình với hàng triệu dữ liệu và tôi muốn chuyển nó sang hệ thống sản xuất hoặc lưu trữ nó trên máy chủ. Trong thế giới thực, họ có chuyển đổi thành các đối tượng dưa chua? Nếu vậy, nó sẽ là tập tin ngâm lớn, không. Những cái tôi đã đào tạo cục bộ và chuyển đổi cho 50000 hàng dữ liệu, chính nó đã chiếm 300 Mb dung lượng trên đĩa cho đối tượng được chọn. Tôi không nghĩ rằng đây là cách tiếp cận đúng.

Vậy làm thế nào để nó hoạt động để tránh thuật toán ML của tôi đào tạo lại và bắt đầu dự đoán về dữ liệu đến? Và làm thế nào để chúng ta thực sự tạo ra thuật toán ML như một người học trực tuyến liên tục. Ví dụ, tôi đã xây dựng một trình phân loại hình ảnh và bắt đầu dự đoán các hình ảnh đến. Nhưng tôi muốn một lần nữa đào tạo thuật toán bằng cách thêm các hình ảnh trực tuyến đến vào bộ dữ liệu được đào tạo trước đó của tôi. Có thể không phải cho mọi dữ liệu, nhưng hàng ngày một khi tôi muốn kết hợp tất cả dữ liệu nhận được cho ngày hôm đó và đào tạo lại với 100 hình ảnh mới mà phân loại được đào tạo trước đây của tôi dự đoán với giá trị thực. Và cách tiếp cận này không ảnh hưởng đến thuật toán được đào tạo trước đây của tôi để ngừng dự đoán dữ liệu đến vì việc đào tạo lại này có thể mất thời gian dựa trên tài nguyên tính toán và dữ liệu.

Tôi đã Googled và đọc nhiều bài viết, nhưng không thể tìm hoặc hiểu câu hỏi trên của tôi. Và điều này đang làm tôi bối rối mỗi ngày. Có cần can thiệp thủ công cho các hệ thống sản xuất không? hoặc bất kỳ phương pháp tự động là có cho nó?

Bất kỳ dẫn hoặc câu trả lời cho các câu hỏi trên sẽ rất hữu ích và đánh giá cao. Xin vui lòng cho tôi biết nếu câu hỏi của tôi không có ý nghĩa hoặc không thể hiểu được.

Đây không phải là một dự án trung tâm tôi đang tìm kiếm. Chỉ là một trường hợp chung của ví dụ hệ thống ML sản xuất trong thế giới thực.

Cảm ơn bạn trước!

Câu trả lời:


2

Có nhiều điều cần xem xét để có một mô hình trong sản xuất. Những cái chính bạn đang hỏi là:

  • Chức năng
  • Ngành kiến ​​trúc

Chức năng

Để mô hình của bạn được sử dụng trong sản xuất từ ​​máy chủ web, bạn có thể lưu trữ API hiển thị mô hình của bạn.

Ví dụ: bạn có máy chủ Flask Python đang chạy, nơi bạn ánh xạ điểm cuối (ví dụ GET http://<your_host>/prediction/image.jpg) vào predict()chức năng của mô hình của bạn.

Sau đó, bạn đề cập đến việc làm cho nó trở thành một người học trực tuyến liên tục . Hầu hết các trình phân loại sẽ cải thiện với nhiều dữ liệu hơn nếu dữ liệu đó được chú thích (nghĩa là được gắn nhãn), nhưng để làm được điều đó, bạn cần chú thích chúng theo cách thủ công và cung cấp lại chúng cho hệ thống của bạn và đào tạo lại mô hình của bạn. Nếu bạn có thể tự động gắn nhãn dữ liệu mới, bạn sẽ không cần cải thiện hệ thống của mình. Vì vậy, tôi sẽ nói, một số lao động thủ công sẽ được yêu cầu (ghi nhãn), nhưng phần còn lại có thể được tự động hóa. Bạn có thể thêm nhiều điểm cuối vào máy chủ web của mình, nơi bạn có thể tải lên nhiều dữ liệu đào tạo hơn và hệ thống đào tạo lại mô hình của bạn, chăm sóc phiên bản và tải lại mô hình được đào tạo mới nhất.

Ngành kiến ​​trúc

Lưu trữ

Bạn đề cập đến picklecác tập tin và bạn sợ rằng chúng quá lớn trên đĩa. Tuy nhiên, ngày nay, với các giải pháp đám mây, điều này thường không phải là vấn đề.

Bạn có thể sử dụng các giải pháp Blob-Storage và giá thường rất thấp (ví dụ: https://azure.microsoft.com/en-us/service/st Storage / blobs / sẽ có giá0.002euro / GB / tháng).

Tất nhiên, bạn có thể giữ nhiều dưa chua ở đó, để tạo phiên bản (được khuyến nghị). Tuy nhiên, nếu bạn muốn giảm thiểu chi phí, bạn chỉ có thể lưu trữ mô hình mới nhất.

Hơn nữa, nếu API của bạn được sử dụng thường xuyên, bạn không muốn tiếp tục tải lại mô hình của mình mỗi lần. Sẽ tốt hơn nếu có nó luôn có sẵn trong RAM. Nó không phải là đắt tiền, một lần nữa, để lưu trữ một máy chủ có nhiều RAM trong đám mây.

Bố trí

Một bố cục kiến ​​trúc bạn có thể có là:

+----------------+          +--------------+
|                |          |              |
|  ADMIN SERVER  | -------> | BLOB STORAGE |
|                |          |              |
+----------------+          +--------------+
        |                           ^
        |                           |
        |               +-----------+-----------+
        |               |                       |
        |      +------------------+  +----------------+
        |      |                  |  |                |
        |      |  PREDICT SERVER  |  | PREDICT SERVER |
        |      |                  |  |                |
        |      +------------------+  +----------------+
        |                    ^          ^
        |                    |          |
        |                +------------------+
        |                | |              | |
        +--------------> | |     QUEUE    | |
                         | |              | |
                         +------------------+

Ở đây, ADMIN SERVERđảm nhiệm tất cả các chức năng của việc đào tạo lại mô hình và tải lên các mô hình mới vào công việc lưu trữ và xuất bản vào hàng đợi PREDICT SERVERSđể lấy các mô hình mới nhất từ ​​đó BLOB STORAGE.

Các BLOB STORAGEmô hình giữ.

Các PREDICT SERVERs phơi bày predict()chức năng của bạn , vì vậy mô hình của bạn có thể truy cập được vào các hệ thống khác. Tại đây, các mô hình được lưu trữ trong RAM để dự đoán nhanh hơn. Tùy thuộc vào việc sử dụng mô hình của bạn, bạn có thể muốn có1máy chủ để dự đoán. Vì mô hình của bạn được duy trì BLOB STORAGEvà không nằm trên đĩa cứng cục bộ của bạn, điều này là có thể, tất cả đều có thể tìm nạp mô hình mới nhất.

Đây QUEUElà cách ADMIN SERVERcó thể giao tiếp với tất cả các PREDICT SERVERs.


Cảm ơn rất nhiều Bruno! Đây là một bài tường thuật hay nhất và đơn giản nhất tôi nhận được về câu hỏi.
Manikant Kella

@ManikantKella niềm vui của tôi. Bất cứ lúc nào.
Bruno Lubascher

2

Có, điển hình là có một số đại diện liên tục của mô hình được tải lên, và vâng, nó thường rất lớn như một tệp / tệp. Sử dụng picklelà một cách để làm điều đó, thường được sử dụng với scikit-learn, ví dụ. Các khung học sâu thường có các định dạng riêng, nhưng không có gì ngăn bạn sử dụng picklevới chúng, ngoại trừ việc nó phức tạp hơn và kém hiệu quả hơn như một cách tiếp cận.

Tôi không chắc là tôi hiểu phần thứ hai của câu hỏi, nhưng nếu bạn muốn sửa đổi mô hình của mình trực tuyến, không có gì ngăn bạn tạo ra một dưa chua mới. Bạn nên chạy một khóa đào tạo mới dưới dạng một quy trình lô riêng biệt trong nền, để tránh chặn trang web hoặc dịch vụ web của bạn, đặc biệt nếu máy chủ ứng dụng web của bạn là một luồng. Hơn nữa, bạn cần cảnh giác với việc sử dụng tài nguyên máy chủ, vì vậy bạn nên chạy các bản cập nhật hàng loạt như thế trong thời gian lưu lượng thấp. Điều này có thể vào cuối tuần, hoặc nếu cơ sở người dùng của bạn chủ yếu là khu vực, vào ban đêm hoặc vào các ngày lễ.


Có, tập tin ngâm có thể được sử dụng. Nhưng hình ảnh một triệu dữ liệu và để chuyển đổi mô hình được đào tạo thành tệp dưa trên dữ liệu đó có thể chiếm hàng gigabyte. Và nếu chúng tôi có dữ liệu kỹ sư, điều đó cũng cần phải được chuyển đổi để lấy thêm không gian trên máy chủ. Làm thế nào để chúng ta tránh tình trạng này trong thế giới thực? Và đối với người khác, tôi có nghĩa là đào tạo lại và lưu trữ dưới dạng tệp dưa chua mới, cần có sự can thiệp thủ công, điều mà bất kỳ tự động nào thực hiện như dự đoán trực tuyến và dữ liệu mới vào dữ liệu cũ và tự động đào tạo lại.
Manikant Kella

Bạn có ý định sử dụng scikit-learn hoặc bất kỳ khuôn khổ nào khác không? Như tôi đã nói, các khung khác nhau cung cấp các khả năng khác để duy trì mô hình. Về cơ bản, phần lớn trong số họ viết nó trong một tập tin. Trong thực tế, một vài gigabyte không phải là quá nhiều. Bạn thậm chí có thể lưu trữ nó trên ổ SSD trên máy chủ để có hiệu suất tốt hơn.
ánh xạ tới

Bạn không nghĩ rằng có thể tự động hóa với các kịch bản can thiệp thủ công mà bạn hiện đang xem xét?
ánh xạ tới

Vâng, tôi chủ yếu nói về việc sử dụng scikit learn.
Manikant Kella

Hmm, điều đó có thể là có thể, nhưng làm thế nào để chúng tôi tự động hóa nếu mô hình hoặc hệ thống của tôi hoạt động tốt hoặc không được đào tạo trên dữ liệu mới. Có cách nào trong trường hợp như vậy không ??
Manikant Kella
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.