翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker AI Spark for Scala の例
Amazon SageMaker AI は、Apache Spark アプリケーションを SageMaker AI
Spark for Scala をダウンロードする
Python Spark (PySpark) ライブラリと Scala ライブラリの両方のソースコードと例は、SageMaker AI Spark
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 データセットをロードしますDataFrame
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 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 へのデプロイに使用される情報を提供します。
-
trainingInstanceType
とtrainingInstanceCount
- モデルトレーニングに使用される 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
わかりやすいように、この例でモデルのトレーニングに使用した同じ
DataFrame
をtransform
の入力として使用します。transform
メソッドは、次のような処理を実行します。-
入力の
features
列を protobufDataFrame
にシリアル化し、推論のために SageMaker AI エンドポイントに送信します。 -
プロトコルバッファーのレスポンスを、変換された
distance_to_cluster
内の追加の 2 列 (closest_cluster
とDataFrame
) に逆シリアル化します。
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 に属します。
-