Amazon Web Services ブログ

Amazon SageMaker が、バッチ変換機能と TensorFlow コンテナ向けのパイプ入力モードを追加

数日前のニューヨーク Summit で、Amazon SageMaker の 2 つの新しい機能が始まりました。ペタバイトのデータに対して非リアルタイムシナリオで予測を行うことができるバッチ変換と呼ばれる新しいバッチ推論機能と、TensorFlow コンテナのためのパイプ入力モードのサポートです。SageMaker は大好きなサービスの 1 つであり、このブログ機械学習のブログで幅広く取り上げてきました。実際、SageMaker チームのインベーションの速いペースは、追いつくのが少し難しいです。SageMaker のハイパーパラメータ最適化による自動モデルチューニングに関する最後の記事以降に、このチームは 4 つの新しい組み込みアルゴリズムと多数の新機能を発表しています。それでは、新しいバッチ変換機能を見てみましょう。

バッチ変換

バッチ変換機能は、データを変換して推論を生成するための高性能かつ高スループットの方法です。これは、大量のバッチデータを扱う場合、1 秒未満のレイテンシーを必要としない場合、あるいはトレーニングデータを前処理して変換する必要がある場合に理想的です。何よりもよい点は?この機能を利用するために、わずか 1 行のコードを追加する必要さえありません。既存のモデルをすべて使用して、それらに基づいてバッチ変換ジョブを開始することができます。この機能は追加料金なしで利用でき、基盤となるリソースについてのみ支払うことになります。

物体検出アルゴリズムでこれをどうやって行うのかを見てみましょう。サンプルのノートブックに従って、物体検出モデルのトレーニングを行いました。それでは、SageMaker コンソールに移動し、バッチ変換サブコンソールを開きます。

そこから、新しいバッチ変換ジョブを開始することができます。

ここで、自分の変換ジョブに名前をつけ、使用するモデルを選択し、使用するインスタンスの数とタイプを選択することができます。さらに、同時に推論に送信するレコードの数とペイロードのサイズに関する詳細を設定することができます。これらを手動で指定しないと、SageMaker がいくつかの適切なデフォルトを選択します。

次に、入力の場所を指定する必要があります。マニフェストファイルを使用するか、S3 の場所にあるすべてのファイルをロードするだけです。ここでは画像を扱っているので、入力のコンテンツタイプを手動で指定しました。

最後に、出力の場所を設定してジョブを開始します!

ジョブが実行されると、ジョブの詳細ページを開いて、Amazon CloudWatch のメトリクスとログへのリンクをたどることができます。

ジョブが実行中であることがわかります。S3 で結果を確認すると、それぞれの画像について予測されるラベルが表示されます。

変換は、検出した物体を含む入力ファイルごとに 1 つの出力 JSON ファイルを生成しました。

ここから、AWS Glue でバケットのテーブルを作成し、Amazon Athena で結果を照会するか、Amazon QuickSight で視覚化するのは簡単です。

もちろん、これらのジョブを SageMaker API からプログラムで開始することも可能です。

自分のコンテナでバッチ変換を使用する方法についての詳細は、ドキュメントに説明があります。

TensorFlow のためのパイプ入力モード

パイプ入力モードでは、高度に最適化されたマルチスレッドバックグラウンドプロセスを使用して、Amazon Simple Storage Service (S3) から Amazon SageMaker へ、トレーニングのデータセットを直接ストリーミングすることができます。このモードは、最初にローカルの Amazon Elastic Block Store (EBS) ボリュームにデータをダウンロードする必要があるファイル入力モードよりもはるかに優れた読み取りスループットを提供します。これは、トレーニングジョブを早く始め、より高速で完了させ、使用するディスク領域を削減し、モデルのトレーニングに伴うコストを削減できることを意味します。さらに、16 TB という EBS ボリュームサイズの制限を超えるデータセットをトレーニングできるという利点もあります。

今年の初めに、パイプ入力モードでいくつかの実験を行い、一部のベンチマークでは開始時間を 78GB のデータセットで最大 87% 削減しながら、最終的にトレーニング時間全体では最大 35% 削減という結果でした。

TensorFlow にパイプ入力モードのサポートを追加することで、顧客は組み込みアルゴリズムで利用可能であるものと同じ高速化をより簡単に利用できるようになります。これが実際にどのように機能するかを見てみましょう。

まず、トレーニングジョブで sagemaker-tensorflow-extensions が利用できるか確認する必要があります。これによって、新しいクラス PipeModeDataset が利用可能になり、入力としてチャネルとレコード形式を取り、TensorFlow データセットを返します。これを TensorFlow エスティメータの input_fn で使用し、 チャネルから読み取ることができます。以下のコードサンプルは、簡単な例を示しています。

from sagemaker_tensorflow import PipeModeDataset

def input_fn(channel):
    # Simple example data - a labeled vector.
    features = {
        'data': tf.FixedLenFeature([], tf.string),
        'labels': tf.FixedLenFeature([], tf.int64),
    }
    
    # A function to parse record bytes to a labeled vector record
    def parse(record):
        parsed = tf.parse_single_example(record, features)
        return ({
            'data': tf.decode_raw(parsed['data'], tf.float64)
        }, parsed['labels'])

    # Construct a PipeModeDataset reading from a 'training' channel, using
    # the TF Record encoding.
    ds = PipeModeDataset(channel=channel, record_format='TFRecord')

    # The PipeModeDataset is a TensorFlow Dataset and provides standard Dataset methods
    ds = ds.repeat(20)
    ds = ds.prefetch(10)
    ds = ds.map(parse, num_parallel_calls=10)
    ds = ds.batch(64)
    
    return ds

次に、モデルを定義し、通常の TensorFlow エスティメータと同様に定義することができます。エスティメータの作成時には、パラメータの 1 つとして input_mode='Pipe' を渡すだけです。

今すぐ利用可能です!

これらの新機能はいずれも追加料金なしでご利用いただけます。そして、私は顧客がバッチ変換機能を使用して何を構築できるかを楽しみにしています。AWS マーケティングの社内 ML ワークロードの一部が支援してくれることはすでにお伝えした通りです。

いつものように、皆さんがこの機能について思うところをコメントやツイッターで教えてください!

こちらです。