SignatureDefs trong SavedModel để phục vụ TensorFlow

Khách quan

Tài liệu này cung cấp các ví dụ về mục đích sử dụng của SignatureDefs trong SavingModel ánh xạ tới các API của TensorFlow Serve.

Tổng quan

SignatureDef xác định chữ ký của tính toán được hỗ trợ trong biểu đồ TensorFlow. SignatureDefs nhằm mục đích cung cấp hỗ trợ chung để xác định đầu vào và đầu ra của một hàm và có thể được chỉ định khi xây dựng SavingModel .

Lý lịch

TF-ExporterSessionBundle đã sử dụng Chữ ký có khái niệm tương tự nhưng yêu cầu người dùng phân biệt giữa chữ ký được đặt tên và chữ ký mặc định để có thể truy xuất chúng một cách chính xác khi tải. Đối với những người trước đây đã sử dụng TF-Exporter/SessionBundle, Signatures trong TF-Exporter sẽ được thay thế bằng SignatureDefs trong SavingModel.

Cấu trúc chữ kýDef

SignatureDef yêu cầu đặc điểm kỹ thuật của:

  • inputs dưới dạng bản đồ chuỗi tới TensorInfo.
  • outputs dưới dạng bản đồ chuỗi tới TensorInfo.
  • method_name (tương ứng với tên phương thức được hỗ trợ trong công cụ/hệ thống tải).

Lưu ý rằng bản thân TensorInfo yêu cầu đặc tả tên, dtype và hình dạng tensor. Mặc dù thông tin tensor đã có sẵn trong biểu đồ, nhưng sẽ rất hữu ích khi xác định rõ ràng TensorInfo như một phần của SignatureDef vì khi đó các công cụ có thể thực hiện xác thực chữ ký, v.v. mà không cần phải đọc định nghĩa biểu đồ.

Để dễ dàng sử dụng lại và chia sẻ giữa các công cụ và hệ thống, các hằng số thường được sử dụng liên quan đến SignatureDefs sẽ được hỗ trợ trong TensorFlow Serve được định nghĩa là hằng số. Đặc biệt:

Ngoài ra, SavingModel còn cung cấp một tiện ích giúp xây dựng signature-def.

Cấu trúc mẫu

TensorFlow Serve cung cấp các API cấp cao để thực hiện suy luận. Để kích hoạt các API này, các mô hình phải bao gồm một hoặc nhiều SignatureDefs xác định các nút TensorFlow chính xác để sử dụng cho đầu vào và đầu ra. Xem bên dưới để biết ví dụ về SignatureDefs cụ thể mà TensorFlow Serve hỗ trợ cho từng API.

Lưu ý rằng Dịch vụ TensorFlow phụ thuộc vào khóa của từng TensorInfo (trong đầu vào và đầu ra của SignatureDef), cũng như tên phương thức của SignatureDef. Nội dung thực tế của TensorInfo dành riêng cho biểu đồ của bạn.

Chữ ký phân loạiDef

Phân loại SignatureDefs hỗ trợ các lệnh gọi có cấu trúc tới API phân loại của TensorFlow Serve. Những điều này quy định rằng phải có Tensor inputs và có hai Tensor đầu ra tùy chọn: classesscores , ít nhất một trong số đó phải có mặt.

signature_def: {
  key  : "my_classification_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "tf_example:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "classes"
      value: {
        name: "index_to_string:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "TopKV2:0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/classify"
  }
}

Dự đoán chữ kýDef

Dự đoán hỗ trợ SignatureDefs gọi tới API Dự đoán của Dịch vụ TensorFlow. Các chữ ký này cho phép bạn hỗ trợ linh hoạt nhiều Tensor đầu vào và đầu ra tùy ý. Đối với ví dụ bên dưới, chữ ký my_prediction_signature có một images Tensor đầu vào logic duy nhất được ánh xạ tới Tensor thực tế trong biểu đồ x:0 của bạn.

Dự đoán SignatureDefs cho phép tính di động giữa các mô hình. Điều này có nghĩa là bạn có thể trao đổi trong các SavingModels khác nhau, có thể với các tên Tensor cơ bản khác nhau (ví dụ: thay vì x:0 , có lẽ bạn có một mô hình thay thế mới với Tensor z:0 ), trong khi khách hàng của bạn có thể trực tuyến liên tục truy vấn cái cũ và cái mới phiên bản của mô hình này mà không có thay đổi phía máy khách.

Dự đoán SignatureDefs cũng cho phép bạn thêm các Tensors bổ sung tùy chọn vào đầu ra mà bạn có thể truy vấn một cách rõ ràng. Giả sử rằng ngoài khóa đầu ra bên dưới của scores , bạn còn muốn tìm nạp một lớp tổng hợp để gỡ lỗi hoặc cho các mục đích khác. Trong trường hợp đó, bạn chỉ cần thêm một Tensor bổ sung có khóa như pool và giá trị thích hợp.

signature_def: {
  key  : "my_prediction_signature"
  value: {
    inputs: {
      key  : "images"
      value: {
        name: "x:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "y:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/predict"
  }
}

Chữ ký hồi quyDef

Regression SignatureDefs hỗ trợ các lệnh gọi có cấu trúc tới API hồi quy của TensorFlow Serve. Những quy định này quy định rằng phải có chính xác một Tensor inputs và một Tensor outputs .

signature_def: {
  key  : "my_regression_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "x_input_examples_tensor_0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "outputs"
      value: {
        name: "y_outputs_0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/regress"
  }
}