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
Baixe o Spark para Scala
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
-
Usa o
KMeansSageMakerEstimator
para ajustar (ou treinar) um modelo nos dadosComo 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 entradaDataFrame
. 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
treinadoPara obter inferências de um modelo hospedado na SageMaker IA, você chama o
SageMakerModel.transform
método. UmDataFrame
é passado como entrada. O método transforma a entradaDataFrame
em outroDataFrame
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 umDataFrame
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 valoresDouble
. 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 objetoSageMakerModel
que você pode usar para obter inferências.nota
Isso
KMeansSageMakerEstimator
estende a SageMaker IASageMakerEstimator
, que estende o ApacheEstimator
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
etrainingInstanceCount
: 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 umSageMakerModel
objeto, que pode ser usado para obter inferências do seu modelo implantado na SageMaker IA.Apenas a entrada
DataFrame
é fornecida. Como oKMeansSageMakerEstimator
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 umDataFrame
como entrada. Em seguida, transforma essa entrada e retorna outroDataFrame
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étodotransform
usado para treinamento de modelo nesse exemplo. O métodotransform
faz o seguinte:-
Serializa a
features
coluna na entradaDataFrame
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
eclosest_cluster
) noDataFrame
transformado.
O método
show
obtém inferências para as primeiras 20 linhas da entradaDataFrame
:+-----+--------------------+-------------------+---------------+ |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.
-