著者 Wenjie Tehan
最終更新日 2022年2月8日
警告
本記事はTeradata CorporationによるGetting Startedに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については原本をご参照下さい。
また、修正が必要な箇所やご要望についてはコメントをよろしくお願いします。
概要
このハウツーは、Amazon SageMakerとTeradata Vantageを統合するのに役立ちます。このガイドで説明するアプローチはこのサービスと統合するための多くの潜在的なアプローチの1つです。
Amazon SageMakerはフルマネージドな機械学習プラットフォームを提供します。Amazon SageMakerとTeradataには2つのユースケースがあります。
① データはTeradata Vantage上に存在しAmazon SageMakerはモデル定義とその後のスコアリングの両方に使用されます。この使用例ではTeradataはAmazon S3環境にデータを提供し、Amazon SageMakerがモデル開発のためにトレーニングおよびテストデータセットを利用できるようにします。TeradataはさらにAmazon S3を通じてAmazon SageMakerによるその後のスコアリングのためにデータを利用できるようにします。このモデルではTeradataはデータリポジトリのみとなります。
② データはTeradata Vantage上に存在しAmazon SageMakerはモデル定義に使用され、Teradataはその後のスコアリングに使用されます。このユースケースでは、TeradataはAmazon S3環境にデータを提供しAmazon SageMakerはモデル開発のためにトレーニングおよびテストデータセットを消費できるようにします。Teradataは、Amazon SageMakerのモデルをTeradataのテーブルにインポートしTeradata Vantageでスコアリングを行う必要があります。このモデルではTeradataはデータリポジトリでありスコアリングエンジンでもあります。
このドキュメントでは、最初のユースケースについて説明します。
Amazon SageMakerはAmazon S3バケットからトレーニングデータとテストデータを消費します。この記事ではTeradataの分析データセットをAmazon S3バケットにロードする方法について説明します。その後、データはAmazon SageMakerで利用可能になり機械学習モデルを構築してトレーニングし本番環境に展開することができます。
前提条件
・Teradata Vantageインスタンスにアクセスできること。
メモ!
Vantageの新しいインスタンスが必要な場合は、Google Cloud、Azure、AWSのクラウドにVantage Expressという無料版をインストールすることができます。また、VMware、VirtualBox、またはUTMを使用して、ローカルマシン上でVantage Expressを実行することもできます。
・Amazon S3バケットにアクセスしAmazon SageMakerサービスを使用するためのIAM権限
・学習データを保存するためのAmazon S3バケット
データの読み込み
Amazon SageMakerはAmazon S3バケットからデータをトレーニングします。以下はVantageからAmazon S3バケットにトレーニングデータをロードする手順です。
① Amazon SageMakerコンソールに移動しノートブックインスタンスを作成します。ノートブックインスタンスを作成する方法についてはAmazon SageMaker開発者ガイドを参照してください。
② ノートブックのインスタンスを開きます。
③ 新規作成 → conda_python3 をクリックして新規ファイルを起動します。
④ Teradata Pythonライブラリをインストールします。
!pip install teradataml
⑤ 新しいセルに追加のライブラリをインポートします。
import teradataml as tdml
from teradataml import create_context, get_context, remove_context
from teradataml.dataframe.dataframe import DataFrame
import pandas as pd
import boto3, os
⑥ 新しいセルで、Teradata Vantageに接続します。ホスト名、データベースユーザー名、データベースパスワード はVantageの環境にあわせて置き換えてください。
create_context(host = '<hostname>', username = '<database user name>', password = '<database password>')
⑦ TeradataML DataFrame APIを使用して学習用データセットが存在するテーブルからデータを取得する。
train_data = tdml.DataFrame('table_with_training_data')
trainDF = train_data.to_pandas()
⑧ ローカルファイルにデータを書き込む。
trainFileName = 'train.csv'
trainDF.to_csv(trainFileName, header=None, index=False)
⑨ Amazon S3にファイルをアップロードします。
bucket = 'sagedemo'
prefix = 'sagemaker/train'
trainFile = open(trainFileName, 'rb')
boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, localFile)).upload_fileobj(trainFile)
モデルのトレーニング
① 左メニューのTrainingからTraining jobsを選択し、Create training jobをクリックします。
② トレーニングジョブの作成ウィンドウでジョブ名(例:xgboost-bank)を記入しIAMロールの新しいロールを作成します。 Amazon S3バケットにAny S3バケット、ロールの作成にCreate roleを選択します。
③ Create training jobウィンドウに戻りアルゴリズムとしてXGBoostを使用します。
④ インスタンスタイプはデフォルトのml.m4.xlarge、インスタンスあたりの追加ストレージボリュームは30GBを使用します。これは短いトレーニングジョブで10分以上はかからないはずです。
⑤ 以下のハイパーパラメータを入力しそれ以外はデフォルトのままにしてください。
num_round=100
silent=0
eta=0.2
gamma=4
max_depth=5
min_child_weight=6
subsample=0.8
objective='binary:logistic'
⑥ Input data configurationには学習データを保存したAmazon S3バケットを入力します。Input modeはFileです。Content typeはcsvです。S3のロケーションはファイルのアップロード先です。
⑦ Output data configurationには出力データを保存するパスを入力します。
⑧ 他はデフォルトのまま「トレーニングジョブの作成」をクリックします。トレーニングジョブの設定方法の詳細はAmazon SageMaker Developer Guideに記載されています。
トレーニングジョブが作成されるとAmazon SageMakerはMLインスタンスを起動してモデルをトレーニングし、結果のモデル成果物やその他の出力を出力データ構成(デフォルトではパス/<トレーニングジョブ名>/output)に格納します。
モデルのデプロイ
モデルを学習させた後、永続的なエンドポイントを使用してモデルをデプロイします。
モデルの作成
① 左パネルの「Inference」から「Models」を選択し「Create model」を選択します。モデル名(例:xgboost-bank)を記入し前のステップで作成したIAMロールを選択します。
② コンテナ定義1では「Location of inference code image」として、「433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest」を使用します。モデル成果物の場所には学習ジョブの出力パスを指定します。
③ 他はデフォルトのまま「モデルを作成」します。
エンドポイントコンフィギュレーションを作成する
① 作成したモデルを選択し、[Create endpoint configuration]をクリックします。
② 名前(例:xgboost-bank)を記入しその他はdefaultを使用します。モデル名とトレーニングジョブは自動的に入力されるはずです。Create endpoint configuration をクリックします。
エンドポイントの作成
① 左パネルからInference → Modelsを選択し、再度モデルを選択し、今度はCreate endpointをクリックします。
② 名前(例:xgboost-bank)を記入し「既存のエンドポイント構成を使用する:image::sagemaker-with-teradata-vantage/attach.endpoint.config.png[エンドポイント構成を添付する]」を選択します。
③ 前回の手順で作成したエンドポイント構成を選択し[Select endpoint configuration]をクリックします。
④ 他のすべてをデフォルトのままにして「エンドポイントを作成」をクリックします。
これでモデルがエンドポイントにデプロイされクライアントアプリケーションから利用できるようになります。
まとめ
このハウツーでは、Vantageから学習データを抽出し、それを使ってAmazon SageMakerでモデルを学習させる方法を紹介しました。
このソリューションでは、
Jupyterノートブックを使用してVantageからデータを抽出しS3バケットに書き込み、
SageMaker のトレーニングジョブは S3 バケットからデータを読み込みモデルを生成し、
このモデルをサービスエンドポイントとして AWS にデプロイ
しました。
さらに詳しく
・Train ML models in Vantage using only SQL