翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker Spark for Scala のサンプル
Amazon SageMaker では、お客様の Apache Spark アプリケーションとの統合に使用できる Apache Spark ライブラリ (SageMakerSpark
Scala 用 Spark をダウンロードしてください。
Python Spark (PySpark) と Scala ライブラリのソースコードとサンプルは、SageMakerSpark
Spark ライブラリーのインストール方法の詳細については、「 SageMaker Spark」を参照してください。SageMaker
SageMaker Scala 用 Spark SDK は 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 クラスターで DataFrame
s SageMaker SageMaker を使用するようにモデルをトレーニングするサンプルコードを示します。続いて、とを実行する方法の例を示します。Apache Spark による Amazon SageMaker でのモデルトレーニングとホスティングにカスタムアルゴリズムを使用する Spark SageMakerEstimator パイプラインではを使用します。
次の例では、 SageMaker 生成されたモデルアーティファクトをホスティングサービスを使用してホストします。この例の詳細については、「はじめに: SageMaker Spark SDK による K-Means クラスタリング」を参照してください。具体的には、 SageMaker この例では次のことを行います
-
KMeansSageMakerEstimator
を使用してデータに対してモデルの適合 (またはトレーニング) を行います。この例では、に用意されている k-means SageMaker アルゴリズムを使用してモデルをトレーニングしているため、を使用します。
KMeansSageMakerEstimator
モデルは (MNIST データセットの) 手書きの 1 桁の数字の画像を使用してトレーニングを行います。画像は入力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
このコード例では、以下を行います。
-
() によって提供された S3 バケットから MNIST データセットを Spark SageMaker
DataFrame
(awsai-sparksdk-dataset
) に読み込みます。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
はを拡張し SageMakerSageMakerEstimator
、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
-
trainingInstanceType
とtrainingInstanceCount
- モデルトレーニングに使用される 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
メソッドを呼び出して、デプロイされたモデルから推論を取得します。 SageMakertransform
メソッドは入力としてDataFrame
を取り、それを変換し、そのモデルから取得した推論が含まれる別のDataFrame
を返します。val transformedData = model.transform(testData) transformedData.show
わかりやすいように、この例でモデルのトレーニングに使用した同じ
DataFrame
をtransform
の入力として使用します。transform
メソッドは、次のような処理を実行します。-
features
入力内の列を protobufDataFrame
にシリアル化し、エンドポイントに送信して推論します。 SageMaker -
プロトコルバッファーのレスポンスを、変換された
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 に属します。
-