Amazon Web Services ブログ
Amazon SageMaker の体験ハンズオン動画とQAを公開しました
先日 (2019/5/17) 開催しました 「Amazon SageMaker 機械学習エンジニア向け体験ハンズオン」の動画および資料を公開しました。当日、参加者の皆様から多数頂いた QA についても掲載しています。
Amazon SageMaker は、データサイエンティストやエンジニアが効率よく機械学習を進めるために、 AWS が提供するマネージドサービスです。この動画はSageMakerの基本的な使い方を体験できる1時間のハンズオン動画となっており、動画を見ながら実際に手を動かすことで、SageMakerの利用法を効率よく理解することができます。これからSageMakerを利用して機械学習に取り組む際にはAWS Black Belt オンラインセミナーと合わせて是非ご覧下さい。
【ハンズオンの概要】
1) ビルトインアルゴリズムの利用
・Random Cut Forest を利用した異常検知
・XGBoost を利用した画像認識(紹介のみ)
2) Deep Learning フレームワークの利用
・Chainer を利用した画像認識
※ 動画の一例
視聴はこちらから >>
※ リンク先でフォームに登録いただきますと、各コンテンツにアクセス可能となります。
当日、参加者の皆様から頂いた QA を以下に掲載します。
Q. SageMakerと他のMachine Learningサービスの区別は?マネージドサービスの中の機械学習サービスの分別とか、適用範囲を教えて頂けませんか
A. 機械学習に関連するAWSサービスは、インフラストラクチャ、MLサービス、AIサービスという3つのカテゴリに大きく分けられます。
1. 機械学習を支えるインフラストラクチャには、GPU/FPGA/大量のCPUを搭載したEC2やAWS IoT Greengrass、Amazon Elastic Inferenceなどが該当します。
2.MLサービスは機械学習に取り組むお客様向けのサービスで、Amazon SageMakerはこれに該当します。
SageMakerは、機械学習のワークフロー全体をカバーするマネージド型サービスで、機械学習エンジニアやデータサイエンティストが、機械学習モデルの構築、トレーニング、デプロイを効率よく行うことができるインフラの仕組みを提供しています。これにより機械学習そのものに注力することが可能となり、モデルをより少ない労力と費用で、本番稼働させることができます。
3.AIサービスは、機械学習の専門家がおらずとも、APIを呼び出すだけで簡単に機械学習のテクノロジーを利用できるサービス群です。簡単に機械学習を導入したいといった要件の場合、まずこちらのサービス群が利用できないか検討することをおすすめします。AIサービスには画像処理を行うAmazon Rekognitionやテキストを読み上げるAmazon Polly、翻訳のAmazon Translate、レコメンド機能が簡単に導入できるAmazon Personalizeなど様々なサービスが含まれます。
AIサービスの詳細に関してはこちらをご覧ください。
https://thinkwithwp.com/jp/machine-learning/ai-services/
Q. アルゴリズムの開発をノートブックインスタンスではなく自前のPCで行うことはできますか
A. はい、SageMakerの開発・学習・推論のコンポーネントはそれぞれ必要な部分のみ利用することができます。開発部分を自前のPC環境で行い、学習・推論の部分のみSageMakerを利用する場合は以下のブログを参照下さい。
https://thinkwithwp.com/jp/blogs/news/sagemaker_from_onpremises/
Q. SageMaker Python SDKとboto3などのAWS SDKの使い分け等あれば教えて下さい
A. 今回のハンズオンではSageMaker Python SDKをノートブックインスタンス上で利用し、学習から推論APIの構築までを行いました。SageMaker Python SDKは、fit()で学習を行い、deploy()で推論APIを立てるといったデータサイエンティストの方が親しみやすいシンプルなインターフェースを持っているため、学習から推論まで楽に試行錯誤したい場合はこちらの利用をおすすめします。
一方で、インフラエンジニアの方が機械学習のパイプラインを構築する場合には、柔軟性が高く、他のAWSサービスに似たインターフェースが用意されているAWS SDKを利用するのをおすすめします。
Q. コードをデバッグを行う際に毎回学習ジョブを投げるのは少し面倒な気がするのですが回避策はありませんか
A. コードが正常に動くか簡単に確認したい場合におすすめなのがSageMaker Python SDKのローカルモードです。こちらは学習・推論時のSDKのコードを1行変更するだけで、ローカル環境に数秒で学習・推論用のコンテナが立ち上がり挙動を検証できる機能になります。例えばローカルモードで小さいサンプルデータを利用しつつ1epochが正常に回るかを確認した後に、全てのデータに対して高性能なインスタンス上で学習することで効率よく作業を行うことができます。
具体的にはSageMakerのEstimator の引数 train_instance_typeや、deployメソッドの引数instance_typeを’ml.m4.xlarge’のようなMLインスタンスタイプから’local’に変更することでローカルモードが利用できます。ローカルのGPUを利用する場合は’local_gpu’を設定します。詳細や利用例に関しては以下の資料を参照下さい。
https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode
Q. ホスティングサービス と バッチ変換の区別について教えて頂けませんか
A. SageMakerにはホスティングサービスとバッチ変換という2種類のデプロイ方法があり、今回のハンズオンではホスティングサービスでデプロイを行っています。ホスティングサービスは、推論エンドポイントを起動して常に推論リクエストを受け付け、リアルタイムに推論する機能です。バッチ変換は、S3に格納された既存のデータセット(画像など)全体に対して推論をまとめて行い、推論結果をS3に格納する機能です。
バッチ変換に関してはこちらをご覧ください。
https://docs.thinkwithwp.com/ja_jp/sagemaker/latest/dg/how-it-works-batch.html
Q. ランダムカットフォレスト (RCF) で作成したモデルはローカルのPCで利用できますか?
A. いいえ、RCFの様な一部のビルトインアルゴリズムはローカル環境で利用できません。
全ての学習済みモデルはS3に保存されますが、それをローカル環境で読み込み、推論に利用可能かはビルトインアルゴリズムにより異なります。例えばビルトインアルゴリズムのXGBoostの学習モデルはローカルで利用することができます。
https://docs.thinkwithwp.com/ja_jp/sagemaker/latest/dg/xgboost.html
機械学習フレームワーク上で独自のアルゴリズムを利用する場合は、学習時に保存したモデルがS3に格納されるため、そのモデルを利用しローカルでも推論を行うことが可能です。
Q. どのS3バケットを使うかは、どこで指定されたのでしょうか?(sess.default_bucket とは何でしょうか)
A. “SageMaker のデフォルトバケット sagemaker-{region}-{AWS account ID} です。
https://sagemaker.readthedocs.io/en/stable/session.html#sagemaker.session.Session.default_bucket
Q. Chainer(や、その他のフレームワーク)のバージョンは指定可能なのでしょうか?
A. はい、可能です。SageMaker Python SDKでChainerをご利用の場合はこちらをを参照してframework_versionを指定して下さい。
Q. Git連携というのは、どういうものでしょうか?
A. SageMakerのGit統合に関しては、こちらのBLOGを参照ください。
Q. Hyperparameterを自動的に最適化する機能などはありますか?
A. はい、ベイズ最適化に基づきハイパーパラメータを最適化する機能があります。ハイパーパラメータの最適化はこちらをご参照ください
https://thinkwithwp.com/jp/blogs/news/sagemaker-automatic-model-tuning/
Q. マネジメントコンソールへのログイン画面で、AWSのアカウントIDではなく、エイリアス名を表示するにはどうすればいいでしょうか?
A. AWS アカウント ID のエイリアスを作成することができます。
https://docs.thinkwithwp.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html
Q. GPU版のインスタンスタイプの種類を教えていただけないでしょうか?
A. ml.p2 や ml.p3で始まるインスタンスがGPUのインスタンスタイプです。
https://thinkwithwp.com/jp/sagemaker/pricing/instance-types/
Q. エンドポイントは全世界に公開されますか?アクセス制御は何で行えばよいですか?
A. パブリックエンドポイントになり、IAMによってアクセス制御を行います。エンドポイントはIAMにより強固に守られているため、SageMakerのInvokeEndpoint APIへの適切な権限を持っている場合しかアクセスできません。
https://docs.thinkwithwp.com/ja_jp/sagemaker/latest/dg/API_runtime_InvokeEndpoint.html
Q. 推論用のインスタンスを常時起動させておくことはできますか?
A. 推論エンドポイントでは、インスタンスは常時起動されます。
Q. ノートブックインスタンスも料金が発生するのでしょうか
A. ノートブックインスタンスもご利用インスタンスに応じて料金が発生します。
Q. AWSのブログで複数モデル(例では2つ)を一つのエンドポイントにデプロイする方法がありますが、その場合に消費されるエンドポイントインスタンスの数は1つですか?また3つや4つのモデルを1つのエンドポイントにデプロイすることも可能ですか?
A. はい、複数のモデルを1つのエンドポイントにデプロイ可能です。こちらを参照ください。https://thinkwithwp.com/jp/blogs/news/sagemaker-deploy-multiple-models/
Q. その際に消費されるエンドポイントインスタンスの数は一つですか?また上記以外に参考になる資料はありますでしょうか?
A. https://thinkwithwp.com/jp/blogs/news/sagemaker-deploy-multiple-models/
TensorFlow Servingを使って、1つのインスタンスに複数のモデルをデプロイできます。公式ドキュメントとしてはTensorFlowをつかったこちらの場合のみのご案内となります。
Q. インスタンスタイプは、ノートブックインスタンス作成時に選択したタイプと関係ありますか?
異なるタイプを選択できるのですか?
A. 学習にはノートブックインスタンスと異なるインスタンスを利用できます。関係はありません。定常的に起動しうるノートブックインスタンスは最低限の軽量なタイプを利用し、学習時には必要な分のGPU・CPUを搭載したインスタンスタイプを利用することで、コスト効率良く機械学習を行うことができます。
Q. 初歩的な内容でしたら申し訳ありません train_instance_countに関してですが、1つのインスタンスで実行するか、複数のインスタンスを利用するか、などの判断にはどういったものが指標となるのでしょうか
A. 学習に大量のデータが必要で、単一のインスタンスでは学習に時間がかかりすぎる場合に、複数インスタンスで分散学習すると学習を速く進めることができます。
Q. コスト面ではなにか違いはありますでしょうか(学習時間を許容できるなら単一インスタンスの方が低コスト、など)。
A. 一般的には複数のインスタンスで分散学習を行うことで、多少のコスト増で学習にかかる時間を大幅に削減することができます。学習時間を許容できる場合、単一インスタンスの方が僅かに低コストです。
Q. Amazon SageMaker Ground Truthではどういった仕組みでラベリングするのですか?
A. 基本は、ワーカーとよばれる担当者(人)をアサインして、ワーカーがブラウザ上のツールでラベルをつけます。
詳細はこちらのBlackbeltの動画の6分56秒あたりからをご参照ください。
https://thinkwithwp.com/jp/blogs/news/webinar-bb-amazon-sagemaker-advanced-session-2019/
Q. ノートブックインスタンスはモデルが完成するたびに停止すべきですか?停止するタイミングがいつになるかが気になります。
A. 開発用のノートブックインスタンスは、必要最低限のスペックをご利用頂くことで、常時起動する際のコストを最適化することが出来ます。長期的に利用されない場合は停止することをおすすめします。
Q. 推論インスタンス起動に時間がかかる理由は何でしょうか
A. 推論用のインスタンスを立て、Dockerイメージを起動する際に時間がかかります。運用でリアルタイムの推論が必要な際は、推論用インスタンスを常時立てておく必要があります。
Q. ノートブックインスタンスも料金が発生するのでしょうか
A. 発生します。こちらの料金表を参照ください。
https://thinkwithwp.com/jp/sagemaker/pricing/
Q. ノートブックでfit(学習)を行うと、スクリプト内のmainが実行されると理解しました。 deploy(推論)時は、スクリプト内のmainなどは実行されず、model_fn関数が実行される。model_fnの返り値は、predict関数を持った何らかのインスタンスであれば良い、という理解であっていますでしょうか?
A. 一部訂正すると、model_fnの返り値はpredict_fn(input_object, model)の引数modelに回されるため、predict_fnでの処理によっては「model_fnの返り値は、predict関数を持った何らかのインスタンス」である必要はありません。
こちらのドキュメントをご覧ください。
https://sagemaker.readthedocs.io/en/stable/using_pytorch.html#model-loading
https://sagemaker.readthedocs.io/en/stable/using_chainer.html#model-loading
Q. jupyter labのノートブックをローカルに保存する方法はありますか?
A JupyterLabで、左メニューのファイル一覧から、ダウンロードしたいファイルを選択し、右クリックでdownloadを選択すると、ローカル環境にダウンロードできます。
Q. LambdaからJupyter Notebookのコードを実行できますか?
A. AWS LambdaからNotebook内の一部のコードを直接実行することはできませんが、LambdaからSageMakerの学習ジョブや推論エンドポイントを作成することはSageMaker API をAWS SDK等を利用して呼び出すことで可能です。また、LambdaからSageMakerモデルの推論エンドポイントを呼び出す場合、こちらのようになります。
https://thinkwithwp.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/
Q. エンドポイントを選択し、アクションのリストボックスの”削除”が選択できません。
A. 通常、アクションリストボックスの削除を実行すると、「*** を削除しますか?これにより、エンドポイントは完全に削除され、元には戻せません。また、他のリソースに影響を与える可能性があります。」という画面に遷移します。これが実行しない場合はAWSサポートに連絡ください。
Q. SageMakerで学習済みモデルのファインチューニングは可能でしょうか?
A. あらかじめ学習・作成されたモデルに対して、重みを更新することができます。また、Amazon SageMaker の組み込みアルゴリズムにも、転移学習が可能なものがあります。
https://thinkwithwp.com/jp/blogs/news/classify-your-own-images-using-amazon-sagemaker/
https://thinkwithwp.com/jp/blogs/news/now-easily-perform-incremental-learning-on-amazon-sagemaker/
Q. 出来上がったモデルの良し悪しを判断して、更にスコアを上げていく場合に、確認しながら検証を重ねたい場合はどのようにしたら良いのでしょうか。
A. Amazon CloudWatchと組み合わせてトレーニング精度、トレーニング誤差、検証精度、検証誤差など、モデルのメトリックスを監視する方法をこちらで紹介しております。
https://thinkwithwp.com/jp/blogs/news/use-amazon-cloudwatch-custom-metrics-for-real-time-monitoring-of-amazon-sagemaker-model-performance/
モデルの性能を上げる方法は、こちらのブログで紹介しております。
Amazon SageMaker で増分学習を簡単に実行する
https://thinkwithwp.com/jp/blogs/news/now-easily-perform-incremental-learning-on-amazon-sagemaker/
Amazon SageMaker 自動モデルチューニング: 機械学習のために機械学習を使用する
https://thinkwithwp.com/jp/blogs/news/sagemaker-automatic-model-tuning/
Q. 特定のノートブックに紐づいて使った(または、使っている)エンドポイントやs3などのリソースを、一元的に把握する手段はありませんか?
A. 学習については、マネージメントコンソールのトレーニングジョブから、過去の学習ジョブ一覧を見ていただくことができます。トレーニングジョブ名は自動的に生成されますが、命名規則も変更可能です。ジョブ名に基づき検索、ジョブ名をクリックすると、学習に使った際のコードや学習データ(s3のパス)、ハイパーパラメータ、その他学習時に使った情報が全て保存されているS3のパスを確認いただけます。エンドポイント作成の際に使った設定情報は、エンドポイント設定の一覧で別途確認いただけます。
Q. どの学習・推論に、どの程度の費用がかかったかを確認したいです。
A. 学習、推論の実行時に、”billable seconds 336”と、学習・推論の実行の課金対象となった時間が秒単位で出力されますので、利用インスタンスを時間単位で換算することで、かかった費用の見積りができます。
Q. 今回はコンソール上ではなく、Python上での実行のみでしたが、コンソールで行う場合の注意点などはありますか? コードを書かずに利用をできないか考えています。
A. コンソール上では主にAPIの操作が可能ですが、必ずしもコンソールを使えばコードを書かなくて良いというわけではございません。しかし、コードをなるべく書かずに機械学習を利用する方法として、ビルトインアルゴリズムを使う、またはAWS Marketplaceからモデルを購入するといった方法がございます。注意点として考えられることは、上記の入手先で提供されているモデルの中からご利用用途に合うものをご選択いただく、その際再学習が可能なものと不可能なものがある、学習・および推論のためのデータをアルゴリズムに沿うよう準備する必要がある、といったことがあります。
Q. トレーニングジョブなどは作成後に名前の変更は可能でしょうか
A. トレーニングジョブ名の実行後の変更はできません。
Q. S3ではなくRDSを使用したい場合だと、一度S3に保存するしかないでしょうか。
A 学習データは通常はS3に入れていただいた方が、操作はシンプルとなります。こちらのblogでは、SageMakerからAmazon Auroraを使う場合の接続方法について紹介しています。
https://thinkwithwp.com/jp/blogs/news/amazon-sagemaker-optuna-hpo/
Q. 学習にsparkを使うことはできますか?
A. 可能です、こちらをご覧ください。
Amazon SageMaker で Apache Spark を使用する
https://docs.thinkwithwp.com/ja_jp/sagemaker/latest/dg/apache-spark.html
AWS ソリューションアーキテクト 石見、鮫島