Как сказал Бруно, вам нужно будет где-нибудь использовать контейнер, но вы можете использовать существующий контейнер для запуска собственного пользовательского кода тензорного потока.
В sithmaker github есть хороший пример 1004 * о том, как это сделать.
Способ, которым это работает, заключается в том, что вы изменяете свой код, чтобы иметь точку входа, которая принимает аргументы командной строки argparse, а затем вы указываете 'оценщик Tensorflow Sagemaker' на точку входа.Затем, когда вы вызываете fit в оценщике sagemaker, он загружает контейнер tenorflow и запускает там ваш собственный код.
Итак, вы начинаете с вашего собственного кода, который выглядит примерно так
# my_custom_code.py
import tensorflow as tf
import numpy as np
def build_net():
# single fully connected
image_place = tf.placeholder(tf.float32, [None, 28*28])
label_place = tf.placeholder(tf.int32, [None,])
net = tf.layers.dense(image_place, units=1024, activation=tf.nn.relu)
net = tf.layers.dense(net, units=10, activation=None)
return image_place, label_place, net
def process_data():
# load
(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()
# center
x_train = x_train / 255.0
m = x_train.mean()
x_train = x_train - m
# convert to right types
x_train = x_train.astype(np.float32)
y_train = y_train.astype(np.int32)
# reshape so flat
x_train = np.reshape(x_train, [-1, 28*28])
return x_train, y_train
def train_model(init_learn, epochs):
image_p, label_p, logit = build_net()
x_train, y_train = process_data()
loss = tf.nn.softmax_cross_entropy_with_logits_v2(
logits=logit,
labels=label_p)
optimiser = tf.train.AdamOptimizer(init_learn)
train_step = optimiser.minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(epochs):
sess.run(train_step, feed_dict={image_p: x_train, label_p: y_train})
if __name__ == '__main__':
train_model(0.001, 10)
Чтобы заставить его работать с sagemaker, нам нужно создать точку входа в командной строке, которая позволит sagemaker запускать его в контейнере, который он в итоге загрузит для нас.
# entry.py
import argparse
from my_custom_code import train_model
if __name__ == '__main__':
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--model_dir',
type=str)
parser.add_argument(
'--init_learn',
type=float)
parser.add_argument(
'--epochs',
type=int)
args = parser.parse_args()
train_model(args.init_learn, args.epochs)
Помимо указания аргументов myФункция должна принимать, мы также должны предоставить model_dir
аргумент.Это всегда требуется, и это местоположение S3, где будут сохранены модельные артефакты после завершения учебного задания.Обратите внимание, что вам не нужно указывать, что это значение (хотя вы можете), так как Sagemaker предоставит вам местоположение по умолчанию в S3.
Итак, мы изменили наш код, теперь нам нужно фактически запустить егона Sagemaker.Перейдите к консоли AWS и запустите небольшой экземпляр из Sagemaker.Загрузите свой пользовательский код в экземпляр, а затем создайте блокнот jupyter следующим образом:
# sagemaker_run.ipyb
import sagemaker
from sagemaker.tensorflow import TensorFlow
hyperparameters = {
'epochs': 10,
'init_learn': 0.001}
role = sagemaker.get_execution_role()
source_dir = '/path/to/folder/with/my/code/on/instance'
estimator = TensorFlow(
entry_point='entry.py',
source_dir=source_dir,
train_instance_type='ml.t2.medium',
train_instance_count=1,
hyperparameters=hyperparameters,
role=role,
py_version='py3',
framework_version='1.12.0',
script_mode=True)
estimator.fit()
Выполнение вышеуказанного приведет к:
- Раскрутите экземпляр ml.t2.medium
- Загрузите контейнер tenorflow 1.12.0 в экземпляр
- Загрузите любые данные, которые мы указали в соответствии с только что созданным экземпляром, в fit (в данном случае ничего)
- Запустите наш кодв случае
- загрузите артефакты модели в model_dir
И это почти все.Конечно, здесь многое не упомянуто, но вы можете:
- Загрузить данные тренировок / испытаний из s3
- Сохранять файлы контрольных точек и файлы тензорной доски во время тренировки и загружать их в s3
Лучшим ресурсом, который я нашел, был пример, которым я поделился, но вот все, на что я обращал внимание, чтобы заставить его работать: