Amazon SageMaker いじってみた2
こんにちは。
たいしゅうです。
前回は、Sagemakerいじってみた1としてベースとなるノートブックインスタンスを作成するところまで紹介しましたが、今回はその続きで、Jupiterノートブックを使って、S3にデータをアップロードする方法を紹介したいと思います。
S3バケット作成
まずは、データを入れるためのS3バケットを作成していきます。
S3バケットを作成するうえで、注意する点が1点あります。
それは、バケット名に「Sagemaker」を含めることです。こうすることでノートブックインスタンスを作成する際に設定をしたデフォルトで設定されているIAMポリシーでSagemakerがS3バケットにアクセスする権限を付与することができます。
Jupiterノートブック作成
前回作成したノートブックインスタンスにJupiterノートブックを作成します。
ノートブックを作成するには、Filesタブの右上New▼をクリックします。下記画像参照
次に、今回はPython3を使うのでプルダウンから「Python3」を選択します。下記画像参照
これで、Python3のコードを書くためのノートブックが作成完了しました。
次に以下のコードをノートブックに入力して、先にセットアップをしているIAMロールを取得します。
—————–コードここから——————-
1 2 3 4 |
from sagemaker import get_execution_role role = get_execution_role() bucket='bucket-name' |
—————–コードここまで——————-
‘bucket-name’
→ここに先に作成してあるSagemakerが含まれてるバケット名を入力します。
次に以下のコードを実行すると
指定したWEBサイトからMNISTデータセットをダウンロードしてきます。
ダウンロードした圧縮ファイルを解凍し、ファイル内のモデルトレーニング用のデータセット、モデルトレーニング後に検証するためのデータセットのデータセットをノートブックのメモリに読み込みます。
—————–コードここから——————-
1 2 3 4 5 6 7 |
%%time import pickle, gzip, numpy, urllib.request, json # Load the dataset urllib.request.urlretrieve("http://deeplearning.net/data/mnist/mnist.pkl.gz", "mnist.pkl.gz") with gzip.open('mnist.pkl.gz', 'rb') as f: train_set, valid_set, test_set = pickle.load(f, encoding='latin1') |
—————–コードここまで——————-
次に以下のコードを入力することで
先ほど読み込んだデータセットを調べることができます。
通常この段階で、データセットを調べてデータ加工を実施しますが、今回はデータセット内の画像を表示します。
—————–コードここから——————-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
%matplotlib inline import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (2,10) def show_digit(img, caption='', subplot=None): if subplot==None: _,(subplot)=plt.subplots(1,1) imgr=img.reshape((28,28)) subplot.axis('off') subplot.imshow(imgr, cmap='gray') plt.title(caption) show_digit(train_set[0][30], 'This is a {}'.format(train_set[1][30])) |
—————–コードここまで——————-
以下のコードでは、データフォーマットを変換し、S3にデータをアップロードします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
-----------------コードここから------------------- %%time from sagemaker.amazon.common import write_numpy_to_dense_tensor import io import boto3 data_key = 'kmeans_lowlevel_example/data' data_location = 's3://{}/{}'.format(bucket, data_key) print('training data will be uploaded to: {}'.format(data_location)) # Convert the training data into the format required by the SageMaker KMeans algorithm buf = io.BytesIO() write_numpy_to_dense_tensor(buf, train_set[0], train_set[1]) buf.seek(0) boto3.resource('s3').Bucket(bucket).Object(data_key).upload_fileobj(buf) |
—————–コードここまで——————-
ノートブックを使って、S3にアップロードすることができました。
次回は、アップロードをしたデータをトレーニングしていきたいと思います。
あわせて読みたい