SageMaker Spark for Scala の例 - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SageMaker Spark for Scala の例

Amazon SageMaker は、Apache Spark アプリケーションをSageMaker と統合するために使用できる Apache Spark ライブラリ ( Spark ) を提供しています SageMaker。例えば、Apache Spark をデータの前処理やモデルトレーニング、ホスティング SageMaker に使用できます。 SageMaker Apache Spark ライブラリの詳細については、「」を参照してくださいAmazon で Apache Spark を使用する SageMaker

Spark for Scala をダウンロードする

Python Spark (PySpark) ライブラリと Scala ライブラリの両方のソースコードと例を SageMakerSpark GitHub リポジトリからダウンロードできます。

SageMaker Spark ライブラリのインストールの詳細な手順については、「SparkSageMaker」を参照してください。

SageMaker Spark SDK for Scala は Maven 中央リポジトリで利用できます。プロジェクトに Spark ライブラリを追加するため、pom.xml ファイルに次の依存関係を追加します。

  • プロジェクトが Maven で構築されている場合は、pom.xml ファイルに以下を追加します。

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
  • プロジェクトが Spark 2.1 に依存している場合は、pom.xml ファイルに以下を追加します。

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>

Spark for Scala の例

このセクションでは、 が提供する Apache Spark Scala ライブラリを使用して、Spark クラスターの SageMaker を使用して DataFrameでモデルを SageMaker トレーニングするコード例を示します。次に、 Apache Spark SageMaker で Amazon でのモデルトレーニングとホスティングにカスタムアルゴリズムを使用すると の方法の例が続きますSpark パイプラインで を使用する SageMakerEstimator

次の例では、ホスティングサービスを使用して、結果のモデルアーティファクトを SageMaker ホストします。この例の詳細については、「開始方法: SageMaker Spark SageMaker を使用した での K-Means クラスタリングSDK」を参照してください。具体的には、この例では次の処理を行います。

  • KMeansSageMakerEstimator を使用してデータに対してモデルの適合 (またはトレーニング) を行います。

    この例では、 が提供する k-means アルゴリズム SageMaker を使用してモデルをトレーニングするため、 を使用しますKMeansSageMakerEstimator。手書きの 1 桁の数字の画像 (MNISTデータセットから) を使用してモデルをトレーニングします。画像は入力 DataFrame として指定します。便宜上、 SageMaker はこのデータセットを Amazon S3 バケットに提供します。

    レスポンスとして、推定器は SageMakerModel オブジェクトを返します。

  • トレーニング済みの SageMakerModel を使用して推論を取得する

    でホストされているモデルから推論を取得するには SageMaker、 SageMakerModel.transformメソッドを呼び出します。入力として DataFrame を渡します。このメソッドは入力 DataFrame を、そのモデルから取得した推論が含まれる別の DataFrame に変換します。

    推論は、入力した指定の手書きの 1 桁の数字の画像が属するクラスターを特定します。詳細については、「K-Means アルゴリズム」を参照してください。

import org.apache.spark.sql.SparkSession import com.amazonaws.services.sagemaker.sparksdk.IAMRole import com.amazonaws.services.sagemaker.sparksdk.algorithms import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator val spark = SparkSession.builder.getOrCreate // load mnist data as a dataframe from libsvm val region = "us-east-1" val trainingData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/") val testData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/") val roleArn = "arn:aws:iam::account-id:role/rolename" val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784) // train val model = estimator.fit(trainingData) val transformedData = model.transform(testData) transformedData.show

