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
KMeansSageMakerEstimatorpara 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.
KMeansSageMakerEstimatorTreine 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
SageMakerModeltreinadoPara obter inferências de um modelo hospedado na SageMaker IA, você chama o
SageMakerModel.transformmétodo. UmDataFrameé passado como entrada. O método transforma a entradaDataFrameem outroDataFrameque 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 umDataFrameSpark ():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
showexibe 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 rowsEm cada linha:
-
A coluna
labelidentifica 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
featuresarmazena 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 ()
KMeansSageMakerEstimatorO
fitmétodo desse estimador usa o algoritmo k-means fornecido pela SageMaker IA para treinar modelos usando uma entrada.DataFrameEm resposta, ele retorna um objetoSageMakerModelque você pode usar para obter inferências.nota
Isso
KMeansSageMakerEstimatorestende a SageMaker IASageMakerEstimator, que estende o ApacheEstimatorSpark.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:
-
trainingInstanceTypeetrainingInstanceCount: 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
KMeansSageMakerEstimatorestiver 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 a IA SageMaker . Em resposta, você obtém umSageMakerModelobjeto, que pode ser usado para obter inferências do seu modelo implantado na SageMaker IA.Apenas a entrada
DataFrameé fornecida. Como oKMeansSageMakerEstimatorjá conhece o caminho do registro para o algoritmo k-means usado para treinamento de modelo, não é necessário especificá-lo. -
Chama o
SageMakerModel.transformmétodo para obter inferências do modelo implantado na SageMaker IA.O método
transformassume umDataFramecomo entrada. Em seguida, transforma essa entrada e retorna outroDataFrameque contém inferências obtidas do modelo.val transformedData = model.transform(testData) transformedData.showPara simplificar, usaremos o mesmo
DataFramecomo entrada do métodotransformusado para treinamento de modelo nesse exemplo. O métodotransformfaz o seguinte:-
Serializa a
featurescoluna na entradaDataFramepara protobuf e a envia para o endpoint de SageMaker IA para inferência. -
Desserializa a resposta protobuf para as duas colunas adicionais (
distance_to_clustereclosest_cluster) noDataFrametransformado.
O método
showobté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
label5 pertence ao cluster 4 (closest_cluster). -
Um número manuscrito com
label0 pertence ao cluster 5. -
Um número manuscrito com
label4 pertence ao cluster 9. -
Um número manuscrito com
label1 pertence ao cluster 6.
-