Как сделать параметры доступными для SageMaker Tensorflow Endpoint

Я хочу сделать некоторые гиперпараметры доступными для обслуживающей конечной точки в SageMaker. Обучающим экземплярам предоставляется доступ к входным параметрам с использованием гиперпараметров в:

estimator = TensorFlow(entry_point='autocat.py',
                       role=role,
                       output_path=params['output_path'],
                       code_location=params['code_location'],
                       train_instance_count=1,
                       train_instance_type='ml.c4.xlarge',
                       training_steps=10000,
                       evaluation_steps=None,
                       hyperparameters=params)

Однако, когда конечная точка развернута, невозможно передать параметры, которые используются для управления обработкой данных в input_fn(serialized_input, content_type) функция.

Каков наилучший способ передачи параметров обслуживающему экземпляру? Это source_dir параметр, определенный в sagemaker.tensorflow.TensorFlow класс скопирован в обслуживающий экземпляр? Если это так, я мог бы использовать config.yml или подобное.

3 ответа

Ах, у меня была похожая проблема с вами, где мне нужно было загрузить что-то с S3, чтобы использовать в input_fn для вывода. В моем случае это был словарь.

Три варианта:

  1. используйте подход config.yml и загрузите и импортируйте файл s3 из вашего файла точки входа перед любыми объявлениями функций. Это сделало бы его доступным для input_fn
  2. Продолжайте использовать гиперпараметрический подход, загрузите и импортируйте векторизатор в serving_input_fn и сделать его доступным через глобальную переменную так, чтобы input_fn имеет доступ к нему.
  3. Загрузите файл с s3 перед тренировкой и включите его в source_dir напрямую.

Вариант 3 будет работать только в том случае, если вам не нужно вносить изменения в векторизатор отдельно после первоначального обучения.

Что бы вы ни делали, не загружайте файл напрямую в input_fn. Я сделал эту ошибку, и производительность ужасна, поскольку каждый вызов конечной точки приводит к загрузке файла s3.

Гиперпараметры используются на этапе обучения, чтобы позволить вам настроить (Оптимизация гиперпараметров - HPO) вашу модель. Если у вас есть обученная модель, эти гиперпараметры не нужны для вывода.

Когда вы хотите передать функции обслуживающим экземплярам, ​​вы обычно делаете это в BODY каждого запроса вызову API invoke-endpoint (например, смотрите здесь: https://docs.aws.amazon.com/sagemaker/latest/dg/tf-example1-invoke.html) или вызов оболочки для прогнозирования в SDK Python для SageMaker ( https://github.com/aws/sagemaker-python-sdk/tree/master/src/sagemaker/tensorflow). Вы можете увидеть такие примеры в примерах тетрадей ( https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/tensorflow_iris_byom/tensorflow_BYOM_iris.ipynb)

Да, один из вариантов - добавить файл конфигурации в source_dir и загрузить файл в input_fn,

Другой вариант заключается в использовании serving_input_fn(hyperparameters), Эта функция преобразует модель TensorFlow в обслуживающую модель TensorFlow. Например:

def serving_input_fn(hyperparameters):

    # gets the input shape from the hyperparameters
    shape = hyperparameters.get('input_shape', [1, 7])

    tensor = tf.placeholder(tf.float32, shape=shape)
    # returns the ServingInputReceiver object.

    return build_raw_serving_input_receiver_fn({INPUT_TENSOR_NAME: tensor})()

Тензор - поток Амазонка-Сагемейкер Гиперпараметры

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