前回は、MLサービスおよびAmazon SageMakerの概要と利用方法について解説しました。図を用いて「開発」「学習」「推論」の流れを説明しました。今回からは4回にわたり、実際にAmazon SageMakerを使っていきたいと思います。

今回は、下記を理解していただくことを目標に解説をしていきます。

  • Amazon SageMakerを使って実際に「開発」を始めるまでの準備作業の流れがわかる
  • Amazon SageMakerを使った「開発」「学習」「推論」の流れがわかる

実際にAmazon SageMakerを使う

AWSの公式サイトに「機械学習モデルの構築およびトレーニング、デプロイ with Amazon SageMaker」というチュートリアルがあるので、以降ではこれをベースに解説を進めていきます。

チュートリアルの概要

今回利用するチュートリアルは、Amazon SageMakerを使って「開発」「学習」「推論」の一連の流れを体験できるものです。

学習/推論には、カリフォルニア大学アーバイン校(UCI)が公開しているオープンデータから、「Bank Marketing Data Set」と呼ばれる「ポルトガルの銀行マーケティングキャンペーン」のデータを利用します。

このデータは、ポルトガルの金融機関が顧客に電話によるダイレクトマーケティングキャンペーンを行った際のデータを記録したものです。データには大きく以下の2種類の情報が記録されています。

  • データ1:「年齢」や「職業」といった顧客の属性情報
  • データ2:ダイレクトマーケティングを行った結果、その顧客が定期預金を申し込んだか否かのフラグ

「データ1」から機械学習アルゴリズムによって何らかのパターンを見い出して、これから営業をかける顧客(「データ2」が未知の顧客)のなかから「定期預金を申し込む見込みのある顧客」を予測して営業活動に役立てようというわけです。

機械学習を使って見込み顧客を予測できることにより、営業活動を効率化することができます。つまり、無策に顧客名簿の上から順に営業をかけるよりも顧客を獲得できる可能性が高まるということであり、機械学習を導入する意義はここにあります。

チュートリアルでは、顧客の属性データから顧客が定期預金を「申し込む」か「申し込まないか」の二値分類を行います。分類にあたっては、Amazon SageMakerの組み込みアルゴリズムとして提供されている「XGBoost リリース 0.72」という機械学習アルゴリズムを利用します。

組み込みアルゴリズムとして提供されているXGBoostは「0.90-1」「0.90-2」「1.0-1」というより新しいバージョンも提供されていますが、本稿ではチュートリアルに従ってあえて「0.72」を利用することにします。新しいバージョンのXGBoostについて知りたい方は「XGBoost アルゴリズム」を参照してください。

チュートリアルに入る前に

今回利用するチュートリアルは30分程度で実施可能な簡単な内容ですが、下記を理解できるよう注意しながら詳しく解説を進めていきます。

  • 自分が Amazon SageMakerを使って今何をしているのか
  • Amazon SageMakerが背後でどのような処理が行っているか

解説はチュートリアルの流れに沿って進めていきますが、もし途中で”現在地”がわからなくなってしまった場合は下記の表を参照してください。

工程 ステップ 枝番 実施内容 連載回
開発 1 Amazon SageMaker コンソールにログインする 第5回
2 Amazon SageMaker notebook instance を作成する 第5回
3 データの準備 第6回
3a, 3b ノートブックを起動する
3c ノートブックの利用準備をする
3d S3 バケットを作成する
3e 学習/推論に利用するデータをダウンロードする
3f データを分割する
学習 4 データからのモデルのトレーニング 第7回
4a 学習データを S3 バケットにアップロードする
4b 学習の設定をする
4c 学習を行う
推論 5 モデルのデプロイ 第8回
5a 推論エンドポイントを作成して、モデルをデプロイする
5b 推論を行う
6 モデルの性能評価 第8回
後片付け 7 リソースを終了する 第8回

注意事項

本稿の内容を実施する際の注意事項を下記に示します。

  • 前回示した「開発」「学習」「推論」の流れと、チュートリアルの手順は概ね同じですが、多少前後する箇所があります
  • 記事内で示す画面イメージや手順は、2020年7月11日時点のものとなります。仕様変更などにより表示内容や設定値に変更が入る可能性があります
  • 想定外の影響を避けるため、本番環境 (商用サービスが稼働するAWSアカウント)ではなく、開発環境や検証環境で実施してください
  • 本稿の内容を実施すると、数百円程度の課金が発生する可能性があります。無用な課金を避けるためには作成したリソースの削除が必要ですが、この”後片付け”の手順は第8回に掲載予定なので、課金を避けたい方は第8回の掲載後に試してください

事前準備

AWSアカウントを持っていない場合は、公式サイトの「Amazon SageMakerをセットアップします」を参照して取得/セットアップをしてください。なお、今回「Amazon SageMakerStudio」は利用しないので、セットアップ手順から以下の2つの項目を実施することになります。

