<jupyter_start><jupyter_text>Tensorflow のローカル学習を SageMaker で行う ノートブックに含まれる内容- Tensorflow のローカル学習を SageMaker で行うやりかた ノートブックで使われている手法の詳細- アルゴリズム: MNIST- データ: CNN  セットアップ まず，ローカル実行に必要なコンポーネントをインストールします．セットアップ手順はシェルスクリプトにまとまっているので，これを実行します．<jupyter_code>!/bin/bash ./setup.sh
import os
import sagemaker
from sagemaker import get_execution_role

sagemaker_session = sagemaker.Session()

role = get_execution_role()<jupyter_output><empty_output><jupyter_text>データのロードTensorflow 向けに，protobuf フォーマットの TFRecord に変換して，変換済データを S3 にアップロードします．SageMaker の学習時につかうデータは，S3 に置く必要があります．ここでは，MNIST データをダウンロードしてからローカルにある `utils.py` 変換処理を行って，S3 にアップロードします．デフォルトでは SageMaker は sagemaker-{region}-{your aws account number} というバケットを使用します．当該バケットがない場合には，自動で新しく作成します．upload_data() メソッドの引数に bucket=XXXX という形でデータを配置するバケットを指定することが可能です．<jupyter_code>import utils
from tensorflow.contrib.learn.python.learn.datasets import mnist
import tensorflow as tf

data_sets = mnist.read_data_sets('data', dtype=tf.uint8, reshape=False, validation_size=5000)

utils.convert_to(data_sets.train, 'train', 'data')
utils.convert_to(data_sets.validation, 'validation', 'data')
utils.convert_to(data_sets.test, 'test', 'data')<jupyter_output><empty_output><jupyter_text>以下を実行する前に，**`data/mnist/XX` の `XX` を指定された適切な数字に変更**してください<jupyter_code>inputs = sagemaker_session.upload_data(path='data', key_prefix='data/mnist/XX')<jupyter_output><empty_output><jupyter_text>ローカル学習を行う場合の，処理の記述の変更点単純に，`train_instance_type` および `instance_type` を `'local'` にするだけです．<jupyter_code>!cat 'mnist.py'<jupyter_output><empty_output><jupyter_text>モデルの学習を実行学習プロセスは，通常の SageMaker での Tensorflow の使い方と変わりはありません．1 点だけ，ローカル実行を行うために，学習時は `train_instance_type` を，エンドポイントでは `instance_type` を `local` に設定してください．これだけで，あとはローカル環境にコンテナを pull してジョブを実行します．なお P2 / P3 を使っている場合は，`local_gpu` を指定すれば，GPU を使用して動作します．<jupyter_code>from sagemaker.tensorflow import TensorFlow

mnist_estimator = TensorFlow(entry_point='mnist.py',
                             role=role,
                             training_steps=10, 
                             evaluation_steps=333,
                             train_instance_count=2,
                             train_instance_type='local')

mnist_estimator.fit(inputs)<jupyter_output><empty_output><jupyter_text>モデルの推論を実行推論を行うために，まず学習したモデルをデプロイします．`deploy()` メソッドでは，デプロイ先エンドポイントのインスタンス数，インスタンスタイプを指定します．モデルのデプロイには 10 分程度時間がかかります．<jupyter_code>mnist_predictor = mnist_estimator.deploy(initial_instance_count=1,
                                             instance_type='local')<jupyter_output><empty_output><jupyter_text>実際にエンドポイントを叩いてみましょう．<jupyter_code>import numpy as np
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

for i in range(10):
    data = mnist.test.images[i].tolist()
    tensor_proto = tf.make_tensor_proto(values=np.asarray(data), shape=[1, len(data)], dtype=tf.float32)
    predict_response = mnist_predictor.predict(tensor_proto)
    
    print("========================================")
    label = np.argmax(mnist.test.labels[i])
    print("label is {}".format(label))
    prediction = predict_response['outputs']['classes']['int64Val'][0]
    print("prediction is {}".format(prediction))<jupyter_output><empty_output><jupyter_text>エンドポイントの削除全て終わったら，エンドポイントを削除します．<jupyter_code>sagemaker.Session().delete_endpoint(mnist_predictor.endpoint)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11814717091761946, 'fraction_numerical': 0.008208736440926415, 'mean_word_length': 6.401301518438178, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '223217', 'license': 'MIT', 'n_tokens_mistral': 1707, 'n_tokens_neox': 1620, 'n_words': 153, 'path': 'supported_frameworks/tensorflow_distributed_mnist/tensorflow_local_mnist.ipynb', 'repo_name': 'smrmkt/sagemaker-notebooks', 'size': '3411'}