Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
SageMaker Exemples de Spark pour Scala
Amazon SageMaker fournit une bibliothèque Apache Spark (SageMakerSpark
Téléchargez Spark pour Scala
Vous pouvez télécharger le code source et les exemples des bibliothèques Python Spark (PySpark) et Scala depuis le GitHub référentiel SageMakerSpark
Pour obtenir des instructions détaillées sur l'installation de la bibliothèque SageMaker Spark, consultez SageMakerSpark
SageMaker Spark SDK for Scala est disponible dans le dépôt central de Maven. Ajoutez la bibliothèque Spark à votre projet en ajoutant la dépendance suivante à votre fichier pom.xml
:
-
Si votre projet est créé avec Maven, ajoutez ce qui suit à votre fichier pom.xml :
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
-
Si votre projet dépend de Spark 2.1, ajoutez ce qui suit à votre fichier pom.xml :
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>
Exemple de Spark pour Scala
Cette section fournit un exemple de code qui utilise la bibliothèque Apache Spark Scala fournie par SageMaker pour entraîner un modèle à SageMaker utiliser DataFrame
s dans votre cluster Spark. Ceci est ensuite suivi d'exemples expliquant comment Utilisez des algorithmes personnalisés pour la formation et l'hébergement de modèles sur Amazon SageMaker avec Apache Spark etUtilisez le SageMakerEstimator dans un pipeline Spark.
L'exemple suivant héberge les artefacts du modèle qui en résultent à l'aide de services SageMaker d'hébergement. Pour plus de détails sur cet exemple, voir Getting Started : K-Means Clustering on SageMaker with SageMaker Spark SDK
-
Utilise
KMeansSageMakerEstimator
pour adapter (ou entraîner) un modèle sur des donnéesÉtant donné que l'exemple utilise l'algorithme k-means fourni par SageMaker pour entraîner un modèle, vous utilisez le
KMeansSageMakerEstimator
. Vous entraînez le modèle à l'aide d'images de nombres à un chiffre écrits à la main (issus du MNIST jeu de données). Vous fournissez les images en tant queDataFrame
d'entrée. Pour votre commodité, SageMaker fournit cet ensemble de données dans un compartiment Amazon S3.En réponse, l'évaluateur renvoie un objet
SageMakerModel
. -
Obtient des inférences à l'aide du
SageMakerModel
entraînéPour obtenir des déductions à partir d'un modèle hébergé dans SageMaker, vous appelez la
SageMakerModel.transform
méthode. Vous transmettez unDataFrame
comme entrée. La méthode transforme leDataFrame
d'entrée en un autreDataFrame
contenant des inférences obtenues à partir du modèle.Pour une image d'entrée donnée représentant un chiffre manuscrit, l'inférence identifie un cluster auquel l'image appartient. Pour de plus amples informations, veuillez consulter Algorithme des k-moyennes (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
L'exemple de code effectue ce qui suit :
-
Charge l'MNISTensemble de données depuis un compartiment S3 fourni par SageMaker (
awsai-sparksdk-dataset
) dans 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()La méthode
show
affiche les 20 premières lignes dans le cadre de données :+-----+--------------------+ |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
Dans chaque ligne :
-
La colonne
label
identifie l'étiquette de l'image. Par exemple, si l'image du chiffre manuscrit est le chiffre 5, la valeur de l'étiquette est 5. -
La colonne
features
stocke un vecteur (org.apache.spark.ml.linalg.Vector
) de valeursDouble
. Il s'agit des 784 fonctions du chiffre manuscrit. (Chaque chiffre manuscrit est une image de 28 x 28 pixels, ce qui fait 784 fonctions.)
-
-
Crée un SageMaker estimateur ()
KMeansSageMakerEstimator
La
fit
méthode de cet estimateur utilise l'algorithme k-means fourni par SageMaker pour entraîner des modèles à l'aide d'une entrée.DataFrame
En réponse, un objetSageMakerModel
est renvoyé, que vous pouvez utiliser pour obtenir des inférences.Note
Le
KMeansSageMakerEstimator
étend le SageMakerSageMakerEstimator
, qui étend le Apache SparkEstimator
.val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)
Les paramètres du constructeur fournissent des informations qui sont utilisées pour entraîner un modèle et le déployer sur SageMaker :
-
trainingInstanceType
ettrainingInstanceCount
: identifient le type et le nombre d'instances de calcul ML à utiliser pour l'entraînement du modèle. -
endpointInstanceType
—Identifie le type d'instance de calcul ML à utiliser lors de l'hébergement du modèle dans SageMaker. Par défaut, une instance de calcul ML est prévue. -
endpointInitialInstanceCount
—Identifie le nombre d'instances de calcul ML soutenant initialement le point de terminaison hébergeant le modèle. SageMaker -
sagemakerRole
— SageMaker assume ce IAM rôle pour effectuer des tâches en votre nom. Par exemple, pour l'entraînement du modèle, il lit les données à partir de S3 et écrit les résultats de l'entraînement (artefacts de modèle) dans S3.Note
Cet exemple crée implicitement un SageMaker client. Pour créer ce client, vous devez fournir vos informations d'identification. Il API utilise ces informations d'identification pour authentifier les demandes adressées à SageMaker. Par exemple, il utilise les informations d'identification pour authentifier les demandes de création d'une tâche de formation et API appelle au déploiement du modèle à l'aide de services SageMaker d'hébergement.
-
Une fois que l'objet
KMeansSageMakerEstimator
a été créé, les paramètres suivants sont utilisés dans l'entraînement du modèle :-
Le nombre de clusters que l'algorithme k-means doit créer au cours de l'entraînement du modèle. Vous spécifiez 10 clusters, un pour chaque chiffre de 0 à 9.
-
Identifie que chaque image d'entrée a 784 fonctions (chaque chiffre manuscrit est une image de 28 x 28 pixels, soit 784 fonctions).
-
-
-
Appelle la méthode
fit
de l'évaluateur.// train val model = estimator.fit(trainingData)
Vous transmettez le
DataFrame
d'entrée sous forme de paramètre. Le modèle effectue tout le travail de formation du modèle et de son déploiement sur SageMaker. Pour de plus amples informations, veuillez consulter Intégrez votre application Apache Spark avec SageMaker. En réponse, vous obtenez unSageMakerModel
objet que vous pouvez utiliser pour obtenir des déductions à partir de votre modèle déployé dans SageMaker.Vous fournissez uniquement le
DataFrame
d'entrée. Vous n'avez pas besoin de spécifier le chemin d'accès au registre de l'algorithme k-means utilisé pour l'entraînement du modèle, carKMeansSageMakerEstimator
le connaît. -
Appelle la
SageMakerModel.transform
méthode pour obtenir des déductions à partir du modèle déployé dans SageMaker.La méthode
transform
prend unDataFrame
en entrée, le transforme et renvoie un autreDataFrame
contenant des inférences obtenues à partir du modèle.val transformedData = model.transform(testData) transformedData.show
Dans cet exemple, et pour plus de simplicité, nous utilisons le même
DataFrame
d'entrée pour la méthodetransform
que celui que nous avons utilisé pour l'entraînement du modèle. La méthodetransform
effectue les opérations suivantes :-
Sérialise la
features
colonne dans l'entrée de protobuf et l'envoieDataFrame
au point de SageMaker terminaison pour inférence. -
Désérialise la réponse protobuf dans les deux colonnes supplémentaires (
distance_to_cluster
etclosest_cluster
) dans leDataFrame
transformé.
La méthode
show
obtient des inférences pour les 20 premières lignes dans leDataFrame
d'entrée :+-----+--------------------+-------------------+---------------+ |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| +-----+--------------------+-------------------+---------------+
Vous pouvez interpréter les données comme suit :
-
Un chiffre manuscrit avec le
label
5 appartient au cluster 4 (closest_cluster
). -
Un chiffre manuscrit avec le
label
0 appartient au cluster 5. -
Un chiffre manuscrit avec le
label
4 appartient au cluster 9. -
Un chiffre manuscrit avec le
label
1 appartient au cluster 6.
-