Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
SageMaker Esempi di AI Spark per Scala
Amazon SageMaker AI fornisce una libreria Apache Spark (SageMaker AI Spark
Scarica Spark per Scala
Puoi scaricare il codice sorgente e gli esempi per entrambe le librerie Python Spark (PySpark) e Scala dal repository SageMaker AI
SageMaker AI Spark SDK per Scala è disponibile nell'archivio centrale di Maven. Aggiungi la libreria Spark al progetto aggiungendo la seguente dipendenza al file pom.xml:
-
Se il tuo progetto è stato creato con Maven, aggiungi quanto segue al tuo file pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency> -
Se il tuo progetto dipende da Spark 2.1, aggiungi quanto segue al tuo file pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>
Esempio di Spark per Scala
Questa sezione fornisce un codice di esempio che utilizza la libreria Apache Spark Scala fornita da SageMaker AI per addestrare un modello in SageMaker AI usando DataFrame s nel tuo cluster Spark. Questo è poi seguito da esempi su come e. Usa algoritmi personalizzati per l'addestramento e l'hosting dei modelli su Amazon SageMaker AI con Apache Spark Utilizzali in una pipeline SageMakerEstimator Spark
L'esempio seguente ospita gli artefatti del modello risultanti utilizzando servizi di hosting SageMaker AI. Per maggiori dettagli su questo esempio, vedi Getting Started: K-Means Clustering on SageMaker AI with SageMaker AI Spark SDK
-
Utilizza il metodo
KMeansSageMakerEstimatorper adattare (o addestrare) un modello ai datiPoiché l'esempio utilizza l'algoritmo k-means fornito dall' SageMaker IA per addestrare un modello, utilizzi il.
KMeansSageMakerEstimatorPer addestrare il modello, utilizza le immagini di numeri a cifra singola scritti a mano (dal set di dati MNIST) e fornisci le immagini come inputDataFrame. Per comodità, l' SageMaker intelligenza artificiale fornisce questo set di dati in un bucket Amazon S3.In risposta, lo strumento di valutazione restituisce un oggetto
SageMakerModel. -
Ottiene le interferenze utilizzando il
SageMakerModelpreparatoPer ottenere inferenze da un modello ospitato nell' SageMaker intelligenza artificiale, chiami il metodo.
SageMakerModel.transformTrasmetti unDataFramecome input. Il metodo trasforma l'inputDataFramea un altroDataFramecontenente le interferenze ottenute dal modello.Per una determinata immagine di input di un numero a singola cifra scritto a mano, l'interferenza individua un cluster a cui appartiene l'immagine. Per ulteriori informazioni, consulta 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
Il codice esemplificativo si comporta come segue:
-
Carica il set di dati MNIST da un bucket S3 fornito da SageMaker AI (
awsai-sparksdk-dataset) in uno Spark ():DataFramemnistTrainingDataFrame// 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()Il metodo
showvisualizza le prime 20 righe del frame di dati:+-----+--------------------+ |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 rowsIn ogni riga:
-
La colonna
labelindividua l'etichetta dell'immagine. Ad esempio, se l'immagine del numero scritto a mano è la cifra 5, il valore dell'etichetta è 5. -
La colonna
featuresarchivia un vettore (org.apache.spark.ml.linalg.Vector) dei valori diDouble. Si tratta delle 784 caratteristiche del numero scritto a mano (ogni numero scritto a mano è un'immagine da 28 x 28 pixel, che crea 784 caratteristiche).
-
-
Crea uno stimatore AI () SageMaker
KMeansSageMakerEstimatorIl
fitmetodo di questo stimatore utilizza l'algoritmo k-means fornito dall' SageMaker IA per addestrare i modelli utilizzando un input.DataFrameIn risposta, restituisce un oggettoSageMakerModelche può essere utilizzato per ottenere le inferenze.Nota
KMeansSageMakerEstimatorEstende l' SageMaker IASageMakerEstimator, che estende Apache Spark.Estimatorval estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)I parametri del costruttore forniscono informazioni che vengono utilizzate per addestrare un modello e implementarlo sull'intelligenza artificiale: SageMaker
-
trainingInstanceTypeetrainingInstanceCount: individuano il tipo e il numero delle istanze di calcolo ML da utilizzare per l'addestramento del modello. -
endpointInstanceType—Identifica il tipo di istanza di calcolo ML da utilizzare per ospitare il modello in AI. SageMaker Per impostazione predefinita, viene utilizzata un'istanza di calcolo ML. -
endpointInitialInstanceCount—Identifica il numero di istanze di calcolo ML che inizialmente supportano l'endpoint che ospita il modello nell'intelligenza artificiale. SageMaker -
sagemakerRole— SageMaker L'IA assume questo ruolo IAM per eseguire attività per tuo conto. Ad esempio, per l’addestramento del modello, legge i dati dal bucket S3 e scrive i risultati dell’addestramento (artefatti del modello) nello stesso.Nota
Questo esempio crea implicitamente un client SageMaker AI. Per creare questo client, devi fornire le tue credenziali, L'API utilizza queste credenziali per autenticare le richieste all'IA. SageMaker Ad esempio, utilizza le credenziali per autenticare le richieste per creare un processo di formazione e le chiamate API per l'implementazione del modello utilizzando i servizi di hosting AI. SageMaker
-
Una volta creato l'oggetto
KMeansSageMakerEstimator, devi impostare i seguenti parametri che verranno utilizzato per l’addestramento del modello:-
Numero di cluster che l'algoritmo k-means deve creare durante l’addestramento del modello. Possono essere specificati 10 cluster, uno per ogni cifra, da 0 a 9.
-
Parametro che verifica se ogni immagine di input dispone di 784 caratteristiche (ogni numero scritto a mano è un'immagine da 28 x 28 pixel, che crea 784 caratteristiche).
-
-
-
Chiama il metodo
fitdello strumento di valutazione.// train val model = estimator.fit(trainingData)Trasmetti l'input
DataFramecome parametro. Il modello fa tutto il lavoro di addestramento del modello e di implementazione nell'IA. SageMaker Per ulteriori informazioni, consultare Integra la tua applicazione Apache Spark con l'intelligenza artificiale SageMaker . In risposta, si ottiene unSageMakerModeloggetto, che è possibile utilizzare per ottenere inferenze dal modello distribuito nell'intelligenza artificiale. SageMakerPuoi fornire solo l'input
DataFrame. Non è necessario specificare il percorso di registro dell'algoritmo k-means utilizzato per l’addestramento del modello in quanto laKMeansSageMakerEstimatorlo conosce. -
Richiama il
SageMakerModel.transformmetodo per ottenere inferenze dal modello distribuito nell'intelligenza artificiale. SageMakerIl metodo
transformacquisisce unDataFramecome input, lo converte e restituisce un altroDataFramecontenente le interferenze ottenute dal modello.val transformedData = model.transform(testData) transformedData.showPer semplicità, utilizziamo lo stesso
DataFramecome input per il metodotransformche abbiamo utilizzato per l’addestramento del modello in questo esempio. Il metodotransformesegue quanto segue:-
Serializza la
featurescolonna nell'input di protobuf e la inviaDataFrameall'endpoint AI per l'inferenza. SageMaker -
Deserializza la risposta protobuf nelle due colonne aggiuntive (
distance_to_clustereclosest_cluster) nelDataFrameconvertito.
Il metodo
showottiene le inferenze per le prime 20 righe nell'inputDataFrame:+-----+--------------------+-------------------+---------------+ |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| +-----+--------------------+-------------------+---------------+Puoi interpretare i dati come segue:
-
Un numero scritto a mano con
label5 appartiene al cluster 4 (closest_cluster). -
Un numero scritto a mano con
label0 appartiene al cluster 5. -
Un numero scritto a mano con
label4 appartiene al cluster 9. -
Un numero scritto a mano con
label1 appartiene al cluster 6.
-