මෙම සටහනේදී අපි Twitch දත්ත කට්ටලය සමඟ සබැඳි පුරෝකථනය මත වැඩ කිරීම දිගටම කරගෙන යන්නෙමු. අපි Graph Neural Networks (GNNs) මත පදනම් වූ ML ආකෘතිය පුහුණු කිරීම සහ එහි අධි පරාමිතීන් ප්රශස්ත කිරීම කෙරෙහි අවධානය යොමු කරන්නෙමු. මේ වන විට අපි දැනටමත් ග්රැෆ් දත්ත සකසා ආකෘති පුහුණුව සඳහා සූදානම් කර ඇත්තෙමු. පෙර පියවර 3 වන කොටස - දත්ත සැකසීම, 2 වන කොටස - DB වෙතින් දත්ත අපනයනය කිරීම සහ 1 වන කොටස - DB වෙත දත්ත පූරණය කිරීම යටතේ විස්තර කර ඇත. 1 කොටස කියවන්න; 2 කොටස ; සහ මෙතැනින් කියවන්න. මෙතැනින් මෙතැනින් 3 කොටස ප්රස්ථාර ස්නායු ජාල වර්ගය තෝරා ගැනීම: GCN සහ R-GCN අපි කළාක් මෙන් ප්රස්ථාර පරිවර්තන ස්නායු ජාල භාවිතා කරන්නෙමු, සහ නෙප්චූන් ML එකම රාමුව භාවිතා කළත්, යටින් පවතින ආකෘතිය ටිකක් වෙනස් ය. නෙප්චූන් ML දැනුම ප්රස්ථාර (තනි නෝඩ් වර්ගයක් සහ තනි දාර වර්ගයක් සහිත සමජාතීය ප්රස්ථාර) සහ බහු නෝඩ් සහ දාර වර්ග ඇති විෂමජාතීය ප්රස්ථාර යන දෙකටම සහය දක්වයි. අප සමඟ වැඩ කරන දත්ත කට්ටලයට තනි නෝඩ් වර්ගයක් (පරිශීලක) සහ තනි දාර වර්ගයක් (මිත්රත්වය) ඇත. ප්රස්ථාර පරිවර්තන ජාලයක් (GCN) හෝ ප්රස්ථාර සාම්පල සහ එකතු කිරීමේ (GraphSAGE) ආකෘතියක් ද මෙම අවස්ථාවේදී ක්රියා කළත්, පැහැදිලි කර ඇති පරිදි, නෝඩ් ගුණාංග සහිත දත්ත කට්ටල සඳහා නෙප්චූන් ML ස්වයංක්රීයව සම්බන්ධතා ප්රස්ථාර පරිවර්තන ජාලයක් (R-GCN) ආකෘතියක් තෝරා ගනී. සාමාන්යයෙන්, බහු නෝඩ් සහ දාර වර්ග හැසිරවීමට අවශ්ය පරාමිතීන් ගණන වැඩි වීම නිසා පුහුණු වීමට R-GCN වලට වැඩි ගණනය කිරීමක් අවශ්ය වේ. දේශීය සබැඳි අනාවැකි පළ කිරීමේදී DGL.ai මෙහි ආදර්ශ පුහුණු අධි පරාමිතීන් දත්ත සැකසුම් අදියරේදී (අපි පෙර TODO LINK සටහනේ විස්තර කළ පරිදි), Neptune ML විසින් නමින් ගොනුවක් නිර්මාණය කරන ලදී. එහි ආකෘති වර්ගය (R-GCN), කාර්ය වර්ගය (සබැඳි පුරෝකථනය), ඇගයීම් මෙට්රික් සහ සංඛ්යාතය සහ පරාමිති ලැයිස්තු 4 ක් අඩංගු වේ: පුහුණුව අතරතුර වෙනස් නොකරන ස්ථාවර පරාමිතීන් සහිත එකක් සහ පරාමිති ලැයිස්තු 3 ක්, පරාස සහ පෙරනිමි අගයන් සමඟ ප්රශස්තිකරණය කළ යුතු පරාමිති ලැයිස්තු 3 ක් අඩංගු වේ. පරාමිතීන් වැදගත්කම අනුව කාණ්ඩගත කර ඇත. එක් එක් කණ්ඩායම් වලින් පරාමිතීන් සුසර කර තිබේද යන්න තීරණය කරනු ලබන්නේ ලබා ගත හැකි සුසර කිරීමේ රැකියා ගණන මත ය: 1 වන ස්ථර පරාමිතීන් සැමවිටම සුසර කරනු ලැබේ, 2 වන ස්ථර පරාමිතීන් සුසර කරනු ලබන්නේ ලබා ගත හැකි රැකියා ගණන > 10 නම්, සහ 3 වන ස්ථර පරාමිතීන් සුසර කරනු ලබන්නේ එය > 50 නම් පමණි. අපගේ ගොනුව මේ ආකාරයෙන් පෙනේ: 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 } ] } ] } දත්ත අපනයනය සහ සැකසුම් අදියරවලදී සහ පරාමිතීන් සකසා ඇති අතර, මෙහිදී ඒවා වෙනස් නොකළ යුතුය. ආකෘතිය කාර්ය වර්ග ද ස්වයංක්රීයව තෝරා ගන්නා ලදී. පුරෝකථනය කරන ලද ප්රතිඵලවල නිවැරදි සබැඳියේ සාමාන්ය ශ්රේණිය මනිනු ලබන අතර, . ඇගයීම් මිනුම මධ්යන්ය අන්යෝන්ය ශ්රේණිය (MRR) ඉහළ MRR වඩා හොඳ කාර්ය සාධනයක් පෙන්නුම් කරයි පුහුණු ප්රගතියෙන් 5% ක් ලෙස සකසා ඇත. උදාහරණයක් ලෙස, අපට යුග 100 ක් තිබේ නම්, සෑම යුග 5 කට වරක් ඇගයීම සිදු කෙරේ. ඇගයීම් සංඛ්යාතය සුසර කරනු ලබන සමහර අධි පරාමිතීන් සමාලෝචනය කරමු: : ඕනෑම ආදර්ශ පුහුණුවක් සඳහා ඉගෙනුම් අනුපාතය වඩාත්ම බලපෑම් සහිත අධි පරාමිතීන්ගෙන් එකකි. අඩු ඉගෙනුම් අනුපාතයක් මන්දගාමී අභිසාරීතාවයකට හේතු විය හැකි නමුත් වඩා හොඳ කාර්ය සාධනයක් ඇති කළ හැකි අතර, ඉහළ ඉගෙනුම් අනුපාතයක් පුහුණුව වේගවත් කළ හැකි නමුත් ප්රශස්ත විසඳුම් මග හැරිය හැක. lr : num-hidden පරාමිතිය යනු R-GCN ස්නායු ජාලයේ එක් එක් ස්ථරයේ, විශේෂයෙන් සැඟවුණු ස්ථරවල සැඟවුණු ඒකක (නියුරෝන) ගණනයි. සැඟවුණු ඒකක විශාල සංඛ්යාවක් දත්ත වලින් සංකීර්ණ රටා සහ සම්බන්ධතා ඉගෙන ගැනීමට ආකෘතියේ ධාරිතාව වැඩි කරයි, එමඟින් පුරෝකථන නිරවද්යතාවය වැඩි දියුණු කළ හැකි නමුත්, දත්ත කට්ටලයට ආකෘතිය ඉතා සංකීර්ණ වුවහොත් අධික ලෙස සවි කිරීමට ද හේතු විය හැක. num-hidden : මෙය ආකෘතිය කොපමණ කාලයක් පුහුණු කර ඇත්ද යන්න නිර්වචනය කරයි. තවත් යුග මඟින් ආකෘතියට දත්ත වලින් වැඩි විස්තර ඉගෙන ගැනීමට ඉඩ සලසයි, නමුත් අධික ලෙස සවි කිරීමේ අවදානම වැඩි කළ හැකිය. num-epochs : කණ්ඩායම් ප්රමාණය මතක භාවිතයට සහ අභිසාරී ස්ථායිතාවයට බලපායි. කුඩා කණ්ඩායම් ප්රමාණය ආකෘතිය දත්ත වලට වඩාත් සංවේදී කළ හැකි අතර, විශාල කණ්ඩායම් ප්රමාණය පුහුණු වේගය වැඩි දියුණු කළ හැකිය. කණ්ඩායම් ප්රමාණය : සෘණ සාම්පල ලබා ගැනීම ආකෘතිය සත්ය සබැඳි සහ ව්යාජ සබැඳි වෙන්කර හඳුනා ගැනීමට ඉගෙන ගන්නා ආකාරයට බලපායි. සෘණ සාම්පල වැඩි සංඛ්යාවක් අනාවැකිවල ගුණාත්මකභාවය වැඩි දියුණු කළ හැකි නමුත් එය පරිගණක පිරිවැය වැඩි කරයි. num-negs : පුහුණුව අතරතුර අහඹු ලෙස සමහර ස්නායු මඟ හැරීමෙන් අධික ලෙස ගැළපීම වැළැක්වීමට අතහැර දැමීම උපකාරී වේ. ඉහළ අතහැර දැමීමේ අනුපාතයක් අධික ලෙස ගැළපීම අඩු කළ හැකි නමුත් එය ආකෘතියට ඉගෙනීම දුෂ්කර කළ හැකිය. අතහැර දැමීම : ආකෘතිය අධික ලෙස සවි කිරීම වැළැක්වීම අරමුණු කරගත් නියාමනය. නියාමනය-coef මෙම එක් එක් පරාමිතිය සඳහා ඔබට පෙරනිමි අගයන්, පරාසය සහ පියවර ප්රමාණය වෙනස් කළ හැකිය. පරාමිතිවල සම්පූර්ණ ලැයිස්තුව සොයාගත හැකිය. මෙතැනින් පරාමිතීන් වෙනස් කිරීමෙන් පසු, S3 හි මුල් ගොනුව ප්රතිස්ථාපනය කරන්න. model-hpo-configuration.json ආදර්ශ පුහුණුව සහ HPO සඳහා IAM භූමිකාවන් මෙම මාර්ගෝපදේශයේ 3 වන කොටසේ විස්තර කර ඇති දත්ත සැකසීම මෙන්ම, ආකෘති පුහුණුව සඳහා IAM භූමිකාවන් 2 ක් අවශ්ය වේ: SageMaker සහ S3 වෙත Neptune ප්රවේශය සපයන Neptune භූමිකාවක් සහ දත්ත සැකසුම් කාර්යය ක්රියාත්මක කරන අතරතුර SageMaker විසින් භාවිතා කරන සහ S3 වෙත ප්රවේශ වීමට ඉඩ සලසන Sagemaker ක්රියාත්මක කිරීමේ භූමිකාවක්. මෙම භූමිකාවන්ට Neptune සහ SageMaker සේවාවන්ට ඒවා භාර ගැනීමට ඉඩ සලසන විශ්වාස ප්රතිපත්ති තිබිය යුතුය: { "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" } ] } භූමිකාවන් නිර්මාණය කර ඔවුන්ගේ විශ්වාස ප්රතිපත්ති යාවත්කාලීන කිරීමෙන් පසුව, අපි ඔවුන්ව නෙප්චූන් පොකුරට එකතු කරමු (නෙප්චූන් -> දත්ත සමුදායන් -> YOUR_NEPTUNE_CLUSTER_ID -> සම්බන්ධතාවය සහ ආරක්ෂාව -> IAM භූමිකාවන් -> භූමිකාව එක් කරන්න). නෙප්චූන් ML API භාවිතා කරමින් ආකෘති පුහුණුව සහ HPO ආරම්භ කිරීම දැන් අපි ආකෘති පුහුණුව ආරම්භ කිරීමට සූදානම්. ඒ සඳහා, පොකුර පිහිටා ඇති VPC ඇතුළත සිට නෙප්චූන් පොකුරේ HTTP API වෙත ඉල්ලීමක් යැවිය යුතුය. අපි EC2 අවස්ථාවක curl භාවිතා කරන්නෙමු: 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" }' අවශ්ය වන්නේ මෙම පරාමිතීන් පමණි: - S3 හි සැකසූ දත්තවල ස්ථානය ලබා ගැනීමට රැකියා හැඳුනුම්පත භාවිතා කරනු ඇත) dataProcessingJobId - කෞතුක වස්තු සඳහා ප්රතිදාන ස්ථානය (ආකෘතියේ බර) trainModelS3Location (මෙම භූමිකාවන් නෙප්චූන් DB පොකුරට එකතු කළ යුතුය) නෙප්චූන් සහ සේජ්මේකර් භූමිකාවන් විවිධ අධි පරාමිති කට්ටල සමඟ ක්රියාත්මක කිරීමට පුහුණු රැකියා ගණන සකසන පරාමිතිය ද ඇත. පෙරනිමියෙන්, එය 2 කි, නමුත් නිවැරදි ආකෘතියක් ලබා ගැනීම සඳහා . maxHPONumberOfTrainingJobs අවම වශයෙන් රැකියා 10 ක් ක්රියාත්මක කිරීමට AWS නිර්දේශ කරයි විකල්ප පරාමිතීන් රාශියක් ද ඇත: උදාහරණයක් ලෙස, අපට සමඟ ආකෘති පුහුණුව සඳහා භාවිතා කරන EC2 නිදර්ශන වර්ගය අතින් තෝරා ගත හැකි අතර සමඟ එහි ගබඩා පරිමාවේ ප්රමාණය සැකසිය හැකිය. පරාමිතිවල සම්පූර්ණ ලැයිස්තුව සොයාගත හැකිය. trainingInstanceType trainingInstanceVolumeSizeInGB මෙතැනින් අප විසින් නිර්මාණය කරන ලද දත්ත සැකසුම් කාර්යයේ හැඳුනුම්පත අඩංගු JSON එකක් සමඟ පොකුර ප්රතිචාර දක්වයි: {"id":"d584f5bc-d90e-4957-be01-523e07a7562e"} මෙම විධානය සමඟින් අපට ආදර්ශ පුහුණු කාර්යයේ තත්ත්වය ලබා ගැනීමට එය භාවිතා කළ හැකිය (පෙර ඉල්ලීමේ දී මෙන් එම භාවිතා කරන්න): neptuneIamRoleArn curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/modeltraining/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole' මේ වගේ දෙයකින් ප්රතිචාර දැක්වූ පසු, { "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" } අපට ගමනාන්ත S3 බාල්දියේ පුහුණු ලොග් සහ කෞතුක වස්තු පරීක්ෂා කළ හැකිය. ආදර්ශ පුහුණු ප්රතිඵල සමාලෝචනය කිරීම ආදර්ශ පුහුණුව අවසන් වී ඇත, එබැවින් අපි AWS කොන්සෝලයේ ප්රතිඵල පරීක්ෂා කරමු: SageMaker -> පුහුණුව -> පුහුණු රැකියා. සරල බව සඳහා, අපි ආකෘති පුහුණුව ආරම්භ කරන විට HPO රැකියා ගණන වෙනස් නොකළ අතර, පෙරනිමි අගය 2 භාවිතා කරන ලදී. රැකියා 2 සමාන්තරව ක්රියාත්මක විය. අවස්ථා වර්ගය ස්වයංක්රීයව තෝරා ගන්නා ලදී: . ml.g4dn.2xlarge පළමු කාර්යය (එහි නමින් '001' ඇති එක) මිනිත්තු 15 කින් අවසන් වූ අතර, දෙවන කාර්යය ('002') ස්වයංක්රීයව නතර විය, මන්ද පුහුණු මිනුම් ටික වේලාවක් වැඩිදියුණු නොවන්නේ නම් SageMaker කලින් නැවැත්වීමට සහාය දක්වයි: මෙම රැකියා වලදී භාවිතා කරන ලද අධි පරාමිති සංසන්දනය කරමු: පරාමිතීන් 3 ක් පමණක් වෙනස් අගයන් ඇත: . දෙවන ආකෘතිය (Job 2 සමඟ පුහුණු කරන ලද) ඉහළ ඉගෙනුම් අනුපාතයක් ඇති අතර සංකීර්ණ රටා ග්රහණය කර ගැනීමට අඩු ධාරිතාවක් තිබුණි (එයට අඩු නියුරෝන තිබූ නිසා), සහ එය අඩු සෘණ සාම්පල මත පුහුණු කරන ලදී. එය වලින් අපට දැකිය හැකි පරිදි සැලකිය යුතු ලෙස අඩු නිරවද්යතාවයකට හේතු විය: num-hidden, num-negs සහ lr වලංගුකරණ මධ්යන්ය ශ්රේණිය (115 vs 23) සහ HITS@K යනු අනාවැකි අතර නිවැරදි සබැඳියේ සාමාන්ය ශ්රේණිගත ස්ථානයයි. . මධ්යන්ය ශ්රේණිය (MR) පහළ MR අගයන් වඩා හොඳ වන්නේ ඒවා නිවැරදි සබැඳිය සාමාන්යයෙන් ඉහළට ආසන්නව ශ්රේණිගත කර ඇති බව පෙන්නුම් කරන බැවිනි HITS@K මිනුම් මඟින් ඉහළම K පුරෝකථනය කරන ලද ප්රතිඵලවල නිවැරදි සබැඳිය දිස්වන වාර ගණන අනුපාතය මනිනු ලැබේ. ආදර්ශ කෞතුක වස්තු පුහුණු කාර්යයන් සිදු කරන විට, පුහුණු සංඛ්යාලේඛන සහ මිනුම් අඩංගු ගොනු සමඟ, ප්රතිදාන S3 බාල්දිය තුළ ආකෘති කෞතුක වස්තු නිර්මාණය වේ: මෙම JSON ගොනු වල ඇති මිනුම් සහ පරාමිතීන් අප කලින් සඳහන් කළ ඒවා වේ. 001 නාමාවලියෙහි පමණක් model.tar.gz ගොනුව සමඟ 'ප්රතිදාන' උප නාමාවලිය අඩංගු වේ, මන්ද එය සම්පූර්ණ කරන ලද එකම HPO කාර්යය වන බැවිනි. සබැඳි පුරෝකථනය සඳහා වන කෞතුක වස්තු වල DGL ප්රස්ථාර දත්ත ද අඩංගු වේ, මන්ද පැහැදිලි කර ඇති පරිදි සත්ය අනාවැකි කිරීමට අවශ්ය වේ. මෙහි ඒ පිළිබඳව මෙම ලිපි මාලාවේ ඊළඟ සහ අවසාන සටහනේදී සාකච්ඡා කෙරේ. මෙම ගොනු අනුමාන අන්ත ලක්ෂ්යයක් නිර්මාණය කිරීමට සහ සත්ය සබැඳි අනාවැකි ජනනය කිරීමට භාවිතා කරනු ඇත.