Amazon SageMakerでコードを書かずにモデルのデプロイをする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

Amazon SageMaker(以下SageMaker)では、Jupyter Notebookを使って学習やモデルのデプロイを行うコードを記述可能です。 この仕組みはデータサイエンティストとエンジニア双方にとって以下のようなメリットがあります。

役割 メリット
データサイエンティスト ノートブックの操作のみでシステム開発の専門的な知識がなくてもモデルを利用可能な状態にできる
エンジニア 本番環境にシステムをデプロイするためにデータ分析を必要とせず、APIからアクセスする部分のみを実装すればよい

機械学習システムにおいて、このデータサイエンティストとエンジニアのつなぎ込みの部分には高い壁があると言われることも多く、この部分をクリアするソリューションとして非常に便利な仕組みと言えるのではないかと思います。

しかし、場合によってはここでもう一つ課題となる可能性のある要因があります。 それは、プログラミングを苦手とするデータサイエンティストやビジネス部門で機械学習活用を考えているような場合です。 これに対する解決策の1つなりうる方法として、SageMakerではノートブックを使って処理フローを実装する以外にも、AWSマネジメントコンソールから簡単に学習やデプロイを行う仕組みも用意されています。

そこで今回は、この仕組みを使う流れを見てみたいと思います。

利用可能な機能

マネジメントコンソールから利用可能な機能は以下のようになっています。

  • トレーニングジョブの作成
  • ハイパーパラメータの調整ジョブの作成
  • モデルの作成
  • エンドポイントおよびエンドポイント設定の作成

マネジメントコンソールからの利用はSageMakerが提供しているBuild-inアルゴリズムに限定されますが、 現在SageMakerで提供しているほとんどの機能は実行可能です。 入力データを学習で利用する際に必要な形式に変換するための仕組みは用意されていませんが、 これはノートブックでのSageMaker活用の際にもプログラムとして記述するためのものとなっています。 ここはどのような前処理・加工が必要かは実際に利用するデータに大きく依存するので、どうしようもない部分ではありますね。。 そのため、マネジメントコンソールからのSageMaker利用の際にはデータはすでにこれらの加工が済んでいる状態になるようにしておいてください。

これらのうち、以下の流れを実際にやってみたいと思います。

  1. S3に保存済みのデータを使ってトレーニングジョブの実行
  2. その結果を使ってモデルを作成
  3. モデルを指定してAPIエンドポイントを作成

トレーニングジョブの作成

では、早速先ずは学習を行いましょう。 メニューから トレーニングジョブ > トレーニングジョブの作成 を選択します。

トレーニングジョブの作成では、ノートブックでのEstimatorインスタンス作成時やハイパーパラメータの設定時に引数で指定する項目に相当する値を画面から入力していきます。

「ジョブの設定」では、ジョブ名(ジョブ一覧で表示される名前)や学習に利用するアルゴリズム、インスタンス数、インスタンスタイプといった項目です。

続いての「ネットワーク」ではVPCを利用する場合に適切な設定をしてやってください。 今回は、非VPCを選択しています。

「ハイパーパラメータ」では、文字通り学習時に利用するハイパーパラメータを指定します。 一見すると非常に多くの項目を設定知る必要があるように見えますが、デフォルト値が存在している項目も多くあるので、実際に利用する際に設定する項目は一部のみになるかと思います。

どのようなハイパーパラメータが指定可能かやデフォルト値の確認はSageMakerのドキュメントを参照してください。

メニューの Using Build-in Algorithms > <アルゴリズム名> > Hyperparameters に一覧で記載されています。

「入力データ設定」では、学習データに関する設定を行います。

コンテンツタイプは実際に学習に利用するデータのフォーマットに合わせたものを記載します。 アルゴリズムごとに利用可能なフォーマットはドキュメントを参照してください。

S3の場所では、ファイルが置かれているS3のパスを記載します。

利用するアルゴリズムによっては、学習に利用する"train"の他に検証に利用する"validation"に対応する設定が必要なものがあります。 その場合、下部の「チャネルの追加」を押したのち、チャネル名をvalidationと設定します。

「出力データ設定」では学習後のモデルの出力先を設定します。

最後の「タグ」は必要に応じて設定してください。

必要な設定を行って最後に「トレーニングジョブの作成」を行うと学習の処理が実行されます。 トレーニングジョブの一覧に追加され、ステータスがInProgressからCompletedに変われば学習完了です。

モデルの作成

トレーニングジョブが完了したら続いてモデルの作成を行います。 先ほど作成したトレーニングジョブを選択して、右上にある「モデルの作成」を選択します。

「モデル設定」ではモデル名を設定します。 こちらは、トレーニングジョブ名と同様任意の名前をつけて問題ありません。

「ネットーワーク」の設定はトレーニングジョブと同様、VPCを利用する場合は適切な値を設定してください。

「プライマリコンテナ」は利用するコンテナやモデルファイルのS3上のパスを指定するのですが、 トレーニングジョブからモデルの作成を行った際はそれに合わせた値が設定された状態になっています。

「タグ」もドレーニングジョブと同様必要に応じて値を設定してください。

必要な値を設定して「モデルの作成」を押すことでモデルが作成されます。 作成されたモデルは一覧に表示された状態となります。

エンドポイントの作成

最後にこのモデルを使ってエンドポイントを作成します。

「Endpoint」ではこれまで同様、エンドポイントの名前を指定してやります。

「エンドポイント設定のアタッチ」では、既存のエンドポイント設定を利用するか新規に作成するかを選択します。

エンドポイント設定はモデルとエンドポイントの対応関係を結びつけるためのものになっています。 利用するインタンスタイプや初期インスタンス数を設定したり、複数のモデルとそれぞれを利用する比重を選択してA/Bテストに利用したりといった設定が可能です。 詳細はドキュメントに記載がありますので参照してください。

今回は新規作成で行ってみましょう。

「新しいエンドポイント設定の作成」を選択した状態では、その下に「新しいエンドポイント設定」という項目が表示されています。

モデルからエンドポイントの作成を行った場合は、そのモデルがすでに紐づけられた状態となっているため、エンドポイント設定名だけを入力して、「エンドポイント設定の作成」を選択します。 以下のような表示されて、エンドポイント設定が作成された状態となります。

エンドポイント作成後、メニューの「エンドポイント設定」を確認すると一覧に表示された状態となっています。

最後の「タグ」はこれまで同様、任意で入力してください。

メニューのエンドポイントに一覧が表示された状態となります。 ステータスがCreatingからInServiceに変われば利用可能な状態となります。

作成されたエンドポイントを選択して、詳細を表示するとURLの項目からエンドポイントのURLが確認できます。

httpsで始まってることからもわかる通り、Web APIとなっています。 リクエストの際に必要なパラメータなどはその下に書いてある「APIの詳細」から確認できる以下のページを参照してください。

おわりに

SageMakerをマネジメントコンソールから利用する方法を解説しました。 この機能は以下のようなケースでの利用も考えられます。

  • データ前処理・加工を行うシステムはすでにあるのでビジネス部門だけで気軽に機械学習を試したい
  • 実験的なモデルのA/Bテストのためにエンドポイント設定だけを編集したい
  • SageMakerの外で学習されたモデルをS3に置いてエンドポイントを作成したい

また、手軽にやってみることが可能なため、機械学習やSageMakerを使ったシステムのフローがどのようになるかの感覚を掴むのにもいいかもしれません。