SageMaker Spark for Scala のサンプル - Amazon SageMaker

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

SageMaker Spark for Scala のサンプル

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

Scala 用 Spark をダウンロードしてください。

Python Spark (PySpark) と Scala ライブラリのソースコードとサンプルは、SageMakerSpark GitHub リポジトリからダウンロードできます。

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

    • 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 メソッドは、次のような処理を実行します。

    • features入力内の列を protobuf DataFrame にシリアル化し、エンドポイントに送信して推論します。 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 に属します。