SageMaker Exemplos do AI Spark para Scala - SageMaker IA da Amazon

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 AI Spark para Scala

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

Baixe o Spark para Scala

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

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

SageMaker O SDK do AI Spark para 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 o projeto for criado com Maven, adicione o seguinte ao 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>

Spark para exemplo de Scala

Esta seção fornece um exemplo de código que usa a biblioteca Apache Spark Scala fornecida pela SageMaker AI para treinar um modelo em SageMaker IA usando DataFrame s em seu cluster Spark. Em seguida, há exemplos de como Use algoritmos personalizados para treinamento e hospedagem de modelos na Amazon SageMaker AI com o Apache Spark e Use o SageMakerEstimator em um Spark Pipeline.

O exemplo a seguir hospeda os artefatos do modelo resultante usando serviços de hospedagem de SageMaker IA. Para obter mais detalhes sobre esse exemplo, consulte Getting Started: K-Means Clustering on SageMaker AI with SageMaker AI 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 pela SageMaker IA para treinar um modelo, você usa o. KMeansSageMakerEstimator Treine o modelo usando imagens de números manuscritos de um dígito (do conjunto de dados do MNIST). As imagens são fornecidas como uma entrada DataFrame. Para sua conveniência, a SageMaker IA 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 na SageMaker IA, 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 conjunto de dados MNIST de um bucket S3 fornecido pelo SageMaker AI (awsai-sparksdk-dataset) em um DataFrame Spark (): 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 atributos do número manuscrito. (Cada número manuscrito é uma imagem de 28 x 28 pixels, o que forma os 784 atributos.)

  • Cria um estimador de SageMaker IA () KMeansSageMakerEstimator

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

    nota

    Isso KMeansSageMakerEstimator estende a SageMaker IASageMakerEstimator, 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 na SageMaker IA:

    • 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 na IA. 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 na IA. SageMaker

    • sagemakerRole— A SageMaker IA assume essa função do IAM 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 cliente de SageMaker IA. Para criar esse cliente, você deve fornecer suas credenciais. A API usa essas credenciais para autenticar solicitações para a SageMaker IA. Por exemplo, ele usa as credenciais para autenticar solicitações para criar um trabalho de treinamento e chamadas de API para implantar o modelo usando serviços de hospedagem de SageMaker IA.

    • 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 atributos. Cada número manuscrito é uma imagem de 28 x 28 pixels, o que forma os 784 atributos.

  • 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 na SageMaker IA. Para obter mais informações, consulte, Integre seu aplicativo Apache Spark com IA SageMaker. Em resposta, você obtém um SageMakerModel objeto, que pode ser usado para obter inferências do seu modelo implantado na SageMaker IA.

    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 na SageMaker IA.

    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 endpoint de SageMaker IA 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.