Tham gia cộng đồng SIG TFX-Addons và giúp cải thiện TFX tốt hơn nữa!

Ngành kiến ​​trúc

TensorFlow Serving là một hệ thống phục vụ linh hoạt, hiệu suất cao cho các mô hình máy học, được thiết kế cho môi trường sản xuất. TensorFlow Serving giúp dễ dàng triển khai các thuật toán và thử nghiệm mới, trong khi vẫn giữ nguyên kiến ​​trúc máy chủ và các API. TensorFlow Serving cung cấp khả năng tích hợp ngoài hộp với các mô hình TensorFlow, nhưng có thể dễ dàng mở rộng để phục vụ các loại mô hình khác.

Ý chính

Để hiểu kiến ​​trúc của Phục vụ TensorFlow, bạn cần hiểu các khái niệm chính sau:

Servables

Các cung cấp là yếu tố trừu tượng trung tâm trong Phục vụ TensorFlow. Các cung cấp dịch vụ là các đối tượng cơ bản mà khách hàng sử dụng để thực hiện tính toán (ví dụ: tra cứu hoặc suy luận).

Kích thước và mức độ chi tiết của Có thể phục vụ rất linh hoạt. Một Servable duy nhất có thể bao gồm bất kỳ thứ gì từ một phân đoạn của bảng tra cứu đến một mô hình đơn lẻ đến một loạt các mô hình suy luận. Các dịch vụ có thể thuộc bất kỳ loại và giao diện nào, cho phép tính linh hoạt và các cải tiến trong tương lai như:

  • kết quả trực tuyến
  • API thử nghiệm
  • chế độ hoạt động không đồng bộ

Các dịch vụ không quản lý vòng đời của chính chúng.

Các dịch vụ điển hình bao gồm:

  • a TensorFlow SavedModelBundle ( tensorflow::Session )
  • một bảng tra cứu để nhúng hoặc tra cứu từ vựng

Các phiên bản có thể phục vụ

TensorFlow Serving có thể xử lý một hoặc nhiều phiên bản của một dịch vụ trong suốt thời gian tồn tại của một phiên bản máy chủ duy nhất. Điều này cho phép các cấu hình thuật toán mới, trọng số và dữ liệu khác được tải theo thời gian. Các phiên bản cho phép tải đồng thời nhiều phiên bản của một dịch vụ, hỗ trợ triển khai và thử nghiệm dần dần. Tại thời điểm phục vụ, khách hàng có thể yêu cầu phiên bản mới nhất hoặc id phiên bản cụ thể, cho một mô hình cụ thể.

Luồng có thể phục vụ

Luồng có thể phục vụ là chuỗi các phiên bản của một luồng có thể phục vụ, được sắp xếp theo số phiên bản ngày càng tăng.

Mô hình

TensorFlow Serving đại diện cho một mô hình dưới dạng một hoặc nhiều dịch vụ. Mô hình máy học có thể bao gồm một hoặc nhiều thuật toán (bao gồm cả trọng số đã học) và bảng tra cứu hoặc nhúng.

Bạn có thể đại diện cho một mô hình tổng hợp như sau:

  • nhiều dịch vụ độc lập
  • hỗn hợp duy nhất có thể phục vụ

Một dịch vụ cũng có thể tương ứng với một phần nhỏ của một mô hình. Ví dụ: một bảng tra cứu lớn có thể được chia nhỏ trên nhiều phiên bản Cung cấp TensorFlow.

Máy xúc lật

Máy xúc lật quản lý vòng đời của một dịch vụ. API Loader cho phép cơ sở hạ tầng chung độc lập với các thuật toán học tập cụ thể, các trường hợp sử dụng sản phẩm hoặc dữ liệu có liên quan. Cụ thể, Loaders chuẩn hóa các API để tải và dỡ một dịch vụ.

Nguồn

Nguồn là các mô-đun plugin tìm và cung cấp các dịch vụ. Mỗi Nguồn cung cấp không hoặc nhiều luồng có thể phục vụ. Đối với mỗi luồng có thể phục vụ, Nguồn cung cấp một phiên bản Trình tải cho mỗi phiên bản mà nó có sẵn để tải. (Một Nguồn thực sự được liên kết với nhau bằng không hoặc nhiều Nguồn bổ sung và mục cuối cùng trong chuỗi phát ra các Trình tải.)

