Panduan memulai project baru

Bagian ini menjelaskan cara memilih hal berikut pada awal project ML:

  • arsitektur model
  • pengoptimal
  • ukuran tumpukan
  • konfigurasi awal

Asumsi

Saran di bagian ini mengasumsikan hal berikut:

  • Anda telah merumuskan masalah, dan menyiapkan data pelatihan sampai batas tertentu.
  • Anda telah menyiapkan pipeline pelatihan dan pengujian.
  • Anda telah memilih dan menerapkan metrik yang sedapat mungkin mewakili apa yang ingin Anda ukur di lingkungan yang di-deploy.

Dengan asumsi telah memenuhi semua prasyarat sebelumnya, Anda kini siap untuk mencurahkan waktu untuk arsitektur model dan konfigurasi pelatihan.

Memilih arsitektur model

Mari kita mulai dengan definisi berikut:

  • Arsitektur model adalah sistem untuk menghasilkan prediksi. Arsitektur model berisi framework untuk mengonversi data input menjadi prediksi, tetapi tidak berisi nilai parameter. Misalnya, jaringan neural dengan tiga lapisan tersembunyi yang masing-masing terdiri dari 10 node, 5 node, dan 3 node adalah arsitektur model.
  • model adalah arsitektur model ditambah nilai tertentu untuk semua parameter. Misalnya, model terdiri dari jaringan neural yang dijelaskan dalam definisi arsitektur model, ditambah nilai spesifik untuk bobot dan bias setiap node.
  • Kelompok model adalah template untuk membuat arsitektur model berdasarkan sekumpulan hyperparameter.

Memilih arsitektur model berarti memilih sekumpulan model yang berbeda (satu untuk setiap setelan hyperparameter model).

Jika memungkinkan, cobalah untuk menemukan codebase yang didokumentasikan yang menangani masalah sedekat mungkin dengan masalah saat ini. Kemudian, reproduksi model tersebut sebagai titik awal.

Memilih pengoptimal

Tidak ada pengoptimal yang merupakan yang "terbaik" di semua jenis masalah machine learning dan arsitektur model. Bahkan hanya membandingkan performa dari pengoptimal pun akan sulit. ⇩ Kami merekomendasikan penggunaan pengoptimal yang populer dan mapan, terutama saat memulai project baru.

Sebaiknya pilih pengoptimal yang paling populer untuk jenis masalah yang Anda sedang kerjakan. Kami merekomendasikan pengoptimal yang sudah mapan berikut:

Perhatikan semua argumen pengoptimal yang dipilih. Pengoptimal dengan lebih banyak hyperparameter biasanya memerlukan lebih banyak upaya penyesuaian. Hal ini sangat menyakitkan di tahap awal project saat Anda mencoba menemukan nilai terbaik dari berbagai hyperparameter lainnya (misalnya, kecepatan pembelajaran) sekaligus memperlakukan argumen pengoptimal sebagai gangguan. Oleh karena itu, kami merekomendasikan pendekatan berikut:

  1. Di awal project, pilih pengoptimal tanpa banyak hyperparameter yang dapat disesuaikan. Berikut ini dua contoh:
    • SGD dengan momentum tetap.
    • Adam dengan Epsilon, Beta1, dan Beta2 tetap.
  2. Pada tahap selanjutnya dari project, beralihlah ke pengoptimal yang lebih umum yang menyesuaikan lebih banyak hyperparameter, bukan memperbaikinya ke nilai default.

Pilih ukuran tumpukan

Ringkasan: Ukuran batch mengatur kecepatan pelatihan; jangan gunakan ukuran batch untuk menyesuaikan performa set validasi secara langsung.

Ukuran tumpukan sangat menentukan waktu pelatihan dan konsumsi resource komputasi. Meningkatkan ukuran tumpukan sering mengurangi waktu pelatihan, yang:

  • Memungkinkan Anda menyesuaikan hyperparameter secara lebih menyeluruh dalam interval waktu tetap, sehingga berpotensi menghasilkan model akhir yang lebih baik.
  • Mengurangi latensi siklus pengembangan, sehingga memungkinkan ide-ide baru diuji lebih sering.

Meningkatkan ukuran batch dapat mengurangi atau meningkatkan konsumsi resource, atau tidak mengubah konsumsi resource.