また、チュートリアルは、「us-west-2:米国西部(オレゴン)」「us-east-1:米国東部(バージニア北部)」「us-east-2:米国東部(オハイオ)」「eu-west-1:欧州(アイルランド)」のいずれかのリージョンで作業する前提となっています。本稿では、「米国東部 (バージニア北部)」で実施しています。

なお、ノートブックインスタンスのPythonと主要なパッケージのバージョンは下記の通りです。

名前 バージョン
Python 3.6.10
NumPy 1.18.1
Pandas 1.0.3
AWS SDK for Python (Boto3) 1.14.16
Amazon SageMaker SDK for Python 1.67.1.post0

XGBoostについては、先述の通り「XGBoost リリース 0.72」を利用します。

ステップ1:Amazon SageMakerコンソールにログインする

AWSマネジメントコンソールにログインして、Amazon SageMakerのコンソールに移動します。

Amazon SageMakerのコンソールに移動

実施手順

AWSマネジメントコンソールに自身のIAMユーザーでログインします。

IAMユーザーでログイン

先述の通り、リージョンは「米国東部 (バージニア北部)」を利用するので、その他のリージョンにいる場合はAWSマネジメントコンソールの右上のプルダウンメニューから移動してください。

バージニア北部

それでは、Amazon SageMakerに移動します。

「サービスを検索する」の箇所にある検索バーに「sage」と入力すると、「Amazon SageMaker」が表示されるので、これをクリックして移動します。

サービスを検索する

初めてAmazon SageMakerに接続する際は、上の機能説明のページに移動します。

機能説明のページ

2回目以降は下のダッシュボードページに移動しますが、どちらでも問題ありません。

ダッシュボードページ

ステップ2:Amazon SageMakernotebook instanceを作成する

学習/推論用のコードの開発環境となる「ノートブックインスタンス」を作成していきます。

「ノートブックインスタンス」を作成

実施手順

左側の折りたたみメニューの「ノートブック」をクリックして開き、「ノートブックインスタンス」をクリックします。ダッシュボードにいる場合は、画面中央の「概要」のなかにある「ノートブックインスタンス」をクリックしても構いません。

「ノートブックインスタンス」をクリック

ノートブックインスタンスの画面に移動します。現在はノートブックインスタンスが存在しませんが、ここにそのリージョンに存在するノートブックインスタンスの一覧が表示されます。

「ノートブックインスタンスの作成」をクリックします。

「ノートブックインスタンスの作成」

ノートブックインスタンスの作成画面に移動します。

ノートブックインスタンスの作成画面

今回は簡単なチュートリアルなので、ノートブックインスタンス作成時の設定項目には原則としてデフォルト値を設定します。各設定値の説明を以下に簡単にまとめたので、実際の業務で利用する際は参考にしてください。

大分類 小分類 設定値名 説明 デフォルト値
ノートブックインスタンス設定 ノートブックインスタンス名

ノートブックインスタンスの名前を設定する。

最大63文字まで設定可能。英数字もしくはハイフン (-) の利用が可能。1つのAWS リージョンのアカウント内で一意である必要がある
なし(今回は「mynotebook」と設定)
ノートブックインスタンスのタイプ

ノートブックインスタンスのタイプを設定する。

ノートブックインスタンスでの作業はデータの簡単な前処理とコーディングがメインであり、学習や推論は行わない。まずはデフォルトの「ml.t2.medium」など小さいインスタンスで試して、CPUやメモリなどのリソース不足が発生した場合にスケールアップするか、不足するリソースに応じたインスタンスタイプを選択する
(例)
- CPUを重点的に増やしたい:コンピューティング最適化 (ml.c5 シリーズなど)
- メモリを重点的に増やしたい:メモリの最適化 (ml.r5.シリーズなど)
(参考)
- 「Amazon SageMaker ML インスタンスタイプ
- 「Amazon SageMaker の料金
ml.t2.medium
Elastic Inference

ノートブックインスタンスにGPUリソースをアタッチして、ローカル環境での推論テストを高速化する。

ディープラーニングフレームワークとしては、TensorFlow、 Apache MXNet、PyTorchがサポートされている。今回のチュートリアルで利用する機械学習アルゴリズム (フレームワーク) はXGBoostであり、GPUを利用する計算はしないため不要である
(参考)
- 「Amazon SageMaker Elastic Inference (EI) を使用する
なし
追加設定 ライフサイクル設定

ノートブックインスタンスの作成時または起動時に実行するシェルスクリプトを定義する

(参考)
- 「ライフサイクル設定スクリプトを使用したノートブックインスタンスをカスタマイズする
設定なし
ボリュームサイズ(GB単位)

ノートブックインスタンスにアタッチする汎用ストレージ (SSD) のボリュームのサイズを設定する。

ボリュームサイズは5GB - 16TBの範囲で設定可能
5
アクセス許可と暗号化 IAMロール

