Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SageMaker Spark untuk contoh Scala
Amazon SageMaker menyediakan pustaka Apache Spark (SageMakerSpark
Unduh Spark for Scala
Untuk petunjuk rinci tentang menginstal perpustakaan SageMaker Spark, lihat SageMakerSpark
SageMaker Spark SDK for Scala tersedia di repositori pusat Maven. Tambahkan pustaka Spark ke proyek Anda dengan menambahkan dependensi berikut ke file Andapom.xml
:
-
Jika proyek Anda dibangun dengan Maven, tambahkan yang berikut ini ke file pom.xml Anda:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
-
Jika proyek Anda bergantung pada Spark 2.1, tambahkan yang berikut ini ke file pom.xml Anda:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>
Spark untuk contoh Scala
Bagian ini memberikan contoh kode yang menggunakan pustaka Apache Spark Scala yang disediakan oleh SageMaker untuk melatih model dalam SageMaker menggunakan DataFrame
s di cluster Spark Anda. Ini kemudian diikuti dengan contoh tentang cara Gunakan Algoritma Kustom untuk Pelatihan Model dan Hosting di Amazon SageMaker dengan Apache Spark danGunakan SageMakerEstimator dalam Pipa Spark.
Contoh berikut menampung artefak model yang dihasilkan menggunakan layanan SageMaker hosting. Untuk detail selengkapnya tentang contoh ini, lihat Memulai: K-Means Clustering on SageMaker with SageMaker Spark SDK
-
Menggunakan
KMeansSageMakerEstimator
untuk menyesuaikan (atau melatih) model pada dataKarena contoh menggunakan algoritma k-means yang disediakan oleh SageMaker untuk melatih model, Anda menggunakan.
KMeansSageMakerEstimator
Anda melatih model menggunakan gambar angka satu digit tulisan tangan (dari MNIST kumpulan data). Anda memberikan gambar sebagai masukanDataFrame
. Demi kenyamanan Anda, SageMaker sediakan kumpulan data ini dalam bucket Amazon S3.Sebagai tanggapan, estimator mengembalikan
SageMakerModel
objek. -
Mendapatkan kesimpulan menggunakan yang terlatih
SageMakerModel
Untuk mendapatkan kesimpulan dari model yang di-host SageMaker, Anda memanggil
SageMakerModel.transform
metode. Anda lulusDataFrame
sebagai input. Metode ini mengubah inputDataFrame
ke yang lainDataFrame
yang mengandung kesimpulan yang diperoleh dari model.Untuk gambar input tertentu dari nomor satu digit tulisan tangan, inferensi mengidentifikasi cluster tempat gambar tersebut berada. Untuk informasi selengkapnya, lihat Algoritma 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
Kode contoh melakukan hal berikut:
-
Memuat MNIST dataset dari bucket S3 yang disediakan oleh SageMaker (
awsai-sparksdk-dataset
) ke dalam 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()show
Metode ini menampilkan 20 baris pertama dalam bingkai data:+-----+--------------------+ |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
Di setiap baris:
-
label
Kolom mengidentifikasi label gambar. Misalnya, jika gambar angka tulisan tangan adalah digit 5, nilai labelnya adalah 5. -
features
Kolom menyimpan vektor (org.apache.spark.ml.linalg.Vector
)Double
nilai. Ini adalah 784 fitur dari nomor tulisan tangan. (Setiap angka tulisan tangan adalah gambar 28 x 28 piksel, membuat 784 fitur.)
-
-
Menciptakan SageMaker estimator ()
KMeansSageMakerEstimator
fit
Metode estimator ini menggunakan algoritma k-means yang disediakan oleh SageMaker untuk melatih model menggunakan input.DataFrame
Sebagai tanggapan, ia mengembalikanSageMakerModel
objek yang dapat Anda gunakan untuk mendapatkan kesimpulan.catatan
KMeansSageMakerEstimator
Memperpanjang SageMakerSageMakerEstimator
, yang memperluas 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)
Parameter konstruktor memberikan informasi yang digunakan untuk melatih model dan menerapkannya pada: SageMaker
-
trainingInstanceType
dantrainingInstanceCount
—Identifikasi jenis dan jumlah instance komputasi ML yang akan digunakan untuk pelatihan model. -
endpointInstanceType
—Mengidentifikasi tipe instans komputasi ML yang akan digunakan saat menghosting model di. SageMaker Secara default, satu instance komputasi ML diasumsikan. -
endpointInitialInstanceCount
—Mengidentifikasi jumlah instance komputasi ML yang awalnya mendukung titik akhir yang menghosting model. SageMaker -
sagemakerRole
— SageMaker mengasumsikan IAM peran ini untuk melakukan tugas atas nama Anda. Misalnya, untuk pelatihan model, ia membaca data dari S3 dan menulis hasil pelatihan (artefak model) ke S3.catatan
Contoh ini secara implisit menciptakan klien. SageMaker Untuk membuat klien ini, Anda harus memberikan kredensil Anda. APIMenggunakan kredensil ini untuk mengautentikasi permintaan ke. SageMaker Misalnya, menggunakan kredensyal untuk mengautentikasi permintaan untuk membuat pekerjaan pelatihan dan API panggilan untuk menerapkan model menggunakan layanan hosting. SageMaker
-
Setelah
KMeansSageMakerEstimator
objek telah dibuat, Anda mengatur parameter berikut, digunakan dalam pelatihan model:-
Jumlah cluster yang harus dibuat oleh algoritma k-means selama pelatihan model. Anda menentukan 10 cluster, satu untuk setiap digit, 0 hingga 9.
-
Mengidentifikasi bahwa setiap gambar input memiliki 784 fitur (setiap nomor tulisan tangan adalah gambar 28 x 28 piksel, membuat 784 fitur).
-
-
-
Memanggil metode estimator
fit
// train val model = estimator.fit(trainingData)
Anda meneruskan input
DataFrame
sebagai parameter. Model melakukan semua pekerjaan melatih model dan menyebarkannya ke SageMaker. Untuk informasi lebih lanjut lihat,Integrasikan aplikasi Apache Spark Anda dengan SageMaker. Sebagai tanggapan, Anda mendapatkanSageMakerModel
objek, yang dapat Anda gunakan untuk mendapatkan kesimpulan dari model Anda yang digunakan. SageMakerAnda hanya memberikan masukan
DataFrame
. Anda tidak perlu menentukan jalur registri ke algoritma k-means yang digunakan untuk pelatihan model karenaKMeansSageMakerEstimator
mengetahuinya. -
Memanggil
SageMakerModel.transform
metode untuk mendapatkan kesimpulan dari model yang digunakan. SageMakertransform
Metode ini mengambil inputDataFrame
as, mengubahnya, dan mengembalikan kesimpulan lainDataFrame
yang mengandung kesimpulan yang diperoleh dari model.val transformedData = model.transform(testData) transformedData.show
Untuk kesederhanaan, kami menggunakan input yang
DataFrame
sama dengantransform
metode yang kami gunakan untuk pelatihan model dalam contoh ini.transform
Metode ini melakukan hal berikut:-
Serialisasi
features
kolom dalam inputDataFrame
ke protobuf dan mengirimkannya ke titik SageMaker akhir untuk inferensi. -
Deserialisasi respons protobuf menjadi dua kolom tambahan (
distance_to_cluster
danclosest_cluster
) dalam transformasi.DataFrame
show
Metode ini mendapatkan kesimpulan ke 20 baris pertama dalam 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| +-----+--------------------+-------------------+---------------+
Anda dapat menafsirkan data, sebagai berikut:
-
Angka tulisan tangan dengan
label
5 milik cluster 4 (closest_cluster
). -
Angka tulisan tangan dengan
label
0 milik cluster 5. -
Nomor tulisan tangan dengan
label
4 milik cluster 9. -
Nomor tulisan tangan dengan
label
1 milik cluster 6.
-