翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker AI Spark for Scala の例
Amazon SageMaker AI は、Apache Spark アプリケーションを SageMaker と統合するために使用できる Apache AI Spark ライブラリ (SageMaker AI Spark
Spark for Scala をダウンロードする
Python Spark (PySpark) と Scala ライブラリのソースコードと例はともに、SageMaker AI Spark
SageMaker AI Spark ライブラリのインストール方法の詳細については、「SageMaker 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 クラスター内で DataFrame を使って SageMaker AI でモデルをトレーニングできます。その後、Apache Spark を使う Amazon SageMaker AI でのモデルトレーニングとホスティングにカスタムアルゴリズムを使用する の方法と、Spark Pipeline で SageMakerEstimator を使用する の方法の例を提供しています。
また、このサンプルは SageMaker AI ホスティングサービスを使用して、結果のモデルアーティファクトをホストします。この例の詳細については、「開始方法: SageMaker AI Spark SDK を使用した SageMaker AI での K-Means クラスタリング
-
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 バケットから MNIST データセット (
awsai-sparksdk-dataset) を SparkDataFrame(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メソッドは、次のような処理を実行します。-
入力
DataFrame内のfeatures列を protobuf でシリアル化し、それを推論のために 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 に属します。
-