Praktik terbaik dan alur kerja yang disarankan

Dengan asumsi bahwa Anda telah menjalankan tutorial, halaman ini menguraikan praktik terbaik untuk Neural Architecture Search. Bagian pertama merangkum alur kerja lengkap yang dapat Anda ikuti untuk tugas Neural Architecture Search. Bagian berikut ini memberikan deskripsi mendetail untuk setiap langkah. Sebaiknya pelajari seluruh halaman ini sebelum menjalankan tugas Neural Architecture Search pertama Anda.

Alur kerja yang disarankan

Di sini kami merangkum alur kerja yang disarankan untuk Neural Architecture Search dan memberikan link ke bagian yang sesuai untuk detail lebih lanjut:

  1. Pisahkan set data pelatihan Anda untuk penelusuran tahap 1.
  2. Pastikan bahwa ruang penelusuran Anda mengikuti panduan kami.
  3. Jalankan pelatihan penuh dengan model dasar pengukuran Anda dan dapatkan kurva validasi.
    1. Optimalkan waktu pelatihan untuk model dasar Anda.
  4. Jalankan alat desain tugas proxy untuk menemukan tugas proxy terbaik.
  5. Lakukan pemeriksaan akhir untuk tugas proxy Anda.
  6. Tetapkan jumlah total uji coba dan uji coba paralel yang tepat, lalu mulai penelusuran.
  7. Pantau plot penelusuran dan hentikan saat plot menunjukkan konvergensi atau menampilkan error dalam jumlah besar atau tidak menunjukkan tanda-tanda konvergensi.
  8. Jalankan pelatihan penuh dengan ~10 uji coba teratas yang dipilih dari penelusuran Anda untuk mendapatkan hasil akhir. Untuk pelatihan penuh, Anda dapat menggunakan lebih banyak augmentasi atau bobot yang telah dilatih sebelumnya untuk mendapatkan performa terbaik.
  9. Menganalisis metrik/data yang disimpan dari penelusuran dan menarik kesimpulan untuk iterasi ruang penelusuran di masa mendatang.

Penelusuran NAS.

Gambar di atas menunjukkan kurva Neural Architecture Search standar. Y-axis di sini menampilkan reward uji coba dan X-axis menunjukkan jumlah uji coba yang diluncurkan sejauh ini. ~100-200 uji coba pertama sebagian besar merupakan eksplorasi acak dari ruang penelusuran oleh pengontrol. Selama eksplorasi awal ini, reward menunjukkan varian yang besar karena banyak jenis model di ruang penelusuran yang sedang dicoba. Saat jumlah uji coba meningkat, pengontrol mulai menemukan model yang lebih baik. Oleh karena itu, pertama-tama, reward mulai meningkat, lalu varian reward dan pertumbuhan reward mulai menurun sehingga menunjukkan konvergensi. Jumlah uji coba saat konvergensi terjadi dapat bervariasi berdasarkan ukuran ruang penelusuran, tetapi biasanya berjumlah sekitar ~2.000 uji coba.

Dua tahap Neural Architecture Search: tugas proxy dan pelatihan penuh

Neural Architecture Search bekerja dalam dua tahap:

  • Penelusuran tahap 1 menggunakan representasi pelatihan lengkap yang jauh lebih kecil, yang biasanya selesai dalam waktu ~1-2 jam. Representasi ini disebut tugas proxy dan membantu menekan biaya penelusuran.

  • Pelatihan penuh tahap 2 melibatkan pelatihan penuh untuk ~10 model skor teratas dari penelusuran tahap 1. Karena sifat penelusuran yang stokastik, model teratas dari penelusuran tahap 1 mungkin bukan model teratas selama pelatihan penuh tahap 2. Oleh karena itu, penting untuk memilih kumpulan model untuk pelatihan penuh.

Karena pengontrol mendapatkan sinyal reward dari tugas proxy yang lebih kecil, alih-alih menyelesaikan pelatihan, penting untuk menemukan tugas proxy yang optimal untuk tugas Anda.

