とても多くのお客様がVantageとAWSのサービスとの統合に関心を持っています。そのようなトピックからここではSageMakerとVantageの統合について説明します。
このガイドで説明するアプローチはSagemakerと統合するための多くの可能性のあるアプローチの一つであり、そのままの形で提供されるものです。 このアプローチは社内で実装されテストされていますが、TeradataまたはAWSのいずれからも、このアプローチに関する正式なサポートはありませんのでご注意ください。
とはいえ、何がうまくいったのか、何がうまくいかなかったのか、どうしたら改善できるのか、などなど、皆さんのフィードバックはとても望ましく、ありがたく思います。
ご意見・ご感想は、コメントとしてお寄せください。
免責事項:本ガイドは、AWSとTeradata製品の両方のドキュメントからの内容を含んでいます。
概要
Amazon SageMakerは、フルマネージドなMachine Learning Platformを提供します。
SageMakerとTeradataのユースケースは2つあります。
-
データはTeradata上に存在し、SageMakerはモデルの定義とその後のスコアリングの両方に使用されるケース。このユースケースでは、TeradataはS3環境にデータを提供しSageMakerがモデル開発のためにトレーニングおよびテストデータセットを利用できるようにします。TeradataはさらにSageMakerによるその後のスコアリングのためにS3経由でデータを利用できるようにします。このケースではTeradataはデータリポジトリのみとして機能します。
-
データはTeradata上に存在しSageMakerはモデル定義に使用され、Teradataはその後のスコアリングに使用されます。このユースケースではTeradataはS3環境にデータを提供しSageMakerがモデル開発のためにトレーニングおよびテストデータセットを消費できるようにします。TeradataはSageMakerのモデルをTeradataのテーブルにインポートしてTeradata Advanced SQLエンジンまたはMLエンジンによるスコアリングを行ことができます。このケースではTeradataはデータリポジトリおよびスコアリングエンジンとして機能します。
この記事では、ユースケース1について説明します。
SageMakerはS3バケットからトレーニングデータとテストデータを取得し利用します。この記事ではTeradataの分析データセットをS3バケットにロードする方法について説明します。このデータをSageMakerで利用することで機械学習モデルを構築・訓練し、本番環境に導入することができます。
前提条件 :
・S3 バケットにアクセスできる IAM 権限とSageMaker サービスを利用できる権限
・学習データを保存するためのS3バケット
この記事では、既存の SageMaker オンラインサンプルを活用して、Teradata Vantage システムのデータを使用した機械学習モデルを構築、訓練、展開します。この例では、銀行マーケティングデータセット を使用して、顧客がCD口座に登録するかどうかを予測します。このサンプルのPythonコードと説明は、こちら にあります。
はじめに
データのロード
SageMakerはS3バケットからデータを学習させます。Teradata VantageからS3バケットに学習データをロードする手順は以下のとおりです。
・Amazon SageMakerのコンソールにアクセスし、Notebook Instanceを作成します。
ノートブックインスタンスの作成方法は、こちら をご覧ください。
・ノートブックインスタンスを開く
・ 新規作成→conda_python3 で新規ファイルを起動します。
・Teradata Pythonライブラリを"!pip install teradataml "でインストールする。
・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
・Vantageに接続します。
create_context(host = ‘<hostname>’, username = ‘<database user name>’, password = '<database password>')
・学習用データセットが存在するテーブルからTeradata Python DataFrameモジュールを使ってデータを取得する。 例:tmdl.DataFrame(‘train’)
・Teradata DataFrameからPanda DataFrameに変換する。
・ローカルファイルへのデータ書き込み
・S3バケットに変数を割り当てる
・S3へファイルをアップロードします。
モデルのトレーニング
・トレーニングジョブを作成する
・左メニューの "トレーニング "から "トレーニングジョブ "を選択し、"トレーニングジョブを作成 "をクリックする。
・トレーニングジョブの作成」画面で「ジョブ名」(例:xgboost-bank)、IAMロールに「新しいロールの作成」を記入します。S3バケットに "Any S3 bucket "を選択し、"Create role "を選択します。
・トレーニングジョブの作成」画面に戻りアルゴリズムとして「XGBoost」を使用します。
・インスタンスタイプはデフォルトのml.m4.xlarge、追加ストレージボリュームは1インスタンスあたり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 "には学習データを保存したs3バケットを入力します。入力モードは「File」です。コンテンツタイプは "csv "です。"S3 location "は、ファイルのアップロード先となります。
・Output data configuration "に出力データを保存するパスを入力します。
他はデフォルトのまま"Create training job" をクリックします。
トレーニングジョブの設定方法の詳細は、こちらのAWSのサイト に記載されています。
トレーニングジョブが作成されると、SageMakerはMLインスタンスを起動してモデルをトレーニングし、その結果のモデル成果物やその他の出力を「出力データ構成」パス/<トレーニングジョブ名>/outputにデフォルトで格納します。
モデルのデプロイ
モデルを学習させた後永続的なエンドポイントを使用してデプロイします。
・モデルの作成
・左側のパネルから「推論」の「モデル」を選択し「モデルの作成」を選択します。モデル名(例:xgboost-bank)を記入し前のステップで作成したIAMロールを選択します。
・コンテナ定義では、「推論コードイメージの位置」に "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest "を利用します。「モデル成果物の場所」は学習ジョブの出力パスです。
他はデフォルトのまま「モデルを作成」します。
・作成とエンドポイント設定
- 先ほど作成したモデルを選択し「エンドポイント設定の作成」をクリックします。
- 名前(例:xgboost-bank)を記入しその他はデフォルトを使用します。モデル名とトレーニング・ジョブは自動的に入力されるはずです。「エンドポイント構成の作成」をクリックします。
・エンドポイント作成
- 左のパネルから 「推論」 -> 「モデル」 を選択し再度モデルを選択して今度は「エンドポイント構成の作成」をクリックします。
- エンドポイント名(例:xgboost-bank)を入力し「既存のエンドポイント構成を利用する」を記入します。
- 前回の手順で作成したエンドポイント構成を選択し「エンドポイント構成の選択」をクリックします。
他のすべてをデフォルトのままにして「エンドポイントの作成」をクリックします。
これでモデルがエンドポイントにデプロイされ、クライアントアプリケーションから利用できるようになります。
おわりに
このようにVantageのデータを簡単にAmazon SageMakerでのモデル開発に利用することが可能です。ぜひご活用ください!