Wstęp
Środowisko wykonawcze TensorFlow zawiera komponenty, które są inicjowane z opóźnieniem, co może powodować duże opóźnienia dla pierwszych żądań wysyłanych do modelu po jego załadowaniu. To opóźnienie może być o kilka rzędów wielkości większe niż w przypadku pojedynczego żądania wnioskowania.
Aby zmniejszyć wpływ leniwej inicjalizacji na opóźnienie żądania, można wyzwolić inicjalizację podsystemów i składników w czasie ładowania modelu, dostarczając przykładowy zestaw żądań wnioskowania wraz z SavedModel. Ten proces jest znany jako „rozgrzewanie” modelu.
Stosowanie
Rozgrzewka SavedModel jest obsługiwana dla Regress, Classify, MultiInference i Predict. Aby uruchomić rozgrzewanie modelu w czasie ładowania, dołącz plik danych rozgrzewania w podfolderze asset.extra katalogu SavedModel.
Wymagania, aby rozgrzewka modelu działała poprawnie:
- Nazwa pliku rozgrzewki: „tf_serving_warmup_requests”
- Lokalizacja pliku: asset.extra/
- Format pliku: TFRecord z każdym rekordem jako PredictionLog .
- Liczba rekordów rozgrzewki <= 1000.
- Dane rozgrzewkowe muszą być reprezentatywne dla żądań wnioskowania używanych podczas udostępniania.
Przykładowy fragment kodu generujący dane rozgrzewające:
import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2
def main():
with tf.io.TFRecordWriter("tf_serving_warmup_requests") as writer:
# replace <request> with one of:
# predict_pb2.PredictRequest(..)
# classification_pb2.ClassificationRequest(..)
# regression_pb2.RegressionRequest(..)
# inference_pb2.MultiInferenceRequest(..)
log = prediction_log_pb2.PredictionLog(
predict_log=prediction_log_pb2.PredictLog(request=<request>))
writer.write(log.SerializeToString())
if __name__ == "__main__":
main()