Giao diện của TensorFlow Serving dành cho Nguồn có thể khám phá các dịch vụ từ các hệ thống lưu trữ tùy ý. Cung cấp TensorFlow bao gồm các triển khai Nguồn tham chiếu chung. Ví dụ: Nguồn có thể truy cập các cơ chế như RPC và có thể thăm dò một hệ thống tệp.

Nguồn có thể duy trì trạng thái được chia sẻ trên nhiều dịch vụ hoặc phiên bản. Điều này hữu ích cho các dịch vụ sử dụng các bản cập nhật delta (khác biệt) giữa các phiên bản.

Phiên bản mong muốn

Các phiên bản mong muốn đại diện cho tập hợp các phiên bản dịch vụ cần được tải và sẵn sàng. Các nguồn giao tiếp tập hợp các phiên bản có thể phục vụ này cho một luồng có thể phục vụ tại một thời điểm. Khi một Nguồn cung cấp danh sách các phiên bản mong muốn mới cho Trình quản lý, nó sẽ thay thế danh sách trước đó cho luồng có thể phục vụ đó. Trình quản lý dỡ bỏ mọi phiên bản đã tải trước đó không còn xuất hiện trong danh sách.

Xem hướng dẫn nâng cao để biết cách tải phiên bản hoạt động trong thực tế.

Người quản lý

Người quản lý xử lý toàn bộ vòng đời của Servables, bao gồm:

  • tải các Servables
  • phục vụ Servables
  • dỡ các Servables

Người quản lý lắng nghe Nguồn và theo dõi tất cả các phiên bản. Người quản lý cố gắng đáp ứng các yêu cầu của Nguồn, nhưng có thể từ chối tải phiên bản mong muốn nếu không có sẵn các tài nguyên bắt buộc. Các nhà quản lý cũng có thể hoãn việc "dỡ hàng". Ví dụ: Người quản lý có thể đợi để tải xuống cho đến khi phiên bản mới hơn kết thúc tải, dựa trên chính sách đảm bảo rằng ít nhất một phiên bản được tải vào mọi lúc.

TensorFlow Serving Managers cung cấp một giao diện hẹp, đơn giản - GetServableHandle() - để khách hàng truy cập các phiên bản dịch vụ được tải.

Cốt lõi

Sử dụng APis phục vụ TensorFlow tiêu chuẩn, Lõi phục vụ TensorFlow quản lý các khía cạnh sau của các dịch vụ:

  • vòng đời
  • số liệu

TensorFlow Serving Core xử lý các dịch vụ và bộ tải như các đối tượng không trong suốt.

Cuộc sống của một người có thể phục vụ

sơ đồ kiến ​​trúc phục vụ tf

Nói một cách rộng rãi:

  1. Các nguồn tạo bộ tải cho các phiên bản có thể phục vụ.
  2. Bộ tải được gửi dưới dạng Phiên bản mong muốn đến Trình quản lý, bộ quản lý sẽ tải và phục vụ chúng theo yêu cầu của khách hàng.

Chi tiết hơn:

  1. Một plugin Nguồn tạo một Trình tải cho một phiên bản cụ thể. Trình tải chứa bất kỳ siêu dữ liệu nào mà nó cần để tải Servable.
  2. Nguồn sử dụng lệnh gọi lại để thông báo cho Người quản lý về Phiên bản mong muốn.
  3. Người quản lý áp dụng Chính sách phiên bản đã định cấu hình để xác định hành động tiếp theo cần thực hiện, có thể là dỡ phiên bản đã tải trước đó hoặc tải phiên bản mới.
  4. Nếu Trình quản lý xác định rằng nó an toàn, nó sẽ cung cấp cho Trình tải các tài nguyên cần thiết và yêu cầu Trình tải tải phiên bản mới.
  5. Khách hàng yêu cầu Người quản lý cung cấp Dịch vụ, chỉ định phiên bản một cách rõ ràng hoặc chỉ yêu cầu phiên bản mới nhất. Trình quản lý trả về một xử lý cho Có thể phục vụ.

