Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SageMaker AI Spark untuk contoh Scala
Amazon SageMaker AI menyediakan perpustakaan Apache Spark (SageMaker AI Spark
Unduh Spark for Scala
Untuk petunjuk mendetail tentang menginstal perpustakaan SageMaker AI Spark, lihat SageMaker AI Spark
SageMaker AI Spark SDK untuk 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 AI untuk melatih model SageMaker AI 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 AI dengan Apache Spark danGunakan SageMakerEstimator dalam Pipa Spark.
Contoh berikut menampung artefak model yang dihasilkan menggunakan layanan hosting SageMaker AI. Untuk detail selengkapnya tentang contoh ini, lihat Memulai: K-Means Clustering on SageMaker AI with SageMaker AI Spark SDK
-
Menggunakan
KMeansSageMakerEstimatoruntuk menyesuaikan (atau melatih) model pada dataKarena contoh menggunakan algoritma k-means yang disediakan oleh SageMaker AI untuk melatih model, Anda menggunakan.
KMeansSageMakerEstimatorAnda melatih model menggunakan gambar angka satu digit tulisan tangan (dari kumpulan data MNIST). Anda memberikan gambar sebagai masukanDataFrame. Demi kenyamanan Anda, SageMaker AI menyediakan kumpulan data ini dalam bucket Amazon S3.Sebagai tanggapan, estimator mengembalikan
SageMakerModelobjek. -
Mendapatkan kesimpulan menggunakan yang terlatih
SageMakerModelUntuk mendapatkan kesimpulan dari model yang dihosting di SageMaker AI, Anda memanggil
SageMakerModel.transformmetode ini. Anda lulusDataFramesebagai input. Metode ini mengubah inputDataFrameke yang lainDataFrameyang mengandung kesimpulan yang diperoleh dari model.Untuk gambar input tertentu dari angka 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
Contoh kode melakukan hal sebagai berikut:
-
Memuat dataset MNIST dari bucket S3 yang disediakan oleh SageMaker AI (
awsai-sparksdk-dataset) ke dalam 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()showMetode 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 rowsDi setiap baris:
-
labelKolom mengidentifikasi label gambar. Misalnya, jika gambar angka tulisan tangan adalah digit 5, nilai labelnya adalah 5. -
featuresKolom menyimpan vektor (org.apache.spark.ml.linalg.Vector)Doublenilai. Ini adalah 784 fitur dari nomor tulisan tangan. (Setiap angka tulisan tangan adalah gambar 28 x 28 piksel, membuat 784 fitur.)
-
-
Membuat estimator SageMaker AI ()
KMeansSageMakerEstimatorfitMetode estimator ini menggunakan algoritma k-means yang disediakan oleh SageMaker AI untuk melatih model menggunakan input.DataFrameSebagai tanggapan, ia mengembalikanSageMakerModelobjek yang dapat Anda gunakan untuk mendapatkan kesimpulan.catatan
KMeansSageMakerEstimatorMemperluas SageMaker AISageMakerEstimator, yang memperluas 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)Parameter konstruktor memberikan informasi yang digunakan untuk melatih model dan menerapkannya pada SageMaker AI:
-
trainingInstanceTypedantrainingInstanceCount—Identifikasi jenis dan jumlah instans komputasi ML yang akan digunakan untuk pelatihan model. -
endpointInstanceType—Mengidentifikasi tipe instans komputasi ML yang akan digunakan saat menghosting model di AI. SageMaker Secara default, satu instance komputasi ML diasumsikan. -
endpointInitialInstanceCount—Mengidentifikasi jumlah instance komputasi HTML yang awalnya mendukung titik akhir yang menghosting model di AI. SageMaker -
sagemakerRole— SageMaker AI mengasumsikan peran IAM 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 AI. Untuk membuat klien ini, Anda harus memberikan kredensil Anda. menggunakan kredensial untuk mengautentikasi permintaan. Misalnya, ia menggunakan kredensyal untuk mengautentikasi permintaan untuk membuat pekerjaan pelatihan dan panggilan API untuk menerapkan model menggunakan SageMaker layanan hosting AI.
-
Setelah
KMeansSageMakerEstimatorobjek 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)Teruskan nilai ke dalam sebagai parameter
DataFrame. Model ini melakukan semua pekerjaan melatih model dan menerapkannya ke SageMaker AI. Untuk informasi selengkapnya, lihat Integrasikan aplikasi Apache Spark Anda dengan AI SageMaker . Sebagai tanggapan, Anda mendapatkanSageMakerModelobjek, yang dapat Anda gunakan untuk mendapatkan kesimpulan dari model Anda yang digunakan di SageMaker AI.Anda hanya memberikan masukan
DataFrame. Anda tidak perlu menentukan jalur registri ke algoritma k-means yang digunakan untuk pelatihan model karenaKMeansSageMakerEstimatormengetahuinya. -
Memanggil
SageMakerModel.transformmetode untuk mendapatkan kesimpulan dari model yang digunakan di SageMaker AI.transformMetode ini mengambil inputDataFrameas, mengubahnya, dan mengembalikan kesimpulan lainDataFrameyang mengandung kesimpulan yang diperoleh dari model.val transformedData = model.transform(testData) transformedData.showUntuk kesederhanaan, kami menggunakan input yang
DataFramesama dengantransformmetode yang kami gunakan untuk pelatihan model dalam contoh ini.transformMetode ini melakukan hal berikut:-
Serialisasi
featureskolom dalam inputDataFrameke protobuf dan mengirimkannya ke titik akhir SageMaker AI untuk inferensi. -
Deserialisasi respons protobuf menjadi dua kolom tambahan (
distance_to_clusterdanclosest_cluster) dalam transformasi.DataFrame
showMetode 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
label5 milik cluster 4 (closest_cluster). -
Angka tulisan tangan dengan
label0 milik cluster 5. -
Nomor tulisan tangan dengan
label4 milik cluster 9. -
Nomor tulisan tangan dengan
label1 milik cluster 6.
-