オンプレミス環境から Amazon SageMaker を利用する

Amazon SageMaker は、機械学習におけるデータ準備・開発・学習・モデル変換・デプロイ、これら全体のパイプラインをサポートするマネージドサービスです。SageMaker の利用を検討する際に、これらの全てを SageMaker に移行しなければならないのかというと、そうではありません。例えば、開発のみを SageMaker の Jupyter Notebook で行うことや、学習・デプロイのみを SageMaker で行うことも可能です。この特性を活かせば、オンプレミスに機械学習環境を保有しているユーザが、既存のオンプレミス環境をなるべく活用し、追加のリソースが必要な部分に SageMaker を利用することができます。

本投稿では、機械学習モデルの学習やデプロイを行う環境として、オンプレミスの機械学習環境と SageMaker をシームレスに切り替える方法を紹介します。オープンソースである SageMaker Python SDK は、オンプレミスならびに SageMaker の両方において、学習と推論の実行を可能にするインタフェースを提供しています。本投稿で実現する内容を以下の図で示します。

学習とデプロイのコードは、Python がインストールされたオンプレミスで開発されており、学習データもオンプレミスに保存されているものとします。SageMaker Python SDK で、これらのコードや学習データをローカル環境で利用したり、あるいは S3 にアップロードして SageMaker で利用したりします。

実行に必要な情報

本投稿の内容を実行するためには以下の情報が必要です。

オンプレミス環境から Amazon SageMaker を利用する

オンプレミス環境の設定

Credential と IAM ロールを準備できたら、次にオンプレミス環境の設定を行います。以下では設定の手順と代表的なコマンドを示しますが、環境によって異なる場合もありますので、詳細のリンクもご確認ください。

学習と推論のコードの準備

次に学習や推論のコードを作成します。ここでは、AWS の公式サンプルコードとして公開されている、TensorFlow による手書き数字の分類を少し修正して、オンプレミス環境から実行できるようにします。修正する際には、オンプレミス環境で普段使い慣れているテキストエディタを利用することも可能です。

学習の実行

コードの修正が終わったら学習を実行することが可能です。冒頭の全体像で説明したように、SageMaker Python SDK を利用して、学習を SageMaker のインスタンスで実行するか、オンプレミス環境で実行するかを選択します。これらの選択は、SageMaker の Estimator の引数train_instance_typeを変更するだけで行うことができます。これによって、2つの学習ジョブを実行する際に、まずはオンプレミス環境を利用して、次に SageMaker のインスタンスを利用する、といった利用も可能です。

学習はfit(inputs)関数によって実行することができます。inputsには学習データへのパスを指定します。このパスとして、S3に保存された学習データへのパスを与えることが標準ですが、ローカルモードにおいてのみfile:///xxx/yyy/というような形式で、ローカルに保存された学習データへのパスを与えることも可能です。

以下のスクリーンショットは、オンプレミス環境で SageMaker の学習ジョブを実行したときのものです。上の図からは、Docker のプロセスが学習に CPU を使用していることを確認できます。下の図からは、TensorFlow による学習が進んで、ロスが変化していることを確認できます。

モデルのデプロイと推論の実行

学習と同様に、モデルのデプロイ5においても、SageMaker のインスタンスとオンプレミス環境の両方を利用することができます。これらを切り替えるためには、deploy関数において引数instance_typeの値を以下のように変更します。

最後に、オンプレミス環境にデプロイして推論を実行したときのスクリーンショットを以下に示します。元の tensorflow_distributed_mnist.ipynb を参考に、ラベル 7 の画像をオンプレミス環境のエンドポイントに送信しました。オレンジ色の枠で囲んだ箇所が、エンドポイントからのレスポンスです。'int64Val': ['7']が予測値を表しており、正しい推論が行われていることを確認できました。

エンドポイントの削除

不要になったエンドポイントは、delete_endopoint()で削除することができます。SageMaker 上のエンドポイントの場合、エンドポイントに利用されているインスタンスを停止します。ローカルモードで作成したエンドポイントの場合、推論用のコンテナを停止します。

mnist_estimator.delete_endpoint()

まとめ

オンプレミス環境で機械学習を行っているデータサイエンティストや ML エンジニアに向けて、オンプレミス環境を活かしつつ、必要に応じて SageMaker を利用する方法を説明しました。SageMaker Python SDK では、オンプレミス環境と SageMaker をシームレスに切り替えるためのインタフェースを提供しており、ローカルモードを利用することで、オンプレミス環境での学習も行うことができます。SageMaker Python SDK はオープンソースで、ユーザとコミュニティを形成しながら、速いスピードで開発が進められています。多くの機能を解説するために、SageMaker Python SDK の公式ドキュメントも改訂を続けていますので、ぜひご確認ください。

鮫島 正樹 (Masaki Samejima, Ph.D.) は AWS の機械学習スペシャリスト ソリューション アーキテクトで、コンピュータビジョンや時系列解析などを得意にしています。

針原 佳貴 (Yoshitaka Haribara, Ph.D.) は AWS のソリューション アーキテクトです。趣味はドラムで休日は友達とバンドをして過ごしています。好きなバンドは Red Hot Chili Peppers、好きな AWS のサービスは Amazon SageMaker です。

関連記事