SageMaker AI Spark for Scala の例 - Amazon SageMaker AI

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

SageMaker AI Spark for Scala の例

Amazon SageMaker AI は、Apache Spark アプリケーションを SageMaker AI と統合するために使用できる Apache Spark ライブラリ (SageMaker AI Spark) を提供します。このトピックには、Scala で SageMaker AI Spark の使用を開始するのに役立つ例が含まれています。SageMaker AI Apache Spark ライブラリの詳細については、「」を参照してくださいAmazon SageMaker AI を使用した Apache Spark

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

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

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

SageMaker AI 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 の例

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

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

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

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

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

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

    SageMaker AI でホストされているモデルから推論を取得するには、 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

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

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

    // 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 AI 推定器を作成します (KMeansSageMakerEstimator

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

    注記

    KMeansSageMakerEstimator は SageMaker AI を拡張し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 AI へのデプロイに使用される情報を提供します。

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

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

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

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

      注記

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

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

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

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

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

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

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

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

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

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

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

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

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

    • プロトコルバッファーのレスポンスを、変換された 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 に属します。