經過訓練的模型本身只是包含模型權重的 tar 檔案,自己什麼也不做。為了使模型有用並獲得預測,您需要部署模型。
有兩種方法可以在 Amazon SageMaker 中部署模型,具體取決於您要如何產生推論:
- 若要一次獲得一個推論,使用 Amazon SageMaker 託管服務來設定持久性端點。
- 若要獲取整個資料集的推論,則使用 Amazon SageMaker Batch Transform。
本實驗室為您提供了兩種選項,您可以選擇適用於您使用案例的最佳方法。
若選擇 Amazon SageMaker 託管服務,即時 HTTP 端點位於 Amazon EC2 執行個體,您可以將承載傳遞給該執行個體並獲得推論。
部署模型後,呼叫 sagemaker.estimator.Estimator 物件的部署方法。呼叫部署方法時,可以指定要用於託管端點的 ML 執行個體數目和類型。
複製並貼上以下程式碼,然後選擇執行來部署模型。
部署方法將會建立可部署的模型,設定 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 物件。然後,它將呼叫該物件的轉換方法來建立轉換任務。建立 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 個維度訓練向量。現在,您可以探索主題模型。