トレーニングされたモデル自体は、モデルの重みで構成される tar ファイルであり、それ自体では何もしません。モデルを役立てて予測を得るには、モデルをデプロイする必要があります。
推論を生成する方法に応じて、モデルを Amazon SageMaker にデプロイする方法は 2 つあります。
- 一度に 1 つの推論を取得するには、Amazon SageMaker ホスティングサービスを使用して永続的なエンドポイントをセットアップします。
- データセット全体の推論を取得するには、Amazon SageMaker バッチ変換を使用します。
このラボでは、ユースケースに最適なアプローチを選択できるようにするため、両方のオプションを提供します。
Amazon SageMaker ホスティングサービスの場合、ライブ HTTPs エンドポイントは、ペイロードを渡して推論を取得できる Amazon EC2 インスタンス上にあります。
モデルをデプロイするときは、sagemaker.estimator.Estimator オブジェクトの deploy メソッドを呼び出します。deploy メソッドを呼び出すときに、エンドポイントのホストに使用する ML インスタンスの数とタイプを指定します。
次のコードをコピーして貼り付け、[実行] を選択してモデルをデプロイします。
deploy メソッドはデプロイ可能なモデルを作成し、Amazon SageMaker ホスティングサービスエンドポイントを設定し、エンドポイントを起動してモデルをホストします。
エンドポイントに対して推論を実行するには、トレーニング済みモデルによる読み取りが可能な形式で入力ペイロードがシリアル化され、人間が読める形式に推論出力が逆シリアル化されることを確認する必要があります。次のコードでは、csv_serializer および json_deserializer を使用して、CSV 形式のデータを (ベクターとして) モデルに渡し、JSON 出力を生成します。
以下のコードをコピーしてコードセルに貼り付け、[実行] を選択します。
次に、K-NN モデルで使用するトレーニングデータのトピックベクトルを抽出します。
以下のコードをコピーして新しいコードセルに貼り付け、[実行] を選択します。
predictions = []
for item in np.array(vectors.todense()):
np.shape(item)
results = ntm_predictor.predict(item)
predictions.append(np.array([prediction['topic_weights'] for prediction in results['predictions']]))
predictions = np.array([np.ndarray.flatten(x) for x in predictions])
topicvec = train_labels[newidx]
topicnames = [categories[x] for x in topicvec]
成功しました。 これで、モデルの出力を確認できます。
バッチ変換を使用すると、一度にデータのバッチに対して推論を実行できます。Amazon SageMaker は必要なコンピューティングインフラストラクチャを作成し、バッチジョブが完了するとそれを破棄します。
バッチ変換コードは、トピックモデルから sagemaker.transformer.Transformer オブジェクトを作成します。次に、そのオブジェクトの transform メソッドを呼び出して、変換ジョブを作成します。sagemaker.transformer.Transformer オブジェクトを作成するときに、バッチ変換ジョブの実行に使用するインスタンスの数とタイプ、および推論を保存する Amazon S3 内の場所を指定します。
推論をバッチジョブとして実行するには、次のコードをコピーしてコードセルに貼り付け、[実行] を選択します。
np.savetxt('trainvectors.csv',
vectors.todense(),
delimiter=',',
fmt='%i')
batch_prefix = '20newsgroups/batch'
train_s3 = sess.upload_data('trainvectors.csv',
bucket=bucket,
key_prefix='{}/train'.format(batch_prefix))
print(train_s3)
batch_output_path = 's3://{}/{}/test'.format(bucket, batch_prefix)
ntm_transformer = ntm.transformer(instance_count=1,
instance_type ='ml.m4.xlarge',
output_path=batch_output_path
)
ntm_transformer.transform(train_s3, content_type='text/csv', split_type='Line')
ntm_transformer.wait()
変換ジョブが完了したら、次のコードを使用して、出力をローカルのノートブックインスタンスにダウンロードして検査できます。
成功しました。 モデルは各ドキュメントを NUM_TOPICS 次元トレーニングベクトルに変換しました。これでトピックモデルを探索できます。