SageMaker Ejemplos de Spark for Scala - Amazon SageMaker

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) con la que puede integrar sus aplicaciones de Apache Spark SageMaker. Este tema contiene ejemplos que te ayudarán a empezar a usar SageMaker Spark con Scala. Para obtener información sobre la biblioteca SageMaker Apache Spark, consulteApache Spark con Amazon SageMaker.

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, este ejemplo hace lo siguiente:

  • 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 entrada DataFrame. 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 un DataFrame como entrada. El método transforma la entrada DataFrame en otro DataFrame 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 Spark DataFrame (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 valores Double. 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 objeto SageMakerModel 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 y trainingInstanceCount: 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 DataFramecomo 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 un SageMakerModel 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 que KMeansSageMakerEstimator la conoce.

  • Llama al SageMakerModel.transform método para obtener inferencias a partir del modelo en el que se ha implementado. SageMaker

    El método transform realiza un DataFrame como entrada, lo transforma y devuelve otro DataFrame 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étodo transform que utilizamos para la capacitación de modelos en este ejemplo. El método transform realiza lo siguiente:

    • Serializa la features columna de la entrada DataFrame a protobuf y la envía al punto final para su inferencia. SageMaker

    • Deserializa la respuesta protobuf en dos columnas adicionales (distance_to_cluster y closest_cluster) en el DataFrame transformado.

    El método show obtiene inferencias en las primeras 20 filas de la 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| +-----+--------------------+-------------------+---------------+

    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.