SageMaker Spark untuk contoh Scala - Amazon SageMaker

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) yang dapat Anda gunakan untuk mengintegrasikan aplikasi Apache Spark Anda. SageMaker Topik ini berisi contoh untuk membantu Anda memulai dengan SageMaker Spark dengan Scala. Untuk informasi tentang perpustakaan SageMaker Apache Spark, lihat. Apache Spark dengan Amazon SageMaker

Unduh Spark for Scala

Anda dapat mengunduh kode sumber dan contoh untuk pustaka Python Spark (PySpark) dan Scala dari repositori Spark. SageMaker GitHub

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 Khususnya, contoh ini melakukan hal berikut:

  • Menggunakan KMeansSageMakerEstimator untuk menyesuaikan (atau melatih) model pada data

    Karena 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 lulus DataFrame sebagai input. Metode ini mengubah input DataFrame ke yang lain DataFrame 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 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()

    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 rows

    Di 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) 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

    fitMetode estimator ini menggunakan algoritma k-means yang disediakan oleh SageMaker untuk melatih model menggunakan input. DataFrame Sebagai tanggapan, ia mengembalikan SageMakerModel objek yang dapat Anda gunakan untuk mendapatkan kesimpulan.

    catatan

    KMeansSageMakerEstimatorMemperpanjang 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

    • trainingInstanceTypedan trainingInstanceCount —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 mendapatkan SageMakerModel objek, yang dapat Anda gunakan untuk mendapatkan kesimpulan dari model Anda yang digunakan. SageMaker

    Anda hanya memberikan masukanDataFrame. Anda tidak perlu menentukan jalur registri ke algoritma k-means yang digunakan untuk pelatihan model karena KMeansSageMakerEstimator mengetahuinya.

  • Memanggil SageMakerModel.transform metode untuk mendapatkan kesimpulan dari model yang digunakan. SageMaker

    transformMetode ini mengambil input DataFrame as, mengubahnya, dan mengembalikan kesimpulan lain DataFrame yang mengandung kesimpulan yang diperoleh dari model.

    val transformedData = model.transform(testData) transformedData.show

    Untuk kesederhanaan, kami menggunakan input yang DataFrame sama dengan transform metode yang kami gunakan untuk pelatihan model dalam contoh ini. transformMetode ini melakukan hal berikut:

    • Serialisasi features kolom dalam input DataFrame ke protobuf dan mengirimkannya ke titik SageMaker akhir 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 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.