Ví dụ: giả sử Nguồn đại diện cho đồ thị TensorFlow với trọng số mô hình được cập nhật thường xuyên. Các trọng lượng được lưu trữ trong một tệp trên đĩa.

  1. Nguồn phát hiện một phiên bản mới của trọng số mô hình. Nó tạo ra một Bộ tải chứa một con trỏ đến dữ liệu mô hình trên đĩa.
  2. Nguồn thông báo cho Trình quản lý động của Phiên bản mong muốn.
  3. Trình quản lý động áp dụng Chính sách phiên bản và quyết định tải phiên bản mới.
  4. Trình quản lý động thông báo cho Trình tải rằng có đủ bộ nhớ. Trình tải khởi tạo biểu đồ TensorFlow với các trọng số mới.
  5. Máy khách yêu cầu một xử lý cho phiên bản mới nhất của mô hình và Trình quản lý động trả về một xử lý cho phiên bản mới của Servable.

Khả năng mở rộng

TensorFlow Serving cung cấp một số điểm mở rộng nơi bạn có thể thêm chức năng mới.

Chính sách Phiên bản

Chính sách phiên bản chỉ định trình tự tải và dỡ phiên bản trong một luồng có thể phục vụ duy nhất.

TensorFlow Serving bao gồm hai chính sách phù hợp với hầu hết các trường hợp sử dụng đã biết. Đây là Chính sách lưu giữ tính khả dụng (tránh để không tải phiên bản nào; thường tải phiên bản mới trước khi tải phiên bản cũ) và Chính sách bảo quản tài nguyên (tránh tải hai phiên bản đồng thời, do đó yêu cầu gấp đôi tài nguyên; dỡ phiên bản cũ trước khi tải một cái mới). Để sử dụng TensorFlow Serving một cách đơn giản trong đó khả năng cung cấp của một mô hình là quan trọng và chi phí tài nguyên thấp, Chính sách lưu giữ tính khả dụng sẽ đảm bảo rằng phiên bản mới được tải và sẵn sàng trước khi tải phiên bản cũ. Đối với việc sử dụng TensorFlow Serving một cách phức tạp, chẳng hạn như quản lý các phiên bản trên nhiều phiên bản máy chủ, Chính sách bảo quản tài nguyên yêu cầu ít tài nguyên nhất (không có thêm bộ đệm để tải phiên bản mới).

Nguồn

Nguồn mới có thể hỗ trợ hệ thống tệp mới, dịch vụ đám mây và phụ trợ thuật toán. TensorFlow Serving cung cấp một số khối xây dựng phổ biến để giúp tạo nguồn mới dễ dàng và nhanh chóng. Ví dụ, TensorFlow Serving bao gồm một tiện ích để bao bọc hành vi thăm dò xung quanh một nguồn đơn giản. Các nguồn có liên quan chặt chẽ đến Bộ tải cho các thuật toán cụ thể và các dịch vụ lưu trữ dữ liệu.

Xem tài liệu Nguồn tùy chỉnh để biết thêm về cách tạo Nguồn tùy chỉnh.

Máy xúc lật

Bộ tải là điểm mở rộng để thêm phần phụ trợ thuật toán và dữ liệu. TensorFlow là một trong những thuật toán phụ trợ như vậy. Ví dụ: bạn sẽ triển khai một Trình tải mới để tải, cung cấp quyền truy cập và dỡ bỏ phiên bản của một loại mô hình học máy phục vụ mới. Chúng tôi dự đoán sẽ tạo Bộ nạp cho bảng tra cứu và các thuật toán bổ sung.

Xem tài liệu Có thể phục vụ tùy chỉnh để tìm hiểu cách tạo một dịch vụ tùy chỉnh.

Batcher

Việc gộp nhiều yêu cầu vào một yêu cầu duy nhất có thể làm giảm đáng kể chi phí thực hiện suy luận, đặc biệt là khi có sự hiện diện của các bộ tăng tốc phần cứng như GPU. TensorFlow Serving bao gồm một widget theo lô yêu cầu cho phép khách hàng dễ dàng gộp các suy luận theo loại cụ thể của họ qua các yêu cầu thành các yêu cầu theo lô mà hệ thống thuật toán có thể xử lý hiệu quả hơn. Xem Hướng dẫn theo lô để biết thêm thông tin.