Menyesuaikan konfigurasi hyperparameter model di Neptune ML - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyesuaikan konfigurasi hyperparameter model di Neptune ML

Ketika Anda memulai tugas pelatihan model Neptune ML, Neptune ML otomatis menggunakan informasi yang disimpulkan dari tugas pemrosesan data sebelumnya. Ini menggunakan informasi untuk menghasilkan rentang konfigurasi hyperparameter yang digunakan untuk membuat tugas penyetelanSageMaker hyperparameter untuk melatih beberapa model untuk tugas Anda. Dengan begitu, Anda tidak harus menentukan daftar panjang nilai hyperparameter untuk model yang akan dilatih. Sebaliknya, rentang dan default hyperparameter model dipilih berdasarkan jenis tugas, jenis grafik, dan pengaturan tugas penyetelan.

Namun, Anda juga dapat mengganti konfigurasi hyperparameter default dan menyediakan hyperparameters kustom dengan memodifikasi file konfigurasi JSON yang dihasilkan tugas pemrosesan data.

Menggunakan Neptune ML API Pelatihanmodel, Anda dapat mengontrol beberapa pengaturan tugas penyetelan hyperparameter tingkat tinggi sepertimaxHPONumberOfTrainingJobs, maxHPOParallelTrainingJobs, dan trainingInstanceType. Untuk kontrol yang lebih halus atas hyperparameter model, Anda dapat menyesuaikan file model-HPO-configuration.json yang dihasilkan tugas pengolahan data. File disimpan di lokasi Amazon S3 yang Anda tentukan untuk output tugas pemrosesan.

Anda dapat mengunduh file, mengeditnya untuk mengganti konfigurasi hyperparameter default, dan mengunggahnya kembali ke lokasi Amazon S3 yang sama. Jangan mengubah nama file, dan hati-hati untuk mengikuti petunjuk ini saat Anda mengedit.

Mengunduh file dari Amazon S3.

aws s3 cp \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json \ ./

Setelah selesai mengedit, unggah kembali file ke tempatnya:

aws s3 cp \ model-HPO-configuration.json \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json

Struktur berkas model-HPO-configuration.json

File model-HPO-configuration.json menentukan model yang akan dilatih, machine learning task_type dan hyperparameters yang harus bervariasi atau diperbaiki untuk berbagai rangkaian pelatihan model.

Hyperparameters dikategorikan sebagai milik berbagai tier yang menandakan prioritas diberikan kepada hyperparameters ketika tugas penyetelan hyperparameter dipanggil:

  • Hyperparameters Tier-1 memiliki prioritas tertinggi. Jika Anda mengatur maxHPONumberOfTrainingJobs ke nilai kurang dari 10, hanya hyperparameters Tier-1 yang disetel, dan sisanya mengambil nilai default mereka.

  • Hyperparameters Tier-2 memiliki prioritas yang lebih rendah, jadi jika Anda memiliki lebih dari 10 tapi kurang dari 50 total tugas pelatihan untuk tugas penyetelan, maka hyperparameters Tier-1 dan Tier-2 disetel.

  • Hyperparameters Tier 3 disetel bersama dengan Tier-1 dan Tier-2 hanya jika Anda memiliki lebih dari 50 total tugas pelatihan.

  • Akhirnya, hyperparameters tetap tidak disetel sama sekali, dan selalu mengambil nilai default mereka.

Contoh file model-HPO-configuration.json

Berikut ini adalah sampel file model-HPO-configuration.json:

{ "models": [ { "model": "rgcn", "task_type": "node_class", "eval_metric": { "metric": "acc" }, "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3,30], "inc_strategy": "linear", "inc_val": 1, "type": "int", "node_strategy": "perM" }, { "param": "lr", "range": [0.001,0.01], "type": "float", "inc_strategy": "log" } ], "2-tier-param": [ { "param": "dropout", "range": [0.0,0.5], "inc_strategy": "linear", "type": "float", "default": 0.3 }, { "param": "layer-norm", "type": "bool", "default": true } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 4096], "inc_strategy": "power2", "type": "int", "default": 1024 }, { "param": "fanout", "type": "int", "options": [[10, 30],[15, 30], [15, 30]], "default": [10, 15, 15] }, { "param": "num-layer", "range": [1, 3], "inc_strategy": "linear", "inc_val": 1, "type": "int", "default": 2 }, { "param": "num-bases", "range": [0, 8], "inc_strategy": "linear", "inc_val": 2, "type": "int", "default": 0 } ], "fixed-param": [ { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] }

Elemen file model-HPO-configuration.json

File berisi objek JSON dengan array tingkat atas tunggalmodels yang berisi objek konfigurasi model tunggal. Ketika menyesuaikan file, pastikanmodels array hanya memiliki satu objek konfigurasi model di dalamnya. Jika file Anda berisi lebih dari satu objek konfigurasi model, tugas penyetelan akan gagal dengan peringatan.

Objek konfigurasi model berisi elemen tingkat atas berikut:

  • model- (String) Jenis model yang akan dilatih (tidak memodifikasi). Nilai yang valid adalah:

    • "rgcn"- Ini adalah default untuk klasifikasi node dan tugas regresi, dan untuk tugas prediksi tautan heterogen.

    • "transe"- Ini adalah default untuk tugas prediksi tautan KGE.

    • "distmult"- Ini adalah jenis model alternatif untuk tugas prediksi tautan KGE.

    • "rotate"- Ini adalah jenis model alternatif untuk tugas prediksi tautan KGE.

    Sebagai aturan, jangan langsung memodifikasi nilai model, karena jenis model yang berbeda sering memiliki hyperparameter berlaku secara substansial berbeda, yang dapat mengakibatkan kesalahan parsing setelah pekerjaan pelatihan telah dimulai.

    Untuk mengubah jenis model, gunakan parameter modelName dalam modelTraining API ketimbang mengubahnya di file model-HPO-configuration.json.

    Cara untuk mengubah jenis model dan membuat perubahan hyperparameter fine-grain adalah dengan menyalin template konfigurasi model default untuk model yang ingin Anda gunakan dan menempelkannya ke file model-HPO-configuration.json. Ada folder bernama hpo-configuration-templates di lokasi Amazon S3 yang sama sebagai file model-HPO-configuration.json jika jenis tugas yang disimpulkan mendukung beberapa model. Folder ini berisi semua konfigurasi hyperparameter default untuk model lain yang berlaku untuk tugas tersebut.

    Misalnya, jika Anda ingin mengubah konfigurasi model dan hyperparameter untuk tugas prediksi link KGE dari default model transe ke model distmult, cukup tempelkan isi file hpo-configuration-templates/distmult.json ke file model-HPO-configuration.json dan kemudian edit hyperparameters seperti yang diperlukan.

    catatan

    Jika Anda mengatur parameter modelName dalam API modelTraining dan juga mengubah spesifikasi hyperparameter model dalam file model-HPO-configuration.json, dan ini berbeda, nilai model dalam file model-HPO-configuration.json diutamakan, dan nilai modelName diabaikan.

  • task_type— (String) Jenis tugas pembelajaran mesin disimpulkan oleh atau diteruskan langsung ke pekerjaan pengolahan data (jangan memodifikasi). Nilai yang valid adalah:

    • "node_class"

    • "node_regression"

    • "link_prediction"

    Tugas pemrosesan data menyimpulkan jenis tugas dengan memeriksa set data yang diekspor dan file konfigurasi tugas pelatihan yang dihasilkan untuk properti set data.

    Nilai ini seharusnya tidak diubah. Jika Anda ingin melatih tugas yang berbeda, Anda perlu menjalankan tugas pemrosesan data baru. Jika nilai task_type adalah bukan yang Anda harapkan, Anda harus memeriksa input untuk tugas pemrosesan data Anda untuk memastikan bahwa mereka benar. Ini termasuk parameter untuk API modelTraining, sebagaimana dalam file konfigurasi tugas pelatihan yang dihasilkan oleh proses ekspor data.

  • eval_metric- (String) Metrik evaluasi harus digunakan untuk mengevaluasi kinerja model dan untuk memilih model berkinerja terbaik di seluruh proses HPO. Nilai yang valid adalah:

    • "acc"- Akurasi klasifikasi standar. Ini adalah default untuk tugas klasifikasi label tunggal, kecuali label yang tidak seimbang ditemukan selama pemrosesan data, dalam hal ini default adalah"F1".

    • "acc_topk"- Berapa kali label yang benar adalah salah satu kprediksi teratas. Anda juga dapat mengatur nilai kdengan meneruskantopk sebagai kunci tambahan.

    • "F1"- Skor F1.

    • "mse"- Mean-kuadrat kesalahan metrik, untuk tugas regresi.

    • "mrr"- Berarti metrik peringkat timbal balik.

    • "precision"- Presisi model, dihitung sebagai rasio positif sejati terhadap prediksi positif:= true-positives / (true-positives + false-positives).

    • "recall"- Model recall, dihitung sebagai rasio positif sejati terhadap positif aktual:= true-positives / (true-positives + false-negatives).

    • "roc_auc"- Area di bawah kurva ROC. Ini adalah default untuk klasifikasi multi-label.

    Misalnya, untuk mengubah metrik menjadiF1, ubaheval_metric nilainya sebagai berikut:

    " eval_metric": { "metric": "F1", },

    Atau, untuk mengubah metrik ke skortopk akurasi, Anda akan berubaheval_metric sebagai berikut:

    "eval_metric": { "metric": "acc_topk", "topk": 2 },
  • eval_frequency- (Object) Menentukan seberapa sering selama pelatihan kinerja model pada set validasi harus diperiksa. Berdasarkan kinerja validasi, penghentian awal kemudian dapat dimulai dan model terbaik dapat disimpan.

    eval_frequencyObjek berisi dua elemen, yaitu"type" dan"value". Misalnya:

    "eval_frequency": { "type": "evaluate_every_pct", "value": 0.1 },

    typeNilai yang valid adalah:

    • evaluate_every_pct- Menentukan persentase pelatihan yang akan diselesaikan untuk setiap evaluasi.

      Untukevaluate_every_pct,"value" bidang berisi angka floating-point antara nol dan satu yang menyatakan persentase itu.

    • evaluate_every_batch- Menentukan jumlah batch pelatihan yang akan diselesaikan untuk setiap evaluasi.

      Untukevaluate_every_batch,"value" bidang berisi integer yang menyatakan bahwa jumlah batch.

    • evaluate_every_epoch- Menentukan jumlah zaman per evaluasi, di mana zaman baru dimulai pada tengah malam.

      Untukevaluate_every_epoch,"value" bidang berisi integer yang mengungkapkan bahwa hitungan epoch.

    Pengaturan default untukeval_frequency adalah:

    "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 },
  • 1-tier-param   –   (Wajib) Sebuah array dari hyperparameters Tier-1 .

    Jika Anda tidak ingin menyetel hyperparameters apapun, Anda dapat mengaturnya ke array kosong. Ini tidak mempengaruhi jumlah total tugas pelatihan yang diluncurkan oleh tugas penyetelan SageMaker hyperparameter. Ini hanya berarti bahwa semua tugas pelatihan, jika ada lebih dari 1 tapi kurang dari 10, maka akan berjalan dengan set hyperparameters yang sama.

    Di sisi lain, jika Anda ingin memperlakukan semua hyperparameters yang bisa disetel dengan signifikansi yang sama maka Anda dapat menempatkan semua hyperparameters dalam array ini.

  • 2-tier-param   –   (Wajib) Sebuah array dari hyperparameters Tier-2 .

    Parameter ini hanya disetel jika maxHPONumberOfTrainingJobs memiliki nilai lebih besar dari 10. Jika tidak, mereka tetap ke nilai default.

    Jika Anda memiliki anggaran pelatihan paling banyak 10 tugas pelatihan atau tidak menginginkan hyperparameters Tier-2 untuk alasan apapun, tetapi Anda ingin menyetel semua hyperparameters yang dapat disetel, maka Anda dapat mengatur ini ke array kosong.

  • 3-tier-param   –   (Wajib) Sebuah array dari hyperparameters Tier-3 .

    Parameter ini hanya disetel jika maxHPONumberOfTrainingJobs memiliki nilai lebih besar dari 50. Jika tidak, mereka tetap ke nilai default.

    Jika Anda tidak menginginkan hyperparameters Tier-3, Anda dapat mengatur ini ke array kosong.

  • fixed-param— (Wajib) Array hyperparameters tetap yang hanya mengambil nilai defaultnya dan tidak mengambil bervariasi dalam tugas pelatihan yang berbeda.

    Jika Anda ingin memvariasi semua hyperparameter, Anda dapat mengatur ini ke array kosong dan juga mengatur nilai untuk maxHPONumberOfTrainingJobs cukup besar untuk memvariasi semua tier atau membuat semua hyperparameters Tier-1.

Objek JSON yang mewakili setiap hyperparameter di 1-tier-param, 2-tier-param, 3-tier-param, dan fixed-param berisi elemen berikut:

  • param— (String) Nama hyperparameter (tidak berubah).

    Lihat daftar nama hyperparameter yang valid di Neptune ML.

  • type— (String) Jenis hyperparameter (tidak berubah).

    Jenis yang valid adalah: bool, int, dan float.

  • default- (String) Nilai default untuk hyperparameter.

    Anda dapat mengatur nilai default baru.

Hyperparameters yang dapat disetel juga dapat berisi elemen berikut:

  • range— (Array) Rentang untuk hyperparameter yang dapat disetel terus menerus.

    Ini seharusnya array dengan dua nilai, yaitu minimum dan maksimum rentang ([min, max]).

  • options— (Array) Pilihan untuk hyperparameter yang dapat disetel sesuai kategori.

    Array ini harus berisi semua pilihan untuk dipertimbangkan:

    "options" : [value1, value2, ... valuen]
  • inc_strategy— (String) Jenis perubahan tambahan untuk rentang hyperparameter yang dapat disetel terus menerus (jangan diubah).

    Nilai yang valid adalah log, linear, dan power2. Ini hanya berlaku bila kunci rentang diatur.

    Memodifikasi kunci ini dapat mengakibatkan tidak digunakannya secara penuh hyperparameter Anda untuk penyetelan.

  • inc_val- (Float) Jumlah kenaikan berturut-turut berbeda untuk tunablehyperparameters terus menerus (jangan berubah).

    Ini hanya berlaku bila kunci rentang diatur.

    Memodifikasi kunci ini dapat mengakibatkan tidak digunakannya secara penuh hyperparameter Anda untuk penyetelan.

  • node_strategy— (String) Menunjukkan bahwa rentang efektif untuk hyperparameter ini harus berubah berdasarkan jumlah simpul dalam grafik (jangan diubah).

    Nilai yang valid adalah "perM" (per juta), "per10M" (per 10 juta), dan "per100M" (per 100 juta).

    Daripada mengubah nilai ini, ubah range sebagai gantinya.

  • edge_strategy— (String) Menunjukkan bahwa rentang efektif untuk hyperparameter ini harus berubah berdasarkan jumlah edge dalam grafik (jangan diubah).

    Nilai yang valid adalah "perM" (per juta), "per10M" (per 10 juta), dan "per100M" (per 100 juta).

    Daripada mengubah nilai ini, ubah range sebagai gantinya.

Daftar semua hyperparameters di Neptune ML

Daftar berikut berisi semua hyperparameters yang dapat diatur di mana saja di Neptune ML, untuk setiap jenis model dan tugas. Karena mereka semua tidak berlaku untuk setiap jenis model, adalah penting bahwa Anda hanya mengatur hyperparameters di file model-HPO-configuration.json yang muncul di templat untuk model yang Anda gunakan.

  • batch-size   –   Ukuran batch simpul target yang digunakan dalam satu forward pass. Jenis:int.

    Mengatur ke nilai yang jauh lebih besar dapat menyebabkan masalah memori untuk pelatihan pada instans GPU.

  • concat-node-embed— Menunjukkan apakah akan mendapatkan representasi awal dari sebuah simpul dengan menggabungkan fitur-fiturnya dengan tanam simpul awal yang dapat dipelajari untuk meningkatkan ekspresivitas model. Jenis:bool.

  • dropout   –   Probabilitas dropout yang diterapkan pada lapisan dropout. Jenis:float.

  • edge-num-hidden— Ukuran lapisan tersembunyi atau jumlah unit untuk modul fitur edge. Hanya digunakan ketikause-edge-features diatur keTrue. Jenis: mengapung.

  • enable-early-stop- Matikan apakah akan menggunakan fitur berhenti awal atau tidak. Jenis:bool. Default: true.

    Gunakan parameter Boolean ini untuk mematikan fitur berhenti awal.

  • fanout   –   Jumlah neighbor yang akan dijadikan sampel untuk simpul target selama sampling neighbor. Jenis:int.

    Nilai ini digabungkan dengan erat dengan num-layers dan harus selalu berada di tier hyperparameter yang sama. Hal ini karena Anda dapat menentukan fanout untuk setiap layer GNN potensial.

    Karena hyperparameter ini dapat menyebabkan kinerja model bervariasi luas, seharusnya hyperparameter ini diperbaiki atau ditetapkan sebagai hyperparameter Tier-2 atau Tier-3. Mengaturnya ke nilai yang besar dapat menyebabkan masalah memori untuk pelatihan pada instans GPU.

  • gamma   –   Nilai margin dalam fungsi skor. Jenis:float.

    Hal ini berlaku untuk model prediksi link KGE saja.

  • l2norm- Nilai peluruhan berat yang digunakan dalam pengoptimal yang memberlakukan penalti normalisasi L2 pada bobot. Jenis:bool.

  • layer-norm   –   Mengindikasikan apakah akan menggunakan normalisasi lapisan untuk model rgcn. Jenis:bool.

  • low-mem   –   Mengindikasikan apakah akan menggunakan implementasi memori rendah dari pesan relasi yang melewati fungsi di pengeluaran kecepatan. Jenis:bool.

  • lr   –   Tingkat pembelajaran. Jenis:float.

    Ini harus ditetapkan sebagai hyperparameter Tier-1.

  • neg-share   –   Dalam prediksi link, menunjukkan apakah edge bersampel positif dapat berbagi sampel edge negatif. Jenis:bool.

  • num-bases   –   Jumlah basis untuk dekomposisi dasar dalam model rgcn. Menggunakan nilainum-bases yang kurang dari jumlah jenis tepi dalam grafik bertindak sebagai regularizer untukrgcn model. Jenis:int.

  • num-epochs   –   Banyaknya jangka waktu pelatihan untuk dijalankan. Jenis:int.

    Jangka waktu adalah pelatihan lengkap yang melewati grafik.

  • num-hidden   –   Ukuran lapisan tersembunyi atau jumlah unit. Jenis:int.

    Ini juga menetapkan ukuran penanaman awal untuk simpul tanpa fitur.

    Mengatur ini ke nilai yang jauh lebih besar tanpa penguranganbatch-size dapat menyebabkan out-of-memory masalah untuk pelatihan pada instans GPU.

  • num-layer   –   Jumlah layer GNN pada model. Jenis:int.

    Nilai ini dipasangkan erat dengan parameter fanout dan harus ada setelah fanout diatur di tier hyperparameter yang sama.

    Karena ini dapat menyebabkan kinerja model bervariasi luas, seharusnya hyperparameter ini diperbaiki atau ditetapkan sebagai hyperparameter Tier-2 atau Tier-3.

  • num-negs   –   Dalam prediksi tautan, jumlah sampel negatif per sampel positif. Jenis:int.

  • per-feat-name-embed- Menunjukkan apakah akan menyematkan setiap fitur dengan mengubahnya secara independen sebelum menggabungkan fitur. Jenis:bool.

    Ketika diatur ketrue, setiap fitur per node secara independen ditransformasikan ke ukuran dimensi tetap sebelum semua fitur diubah untuk node digabungkan dan selanjutnya diubah kenum_hidden dimensi.

    Ketika diatur kefalse, fitur digabungkan tanpa transformasi khusus fitur.

  • regularization-coef   –   Dalam prediksi link, koefisien kerugian regularisasi. Jenis:float.

  • rel-part   –   Mengindikasikan apakah akan menggunakan partisi relasi untuk prediksi link KGE. Jenis:bool.

  • sparse-lr— Tingkat pembelajaran untuk embeddings dipelajar-node. Jenis:float.

    Embeddings node awal yang dapat dipelajari digunakan untuk node tanpa fitur atau kapanconcat-node-embed disetel. Parameter lapisan penyematan node yang dapat dipelajari jarang dilatih menggunakan pengoptimal terpisah yang dapat memiliki tingkat pembelajaran terpisah.

  • use-class-weight- Menunjukkan apakah akan menerapkan bobot kelas untuk tugas klasifikasi yang tidak seimbang. Jika diatur ketrue, jumlah label digunakan untuk mengatur berat untuk setiap label kelas. Jenis:bool.

  • use-edge-features- Menunjukkan apakah akan menggunakan fitur tepi selama pesan lewat. Jika diatur ketrue, modul fitur tepi kustom ditambahkan ke lapisan RGCN untuk jenis tepi yang memiliki fitur. Jenis:bool.

  • use-self-loop   –   Menunjukkan apakah akan menyertakan self loop dalam pelatihan model rgcn. Jenis:bool.

  • window-for-early-stop- Mengontrol jumlah skor validasi terbaru untuk rata-rata untuk memutuskan berhenti lebih awal. Waktu default adalah 3. type = int. Lihat juga Penghentian awal proses pelatihan model di Neptune. Jenis:int. Default: 3.

    Lihat .

Mengatur hyperparameters di Neptune ML~

Saat Anda mengedit file model-HPO-configuration.json, berikut ini adalah jenis perubahan yang paling umum dibuat:

  • Edit nilai minimum dan/atau maksimum dari hyperparameter range.

  • Menetapkan hyperparameter ke nilai tetap dengan memindahkannya ke bagian fixed-param dan menetapkan nilai defaultnya ke nilai tetap yang ingin Anda ambil.

  • Mengubah prioritas hyperparameter dengan menempatkannya di tier tertentu, mengedit rentangnya, dan memastikan bahwa nilai defaultnya diatur dengan tepat.