Jangan perlakukan ukuran tumpukan sebagai hyperparameter yang dapat disetel untuk performa set validasi. Jika semua kondisi berikut terpenuhi, performa model tidak boleh bergantung pada ukuran tumpukan:

  • Semua hyperparameter dalam pengoptimal disesuaikan dengan baik.
  • Regularisasi sudah memadai dan disetel dengan baik.
  • Jumlah langkah pelatihan sudah cukup.

Performa akhir yang sama harus dapat dicapai menggunakan semua ukuran batch (Lihat Shallue et al. 2018 dan Mengapa ukuran batch tidak boleh disesuaikan untuk secara langsung meningkatkan performa set validasi?.

Menentukan ukuran tumpukan yang memungkinkan dan memperkirakan throughput pelatihan

Untuk model dan pengoptimal tertentu, hardware yang tersedia biasanya mendukung berbagai ukuran tumpukan. Faktor pembatas biasanya adalah memori akselerator. Sayangnya, sulit untuk menghitung ukuran tumpukan mana yang sesuai dengan memori tanpa menjalankan, atau setidaknya mengompilasi, program pelatihan lengkap. Solusi yang paling mudah biasanya adalah menjalankan tugas pelatihan pada ukuran tumpukan yang berbeda-beda (misalnya, dengan meningkatkan kekuatan 2) untuk sejumlah kecil langkah hingga salah satu tugas melebihi memori yang tersedia. Untuk setiap ukuran batch, latih cukup lama untuk mendapatkan perkiraan throughput pelatihan yang andal:

throughput pelatihan = jumlah contoh yang diproses per detik

atau, setara dengan, waktu per langkah:

waktu per langkah = ukuran tumpukan / throughput pelatihan

Saat akselerator belum tersaturasi, jika ukuran tumpukan dua kali lipat, throughput pelatihan juga akan berlipat ganda (atau setidaknya hampir dua kali lipat). Padahal, waktu per langkah harus konstan (atau setidaknya hampir konstan) seiring bertambahnya ukuran tumpukan. Jika tidak, pipeline pelatihan memiliki bottleneck, seperti I/O atau sinkronisasi antar-node komputasi. Pertimbangkan untuk mendiagnosis dan memperbaiki bottleneck sebelum melanjutkan.

Jika throughput pelatihan hanya meningkat hingga beberapa ukuran tumpukan maksimum, hanya pertimbangkan ukuran tumpukan hingga ukuran tumpukan maksimum tersebut, meskipun hardware mendukung ukuran tumpukan yang lebih besar. Semua manfaat penggunaan ukuran tumpukan yang lebih besar mengasumsikan bahwa throughput pelatihan akan meningkat. Jika tidak, perbaiki bottleneck atau gunakan ukuran batch yang lebih kecil.

Akumulasi gradien menyimulasikan ukuran tumpukan yang lebih besar daripada yang dapat didukung hardware sehingga tidak memberikan manfaat throughput apa pun. Umumnya, Anda harus menghindari akumulasi gradien dalam pekerjaan yang diterapkan.

Anda mungkin perlu mengulangi langkah-langkah ini setiap kali mengubah model atau pengoptimal. Misalnya, arsitektur model yang berbeda mungkin memungkinkan ukuran tumpukan yang lebih besar agar pas dalam memori.

Pilih ukuran tumpukan untuk meminimalkan waktu pelatihan

Berikut adalah definisi kami tentang waktu pelatihan:

  • waktu pelatihan = (waktu per langkah) x (jumlah total langkah)

Anda dapat sering menganggap waktu per langkah bersifat kira-kira konstan untuk semua ukuran tumpukan yang memungkinkan. Hal ini berlaku jika:

  • Tidak ada overhead dari komputasi paralel.
  • Semua bottleneck pelatihan telah didiagnosis dan dikoreksi. (Lihat bagian sebelumnya untuk mengetahui cara mengidentifikasi bottleneck pelatihan. Dalam praktiknya, biasanya ada setidaknya beberapa overhead untuk meningkatkan ukuran tumpukan.

Seiring bertambahnya ukuran tumpukan, jumlah total langkah yang diperlukan untuk mencapai sasaran performa tetap biasanya akan berkurang, asalkan Anda menyesuaikan ulang semua hyperparameter yang relevan saat mengubah ukuran tumpukan. (Lihat Shallue et al. 2018.) Misalnya, menggandakan ukuran tumpukan dapat mengurangi separuh jumlah total langkah yang diperlukan. Hubungan ini disebut penskalaan sempurna dan harus ditahan untuk semua ukuran batch hingga ukuran tumpukan yang penting.

Di luar ukuran tumpukan yang penting, peningkatan ukuran tumpukan akan menghasilkan nilai yang berkurang. Artinya, meningkatkan ukuran tumpukan pada akhirnya tidak lagi mengurangi jumlah langkah pelatihan, tetapi tidak pernah meningkatkannya. Oleh karena itu, ukuran tumpukan yang meminimalkan waktu pelatihan biasanya merupakan ukuran tumpukan terbesar yang masih mengurangi jumlah langkah pelatihan yang diperlukan. Ukuran tumpukan ini bergantung pada set data, model, dan pengoptimal, dan ini merupakan masalah terbuka terkait cara menghitungnya selain menemukannya secara eksperimental untuk setiap masalah baru. 🤖

Ketika membandingkan ukuran tumpukan, perhatikan perbedaan antara hal berikut:

  • Anggaran contoh atau anggaran epoch—menjalankan semua eksperimen sekaligus menetapkan jumlah presentasi contoh pelatihan.
  • Anggaran langkah—menjalankan semua eksperimen dengan jumlah langkah pelatihan yang tetap.

Membandingkan ukuran batch dengan anggaran epoch hanya akan mengetahui cara penskalaan yang sempurna, meskipun ukuran batch yang lebih besar mungkin masih memberikan percepatan yang signifikan dengan mengurangi jumlah langkah pelatihan yang diperlukan. Sering kali, ukuran tumpukan terbesar yang didukung oleh hardware yang tersedia lebih kecil daripada ukuran tumpukan penting. Oleh karena itu, aturan praktis yang baik (tanpa menjalankan eksperimen apa pun) adalah menggunakan ukuran tumpukan terbesar yang memungkinkan.Tidak ada gunanya menggunakan ukuran tumpukan yang lebih besar jika pada akhirnya meningkatkan waktu pelatihan.

Pilih ukuran batch untuk meminimalkan konsumsi resource

Ada dua jenis biaya resource yang terkait dengan peningkatan ukuran tumpukan:

  • Biaya di muka. Misalnya, membeli hardware baru atau menulis ulang pipeline pelatihan untuk mengimplementasikan pelatihan multi-GPU / multi-TPU.
  • Biaya penggunaan. Misalnya, penagihan terhadap anggaran resource tim, penagihan dari penyedia cloud, biaya listrik / pemeliharaan.

Jika ada biaya di muka yang signifikan untuk peningkatan ukuran tumpukan, mungkin lebih baik menunda peningkatan ukuran tumpukan hingga project matang dan lebih mudah untuk menilai untung-rugi biaya-manfaat. Mengimplementasikan program pelatihan paralel multi-host dapat menimbulkan bugs dan masalah kecil sehingga mungkin lebih baik memulai dengan pipeline yang lebih sederhana. Di sisi lain, waktu pelatihan yang dipercepat mungkin sangat bermanfaat di awal proses ketika banyak eksperimen tuning diperlukan.

Kami merujuk pada total biaya penggunaan (yang mungkin mencakup beberapa jenis biaya yang berbeda) sebagai konsumsi resource, yang dihitung sebagai berikut:

konsumsi resource = konsumsi resource per langkah x jumlah total langkah

Meningkatkan ukuran tumpukan biasanya akan mengurangi jumlah total langkah. Peningkatan atau penurunan konsumsi resource bergantung pada perubahan konsumsi per langkah, yang bergantung pada ukuran batch sebagai berikut:

  • Meningkatkan ukuran tumpukan dapat mengurangi konsumsi resource. Misalnya, jika setiap langkah dengan ukuran tumpukan yang lebih besar dapat dijalankan pada hardware yang sama dengan ukuran tumpukan yang lebih kecil (hanya dengan sedikit peningkatan waktu per langkah), setiap peningkatan konsumsi resource per langkah mungkin akan lebih besar dibandingkan dengan penurunan jumlah langkah.
  • Meningkatkan ukuran tumpukan mungkin tidak mengubah konsumsi resource. Misalnya, jika ukuran tumpukan menggandakan jumlah langkah yang diperlukan dan menggandakan jumlah GPU yang digunakan, total konsumsi (dalam hal jam GPU) tidak berubah.
  • Meningkatkan ukuran tumpukan dapat meningkatkan konsumsi resource. Misalnya, jika peningkatan ukuran tumpukan memerlukan hardware yang diupgrade, peningkatan konsumsi per langkah mungkin lebih besar daripada pengurangan jumlah langkah.

Mengubah ukuran tumpukan memerlukan penyesuaian ulang sebagian besar hyperparameter

Nilai optimal dari sebagian besar hyperparameter bersifat sensitif terhadap ukuran tumpukan. Oleh karena itu, mengubah ukuran tumpukan biasanya mengharuskan dimulainya kembali proses penyesuaian dari awal. Hyperparameter yang berinteraksi paling kuat dengan ukuran tumpukan, sehingga yang paling penting untuk disesuaikan secara terpisah untuk setiap ukuran tumpukan, adalah sebagai berikut:

  • Hyperparameter pengoptimal (misalnya, kecepatan pembelajaran dan momentum)
  • Hyperparameter regularisasi

Perhatikan hal ini saat memilih ukuran tumpukan di awal project. Jika nantinya Anda perlu beralih ke ukuran tumpukan yang berbeda, mungkin akan sulit, memakan waktu, dan mahal untuk menyesuaikan kembali hyperparameter lainnya untuk ukuran tumpukan yang baru.

Cara norma batch berinteraksi dengan ukuran batch

Norma batch rumit dan, secara umum, harus menggunakan ukuran tumpukan yang berbeda dari komputasi gradien untuk menghitung statistik. Lihat Detail penerapan normalisasi batch untuk pembahasan mendetail.

Memilih konfigurasi awal

Tahap pertama dalam penyesuaian hyperparameter adalah menentukan titik awal untuk hal berikut:

  • konfigurasi model (mis. jumlah lapisan)
  • hyperparameter (misalnya, kecepatan pemelajaran)
  • jumlah langkah pelatihan

Menentukan konfigurasi awal ini memerlukan beberapa operasi pelatihan dan trial-and-error yang dikonfigurasi secara manual.

Prinsip panduan kami adalah sebagai berikut:

Temukan konfigurasi sederhana, relatif cepat, dan penggunaan resource yang relatif rendah yang menghasilkan performa yang wajar.

dalam hal ini:

  • Sederhana berarti menghindari fitur pipeline yang tidak perlu, seperti standardisasi khusus atau trik arsitektur. Misalnya, pipeline tanpa regularisasi pelolosan (atau dengan regularisasi pelolosan dinonaktifkan) lebih sederhana daripada pipeline dengan regularisasi pelolosan.
  • Performa yang wajar bergantung pada masalahnya, tetapi setidaknya, model terlatih yang wajar berperforma jauh lebih baik daripada peluang acak pada set validasi.

Memilih konfigurasi awal yang cepat dan mengonsumsi resource minimal akan membuat penyesuaian hyperparameter jauh lebih efisien. Misalnya, mulailah dengan model yang lebih kecil.

Memilih jumlah langkah pelatihan melibatkan penyeimbangan ketegangan berikut:

  • Pelatihan untuk lebih banyak langkah dapat meningkatkan performa dan menyederhanakan penyesuaian hyperparameter. (Untuk mengetahui detail selengkapnya, lihat Shallue et al. 2018).
  • Sebaliknya, pelatihan untuk langkah yang lebih sedikit berarti setiap pelatihan yang dijalankan lebih cepat dan menggunakan lebih sedikit resource, sehingga meningkatkan efisiensi penyesuaian dengan mengurangi waktu antarsiklus dan memungkinkan Anda menjalankan lebih banyak eksperimen secara paralel. Selain itu, jika Anda memilih anggaran langkah besar yang tidak perlu di awal project, mungkin akan sulit untuk mengubahnya nanti dalam project; misalnya, setelah Anda menyesuaikan jadwal kecepatan pemelajaran untuk jumlah langkah tersebut.