Как я могу вызвать модель 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

Другие вопросы по тегам