【機械学習初級】Amazon SageMaker導入の手順~S3にデータをアップロード編~

はじめに

前回は、Sagemakerいじってみた1としてベースとなるノートブックインスタンスを作成するところまで紹介しました。

今回はその続きで、Jupiterノートブックを使って、S3にデータをアップロードする方法を紹介したいと思います。

記事の概要

本記事の内容は以下になります

  • S3の作成~データのアップロードまでを解説します
  • IAMロールの取得に関しても説明しております
  • 「Amazon Sagemaker」の導入時にデータアップロード方法をお探しの方やアップロード時に詰まっている方に向けて執筆しております。

S3バケット作成

まずは、データを入れるためのS3バケットを作成していきます。

S3バケットを作成するうえで、注意する点が1点あります。

それは、バケット名に「Sagemaker」を含めることです。

こうすることでノートブックインスタンスを作成する際に設定をしたデフォルトで設定されているIAMポリシーでSagemakerがS3バケットにアクセスする権限を付与することができます。

Jupiterノートブック作成

前回作成したノートブックインスタンスにJupiterノートブックを作成します。

ノートブックを作成するには、Filesタブの右上New▼をクリックします。

image.png

次に、今回はPython3を使うのでプルダウンから「Python3」を選択します。

image.png

これで、Python3のコードを書くためのノートブックが作成完了しました。

次に以下のコードをノートブックに入力して、先にセットアップをしているIAMロールを取得します。

1from sagemaker import get_execution_role23role = get_execution_role()4bucket='bucket-name'

‘bucket-name’

→ここに先に作成してあるSagemakerが含まれてるバケット名を入力します。

次に以下のコードを実行すると指定したWEBサイトからMNISTデータセットをダウンロードしてきます。

1. ダウンロードした圧縮ファイルを解凍

2. 内のモデルトレーニング用のデータセット

  1. モデルトレーニング後に検証するためのデータセットのデータセットをノートブックのメモリに読み込みます。
1%%time2import pickle, gzip, numpy, urllib.request, json34# Load the dataset56urllib.request.urlretrieve("http://deeplearning.net/data/mnist/mnist.pkl.gz", "mnist.pkl.gz")7with gzip.open('mnist.pkl.gz', 'rb') as f:8    train_set, valid_set, test_set = pickle.load(f, encoding='latin1')

次に以下のコードを入力することで先ほど読み込んだデータセットを調べることができます。

通常この段階で、データセットを調べてデータ加工を実施しますが、今回はデータセット内の画像を表示します。

1%matplotlib inline2import matplotlib.pyplot as plt3plt.rcParams["figure.figsize"] = (2,10)45def show_digit(img, caption='', subplot=None):6    if subplot==None:7        _,(subplot)=plt.subplots(1,1)8    imgr=img.reshape((28,28))9    subplot.axis('off')10    subplot.imshow(imgr, cmap='gray')11    plt.title(caption)1213show_digit(train_set[0][30], 'This is a {}'.format(train_set[1][30]))

以下のコードでは、データフォーマットを変換し、S3にデータをアップロードします。

1%%time2from sagemaker.amazon.common import write_numpy_to_dense_tensor3import io4import boto356data_key = 'kmeans_lowlevel_example/data'7data_location = 's3://{}/{}'.format(bucket, data_key)8print('training data will be uploaded to: {}'.format(data_location))910# Convert the training data into the format required by the SageMaker KMeans algorithm1112buf = io.BytesIO()13write_numpy_to_dense_tensor(buf, train_set[0], train_set[1])14buf.seek(0)1516boto3.resource('s3').Bucket(bucket).Object(data_key).upload_fileobj(buf)

ノートブックを使って、S3にアップロードすることができました。

終わりに

今回はS3にデータをアップロードする方法を紹介していきました。

コードをコピーして実行していくだけなので、難しいと思うポイントは少なかったです。

今後は時間のある際に、アップロードをしたデータをトレーニングしていきたいと思います。

最後まで読んでいただきありがとうございました。

この記事を書いた人

aws-recipe-user