<jupyter_start><jupyter_text>[Module 3] Training with Pipe Mode using PipeModeDatasetAmazon SageMaker를 사용하면 Pipe 입력 모드를 사용하여 교육 작업을 생성할 수 있습니다. **Pipe 입력 모드를 사용하면 S3의 학습 데이터셋을 노트북 인스턴스의 로컬 디스크로 다운로드하는 대신 학습 인스턴스로 직접 스트리밍합니다.** 즉, 학습 작업이 더 빨리 시작되고 더 빨리 완료되며 더 적은 디스크 공간이 필요합니다.SageMaker TensorFlow는 SageMaker에서 Pipe 입력 모드를 쉽게 활용할 수있는 `tf.data.Dataset`의 구현을 제공합니다. `tf.data.Dataset`을`sagemaker_tensorflow.PipeModeDataset`으로 바꾸면 학습 인스턴스로 스트리밍되는 TFRecord를 읽을 수 있습니다.여러분의 entry_point 스크립트에서 `PipeModeDataset`을 `Dataset`처럼 사용할 수 있습니다. 아래 예시는 '학습' 채널에서 TFRecords를 읽을 수있는`PipeModeDataset`을 생성하는 예시입니다.```pythonfrom sagemaker_tensorflow import PipeModeDatasetfeatures = {    'data': tf.FixedLenFeature([], tf.string),    'labels': tf.FixedLenFeature([], tf.int64),}def parse(record):    parsed = tf.parse_single_example(record, features)    return ({        'data': tf.decode_raw(parsed['data'], tf.float64)    }, parsed['labels'])def train_input_fn(training_dir, hyperparameters):    ds = PipeModeDataset(channel='training', record_format='TFRecord')    ds = ds.repeat(20)    ds = ds.prefetch(10)    ds = ds.map(parse, num_parallel_calls=10)    ds = ds.batch(64)    return ds```Pipe 입력 모드에서 학습 작업을 구동하려면, 아래 예시처럼 여러분의 TensorFlow Estimator에서 `input_mode='Pipe'` 인자를 추가해 주세요.```pythonfrom sagemaker.tensorflow import TensorFlowtf_estimator = TensorFlow(entry_point='tf-train-with-pipemodedataset.py', role='SageMakerRole',                          train_instance_count=1, train_instance_type='ml.c5.2xlarge',                          framework_version='1.14.0', input_mode='Pipe')tf_estimator.fit('s3://bucket/path/to/training/data')```  Create a training script that support pipemode datasets**`training_script/cifar10_keras_sm.py`에서 스크립트 사본을 만들어 `training_script/cifar10_keras_pipe.py`로 저장하세요.**스크립트 사본을 생성하였다면 단계별로 아래의 작업들을 직접 시도합니다.---- TODO 1.`cifar10_keras_pipe.py`에서 아래와 같이 `PipeModeDataset`를 import해 주세요.```pythonfrom sagemaker_tensorflow import PipeModeDataset```---- TODO 2.```pythondef _input(epochs, batch_size, channel, channel_name):```함수 내에서```pythondataset = tf.data.TFRecordDataset(filenames)```을```pythondataset = PipeModeDataset(channel=channel_name, record_format='TFRecord')```로 수정해 주세요.자세한 내용은 SageMaker-python-sdk [documentation](https://sagemaker.readthedocs.io/en/stable/using_tf.htmltraining-with-pipe-mode-using-pipemodedataset)를 참조해 주세요.**본 노트북 실습에 어려움이 있다면 솔루션 파일 `training_script/cifar10_keras_pipe_solution.py`을 참조하시면 됩니다.**<jupyter_code>import os
import sagemaker
from sagemaker import get_execution_role

sagemaker_session = sagemaker.Session()

role = get_execution_role()
prefix = 'data/DEMO-cifar10'
dataset_location = os.path.join('s3://', sagemaker_session.default_bucket(), prefix)<jupyter_output><empty_output><jupyter_text>`input_mode='Pipe'`로 Pipe Mode를 활성화한 후에 10 epoch를 학습해 보세요.모든 작업에 metric_definitions 인수를 추가해야 합니다.또한, AWS 콘솔 가시성을 위해 `base_job_name`을 `'cifar10-pipe'`로 설정해 주세요.<jupyter_code>metric_definitions = [
    {'Name': 'train:loss', 'Regex': 'loss: (.*?) '},
    {'Name': 'train:accuracy', 'Regex': 'acc: (.*?) '},
    {'Name': 'validation:loss', 'Regex': 'val_loss: (.*?) '},
    {'Name': 'validation:accuracy', 'Regex': 'val_acc: (.*?) '}
]
from sagemaker.tensorflow import TensorFlow
estimator = TensorFlow(base_job_name='cifar10-pipe',
                       entry_point='cifar10_keras_pipe.py',
                       source_dir='training_script',
                       role=role,
                       framework_version='1.14.0',
                       py_version='py3',
                       script_mode=True,                       
                       hyperparameters={'epochs': 5},
                       train_instance_count=1,
                       train_instance_type='ml.p2.xlarge', 
                       metric_definitions=metric_definitions, # 1_Monitoring_your_TensorFlow_scripts.ipynb 참조                       
                       input_mode='Pipe' # 추가
                      )
%%time
estimator.fit({'train':'{}/train'.format(dataset_location),
              'validation':'{}/validation'.format(dataset_location),
              'eval':'{}/eval'.format(dataset_location)})<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12721609966459033, 'fraction_numerical': 0.012458073790129372, 'mean_word_length': 3.7443181818181817, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '68421', 'license': 'MIT-0', 'n_tokens_mistral': 1783, 'n_tokens_neox': 1964, 'n_words': 278, 'path': '_archiving/contribution/daekeun-ml/tensorflow-in-sagemaker-workshop/2_Using_Pipemode_input_for_big_datasets.ipynb', 'repo_name': 'gonsoomoon-ml/aws-ai-ml-workshop-kr', 'size': '4174'}