このコード例では、以下を行います。

  • awsai-sparksdk-dataset) が提供する SageMaker S3 バケットから Spark DataFrame () にMNISTデータセットをロードしますmnistTrainingDataFrame

    // Get a Spark session. val spark = SparkSession.builder.getOrCreate // load mnist data as a dataframe from libsvm val region = "us-east-1" val trainingData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/") val testData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/") val roleArn = "arn:aws:iam::account-id:role/rolename" trainingData.show()

    show メソッドは、データフレーム内の最初の 20 行のデータを表示します。

    +-----+--------------------+ |label| features| +-----+--------------------+ | 5.0|(784,[152,153,154...| | 0.0|(784,[127,128,129...| | 4.0|(784,[160,161,162...| | 1.0|(784,[158,159,160...| | 9.0|(784,[208,209,210...| | 2.0|(784,[155,156,157...| | 1.0|(784,[124,125,126...| | 3.0|(784,[151,152,153...| | 1.0|(784,[152,153,154...| | 4.0|(784,[134,135,161...| | 3.0|(784,[123,124,125...| | 5.0|(784,[216,217,218...| | 3.0|(784,[143,144,145...| | 6.0|(784,[72,73,74,99...| | 1.0|(784,[151,152,153...| | 7.0|(784,[211,212,213...| | 2.0|(784,[151,152,153...| | 8.0|(784,[159,160,161...| | 6.0|(784,[100,101,102...| | 9.0|(784,[209,210,211...| +-----+--------------------+ only showing top 20 rows

    各行の構成は次の通りです。

    • label 列は画像のラベルを特定します。例えば、手書きの数字の画像が 5 桁の場合、ラベルの値は 5 になります。

    • features 列には org.apache.spark.ml.linalg.Vector 値のベクトル (Double) が格納されます。これらは手書きの数字の 784 の特徴です (各手書きの数字は 28 x 28 ピクセルの画像で、784 の特徴があります)。

  • SageMaker 推定器を作成します (KMeansSageMakerEstimator

    この推定器の fitメソッドは、 によって提供される k-means アルゴリズム SageMaker を使用して、入力 を使用してモデルをトレーニングしますDataFrame。レスポンスとして、推論の取得に使用できる SageMakerModel オブジェクトを返します。

    注記

    KMeansSageMakerEstimatorを拡張 SageMakerしSageMakerEstimator、Apache Spark を拡張しますEstimator

    val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)

    コンストラクターパラメータは、モデルのトレーニングと へのデプロイに使用される情報を提供します SageMaker。

    • trainingInstanceTypetrainingInstanceCount - モデルトレーニングに使用される ML コンピューティングインスタンスのタイプと数を指定します。

    • endpointInstanceType— でモデルをホストするときに使用する ML コンピューティングインスタンスタイプを識別します SageMaker。デフォルトでは、1 つの ML コンピューティングインスタンスが引き受けられます。

    • endpointInitialInstanceCount— でモデルをホストするエンドポイントを最初にバックアップする ML コンピューティングインスタンスの数を識別します SageMaker。

    • sagemakerRole— ユーザーに代わってタスクを実行するために、このIAMロールSageMaker を引き受けます。たとえば、モデルのトレーニングの場合、S3 からデータを読み取り、トレーニングの結果 (モデルアーティファクト) を S3 に書き込みます。

      注記

      この例では、暗黙的に SageMaker クライアントを作成します。このクライアントを作成するには、認証情報を指定する必要があります。API は、これらの認証情報を使用して へのリクエストを認証します SageMaker。例えば、認証情報を使用してリクエストを認証し、トレーニングジョブを作成し、 SageMaker ホスティングサービスを使用してモデルをデプロイするために をAPI呼び出します。

    • KMeansSageMakerEstimator オブジェクトが作成された後、モデルのトレーニングで使用される次のパラメータを設定します。

      • k-means アルゴリズムによってモデルのトレーニング中に作成される必要があるクラスターの数。0 ~ 9 のそれぞれの桁に 1 つ、合計で 10 のクラスターを指定します。

      • 各入力画像に 784 の特徴があることを特定します (各手書きの数字は 28 x 28 ピクセルの画像で、784 の特徴があります)。

  • 推定器の fit メソッドを呼び出す

    // train val model = estimator.fit(trainingData)

    入力 DataFrame をパラメータとして渡します。モデルは、モデルのトレーニングと へのデプロイのすべての作業を行います SageMaker。詳細については、「」を参照してくださいApache Spark アプリケーションを と統合する SageMaker。それに応じて、 にデプロイされたモデルから推論を取得するために使用できる SageMakerModel オブジェクトを取得します SageMaker。

    入力 DataFrame のみを指定します。モデルのトレーニングに使用される k-means アルゴリズムへのレジストリパスについては、KMeansSageMakerEstimator はすでに把握しているため、指定する必要はありません。

  • SageMakerModel.transform メソッドを呼び出して、 にデプロイされたモデルから推論を取得します SageMaker。

    transform メソッドは入力として DataFrame を取り、それを変換し、そのモデルから取得した推論が含まれる別の DataFrame を返します。

    val transformedData = model.transform(testData) transformedData.show

    わかりやすいように、この例でモデルのトレーニングに使用した同じ DataFrametransform の入力として使用します。transform メソッドは、次のような処理を実行します。

    • protobuf DataFrameへの入力のfeatures列をシリアル化し、推論のために SageMaker エンドポイントに送信します。

    • プロトコルバッファーのレスポンスを、変換された distance_to_cluster 内の追加の 2 列 (closest_clusterDataFrame) に逆シリアル化します。

    show メソッドは入力 DataFrame 内の最初の 20 行の推論を取得します。

    +-----+--------------------+-------------------+---------------+ |label| features|distance_to_cluster|closest_cluster| +-----+--------------------+-------------------+---------------+ | 5.0|(784,[152,153,154...| 1767.897705078125| 4.0| | 0.0|(784,[127,128,129...| 1392.157470703125| 5.0| | 4.0|(784,[160,161,162...| 1671.5711669921875| 9.0| | 1.0|(784,[158,159,160...| 1182.6082763671875| 6.0| | 9.0|(784,[208,209,210...| 1390.4002685546875| 0.0| | 2.0|(784,[155,156,157...| 1713.988037109375| 1.0| | 1.0|(784,[124,125,126...| 1246.3016357421875| 2.0| | 3.0|(784,[151,152,153...| 1753.229248046875| 4.0| | 1.0|(784,[152,153,154...| 978.8394165039062| 2.0| | 4.0|(784,[134,135,161...| 1623.176513671875| 3.0| | 3.0|(784,[123,124,125...| 1533.863525390625| 4.0| | 5.0|(784,[216,217,218...| 1469.357177734375| 6.0| | 3.0|(784,[143,144,145...| 1736.765869140625| 4.0| | 6.0|(784,[72,73,74,99...| 1473.69384765625| 8.0| | 1.0|(784,[151,152,153...| 944.88720703125| 2.0| | 7.0|(784,[211,212,213...| 1285.9071044921875| 3.0| | 2.0|(784,[151,152,153...| 1635.0125732421875| 1.0| | 8.0|(784,[159,160,161...| 1436.3162841796875| 6.0| | 6.0|(784,[100,101,102...| 1499.7366943359375| 7.0| | 9.0|(784,[209,210,211...| 1364.6319580078125| 6.0| +-----+--------------------+-------------------+---------------+

    次のようにデータを解釈できます。

    • label が 5 の手書き数字は、クラスター 4 (closest_cluster) に属します。

    • label が 0 の手書き数字は、クラスター 5 に属します。

    • label が 4 の手書き数字は、クラスター 9 に属します。

    • label が 1 の手書き数字は、クラスター 6 に属します。