SageMaker Exemplos do Spark para Scala - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

SageMaker Exemplos do Spark para Scala

SageMaker A Amazon fornece uma biblioteca Apache Spark (SageMakerSpark) que você pode usar para integrar seus aplicativos Apache Spark. SageMaker Este tópico contém exemplos para ajudar você a começar a usar o SageMaker Spark com Scala. Para obter informações sobre a biblioteca SageMaker Apache Spark, consulte. Apache Spark com a Amazon SageMaker

Baixe Spark para Scala

Você pode baixar o código-fonte e os exemplos das bibliotecas Python Spark (PySpark) e Scala no repositório Spark. SageMaker GitHub

Para obter instruções detalhadas sobre a instalação da biblioteca SageMaker Spark, consulte SageMakerSpark.

SageMaker O Spark SDK for Scala está disponível no repositório central do Maven. Para adicionar a biblioteca Spark ao seu projeto, adicione a seguinte dependência ao arquivo pom.xml:

  • Se seu projeto foi criado com o Maven, adicione o seguinte ao seu arquivo pom.xml:

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
  • Se seu projeto depende do Spark 2.1, adicione o seguinte ao seu arquivo pom.xml:

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>

Exemplo do Spark para Scala

Esta seção fornece um exemplo de código que usa a biblioteca Apache Spark Scala fornecida por SageMaker para treinar um modelo no SageMaker uso de DataFrame s em seu cluster Spark. Em seguida, isso é seguido por exemplos de como Use algoritmos personalizados para treinamento e hospedagem de modelos na Amazon SageMaker com o Apache Spark Use o SageMakerEstimator em um Spark Pipeline e.

O exemplo a seguir hospeda os artefatos do modelo resultante usando serviços de SageMaker hospedagem. Para obter mais detalhes sobre esse exemplo, consulte Getting Started: K-Means Clustering on SageMaker with SageMaker Spark SDK Especificamente, este exemplo faz o seguinte:

  • Usa o KMeansSageMakerEstimator para ajustar (ou treinar) um modelo nos dados

    Como o exemplo usa o algoritmo k-means fornecido por SageMaker para treinar um modelo, você usa o. KMeansSageMakerEstimator Você treina o modelo usando imagens de números manuscritos de um único dígito (do MNIST conjunto de dados). As imagens são fornecidas como uma entrada DataFrame. Para sua conveniência, SageMaker fornece esse conjunto de dados em um bucket do Amazon S3.

    Em resposta, o estimador retorna um objeto SageMakerModel.

  • Obtém inferências usando o SageMakerModel treinado

    Para obter inferências de um modelo hospedado em SageMaker, você chama o SageMakerModel.transform método. Um DataFrame é passado como entrada. O método transforma a entrada DataFrame em outro DataFrame que contém inferências obtidas do modelo.

    Para uma determinada imagem de entrada de um número manuscrito de um dígito, a inferência identifica um cluster ao qual a imagem pertence. Para obter mais informações, consulte Algoritmo 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

O código de exemplo faz o seguinte:

  • Carrega o MNIST conjunto de dados de um bucket do S3 fornecido por SageMaker (awsai-sparksdk-dataset) em um Spark 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()

    O método show exibe as primeiras 20 linhas no quadro de dados:

    +-----+--------------------+ |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

    Em cada linha:

    • A coluna label identifica o rótulo da imagem. Por exemplo, se a imagem do número manuscrito for o dígito 5, o valor do rótulo será 5.

    • A coluna features armazena um vetor (org.apache.spark.ml.linalg.Vector) de valores Double. Esses são os 784 recursos do número manuscrito. (Cada número manuscrito é uma imagem de 28 x 28 pixels, o que forma os 784 recursos.)

  • Cria um SageMaker estimador () KMeansSageMakerEstimator

    O fit método desse estimador usa o algoritmo k-means fornecido por SageMaker para treinar modelos usando uma entrada. DataFrame Em resposta, ele retorna um objeto SageMakerModel que você pode usar para obter inferências.

    nota

    O KMeansSageMakerEstimator estende o SageMakerSageMakerEstimator, que estende o Apache Estimator Spark.

    val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)

    Os parâmetros do construtor fornecem informações que são usadas para treinar um modelo e implantá-lo em: SageMaker

    • trainingInstanceType e trainingInstanceCount—Identificam o tipo e o número de instâncias de computação de ML a serem iniciados para o treinamento de modelo.

    • endpointInstanceType—Identifica o tipo de instância de computação de ML a ser usado ao hospedar o modelo. SageMaker Por padrão, é assumida uma instância de cálculo de ML.

    • endpointInitialInstanceCount— Identifica o número de instâncias de computação de ML que inicialmente apoiam o endpoint que hospeda o modelo. SageMaker

    • sagemakerRole— SageMaker assume essa IAM função para realizar tarefas em seu nome. Por exemplo, para treinamento de modelo, ele lê dados do S3 e grava os resultados do treinamento (artefatos de modelo) no S3.

      nota

      Esse exemplo cria implicitamente um SageMaker cliente. Para criar esse cliente, você deve fornecer suas credenciais. O API usa essas credenciais para autenticar solicitações para. SageMaker Por exemplo, ele usa as credenciais para autenticar solicitações para criar um trabalho de treinamento e API solicita a implantação do modelo usando SageMaker serviços de hospedagem.

    • Depois que o objeto KMeansSageMakerEstimator estiver criado, defina os seguintes parâmetros, que são usados no treinamento de modelo:

      • O número de clusters que o algoritmo k-means deve criar durante o treinamento de modelo. Você especifica 10 clusters, um para cada dígito, de 0 a 9.

      • O vetor que identifica que cada imagem de entrada tem 784 recursos. Cada número manuscrito é uma imagem de 28 x 28 pixels, o que forma os 784 recursos.

  • Chama o método estimador fit

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

    A entrada DataFrame é passada como parâmetro. O modelo faz todo o trabalho de treinar o modelo e implantá-lo SageMaker nele. Para obter mais informações, consulte, Integre seu aplicativo Apache Spark com SageMaker. Em resposta, você obtém um SageMakerModel objeto, que pode ser usado para obter inferências do seu modelo implantado em. SageMaker

    Apenas a entrada DataFrame é fornecida. Como o KMeansSageMakerEstimator já conhece o caminho do registro para o algoritmo k-means usado para treinamento de modelo, não é necessário especificá-lo.

  • Chama o SageMakerModel.transform método para obter inferências do modelo implantado em. SageMaker

    O método transform assume um DataFrame como entrada. Em seguida, transforma essa entrada e retorna outro DataFrame que contém inferências obtidas do modelo.

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

    Para simplificar, usaremos o mesmo DataFrame como entrada do método transform usado para treinamento de modelo nesse exemplo. O método transform faz o seguinte:

    • Serializa a features coluna na entrada DataFrame para protobuf e a envia para o SageMaker endpoint para inferência.

    • Desserializa a resposta protobuf para as duas colunas adicionais (distance_to_cluster e closest_cluster) no DataFrame transformado.

    O método show obtém inferências para as primeiras 20 linhas da entrada DataFrame:

    +-----+--------------------+-------------------+---------------+ |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| +-----+--------------------+-------------------+---------------+

    Os dados podem ser interpretados da seguinte forma:

    • Um número manuscrito com label 5 pertence ao cluster 4 (closest_cluster).

    • Um número manuscrito com label 0 pertence ao cluster 5.

    • Um número manuscrito com label 4 pertence ao cluster 9.

    • Um número manuscrito com label 1 pertence ao cluster 6.