Cấu trúc

TensorFlow Serve là một hệ thống cung cấp linh hoạt, hiệu suất cao dành cho các mô hình học máy, được thiết kế cho môi trường sản xuất. TensorFlow Serve 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à API. TensorFlow Serve cung cấp khả năng tích hợp vượt trội 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 TensorFlow Serve, bạn cần hiểu các khái niệm chính sau:

Có thể phân phát

Các dịch vụ có thể phục vụ là phần trừu tượng trung tâm trong Dịch vụ TensorFlow. Các đối tượng có thể phục vụ là các đối tượng cơ bản mà máy khách 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 một Có thể phân phát rất linh hoạt. Một Servable duy nhất có thể bao gồm mọi thứ từ một phân đoạn của bảng tra cứu đến một mô hình duy nhất cho đến một bộ mô hình suy luận. Các dịch vụ có thể phân phát có thể thuộc bất kỳ loại và giao diện nào, mang lại sự linh hoạt và những cải tiến trong tương lai, chẳng hạn như:

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

Các thành phần có thể phân phát 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:

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

Phiên bản có thể phân phát

Dịch vụ TensorFlow có thể xử lý một hoặc nhiều phiên bản có thể phân phát trong suốt vòng đời của một phiên bản máy chủ. Điều này cho phép tải các cấu hình thuật toán mới, trọng số và dữ liệu khác 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 phiên bản có thể phân phát, 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 kiểu máy cụ thể.

Luồng có thể phân phát

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

Người mẫu

TensorFlow Serve thể hiện một mô hình dưới dạng một hoặc nhiều dịch vụ. Mô hình học máy 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 bảng nhúng.

Bạn có thể biểu diễn một mô hình tổng hợp theo một trong các cách sau:

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

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

Máy xúc

Trình tải quản lý vòng đời của một ứng dụng có thể phục 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, dữ liệu hoặc trường hợp sử dụng sản phẩm cụ thể có liên quan. Cụ thể, Trình tải chuẩn hóa các API để tải và dỡ tải một dịch vụ có thể phân phát.

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 0 hoặc nhiều luồng có thể phân phát. Đối với mỗi luồng có thể phân phát, 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 0 hoặc nhiều SourceAdapters và mục cuối cùng trong chuỗi sẽ phát ra Trình tải.)

Giao diện dành cho Nguồn của TensorFlow Serve có thể khám phá các dịch vụ từ hệ thống lưu trữ tùy ý. Dịch vụ 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ò hệ thống tệp.

Các nguồn có thể duy trì trạng thái được chia sẻ trên nhiều phiên bản hoặc dịch vụ. Điều này hữu ích cho các thiết bị sử dụng 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 có thể phân phát cần được tải và sẵn sàng. Các nguồn truyền đạt tập hợp các phiên bản có thể phân phát này cho một luồng có thể phân phát tại một thời điểm. Khi Nguồn cung cấp danh sách phiên bản mong muốn mới cho Người quản lý, Nguồn sẽ thay thế danh sách trước đó cho luồng có thể phân phát đó. Trình quản lý sẽ 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:

  • đang tải các phần có thể phân phát
  • phục vụ Servables
  • dỡ hàng phục vụ

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 thực hiện 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 cần thiết. Người quản lý cũng có thể trì hoãn việc "dỡ hàng". Ví dụ: Người quản lý có thể đợi để hủy tải cho đến khi phiên bản mới hơn tải xong, dựa trên chính sách để đảm bảo rằng luôn có ít nhất một phiên bản được tải.

Trình quản lý cung cấp TensorFlow cung cấp một giao diện hẹp, đơn giản -- GetServableHandle() -- để khách hàng truy cập vào các phiên bản có thể phân phát đã tải.

Cốt lõi

Bằng cách sử dụng API 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

Lõi phục vụ TensorFlow xử lý các dịch vụ và trình tải như các đối tượng mờ đục.

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 Trình tải cho các phiên bản có thể phân phát.
  2. Trình tải được gửi dưới dạng Phiên bản mong muốn tới Trình quản lý, trình quản lý này 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. Plugin Nguồn tạo Trình tải cho một phiên bản cụ thể. Trình tải chứa mọi siêu dữ liệu cần thiết để tải Có thể phân phát.
  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. Trình 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ỡ bỏ 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ý về Có thể phục vụ, chỉ định rõ ràng một phiên bản hoặc chỉ yêu cầu phiên bản mới nhất. Người quản lý trả về một điều khiển cho Có thể phục vụ.

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

  1. Nguồn phát hiện phiên bản mới của trọng số mô hình. Nó tạo một Trình tải chứa con trỏ tới 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 trình điều khiển 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 trình điều khiển cho phiên bản mới của Có thể phân phát.

Khả năng mở rộng

Dịch vụ TensorFlow cung cấp một số điểm mở rộng để 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ân phát được.

TensorFlow Serve 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 bảo toàn 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 dỡ bỏ phiên bản cũ) và Chính sách bảo toàn tài nguyên (tránh tải hai phiên bản cùng lúc, 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 Serve một cách đơn giản trong đó tính khả dụng của mô hình phục vụ là quan trọng và chi phí tài nguyên thấp, Chính sách duy trì 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 dỡ bỏ phiên bản cũ. Để sử dụng phức tạp Dịch vụ TensorFlow, 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 toàn tài nguyên yêu cầu ít tài nguyên nhất (không có bộ đệm bổ sung để tải phiên bản mới).

Nguồn

Nguồn mới có thể hỗ trợ các hệ thống tệp mới, dịch vụ đám mây và phụ trợ thuật toán. TensorFlow Serve 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 Serve 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ẽ với Trình tải đối với các thuật toán cụ thể và 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

Trình 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 Trình tải mới để tải, cấp quyền truy cập và dỡ bỏ phiên bản của một loại mô hình máy học có thể phân phát mới. Chúng tôi dự đoán sẽ tạo Trình tải cho các bảng tra cứu và các thuật toán bổ sung.

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

máy trộn

Việc gộp nhiều yêu cầu thành một yêu cầu duy nhất có thể giảm đáng kể chi phí thực hiện suy luận, đặc biệt khi có các bộ tăng tốc phần cứng như GPU. TensorFlow Serve bao gồm một tiện ích phân nhóm yêu cầu cho phép khách hàng dễ dàng sắp xế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 hàng loạt mà hệ thống thuật toán có thể xử lý hiệu quả hơn. Xem Hướng dẫn trộn để biết thêm thông tin.