Gunakan skrip pelatihan Anda sendiri dan secara otomatis pilih model terbaik menggunakan optimasi hyperparameter di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Gunakan skrip pelatihan Anda sendiri dan pilih model terbaik secara otomatis menggunakan pengoptimalan hyperparameter di Amazon SageMaker

Keberhasilan pipeline machine learning (ML) apa pun tidak hanya bergantung pada kualitas model yang digunakan, tetapi juga kemampuan untuk melatih dan mengulangi model ini. Salah satu cara utama untuk meningkatkan model ML adalah dengan memilih parameter merdu yang lebih baik, yang dikenal sebagai hiperparameter. Ini dikenal sebagai optimasi hyperparameter (HPO). Namun, melakukan penyetelan ini secara manual seringkali tidak praktis karena ukuran ruang pencarian, terkadang melibatkan ribuan iterasi pelatihan.

Posting ini menunjukkan caranya Amazon SageMaker memungkinkan Anda untuk tidak hanya membawa algoritme model Anda sendiri menggunakan mode skrip, tetapi juga menggunakan algoritme HPO bawaan. Anda akan mempelajari cara mudah menampilkan metrik evaluasi pilihan amazoncloudwatch, dari mana Anda dapat mengekstrak metrik ini untuk memandu algoritme HPO otomatis. Anda kemudian dapat membuat tugas penyetelan HPO yang mengatur beberapa tugas pelatihan dan sumber daya komputasi terkait. Setelah selesai, Anda dapat melihat pekerjaan pelatihan terbaik menurut metrik evaluasi.

Ikhtisar solusi

Kami berjalan melalui langkah-langkah berikut:

  1. Gunakan mode skrip SageMaker untuk menghadirkan model kami sendiri di atas wadah yang dikelola AWS.
  2. Refaktor skrip pelatihan kami untuk mencetak metrik evaluasi kami.
  3. Temukan metrik di CloudWatch Logs.
  4. Ekstrak metrik dari CloudWatch.
  5. Gunakan HPO untuk memilih model terbaik dengan menyetel metrik evaluasi ini.
  6. Pantau HPO dan temukan pekerjaan pelatihan terbaik.

Prasyarat

Untuk penelusuran ini, Anda harus memiliki prasyarat berikut:

Gunakan algoritme khusus pada wadah yang dikelola AWS

Lihat Bawa model Anda sendiri dengan mode skrip Amazon SageMaker untuk melihat lebih detail tentang menghadirkan model khusus ke SageMaker menggunakan wadah yang dikelola AWS.

Kami menggunakan kumpulan data MNIST untuk contoh ini. MNIST adalah kumpulan data yang banyak digunakan untuk klasifikasi digit tulisan tangan, yang terdiri dari 70,000 gambar skala abu-abu berukuran 28ร—28 piksel berlabel dari digit tulisan tangan. Dataset dibagi menjadi 60,000 gambar pelatihan dan 10,000 gambar uji, yang berisi 10 kelas (satu untuk setiap digit).

  1. Buka instans notebook Anda dan jalankan perintah berikut untuk mengunduh mnist.py File:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Sebelum kita mendapatkan dan menyimpan data, mari buat sesi SageMaker. Kita juga harus menentukan bucket dan awalan S3 yang akan digunakan untuk data pelatihan dan model. Ini harus berada dalam Wilayah yang sama dengan instans notebook, pelatihan, dan hosting. Kode berikut menggunakan ember bawaan jika sudah ada, atau buat yang baru jika belum ada. Kami juga harus menyertakan peran IAM ARN untuk memberikan pelatihan dan akses hosting ke data Anda. Kita gunakan get_execution_role() untuk mendapatkan peran IAM yang Anda buat untuk instans notebook Anda.

  2. Buat sesi dengan kode berikut:
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. Sekarang mari ambil datanya, simpan di folder lokal kita /data, dan unggah ke Amazon S3:
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    Kami sekarang dapat membuat estimator untuk menyiapkan tugas pelatihan PyTorch. Kami tidak fokus pada kode pelatihan yang sebenarnya di sini (mnist.py) dengan sangat rinci. Mari kita lihat bagaimana kita dapat dengan mudah memanggil skrip pelatihan ini untuk menginisialisasi tugas pelatihan.

  4. Dalam kode berikut, kami menyertakan skrip titik masuk bernama mnist.py yang berisi kode pelatihan kustom kami:
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. Untuk memastikan bahwa tugas pelatihan ini telah dikonfigurasi dengan benar, dengan kode pelatihan yang berfungsi, kami dapat memulai tugas pelatihan dengan menyesuaikannya dengan data yang kami unggah ke Amazon S3. SageMaker memastikan data kami tersedia di sistem file lokal, sehingga skrip pelatihan kami cukup membaca data dari disk:
    estimator.fit({"training": inputs})

