#tensorflow #deep-learning #amazon-sagemaker #tensorflow-datasets
Вопрос:
Мой вызов sagemaker.tensorflow.TensorFlow.fit()
зависает на неопределенный срок без сообщения об ошибке, когда я использую Pipe
вместо File
в качестве input_mode
. Я соответственно заменяю тензорный поток Dataset
на Pipemodedataset
. Обучение в File
режиме успешно завершается.
Мои данные состоят из двух блоков s3 с несколькими файлами tfrecord в каждом. Несмотря на то, что я внимательно изучил документацию, я не уверен в том, как использовать Pipemodedataset
в этом случае — в частности, как установить channel
.
Вот настройка моего ноутбука Sagemaker:
hyperparameters = {
"batch-size": 1,
"pipe_mode": 1,
}
estimator_config = {
"entry_point": "tensorflow_train.py",
"source_dir": "source",
"framework_version": "2.3",
"py_version": "py37",
"instance_type": "ml.p3.2xlarge",
"instance_count": 1,
"role": sagemaker.get_execution_role(),
"hyperparameters": hyperparameters,
"output_path": f"s3://{bucket_name}",
"input_mode": "Pipe",
}
tf_estimator = TensorFlow(**estimator_config)
s3_data_channels = {
"training": f"s3://{bucket_name}/data/training",
"validation": f"s3://{bucket_name}/data/validation",
}
tf_estimator.fit(s3_data_channels)
Если бы я запустил aws s3 ls
приложение s3_data_channels
, я бы получил список файлов tfrecord.
Вот как я настраиваю набор данных (см. Инструкцию if / else в зависимости от того, выбран ли pipe_mode
:
import tensorflow as tf
if __name__ == "__main__":
arg_parser = argparse.ArgumentParser()
...
arg_parser.add_argument("--pipe_mode", type=int, default=0)
arg_parser.add_argument("--train_dir", type=str, default=os.environ.get("SM_CHANNEL_TRAINING"))
arg_parser.add_argument(
"--validation_dir", type=str, default=os.environ.get("SM_CHANNEL_VALIDATION")
)
arg_parser.add_argument("--model_dir", type=str)
args, _ = arg_parser.parse_known_args()
AUTOTUNE = tf.data.experimental.AUTOTUNE
if args.pipe_mode == 1:
from sagemaker_tensorflow import PipeModeDataset
train_ds = PipeModeDataset(channel="training", record_format='TFRecord')
val_ds = PipeModeDataset(channel="validation", record_format='TFRecord')
else:
train_files = tf.data.Dataset.list_files(args.train_dir '/*tfrecord')
val_files = tf.data.Dataset.list_files(args.validation_dir '/*tfrecord')
train_ds = tf.data.TFRecordDataset(filenames=train_files, num_parallel_reads=AUTOTUNE)
val_ds = tf.data.TFRecordDataset(filenames=val_files, num_parallel_reads=AUTOTUNE)
train_ds = (
train_ds.map(tfrecord_parser, num_parallel_calls=AUTOTUNE)
.batch(args.batch_size)
.prefetch(AUTOTUNE)
)
val_ds = (
val_ds.map(tfrecord_parser, num_parallel_calls=AUTOTUNE)
.batch(args.batch_size)
.prefetch(AUTOTUNE)
)
...
Комментарии:
1. Вывод записной книжки таков:
2021-11-04 01:17:08 Starting - Starting the training job... 2021-11-04 01:17:11 Starting - Launching requested ML instances...... 2021-11-04 01:18:33 Starting - Preparing the instances for training......... 2021-11-04 01:19:54 Downloading - Downloading input data... 2021-11-04 01:20:10 Training - Downloading the training image............... 2021-11-04 01:23:02 Training - Training image download completed. Training in progress..
он выводит переменные среды, а затем зависает наhook.py:425] Monitoring the collections: sm_metrics, metrics, losses