훈련된 모델 자체는 단순히 모델 가중치로 이루어진 Tar 파일일 뿐이며 그 자체로는 아무 기능도 하지 않습니다. 모델을 활용하고 예측 결과를 얻으려면 모델을 배포해야 합니다.
추론을 생성하는 방법에 따라 두 가지 방법으로 Amazon SageMaker에 모델을 배포할 수 있습니다.
- 한 번에 하나씩 추론을 생성하려면 Amazon SageMaker 호스팅 서비스를 사용하여 영구 엔드포인트를 설정합니다.
- 전체 데이터 세트에 대한 추론을 생성하려면 Amazon SageMaker 배치 변환을 사용합니다.
이 실습에서는 사용 사례에 가장 적합한 방식을 선택할 수 있도록 두 가지 옵션을 모두 제공합니다.
Amazon SageMaker 호스팅 서비스의 경우, 페이로드를 전달하고 추론 결과를 얻을 수 있는 Amazon EC2 인스턴스에 라이브 HTTP 엔드포인트가 상주합니다.
모델을 배포할 때 sagemaker.estimator.Estimator 객체의 deploy 메서드를 호출할 수 있습니다. deploy 메서드를 호출할 때는 엔드포인트를 호스팅하는 데 사용할 기계 학습 인스턴스의 수와 유형을 지정합니다.
다음 코드를 복사하여 붙여 넣고 [실행]을 선택하여 모델을 배포합니다.
deploy 메서드는 배포 가능한 모델을 생성하고 Amazon SageMaker 호스팅 서비스 엔드포인트를 구성하며 모델을 호스팅할 엔드포인트를 시작합니다.
엔드포인트에 대해 추론을 실행하려면 훈련된 모델이 읽을 수 있는 형식으로 입력 페이로드가 직렬화되어야 하고, 추론 출력은 사람이 읽을 수 있는 형식으로 역직렬화되어야 합니다. 다음 코드에서는 CSV 형식의 데이터를 벡터로서 모델에 전달하여 JSON 출력을 생성하는 csv_serializer와 json_deserializer를 사용합니다.
다음 코드를 복사하여 코드 셀에 붙여 넣고 [실행]을 선택합니다.
다음으로, 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 차원 훈련 벡터로 변환했습니다. 이제 주제 모델을 살펴볼 수 있습니다.