SignatureDefs در SavedModel برای سرویس TensorFlow

هدف

این سند نمونه هایی را برای استفاده مورد نظر از SignatureDefs در SavedModel ارائه می دهد که به API های TensorFlow Serving نگاشت می شود.

نمای کلی

SignatureDef امضای یک محاسبات پشتیبانی شده در گراف TensorFlow را تعریف می کند. هدف SignatureDefs ارائه پشتیبانی عمومی برای شناسایی ورودی ها و خروجی های یک تابع است و می تواند هنگام ساخت SavedModel مشخص شود.

پس زمینه

TF-Exporter و SessionBundle از امضاهایی استفاده می‌کردند که از نظر مفهومی مشابه هستند، اما کاربران را ملزم می‌کردند که امضاهای نام‌گذاری شده و پیش‌فرض را تشخیص دهند تا بتوانند به درستی پس از بارگذاری بازیابی شوند. برای کسانی که قبلا از TF-Exporter/SessionBundle استفاده می کردند، Signatures در TF-Exporter با SignatureDefs در SavedModel جایگزین می شود.

ساختار SignatureDef

یک SignatureDef به مشخصات زیر نیاز دارد:

  • inputs به عنوان نقشه رشته به TensorInfo.
  • outputs به عنوان نقشه رشته به TensorInfo.
  • method_name (که با نام روش پشتیبانی شده در ابزار/سیستم بارگیری مطابقت دارد).

توجه داشته باشید که TensorInfo خود نیاز به مشخصات نام، نوع d و شکل تانسور دارد. در حالی که اطلاعات تانسور از قبل در نمودار وجود دارد، مفید است که TensorInfo را به‌عنوان بخشی از SignatureDef تعریف کنیم، زیرا ابزارها می‌توانند بدون نیاز به خواندن تعریف گراف، اعتبارسنجی امضا و غیره را انجام دهند.

برای سهولت استفاده مجدد و اشتراک گذاری بین ابزارها و سیستم ها، ثابت های رایج مربوط به SignatureDefs که در سرویس TensorFlow پشتیبانی می شوند به عنوان ثابت تعریف می شوند. به طور مشخص:

علاوه بر این، SavedModel ابزاری برای کمک به ایجاد یک امضای-def فراهم می کند.

نمونه سازه ها

TensorFlow Serving API های سطح بالایی را برای انجام استنتاج فراهم می کند. برای فعال کردن این APIها، مدل‌ها باید شامل یک یا چند SignatureDef باشند که گره‌های TensorFlow دقیقی را برای استفاده برای ورودی و خروجی تعریف می‌کنند. نمونه‌هایی از SignatureDef‌های خاصی را که TensorFlow Serving برای هر API پشتیبانی می‌کند، در زیر ببینید.

توجه داشته باشید که TensorFlow Serving به کلیدهای هر TensorInfo (در ورودی ها و خروجی های SignatureDef) و همچنین متد_نام SignatureDef بستگی دارد. محتوای واقعی TensorInfo مختص نمودار شما است.

طبقه بندی SignatureDef

Classification SignatureDefs از تماس های ساختاریافته به API طبقه بندی TensorFlow Serving پشتیبانی می کند. اینها تجویز می کنند که باید یک تانسور inputs وجود داشته باشد، و دو تانسور خروجی اختیاری وجود دارد: classes و scores ، که حداقل یکی از آنها باید وجود داشته باشد.

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"
  }
}

SignatureDef را پیش بینی کنید

Predict SignatureDefs از تماس با Predict API TensorFlow Serving پشتیبانی می کند. این امضاها به شما این امکان را می دهند که به طور خودسرانه بسیاری از تانسورهای ورودی و خروجی را پشتیبانی کنید. برای مثال زیر، امضای my_prediction_signature دارای یک ورودی منطقی images Tensor است که با تانسور واقعی در نمودار شما x:0 نگاشت شده است.

Predict SignatureDefs قابلیت حمل را در بین مدل ها فعال می کند. این به این معنی است که می‌توانید در SavedModel‌های مختلف، احتمالاً با نام‌های زیربنایی Tensor مبادله کنید (مثلاً به جای x:0 شاید یک مدل جایگزین جدید با Tensor z:0 داشته باشید)، در حالی که مشتریان شما می‌توانند به‌طور پیوسته به جستجوی قدیمی و جدید بپردازند. نسخه های این مدل بدون تغییرات سمت مشتری.

Predict SignatureDefs همچنین به شما اجازه می دهد تا Tensor های اضافی اختیاری را به خروجی ها اضافه کنید، که می توانید صریحاً آنها را جستجو کنید. بیایید بگوییم که علاوه بر کلید خروجی زیر scores ، همچنین می‌خواستید یک لایه جمع‌آوری برای اشکال‌زدایی یا اهداف دیگر واکشی کنید. در آن صورت، شما به سادگی یک Tensor اضافی با یک کلید مانند pool و مقدار مناسب اضافه می کنید.

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"
  }
}

رگرسیون SignatureDef

Regression SignatureDefs از تماس های ساخت یافته به API رگرسیون TensorFlow Serving پشتیبانی می کند. اینها تجویز می کنند که باید دقیقاً یک inputs Tensor و یک outputs Tensor وجود داشته باشد.

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"
  }
}