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 Spark per Scala
Amazon SageMaker fornisce una libreria Apache Spark (SageMakerSpark
Scarica Spark per Scala
SageMaker Spark SDK per Scala è disponibile nel repository 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 per addestrare un modello a SageMaker usare 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 con Apache Spark Usa il in una pipeline Spark SageMakerEstimator
L'esempio seguente ospita gli artefatti del modello risultanti utilizzando SageMaker servizi di hosting. Per maggiori dettagli su questo esempio, vedi Getting Started: K-Means Clustering on SageMaker with SageMaker Spark
-
Utilizza il metodo
KMeansSageMakerEstimator
per adattare (o addestrare) un modello ai datiPoiché l'esempio utilizza l'algoritmo k-means fornito da SageMaker per addestrare un modello, si utilizza il.
KMeansSageMakerEstimator
Il modello viene addestrato utilizzando immagini di numeri a una cifra scritti a mano (dal set di dati). MNIST e fornisci le immagini come inputDataFrame
. Per comodità, SageMaker 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
SageMakerModel
preparatoPer ottenere inferenze da un modello ospitato in SageMaker, chiami il metodo.
SageMakerModel.transform
Trasmetti unDataFrame
come input. Il metodo trasforma l'inputDataFrame
a un altroDataFrame
contenente 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 MNIST set di dati da un bucket S3 fornito da SageMaker (
awsai-sparksdk-dataset
) in uno 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()Il metodo
show
visualizza 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 rows
In ogni riga:
-
La colonna
label
individua l'etichetta dell'immagine. Ad esempio, se l'immagine del numero scritto a mano è la cifra 5, il valore dell'etichetta è 5. -
La colonna
features
archivia 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 () SageMaker
KMeansSageMakerEstimator
Il
fit
metodo di questo stimatore utilizza l'algoritmo k-means fornito da SageMaker per addestrare i modelli utilizzando un input.DataFrame
In risposta, restituisce un oggettoSageMakerModel
che può essere utilizzato per ottenere le inferenze.Nota
KMeansSageMakerEstimator
Estende il SageMakerSageMakerEstimator
, che estende 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)
I parametri del costruttore forniscono informazioni che vengono utilizzate per addestrare un modello e distribuirlo su: SageMaker
-
trainingInstanceType
etrainingInstanceCount
: 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. SageMaker Per impostazione predefinita, viene utilizzata un'istanza di calcolo ML. -
endpointInitialInstanceCount
—Identifica il numero di istanze di calcolo ML che inizialmente eseguono il backup dell'endpoint in cui è ospitato il modello. SageMaker -
sagemakerRole
— SageMaker assume questo IAM ruolo per eseguire attività per conto dell'utente. 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 SageMaker client. Per creare questo client, devi fornire le tue credenziali, APIutilizza queste credenziali per autenticare le richieste a. SageMaker Ad esempio, utilizza le credenziali per autenticare le richieste di creazione di un processo di formazione e API richiede l'implementazione del modello utilizzando i servizi di hosting. 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
fit
dello strumento di valutazione.// train val model = estimator.fit(trainingData)
Trasmetti l'input
DataFrame
come parametro. Il modello fa tutto il lavoro di addestramento del modello e di implementazione. SageMaker Per ulteriori informazioni, consultare Integra la tua applicazione Apache Spark con SageMaker. In risposta, si ottiene unSageMakerModel
oggetto, che è possibile utilizzare per ottenere inferenze dal modello in cui è stato distribuito. 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 laKMeansSageMakerEstimator
lo conosce. -
Chiama il
SageMakerModel.transform
metodo per ottenere inferenze dal modello distribuito in. SageMakerIl metodo
transform
acquisisce unDataFrame
come input, lo converte e restituisce un altroDataFrame
contenente le interferenze ottenute dal modello.val transformedData = model.transform(testData) transformedData.show
Per semplicità, utilizziamo lo stesso
DataFrame
come input per il metodotransform
che abbiamo utilizzato per l’addestramento del modello in questo esempio. Il metodotransform
esegue quanto segue:-
Serializza la
features
colonna nell'input di protobuf e la inviaDataFrame
all'endpoint per l'inferenza. SageMaker -
Deserializza la risposta protobuf nelle due colonne aggiuntive (
distance_to_cluster
eclosest_cluster
) nelDataFrame
convertito.
Il metodo
show
ottiene 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
label
5 appartiene al cluster 4 (closest_cluster
). -
Un numero scritto a mano con
label
0 appartiene al cluster 5. -
Un numero scritto a mano con
label
4 appartiene al cluster 9. -
Un numero scritto a mano con
label
1 appartiene al cluster 6.
-