Как я могу вызвать модель SageMaker, обученную с TensorFlow, используя файл csv в теле вызова?
Я развернул модель TensorFlow в AWS SageMaker и хочу иметь возможность вызывать ее, используя файл csv в качестве тела вызова. В документации говорится о создании serving_input_function
как показано ниже:
def serving_input_fn(hyperparameters):
# Logic to the following:
# 1. Defines placeholders that TensorFlow serving will feed with inference requests
# 2. Preprocess input data
# 3. Returns a tf.estimator.export.ServingInputReceiver or tf.estimator.export.TensorServingInputReceiver,
# which packages the placeholders and the resulting feature Tensors together.
На шаге 2, где говорится о предварительной обработке входных данных, как получить дескриптор входных данных для их обработки?
1 ответ
У меня была та же проблема, но я хотел обрабатывать запросы JPEG.
Как только у вас есть model_data
готов, вы можете развернуть его с помощью следующих строк.
from sagemaker.tensorflow.model import TensorFlowModel
sagemaker_model = TensorFlowModel(
model_data = 's3://path/to/model/model.tar.gz',
role = role,
framework_version = '1.12',
entry_point = 'train.py',
source_dir='my_src',
env={'SAGEMAKER_REQUIREMENTS': 'requirements.txt'}
)
predictor = sagemaker_model.deploy(
initial_instance_count=1,
instance_type='ml.m4.xlarge',
endpoint_name='resnet-tensorflow-classifier'
)
Ваша тетрадь должна иметь my_src
каталог, который содержит файл train.py
и requirements.txt
файл. train.py
файл должен иметь функцию input_fn
определены. Для меня эта функция обрабатывает изображение / JPEG-контент:
CSV_CONTENT_TYPE = 'text/csv'
# Deserialize the Invoke request body into an object we can perform prediction on
def input_fn(request_body, content_type=CSV_CONTENT_TYPE):
# process an image uploaded to the endpoint
if content_type == CSV_CONTENT_TYPE:
##handle input
return handled_input
else:
raise errors.UnsupportedFormatError(content_type)
Если твойtrain.py
Код импортирует некоторые модули, вы должны предоставить requirements.txt
определение этих зависимостей (это была часть, которую мне было трудно найти в документации).
Надеюсь, это поможет кому-то в будущем.
Вы можете предварительно обработать входные данные, добавив input_fn, который будет вызываться каждый раз, когда вы вызываете и конечную точку. Он получает входные данные и тип содержимого данных.
def input_fn(data, content_type):
// do some data preprocessing.
return preprocessed_data
Эта статья объясняет это более подробно: https://docs.aws.amazon.com/sagemaker/latest/dg/tf-training-inference-code-template.html