Namun, kami tidak membuat tugas pelatihan tunggal. Kami menggunakan kemampuan penyetelan model otomatis SageMaker melalui penggunaan tugas penyetelan hyperparameter. Penyetelan model sepenuhnya agnostik dengan algoritme model aktual. Untuk informasi selengkapnya tentang semua hyperparameter yang dapat Anda sesuaikan, lihat Lakukan Penyetelan Model Otomatis dengan SageMaker.

Untuk setiap hyperparameter yang ingin kita optimalkan, kita harus mendefinisikan yang berikut ini:

  • Sebuah nama
  • Jenis (parameter dapat berupa bilangan bulat, kontinu, atau kategorikal)
  • Berbagai nilai untuk dijelajahi
  • Jenis penskalaan (linier, logaritmik, logaritma terbalik, atau otomatis); ini memungkinkan kita mengontrol bagaimana rentang parameter tertentu akan dieksplorasi

Kita juga harus menentukan metrik yang kita optimalkan. Itu bisa berupa nilai numerik apa pun asalkan terlihat di log pelatihan dan Anda bisa meneruskan ekspresi reguler untuk mengekstraknya.

Jika kita melihat baris 181 di mnist.py, kita dapat melihat bagaimana kita mencetak ke logger:

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

Sebenarnya, kita bisa melihat keluaran ini di log tugas pelatihan yang baru saja kita jalankan. Dengan membuka grup log /aws/sagemaker/TrainingJobs di konsol CloudWatch, kita harus memiliki peristiwa log yang dimulai dengan pytorch-training- diikuti dengan stempel waktu dan nama yang dihasilkan.

Tangkapan layar berikut menyoroti log yang kami cari.

Sekarang mari kita mulai membangun pekerjaan penyetelan hyperparameter kita.

  1. Seperti disebutkan, pertama-tama kita harus mendefinisikan beberapa informasi tentang hyperparameter, di bawah objek sebagai berikut:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Di sini kami mendefinisikan dua hyperparameter kami. Learning rate (lr) adalah parameter kontinu (oleh karena itu merupakan nilai kontinu) dalam rentang 0.001 dan 0.1. Ukuran batch (batch-size) adalah parameter kategorikal dengan nilai diskrit sebelumnya.

    Selanjutnya, kami menentukan metrik tujuan yang ingin kami sesuaikan dan definisinya. Ini termasuk ekspresi reguler (regex) yang diperlukan untuk mengekstrak metrik tersebut dari log CloudWatch tugas pelatihan yang kita lihat sebelumnya. Kami juga menentukan kerugian pengujian rata-rata nama deskriptif dan jenis tujuan sebagai Minimalkan, sehingga penyetelan hyperparameter berupaya meminimalkan metrik tujuan saat mencari pengaturan hyperparameter terbaik.

  2. Tentukan metrik dengan kode berikut:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Sekarang kita siap untuk membuat milik kita HyperparameterTuner obyek. Selain nama, jenis, dan definisi metrik tujuan, kami meneruskannya hyperparameter_ranges objek dan estimator yang telah kita buat sebelumnya. Kami juga menentukan jumlah total pekerjaan yang ingin kami jalankan, bersama dengan jumlah yang harus dijalankan secara paralel. Kami telah memilih jumlah maksimum pekerjaan sebagai 9, tetapi Anda biasanya akan memilih jumlah yang jauh lebih tinggi (seperti 50) untuk kinerja yang optimal.

  3. Buat HyperparameterTuner objek dengan kode berikut:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

Sebelum kita memulai pekerjaan penyetelan, perlu diperhatikan bagaimana kombinasi hyperparameter ditentukan. Untuk mendapatkan hasil yang baik, Anda harus memilih rentang yang tepat untuk dijelajahi. Secara default, strategi pencarian Bayesian digunakan, dijelaskan lebih lanjut di Cara kerja Penyetelan Hyperparameter.