Biaya Neural Architecture Search

Biaya Neural Architecture Search diberikan oleh: search-cost = num-trials-to-converge * avg-proxy-task-cost. Dengan asumsi bahwa waktu komputasi tugas proxy adalah sekitar 1/30 dari waktu pelatihan penuh dan jumlah uji coba yang diperlukan untuk menunjukkan konvergensi sekitar ~2.000, maka biaya penelusuran menjadi ~ 67 * full-training-cost.

Karena biaya Neural Architecture Search tinggi, sebaiknya luangkan waktu untuk menyesuaikan tugas proxy dan menggunakan ruang penelusuran yang lebih kecil untuk penelusuran pertama Anda.

Set data dipisahkan menjadi dua tahap Neural Architecture Search

Dengan asumsi bahwa Anda sudah memiliki data pelatihan dan data validasi untuk pelatihan dasar pengukuran, pemisahan set data berikut direkomendasikan untuk dua tahap NAS Neural Architecture Search:

  • Pelatihan penelusuran tahap 1: ~90% data pelatihan
  • Validasi penelusuran tahap 1: ~10% dari data pelatihan

  • Pelatihan pelatihan penuh tahap 2: 100% dari data pelatihan

  • Validasi pelatihan penuh tahap 2: 100% dari data validasi

Pembagian data pelatihan tahap 2 sama dengan pelatihan reguler. Namun, penelusuran tahap 1 menggunakan pemisahan data pelatihan untuk validasi. Menggunakan data validasi yang berbeda di tahap 1 dan tahap 2 akan membantu mendeteksi bias penelusuran model apa pun karena pemisahan set data. Pastikan data pelatihan diacak dengan baik sebelum mempartisinya lebih lanjut dan 10% pemisahan data pelatihan yang terakhir memiliki distribusi yang serupa dengan data validasi asli.

Data yang kecil atau tidak seimbang

Penelusuran arsitektur tidak direkomendasikan dengan data pelatihan terbatas atau untuk set data yang sangat tidak seimbang yang beberapa kelasnya sangat jarang. Jika Anda sudah menggunakan augmentasi besar untuk pelatihan dasar pengukuran karena kurangnya data, penelusuran model tidak direkomendasikan.

Dalam hal ini, Anda hanya dapat menjalankan penelusuran augmentasi untuk menelusuri kebijakan augmentasi terbaik, bukan menelusuri arsitektur yang optimal.

Desain ruang penelusuran

  • Penelusuran arsitektur tidak boleh dicampur dengan penelusuran augmentasi atau penelusuran hyperparameter (seperti setelan kecepatan pembelajaran atau pengoptimal). Tujuan penelusuran arsitektur adalah untuk membandingkan performa model A dengan model B saat hanya ada perbedaan berbasis arsitektur. Oleh karena itu, setelan augmentasi dan hyperparameter harus tetap sama.

  • Penelusuran augmentasi dapat dilakukan sebagai tahap yang berbeda setelah penelusuran arsitektur selesai.

  • Neural Architecture Search dapat mencapai 10^20 dalam ukuran ruang penelusuran. Namun, jika ruang penelusuran Anda lebih besar, Anda dapat membagi ruang penelusuran menjadi beberapa bagian yang tidak dapat muncul bersamaan. Misalnya, Anda dapat menelusuri encoder secara terpisah dari decoder atau head terlebih dahulu. Jika masih ingin melakukan penelusuran bersama untuk semuanya, Anda dapat membuat ruang penelusuran yang lebih kecil untuk opsi individu terbaik yang sebelumnya ditemukan.

  • (Opsional) Anda dapat melakukan penskalaan model dari desain blok saat mendesain ruang penelusuran. Penelusuran desain blok harus dilakukan terlebih dahulu dengan model yang skalanya diperkecil. Hal ini dapat membuat biaya runtime tugas proxy menjadi jauh lebih rendah. Kemudian, Anda dapat melakukan penelusuran terpisah untuk menaikkan skala model. Untuk informasi selengkapnya, lihat Examples of scaled down models.

Mengoptimalkan waktu pelatihan dan penelusuran

Sebelum menjalankan Neural Architecture Search, penting untuk mengoptimalkan waktu pelatihan untuk model dasar Anda. Ini akan menghemat biaya Anda dalam jangka panjang. Berikut adalah beberapa opsi untuk mengoptimalkan pelatihan:

  • Memaksimalkan kecepatan pemuatan data:
    • Pastikan bucket tempat data Anda berada ada di region yang sama dengan tugas Anda.
    • Jika menggunakan TensorFlow, lihat Best practice summary. Anda juga dapat mencoba menggunakan format TFRecord untuk data Anda.
    • Jika menggunakan PyTorch, ikuti panduan untuk pelatihan PyTorch yang efisien.
  • Gunakan pelatihan terdistribusi untuk memanfaatkan beberapa akselerator atau beberapa mesin.
  • Gunakan pelatihan presisi campuran untuk mendapatkan kecepatan pelatihan yang signifikan dan pengurangan penggunaan memori. Untuk pelatihan presisi campuran TensorFlow, lihat Mixed Precision.
  • Beberapa akselerator (seperti A100) biasanya lebih hemat biaya.
  • Sesuaikan ukuran tumpukan untuk memastikan Anda memaksimalkan pemanfaatan GPU. Plot berikut menunjukkan pemakaian GPU yang kurang (50%). Pemakaian GPU Meningkatkan ukuran tumpukan dapat membantu memanfaatkan GPU lebih lanjut. Namun, ukuran tumpukan harus ditingkatkan dengan hati-hati karena dapat meningkatkan error kehabisan memori selama penelusuran.
  • Jika blok arsitektur tertentu tidak bergantung pada ruang penelusuran, Anda dapat mencoba memuat checkpoint yang telah dilatih sebelumnya untuk blok ini agar lebih cepat dilatih. Checkpoint yang telah dilatih sebelumnya harus sama di atas ruang penelusuran dan tidak boleh menimbulkan bias. Misalnya, jika ruang penelusuran Anda hanya untuk decoder, maka encoder dapat menggunakan checkpoint yang telah dilatih sebelumnya.

Jumlah GPU untuk setiap uji coba penelusuran

Gunakan jumlah GPU yang lebih kecil per uji coba untuk mengurangi waktu mulai. Misalnya, 2 GPU membutuhkan waktu 5 menit untuk dimulai sedangkan 8 GPU membutuhkan waktu 20 menit. Menggunakan 2 GPU per uji coba untuk menjalankan tugas proxy tugas Neural Architecture Search dinilai lebih efisien.

Total uji coba dan uji coba paralel untuk penelusuran

Total setelan uji coba

Setelah menelusuri dan memilih tugas proxy terbaik, Anda siap meluncurkan penelusuran lengkap. Anda tidak dapat mengetahui pasti tentang berapa banyak uji coba yang diperlukan untuk melakukan konvergensi sebelum benar-benar melakukannya. Jumlah uji coba saat konvergensi terjadi dapat bervariasi berdasarkan ukuran ruang penelusuran, tetapi biasanya berjumlah sekitar 2.000 uji coba.

Kami merekomendasikan setelan yang sangat tinggi untuk --max_nas_trial: sekitar 5.000-10.000, lalu membatalkan tugas penelusuran sebelumnya jika plot penelusuran menunjukkan konvergensi Anda juga memiliki opsi untuk melanjutkan tugas penelusuran sebelumnya menggunakan perintah search_resume. Namun, Anda tidak dapat melanjutkan penelusuran dari tugas melanjutkan penelusuran lain. Oleh karena itu, Anda hanya dapat melanjutkan tugas penelusuran asli satu kali.

Setelan uji coba paralel

Tugas penelusuran tahap 1 melakukan batch processing dengan menjalankan --max_parallel_nas_trial uji coba secara paralel dalam satu waktu. Hal ini sangat penting dalam mengurangi keseluruhan runtime untuk tugas penelusuran. Anda dapat menghitung perkiraan jumlah hari untuk penelusuran: days-required-for-search = (trials-to-converge / max-parallel-nas-trial) * (avg-trial-duration-in-hours / 24) Catatan: Awalnya Anda dapat menggunakan 3000 sebagai perkiraan kasar untuk trials-to-converge, yang merupakan batas atas yang baik untuk memulai. Awalnya, Anda dapat menggunakan 2 jam sebagai perkiraan kasar untuk avg-trial-duration-in-hours yang merupakan batas atas yang baik untuk waktu yang dibutuhkan oleh setiap tugas proxy. Sebaiknya gunakan setelan --max_parallel_nas_trial dari ~20 hingga 50, tergantung kuota akselerator yang dimiliki project Anda dan days-required-for-search. Misalnya, jika Anda menetapkan --max_parallel_nas_trial sebagai 20 dan setiap tugas proxy menggunakan dua GPU NVIDIA T4, berarti Anda harus mencadangkan kuota setidaknya 40 GPU NVIDIA T4. Setelan --max_parallel_nas_trial tidak memengaruhi hasil penelusuran secara keseluruhan, tetapi memengaruhi days-required-for-search. Setelan yang lebih kecil untuk max_parallel_nas_trial seperti sekitar 10 GPU yang dapat digunakan (20 GPU), tetapi Anda juga harus memperkirakan secara kasar days-required-for-search dan memastikannya berada dalam batas waktu tunggu tugas.

Tugas pelatihan penuh tahap 2 biasanya melatih semua uji coba secara paralel secara default. Biasanya, ini adalah 10 uji coba teratas yang berjalan secara paralel. Namun, jika setiap uji coba pelatihan penuh tahap 2 menggunakan terlalu banyak GPU (misalnya, masing-masing delapan GPU) untuk kasus penggunaan Anda dan Anda tidak memiliki kuota yang cukup, maka Anda dapat menjalankan tugas tahap 2 secara manual dalam batch seperti menjalankan pelatihan penuh tahap 2 hanya untuk lima uji coba terlebih dahulu, lalu menjalankan pelatihan penuh tahap 2 lainnya untuk 5 uji coba berikutnya.

Waktu tunggu tugas default

Waktu tunggu tugas NAS default ditetapkan ke 14 hari dan setelah itu, tugas akan dibatalkan. Jika Anda berencana menjalankan tugas untuk durasi yang lebih lama, Anda dapat mencoba melanjutkan tugas penelusuran sekali lagi selama 14 hari lagi. Secara keseluruhan, Anda dapat menjalankan tugas penelusuran selama 28 hari termasuk melanjutkan.

Setelan uji coba gagal maksimum

Jumlah maksimum uji coba yang gagal harus ditetapkan ke sekitar 1/3 dari setelan max_nas_trial. Tugas akan dibatalkan jika jumlah uji coba yang gagal mencapai batas ini.

Sebaiknya Anda menghentikan penelusuran saat:

  • Kurva penelusuran mulai menunjukkan konvergensi (varian menurun): Penelusuran NAS. Catatan: Jika tidak ada batasan latensi yang digunakan, atau batasan latensi kuat digunakan dengan batas latensi longgar, maka kurva mungkin tidak menunjukkan peningkatan reward tetapi tetap harus menunjukkan konvergensi. Hal ini terjadi karena pengontrol mungkin sudah melihat akurasi yang baik di awal dalam penelusuran.

  • Lebih dari 20% uji coba Anda menampilkan reward yang tidak valid (kegagalan): Kegagalan penelusuran NAS.

  • Kurva penelusuran tidak meningkat atau tidak menunjukkan konvergensi (seperti yang ditunjukkan di atas) bahkan setelah ~500 uji coba. Jika dasbor menunjukkan peningkatan reward atau penurunan varian, Anda dapat melanjutkan.