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
Baixe Spark para Scala
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
-
Usa o
KMeansSageMakerEstimator
para ajustar (ou treinar) um modelo nos dadosComo 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 entradaDataFrame
. 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
treinadoPara obter inferências de um modelo hospedado em SageMaker, 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 MNIST conjunto de dados de um bucket do S3 fornecido por SageMaker (
awsai-sparksdk-dataset
) em um 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()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 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 objetoSageMakerModel
que você pode usar para obter inferências.nota
O
KMeansSageMakerEstimator
estende o SageMakerSageMakerEstimator
, 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 em: SageMaker
-
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. 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 umSageMakerModel
objeto, que pode ser usado para obter inferências do seu modelo implantado em. SageMakerApenas 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 em. SageMakerO 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 SageMaker endpoint 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.
-