Dengan optimasi Bayesian, penyetelan hyperparameter diperlakukan sebagai a regresi masalah. Untuk mengatasi masalah regresi ini, ia membuat tebakan tentang kombinasi hyperparameter mana yang akan mendapatkan hasil terbaik, dan menjalankan tugas pelatihan untuk menguji nilai-nilai ini. Ini menggunakan regresi untuk memilih set nilai hyperparameter berikutnya untuk diuji. Ada trade-off exploit/explore yang jelas yang dibuat oleh strategi pencarian di sini. Ia dapat memilih nilai hyperparameter yang mendekati kombinasi yang menghasilkan tugas pelatihan terbaik sebelumnya untuk meningkatkan kinerja secara bertahap. Atau, mungkin memilih nilai lebih jauh, untuk mencoba dan menjelajahi rentang nilai baru yang belum dipahami dengan baik.

Namun, Anda dapat menentukan strategi pencarian lainnya. Strategi berikut didukung di SageMaker:

  • Pencarian kotak โ€“ Mencoba setiap kemungkinan kombinasi di antara rentang hyperparameter yang ditentukan.
  • Pencarian acak โ€“ Mencoba kombinasi acak di antara rentang nilai yang ditentukan. Ini tidak bergantung pada hasil tugas pelatihan sebelumnya, sehingga Anda dapat menjalankan tugas pelatihan bersamaan dalam jumlah maksimum tanpa memengaruhi kinerja penyetelan.
  • Pencarian hiperband โ€“ Menggunakan hasil antara dan hasil akhir dari tugas pelatihan untuk mengalokasikan ulang zaman ke konfigurasi hyperparameter yang digunakan dengan baik, dan secara otomatis menghentikan yang berkinerja buruk.

Anda juga dapat menjelajahi membawa algoritme Anda sendiri, seperti yang dijelaskan di Hadirkan algoritme pengoptimalan hyperparameter Anda sendiri di Amazon SageMaker.

  1. Kami kemudian meluncurkan pelatihan pada objek tuner itu sendiri (bukan estimator), memanggil .fit() dan melewati jalur S3 ke dataset latih dan uji kami:
    tuner.fit({"training": inputs})

Kami kemudian dapat mengikuti kemajuan pekerjaan penyetelan kami di konsol SageMaker, di Pekerjaan penyetelan hyperparameter halaman. Tugas penyetelan memutar sumber daya komputasi dasar yang diperlukan dengan mengatur setiap proses pelatihan individu dan komputasi yang terkait.

Maka mudah untuk melihat semua pekerjaan pelatihan individu yang telah diselesaikan atau sedang berlangsung, bersama dengan nilai metrik tujuan yang terkait. Pada tangkapan layar berikut, kita dapat melihat batch pertama dari pekerjaan pelatihan selesai, yang berisi total tiga sesuai dengan yang kami tentukan max_parallel_jobs nilai 3. Setelah selesai, kita dapat menemukan pekerjaan pelatihan terbaikโ€”pekerjaan yang meminimalkan kerugian pengujian rata-rataโ€”pada Pekerjaan pelatihan terbaik Tab.

Tangkapan layar daftar pekerjaan pelatihan

Membersihkan

Untuk menghindari timbulnya biaya di masa mendatang, hapus sumber daya yang Anda inisialisasi. Ini adalah bucket S3, peran IAM, dan instans notebook SageMaker.

Kesimpulan

Dalam postingan ini, kita membahas cara membawa model kita sendiri ke SageMaker, lalu menggunakan pengoptimalan hyperparameter otomatis untuk memilih tugas pelatihan terbaik. Kami menggunakan kumpulan data MNIST yang populer untuk melihat bagaimana kami dapat menentukan metrik tujuan khusus yang harus dioptimalkan oleh pekerjaan HPO. Dengan mengekstrak metrik objektif ini dari CloudWatch, dan menetapkan berbagai nilai hyperparameter, kami dapat dengan mudah meluncurkan dan memantau tugas HPO.

Jika Anda memerlukan informasi lebih lanjut, atau ingin melihat bagaimana pelanggan kami menggunakan HPO, lihat Penyetelan Model Otomatis Amazon SageMaker. Sesuaikan model Anda sendiri untuk pengoptimalan hyperparameter otomatis di SageMaker hari ini.


Tentang Penulis

Gunakan skrip pelatihan Anda sendiri dan secara otomatis pilih model terbaik menggunakan optimasi hyperparameter di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Harga Sam adalah Konsultan Layanan Profesional yang berspesialisasi dalam AI/ML dan analitik data di Amazon Web Services. Dia bekerja sama dengan pelanggan sektor publik dalam perawatan kesehatan dan ilmu kehidupan untuk memecahkan masalah yang menantang. Saat tidak melakukan ini, Sam menikmati bermain gitar dan tenis, dan menonton band indie favoritnya.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS