Dalam postingan ini, kami akan melanjutkan pengerjaan prediksi tautan dengan kumpulan data Twitch. Kami akan fokus pada pelatihan model ML berdasarkan Graph Neural Networks (GNN) dan mengoptimalkan hiperparameternya. Sekarang, kami telah memproses dan menyiapkan data grafik untuk pelatihan model. Langkah-langkah sebelumnya dijelaskan dalam Bagian 3 - Pemrosesan data, Bagian 2 - Mengekspor data dari DB, dan Bagian 1 - Memuat data ke dalam DB. Baca bagian 1 ; bagian 2 ; dan di sini. di sini di sini bagian 3 MEMILIH JENIS JARINGAN SYARAF GRAF: GCN dan R-GCN Bahasa Indonesia: Kami akan menggunakan Graph Convolutional Neural Networks seperti yang kami lakukan di , dan meskipun Neptune ML menggunakan kerangka kerja yang sama, model yang mendasarinya sedikit berbeda. Neptune ML mendukung grafik pengetahuan (grafik homogen dengan tipe simpul tunggal dan tipe tepi tunggal) dan grafik heterogen yang memiliki beberapa tipe simpul dan tepi. Kumpulan data yang sedang kita kerjakan memiliki tipe simpul tunggal (pengguna) dan tipe tepi tunggal (persahabatan). Meskipun model Graph Convolutional Network (GCN) atau Graph Sample and Aggregation (GraphSAGE) juga akan berfungsi dalam kasus ini, Neptune ML secara otomatis memilih model Relational Graph Convolutional Network (R-GCN) untuk kumpulan data dengan properti simpul yang dapat bervariasi dari simpul ke simpul, seperti yang dijelaskan . Secara umum, R-GCN memerlukan lebih banyak komputasi untuk pelatihan karena peningkatan jumlah parameter yang diperlukan untuk menangani beberapa tipe simpul dan tepi. postingan prediksi tautan lokal DGL.ai di sini HIPERPARAMETER PELATIHAN MODEL Selama tahap pemrosesan data (yang kami jelaskan dalam posting sebelumnya TODO LINK), Neptune ML membuat file bernama . File ini berisi tipe model (R-GCN), tipe tugas (prediksi tautan), metrik evaluasi dan frekuensi, dan 4 daftar parameter: satu dengan parameter tetap yang tidak dimodifikasi selama pelatihan, dan 3 daftar parameter yang akan dioptimalkan, dengan rentang dan nilai default. Parameter dikelompokkan berdasarkan kepentingan. Apakah parameter dari masing-masing grup disetel atau tidak diputuskan berdasarkan jumlah pekerjaan penyetelan yang tersedia: parameter tingkat ke-1 selalu disetel, parameter tingkat ke-2 disetel jika jumlah pekerjaan yang tersedia > 10, dan parameter tingkat ke-3 disetel hanya jika > 50. File kami terlihat seperti ini: model-hpo-configuration.json model-hpo-configuration.json { "models": [ { "model": "rgcn", "task_type": "link_predict", "eval_metric": { "metric": "mrr", "global_ranking_metrics": true, "include_retrieval_metrics": false }, "eval_frequency": { "type": "evaluate_every_pct", "value": 0.05 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3, 100], "inc_strategy": "linear", "inc_val": 1, "type": "int", "edge_strategy": "perM" }, { "param": "lr", "range": [0.001, 0.01], "type": "float", "inc_strategy": "log" }, { "param": "num-negs", "range": [4, 32], "type": "int", "inc_strategy": "power2" } ], "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 }, { "param": "regularization-coef", "range": [0.0001, 0.01], "type": "float", "inc_strategy": "log", "default": 0.001 } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 512], "inc_strategy": "power2", "type": "int", "default": 256 }, { "param": "sparse-lr", "range": [0.001, 0.01], "inc_strategy": "log", "type": "float", "default": 0.001 }, { "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": "neg-share", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "enable-early-stop", "type": "bool", "default": true }, { "param": "window-for-early-stop", "type": "bool", "default": 3 }, { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "per-feat-name-embed", "type": "bool", "default": true }, { "param": "use-edge-features", "type": "bool", "default": false }, { "param": "edge-num-hidden", "type": "int", "default": 16 }, { "param": "weighted-link-prediction", "type": "bool", "default": false }, { "param": "link-prediction-remove-targets", "type": "bool", "default": false }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] } Parameter & ditetapkan selama tahap ekspor dan pemrosesan data, dan tidak boleh diubah di sini. model jenis tugas juga dipilih secara otomatis. mengukur peringkat rata-rata tautan yang benar dalam hasil prediksi, dengan . Metrik evaluasi Peringkat resiprokal rata-rata (MRR) MRR yang lebih tinggi menunjukkan kinerja yang lebih baik ditetapkan sebesar 5% dari kemajuan pelatihan. Misalnya, jika kita memiliki 100 periode, evaluasi akan dilakukan setiap 5 periode. Frekuensi evaluasi Mari kita tinjau beberapa hiperparameter yang akan disetel: : Laju pembelajaran adalah salah satu hiperparameter yang paling berpengaruh untuk pelatihan model apa pun. Laju pembelajaran yang lebih rendah dapat menyebabkan konvergensi yang lebih lambat tetapi berpotensi menghasilkan kinerja yang lebih baik, sementara laju pembelajaran yang lebih tinggi dapat mempercepat pelatihan tetapi mungkin kehilangan solusi optimal. lr : Parameter num-hidden merujuk pada jumlah unit tersembunyi (neuron) di setiap lapisan jaringan saraf R-GCN, khususnya di lapisan tersembunyi. Jumlah unit tersembunyi yang lebih besar meningkatkan kapasitas model untuk mempelajari pola dan hubungan yang kompleks dari data, yang dapat meningkatkan akurasi prediksi, tetapi juga dapat menyebabkan overfitting jika model menjadi terlalu kompleks untuk kumpulan data. num-hidden : Ini menentukan berapa lama model dilatih. Semakin banyak epoch, semakin baik model mempelajari lebih banyak data, tetapi dapat meningkatkan risiko overfitting. num-epochs : Ukuran batch memengaruhi penggunaan memori dan stabilitas konvergensi. Ukuran batch yang lebih kecil mungkin membuat model lebih sensitif terhadap data, sementara ukuran batch yang lebih besar dapat meningkatkan kecepatan pelatihan. batch-size : Pengambilan sampel negatif memengaruhi cara model belajar membedakan tautan yang benar dari yang salah. Jumlah sampel negatif yang lebih tinggi dapat meningkatkan kualitas prediksi tetapi meningkatkan biaya komputasi. num-negs : Dropout membantu mencegah overfitting dengan melewatkan beberapa neuron secara acak selama pelatihan. Tingkat dropout yang lebih tinggi dapat mengurangi overfitting tetapi dapat mempersulit pembelajaran model. dropout : Regularisasi yang ditujukan untuk mencegah model dari overfitting. regularisasi-koef Anda dapat mengubah nilai default, rentang, dan ukuran langkah untuk setiap parameter ini. Daftar lengkap parameter dapat ditemukan . di sini Setelah mengubah parameter, cukup ganti file asli di S3. model-hpo-configuration.json PERAN IAM UNTUK PELATIHAN MODEL DAN HPO Sama seperti pemrosesan data yang dijelaskan di Bagian 3 panduan ini, pelatihan model memerlukan 2 peran IAM: peran Neptune yang menyediakan akses Neptune ke SageMaker dan S3, dan peran eksekusi Sagemaker yang digunakan oleh SageMaker saat menjalankan tugas pemrosesan data dan memungkinkannya mengakses S3. Peran-peran ini harus memiliki kebijakan kepercayaan yang memungkinkan layanan Neptune dan SageMaker untuk mengasumsikannya: { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } Setelah membuat peran dan memperbarui kebijakan kepercayaannya, kami menambahkannya ke kluster Neptune (Neptune -> Basis Data -> YOUR_NEPTUNE_CLUSTER_ID -> Konektivitas & Keamanan -> Peran IAM -> Tambahkan peran). MEMULAI PELATIHAN MODEL DAN HPO MENGGUNAKAN NEPTUNE ML API Sekarang kita siap untuk memulai pelatihan model. Untuk melakukannya, kita perlu mengirim permintaan ke HTTP API klaster Neptune dari dalam VPC tempat klaster berada. Kita akan menggunakan curl pada instans EC2: curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/modeltraining \ -H 'Content-Type: application/json' \ -d '{ "dataProcessingJobId" : "ID_OF_YOUR_DATAPROCESSING_JOB", "trainModelS3Location" : "s3://OUTPUT_BUCKET/model-artifacts/...", "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole", "sagemakerIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingSagemakerRole" }' Hanya parameter berikut yang diperlukan: - id pekerjaan akan digunakan untuk mendapatkan lokasi data yang diproses di S3) dataProcessingJobId - lokasi keluaran untuk artefak (bobot model) trainModelS3Location (peran ini harus ditambahkan ke kluster DB Neptune) Peran Neptune dan SageMaker Ada juga parameter yang menetapkan jumlah tugas pelatihan yang akan dijalankan dengan set hiperparameter yang berbeda. Secara default, nilainya adalah 2, tetapi untuk mendapatkan model yang akurat. maxHPONumberOfTrainingJobs AWS merekomendasikan untuk menjalankan setidaknya 10 tugas Ada banyak parameter opsional juga: misalnya, kita dapat secara manual memilih tipe instans EC2 yang akan digunakan untuk pelatihan model dengan dan mengatur ukuran volume penyimpanannya dengan . Daftar lengkap parameter dapat ditemukan . trainingInstanceType trainingInstanceVolumeSizeInGB di sini Cluster merespons dengan JSON yang berisi ID pekerjaan pemrosesan data yang baru saja kita buat: {"id":"d584f5bc-d90e-4957-be01-523e07a7562e"} Kita dapat menggunakannya untuk mendapatkan status pekerjaan pelatihan model dengan perintah ini (gunakan yang sama seperti pada permintaan sebelumnya): neptuneIamRoleArn curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/modeltraining/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole' Setelah merespons dengan sesuatu seperti ini, { "processingJob": { "name": "PROCESSING_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:processing-job/YOUR_PROCESSING_JOB_NAME", "status": "Completed", "outputLocation": "s3://OUTPUT_BUCKET/model-artifacts/PROCESSING_JOB_NAME/autotrainer-output" }, "hpoJob": { "name": "HPO_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:hyper-parameter-tuning-job/HPO_JOB_NAME", "status": "Completed" }, "mlModels": [ { "name": "MODEL_NAME-cpu", "arn": "arn:aws:sagemaker:us-east-1:123456789012:model/MODEL_NAME-cpu" } ], "id": "d584f5bc-d90e-4957-be01-523e07a7562e", "status": "Completed" } kita dapat memeriksa log pelatihan dan artefak di bucket S3 tujuan. MENINJAU HASIL PELATIHAN MODEL Pelatihan model telah selesai, jadi mari periksa hasilnya di konsol AWS: SageMaker -> Pelatihan -> Pekerjaan Pelatihan. Untuk menyederhanakannya, kami tidak mengubah jumlah pekerjaan HPO saat memulai pelatihan model, dan nilai default 2 digunakan. Kedua pekerjaan tersebut dijalankan secara paralel. Jenis instans dipilih secara otomatis: . ml.g4dn.2xlarge Pekerjaan pertama (yang memiliki nama '001') selesai dalam waktu 15 menit, dan pekerjaan kedua ('002') dihentikan secara otomatis, karena SageMaker mendukung penghentian awal jika metrik pelatihan tidak membaik untuk sementara waktu: Mari kita bandingkan hiperparameter yang digunakan dalam pekerjaan ini: Hanya 3 parameter yang memiliki nilai berbeda: . Model kedua (dilatih dengan Job 2) memiliki tingkat pembelajaran yang lebih tinggi, tetapi memiliki kapasitas yang lebih rendah untuk menangkap pola yang kompleks (karena memiliki lebih sedikit neuron), dan dilatih pada lebih sedikit sampel negatif. Hal itu menyebabkan akurasi yang jauh lebih rendah seperti yang dapat kita lihat dari : num-hidden, num-negs, dan lr Validation Mean Rank (115 vs 23) dan HITS@K adalah posisi peringkat rata-rata tautan yang benar di antara prediksi. . Peringkat Rata-rata (MR) Nilai MR yang lebih rendah lebih baik karena menunjukkan bahwa tautan yang benar, secara rata-rata, memiliki peringkat lebih dekat ke atas Metrik HITS@K mengukur proporsi kemunculan tautan yang benar pada hasil prediksi K teratas. ARTEFAK MODEL Ketika pekerjaan pelatihan selesai, artefak model dibuat dalam bucket S3 keluaran, bersama dengan file yang berisi statistik dan metrik pelatihan: Metrik dan parameter dalam file JSON ini adalah yang telah kami sebutkan sebelumnya. Hanya direktori 001 yang berisi subdirektori 'output' dengan file model.tar.gz, karena itu satu-satunya pekerjaan HPO yang telah diselesaikan. Artefak untuk prediksi tautan juga berisi data grafik DGL karena diperlukan untuk membuat prediksi aktual, seperti yang dijelaskan . di sini Hal itu akan dibahas dalam posting berikutnya dan terakhir dari seri ini. File-file ini akan digunakan untuk membuat titik akhir inferensi dan menghasilkan prediksi tautan yang sebenarnya.