Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
SageMaker Ejemplos de Spark for Scala
Amazon SageMaker proporciona una biblioteca de Apache SageMakerSpark (Spark
Descargue Spark para Scala
Puedes descargar el código fuente y los ejemplos de las bibliotecas Python Spark (PySpark) y Scala desde el GitHub repositorio de SageMakerSpark
Para obtener instrucciones detalladas sobre cómo instalar la biblioteca de SageMaker Spark, consulta SageMakerSpark
SageMaker Spark SDK for Scala está disponible en el repositorio central de Maven. Añada la biblioteca de Spark a su proyecto añadiendo la siguiente dependencia a su archivo pom.xml
:
-
Si tu proyecto está creado con Maven, añade lo siguiente a tu archivo pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
-
Si tu proyecto depende de Spark 2.1, añade lo siguiente a tu archivo pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>
Ejemplo de Spark para Scala
Esta sección proporciona un ejemplo de código que usa la biblioteca Apache Spark Scala proporcionada por SageMaker para entrenar a un modelo a SageMaker usar DataFrame
s en su clúster de Spark. A esto le siguen ejemplos sobre cómo Usa algoritmos personalizados para el entrenamiento y el alojamiento de modelos en Amazon SageMaker con Apache Spark yUtilízalo en un Spark SageMakerEstimator Pipeline.
El siguiente ejemplo aloja los artefactos del modelo resultantes mediante servicios de SageMaker alojamiento. Para obtener más información sobre este ejemplo, consulte Getting Started: K-Means Clustering on SageMaker with SageMaker Spark SDK Specificely
-
Utiliza
KMeansSageMakerEstimator
para adaptar un modelo en datos o realizar una capacitación.Como en el ejemplo se utiliza el algoritmo k-means proporcionado por SageMaker para entrenar un modelo, se utiliza el.
KMeansSageMakerEstimator
El modelo se entrena con imágenes de números manuscritos de un solo dígito (del MNIST conjunto de datos). Proporcione las imágenes como una entradaDataFrame
. Para su comodidad, SageMaker proporciona este conjunto de datos en un bucket de Amazon S3.Como respuesta, el estimador devuelve un objeto
SageMakerModel
. -
Obtiene las inferencias mediante el
SageMakerModel
de capacitación.Para obtener inferencias a partir de un modelo alojado en él SageMaker, debe llamar al
SageMakerModel.transform
método. Pase unDataFrame
como entrada. El método transforma la entradaDataFrame
en otroDataFrame
que contiene inferencias obtenidas a partir del modelo.Para una imagen de entrada determinada de un número de un solo dígito escrito a mano, la inferencia identifica un clúster al que pertenece la imagen. Para obtener más información, 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
Este ejemplo de código hace lo siguiente:
-
Carga el MNIST conjunto de datos de un bucket de S3 proporcionado por SageMaker (
awsai-sparksdk-dataset
) en un 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()El método
show
muestra las primeras 20 filas en el marco de datos:+-----+--------------------+ |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
En cada fila:
-
La columna
label
identifica la etiqueta de la imagen. Por ejemplo, si la imagen del número escrito a mano es el dígito 5, el valor de etiqueta es 5. -
La columna
features
almacena un vector (org.apache.spark.ml.linalg.Vector
) de valoresDouble
. Estas son las 784 características del número escrito a mano. (Los números escritos a manos son imágenes de 28 x 28 píxeles, que conforman las 784 características).
-
-
Crea un SageMaker estimador ()
KMeansSageMakerEstimator
El
fit
método de este estimador utiliza el algoritmo k-means proporcionado por SageMaker para entrenar modelos mediante una entrada.DataFrame
Como respuesta, devuelve un objetoSageMakerModel
que puede utilizar para obtener inferencias.nota
El
KMeansSageMakerEstimator
extiende el SageMakerSageMakerEstimator
, que extiende el Apache Spark.Estimator
val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)
Los parámetros del constructor proporcionan información que se utiliza para entrenar un modelo e implementarlo en SageMaker:
-
trainingInstanceType
ytrainingInstanceCount
: identifican el tipo y el número de instancias de computación de ML para usarlos en el entrenamiento del modelo. -
endpointInstanceType
—Identifica el tipo de instancia de cómputo de aprendizaje automático que se utilizará al alojar el SageMaker modelo. De forma predeterminada, se presupone una instancia de computación de machine learning. -
endpointInitialInstanceCount
—Identifica el número de instancias de procesamiento de aprendizaje automático que inicialmente respaldan el punto final en el que se aloja el modelo. SageMaker -
sagemakerRole
— SageMaker asume esta IAM función para realizar tareas en su nombre. Por ejemplo, para la capacitación de modelos, lee los datos a partir de S3 y escribe resultados de capacitación (artefactos de modelo) en S3.nota
Este ejemplo crea implícitamente un SageMaker cliente. Para crear este cliente, debe proporcionar sus credenciales. APIUtiliza estas credenciales para autenticar las solicitudes en. SageMaker Por ejemplo, utiliza las credenciales para autenticar las solicitudes de creación de un trabajo de formación y API exige la implementación del modelo mediante servicios de SageMaker alojamiento.
-
Una vez que creado el objeto
KMeansSageMakerEstimator
, establezca los siguientes parámetros, que se usan en la capacitación de modelos:-
El número de clústeres que el algoritmo k-means debe crear durante la capacitación de modelos. Especifique 10 clústeres, uno para cada dígito, 0 a 9.
-
Identifica que cada imagen de entrada dispone de 784 características (cada número escrito a mano es una imagen de 28 x 28 píxeles, que conforma las 784 características).
-
-
-
Llama al método
fit
del estimador.// train val model = estimator.fit(trainingData)
Pase la entrada
DataFrame
como un parámetro. El modelo realiza todo el trabajo de entrenarlo e implementarlo SageMaker en él. Para obtener más información, consulte Integre su aplicación Apache Spark con SageMaker. Como respuesta, se obtiene unSageMakerModel
objeto, que se puede utilizar para obtener inferencias a partir del modelo utilizado en SageMaker él.Proporcione solo la entrada
DataFrame
. No tiene que especificar la ruta de registro en el algoritmo k-means utilizado para la capacitación de modelos, ya queKMeansSageMakerEstimator
la conoce. -
Llama al
SageMakerModel.transform
método para obtener inferencias a partir del modelo en el que se ha implementado. SageMakerEl método
transform
realiza unDataFrame
como entrada, lo transforma y devuelve otroDataFrame
que contiene inferencias obtenidas a partir del modelo.val transformedData = model.transform(testData) transformedData.show
Para simplificar, utilizamos el mismo
DataFrame
como entrada para el métodotransform
que utilizamos para la capacitación de modelos en este ejemplo. El métodotransform
realiza lo siguiente:-
Serializa la
features
columna de la entradaDataFrame
a protobuf y la envía al punto final para su inferencia. SageMaker -
Deserializa la respuesta protobuf en dos columnas adicionales (
distance_to_cluster
yclosest_cluster
) en elDataFrame
transformado.
El método
show
obtiene inferencias en las primeras 20 filas de la 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| +-----+--------------------+-------------------+---------------+
Puede interpretar los datos de la siguiente forma:
-
Un número escrito a mano con
label
5 pertenece al clúster 4 (closest_cluster
). -
Un número escrito a mano con
label
0 pertenece al clúster 5. -
Un número escrito a mano con
label
4 pertenece al clúster 9. -
Un número escrito a mano con
label
1 pertenece al clúster 6.
-