ノートブックインスタンスにAWSリソースの操作権限を付与する。

本表の下に補足情報を記載するので、そちらも参照されたい
IAM ロールを選択する(新しいIAMロールの作成)
ルートアクセス - オプション

有効化によりノートブックインスタンスの全てのユーザーに管理者権限を付与する。

ノートブックインスタンス上の全てのファイルにアクセスして編集できる権限が与えられる
有効化 - ノートブックへのルートアクセス権をユーザーに付与する
暗号化キー - オプション

AWS Key Management Service(KMS)の暗号鍵を利用して、ノートブックインスタンスにアタッチする汎用ストレージを暗号化する。

セキュリティ要件で汎用ストレージの暗号化が必要な場合は設定する。別途、AWS KMSの利用料が必要となる点に注意する
(参考)
- 「AWS Key Management Service の料金
カスタム暗号化なし
ネットワーク - オプション VPC - オプション

ノートブックインスタンスのVPCへの配置を設定する。

セキュリティ要件などでノートブックインスタンスをユーザー管理のVPC内に配置する必要がある場合に設定する。ほかのAWSサービスに接続する場合はインターネット接続もしくは接続したいサービスのVPCエンドポイントが必要となる点に注意する
(参考)
- 「ノートブックインスタンスを VPC のリソースに接続する
非VPC
Git リポジトリ - オプション デフォルトのリポジトリ リポジトリ

ノートブックインスタンスの作成時に自動で /home/ec2-user/SageMaker 直下に登録したGitリポジトリをクローンする。

AWS CodeCommitやGitHubのGitリポジトリを登録してノートブックインスタンスの作成時に自動で /home/ec2-user/SageMaker直下にクローンして、手動でクローンする手間を省くことができる。デフォルトのリポジトリを1つ、追加のリポジトリを最大3つ設定可能
(参考)
- 「Git リポジトリを Amazon SageMaker のノートブックインスタンスに関連付ける
なし
タグ - オプション キー、値

キーバリュー形式で値を設定する

(例)
- Nameタグ (Name: <notebook_instance_name>) 
- 環境タグ (Environment: Production)
なし

ここで、ノートブックインスタンスに付与するIAM ロールに関して補足しておきましょう。

IAMロールはAWSのリソースに操作権限を与えるために利用します。例えば、学習用データの取得のためにはノートブックインスタンスからAmazon S3のバケットにアクセスが必要です。IAM ユーザーに紐付く認証情報として「アクセスキー ID」と「シークレットキー」がありますが、これをソースコードにハードコーディングすることはアンチパターンとなります。Gitリポジトリのコードとしてパブリックなリポジトリに公開してしまった場合、数十分程度でその情報が搾取されるとの指摘もありますので十分に注意してください。

IAM ロールに操作権限を定義してノートブックインスタンスに付与することで、具体的な認証情報を記述せずに操作権限を付与することができます。ノートブックインスタンスの作成の画面に従ってIAMロールを新規作成する場合は、「AmazonSageMakerFullAccess」を権限として持つ(「AmazonSageMakerFullAccessポリシー」に記載されている操作権限が付与された)IAMロールを作成することになります。

IAMロールの作成時に下記に示すウィンドウが表示されます。この条件に当てはまる Amazon S3のバケットとオブジェクト(ファイル)の操作権限が与えられる点に注意してください。

問題がなければ、「ロールの作成」をクリックして作成します。

「ロールの作成」

ノートブックインスタンスの設定が完了したら、画面の最下部にある「ノートブックインスタンスの作成」をクリックします。

ノートブックインスタンスの作成

設定値に問題がなければ画面が切り替わり、「成功! ノートブックインスタンスが作成されています。」と表示されます。数分間待って、「ステータス」が「Pending」から「InService」に変わると、ノートブックインスタンスの作成は完了です。

ノートブックインスタンスの作成完了1
ノートブックインスタンスの作成完了2

* * *

今回は、Amazon SageMakerのチュートリアルをベースにして、ノートブックインスタンスの作成までの手順を説明しました。次回は学習/推論に利用するデータの準備を行います。

著者紹介


菊地 貴彰 (KIKUCHI Takaaki) - 株式会社NTTデータ
システム技術本部 デジタル技術部
Agile プロフェッショナル担当

大学・大学院では、機械学習を専攻。ベイズ的枠組みを用いて、複数の遺伝子のデータから遺伝子どうしの相互作用ネットワークの推定に関する研究を行った。

株式会社NTTデータに入社後は、法人や金融のシステム開発のシステム基盤担当としてキャリアを積み、現在はデジタル技術やAgile開発を専門に扱う組織でシステム開発全般を担当する。
2019, 2020 APN AWS Top Engineers, Japan APN Ambassador 2020に選出に選出。

本連載の内容に対するご意見・ご質問はtwitter: @kikuchitk7まで。