При использовании Tensorflow Estimator в AWS Sagemaker, будет ли учебное задание автоматически сохранять артефакты модели в / opt / ml / model? - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь обучить Tensorflow Estimator и загрузить созданные артефакты модели в S3.Учебное задание успешно завершено, но мы получаем предупреждение о том, что в пути / opt / ml / model не сохранен артефакт модели. Ваше учебное задание не сохранит файлы модели на S3. "Это становится проблемой, когда мы пытаемся развернуть модель в SageMaker.Насколько я понимаю, объект Estimator автоматически сохраняет артефакты модели в / opt / ml / model.

Основная идея состоит в том, чтобы проводить обучение, развертывание и тестирование через sagemaker.У нас есть сценарий entry.py, обучающий сценарий .py и фактическая записная книжка sagemaker, которая создает экземпляр объекта Estimator

#BEGINNING OF TRAINING SCRIPT
# my_custom_code_3.py
import tensorflow as tf
import numpy as np

# import sagemaker
# from sagemaker.predictor import csv_serializer
# from pyathena import connect
# from pyathena.pandas_cursor import PandasCursor

def train_model(init_learn):

    b = tf.Variable([.3], tf.float32, name="b")
    W = tf.Variable([-.3], tf.float32, name="w")
    x = tf.placeholder(tf.float32, name="x")
    y = tf.placeholder(tf.float32, name="y")

    X_train = [4, 0, 12]
    Y_train = [5, 9, -3]

    linear_model = W*x + b   # y = W*x + b; 5= -1*4 + 9; 9=1*0 + 
    9;  -3 = -1*12 + 9

    model_delta = tf.square(linear_model - y)
    loss = tf.reduce_sum(model_delta)
    optimizer = 
    tf.train.GradientDescentOptimizer(init_learn).minimize(loss)
    init = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init)
        for i in range(1000):
            feed_dict_batch = {x: X_train, y: Y_train}
            sess.run(optimizer, feed_dict=feed_dict_batch)

        W_value, b_value = sess.run([W, b])
        print(W_value)
        print(b_value)

if __name__ == '__main__':
    train_model(0.001)
# END OF TRAINING SCRIPT


# BEGINNING OF ENTRY.PY
# entry.py
import argparse, os
from my_custom_code_3 import train_model

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
        '--model_dir',
        type=str,
        default=os.environ['SM_MODEL_DIR'])
    parser.add_argument(
        '--init_learn',
        type=float)
    args = parser.parse_args()
    train_model(args.init_learn)
# END OF ENTRY.PY

# BEGINNING OF SAGEMAKER_RUN3.ipynb
import sagemaker
from sagemaker.tensorflow import TensorFlow

hyperparameters = {
    'init_learn': 0.001
    #'model_dir': 's3://stats-interns/tfmodel'
}

role = sagemaker.get_execution_role()
source_dir = 's3://stats-interns/my-test-3/my-test-3.tar.gz'
estimator = TensorFlow(
    entry_point='entry-3.py',
    source_dir=source_dir,
    model_dir='s3://tfmodel',
    #change to local to test locally first, install docker-compose
    train_instance_type='ml.m5.large',
    train_instance_count=1,
    hyperparameters=hyperparameters,
    role=role,
    py_version='py3',
    framework_version='1.12.0',
    script_mode=True)
estimator.fit()

Я ожидал, что артефакты будут сохранены в / opt / ml / model, а затем загружены вуказанная директория s3, s3: // tfmodel, но вместо этого ничего не копируется, и я получаю предупреждение «Артефакт модели не сохранен в пути / opt / ml / model. Ваша учебная работа не будет сохранять никакие файлы модели в S3.«

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Оценщик не сохраняет модель, вы должны это сделать :) Вам также необходимо убедиться, что вы сохранили модель в нужном месте.В режиме сценария SageMaker передает расположение вывода в ваш код в os.environ ['SM_MODEL_DIR'], поэтому просто используйте это значение, и все будет в порядке.

Если вы хотите выполнить развертывание с контейнером SageMaker TensorflowВаша модель должна быть в формате обслуживания Tensorflow.Это должно к хитрости:

parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR'])
model_dir  = args.model_dir
...
sess = K.get_session()
tf.saved_model.simple_save(
        tf.Session(),
        os.path.join(model_dir, 'model/1'),
        inputs={'inputs': model.input},
        outputs={t.name: t for t in model.outputs})

Множество примеров здесь: https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk

0 голосов
/ 28 июня 2019

В конце обучения SageMaker копирует все найденное в /opt/ml/model в s3. Таким образом, чтобы сохранить вашу модель, вам нужно сначала сохранить ее на /opt/ml/model. Например:

tf.contrib.saved_model.save_keras_model(model, /opt/ml/model)
...