【发布时间】:2019-11-09 21:21:33
【问题描述】:
我正在尝试训练 Tensorflow Estimator 并将创建的模型工件上传到 S3。训练作业成功完成,但我们收到警告说“没有模型工件保存在路径 /opt/ml/model 下。您的训练作业不会将任何模型文件保存到 S3。”当我们尝试在 SageMaker 中部署模型时,这会成为一个问题。我的理解是 Estimator 对象会自动将模型工件保存到 /opt/ml/model。
主要思想是通过 sagemaker 进行培训、部署和测试。我们有一个 entry.py 脚本、一个 .py 训练脚本和实例化 Estimator 对象的实际 sagemaker 笔记本
#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。"
【问题讨论】:
标签: python tensorflow amazon-s3 tensorflow-estimator amazon-sagemaker