මෙම සටහනේදී අපි Twitch දත්ත කට්ටලය සමඟ සබැඳි පුරෝකථනය මත වැඩ කිරීම දිගටම කරගෙන යන්නෙමු. අපි Graph Neural Networks (GNNs) මත පදනම් වූ ML ආකෘතිය පුහුණු කිරීම සහ එහි අධි පරාමිතීන් ප්රශස්ත කිරීම කෙරෙහි අවධානය යොමු කරන්නෙමු. මේ වන විට අපි දැනටමත් ග්රැෆ් දත්ත සකසා ආකෘති පුහුණුව සඳහා සූදානම් කර ඇත්තෙමු. පෙර පියවර 3 වන කොටස - දත්ත සැකසීම, 2 වන කොටස - DB වෙතින් දත්ත අපනයනය කිරීම සහ 1 වන කොටස - DB වෙත දත්ත පූරණය කිරීම යටතේ විස්තර කර ඇත.
1 කොටස මෙතැනින් කියවන්න; 2 කොටස මෙතැනින් ; සහ 3 කොටස මෙතැනින් කියවන්න.
අපි දේශීය සබැඳි අනාවැකි පළ කිරීමේදී කළාක් මෙන් ප්රස්ථාර පරිවර්තන ස්නායු ජාල භාවිතා කරන්නෙමු, සහ නෙප්චූන් ML එකම DGL.ai රාමුව භාවිතා කළත්, යටින් පවතින ආකෘතිය ටිකක් වෙනස් ය. නෙප්චූන් ML දැනුම ප්රස්ථාර (තනි නෝඩ් වර්ගයක් සහ තනි දාර වර්ගයක් සහිත සමජාතීය ප්රස්ථාර) සහ බහු නෝඩ් සහ දාර වර්ග ඇති විෂමජාතීය ප්රස්ථාර යන දෙකටම සහය දක්වයි. අප සමඟ වැඩ කරන දත්ත කට්ටලයට තනි නෝඩ් වර්ගයක් (පරිශීලක) සහ තනි දාර වර්ගයක් (මිත්රත්වය) ඇත. ප්රස්ථාර පරිවර්තන ජාලයක් (GCN) හෝ ප්රස්ථාර සාම්පල සහ එකතු කිරීමේ (GraphSAGE) ආකෘතියක් ද මෙම අවස්ථාවේදී ක්රියා කළත්, මෙහි පැහැදිලි කර ඇති පරිදි, නෝඩ් ගුණාංග සහිත දත්ත කට්ටල සඳහා නෙප්චූන් ML ස්වයංක්රීයව සම්බන්ධතා ප්රස්ථාර පරිවර්තන ජාලයක් (R-GCN) ආකෘතියක් තෝරා ගනී. සාමාන්යයෙන්, බහු නෝඩ් සහ දාර වර්ග හැසිරවීමට අවශ්ය පරාමිතීන් ගණන වැඩි වීම නිසා පුහුණු වීමට R-GCN වලට වැඩි ගණනය කිරීමක් අවශ්ය වේ.
දත්ත සැකසුම් අදියරේදී (අපි පෙර TODO LINK සටහනේ විස්තර කළ පරිදි), Neptune ML විසින් model-hpo-configuration.json
නමින් ගොනුවක් නිර්මාණය කරන ලදී. එහි ආකෘති වර්ගය (R-GCN), කාර්ය වර්ගය (සබැඳි පුරෝකථනය), ඇගයීම් මෙට්රික් සහ සංඛ්යාතය සහ පරාමිති ලැයිස්තු 4 ක් අඩංගු වේ: පුහුණුව අතරතුර වෙනස් නොකරන ස්ථාවර පරාමිතීන් සහිත එකක් සහ පරාමිති ලැයිස්තු 3 ක්, පරාස සහ පෙරනිමි අගයන් සමඟ ප්රශස්තිකරණය කළ යුතු පරාමිති ලැයිස්තු 3 ක් අඩංගු වේ. පරාමිතීන් වැදගත්කම අනුව කාණ්ඩගත කර ඇත. එක් එක් කණ්ඩායම් වලින් පරාමිතීන් සුසර කර තිබේද යන්න තීරණය කරනු ලබන්නේ ලබා ගත හැකි සුසර කිරීමේ රැකියා ගණන මත ය: 1 වන ස්ථර පරාමිතීන් සැමවිටම සුසර කරනු ලැබේ, 2 වන ස්ථර පරාමිතීන් සුසර කරනු ලබන්නේ ලබා ගත හැකි රැකියා ගණන > 10 නම්, සහ 3 වන ස්ථර පරාමිතීන් සුසර කරනු ලබන්නේ එය > 50 නම් පමණි. අපගේ 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 : num-hidden පරාමිතිය යනු R-GCN ස්නායු ජාලයේ එක් එක් ස්ථරයේ, විශේෂයෙන් සැඟවුණු ස්ථරවල සැඟවුණු ඒකක (නියුරෝන) ගණනයි. සැඟවුණු ඒකක විශාල සංඛ්යාවක් දත්ත වලින් සංකීර්ණ රටා සහ සම්බන්ධතා ඉගෙන ගැනීමට ආකෘතියේ ධාරිතාව වැඩි කරයි, එමඟින් පුරෝකථන නිරවද්යතාවය වැඩි දියුණු කළ හැකි නමුත්, දත්ත කට්ටලයට ආකෘතිය ඉතා සංකීර්ණ වුවහොත් අධික ලෙස සවි කිරීමට ද හේතු විය හැක.
num-epochs : මෙය ආකෘතිය කොපමණ කාලයක් පුහුණු කර ඇත්ද යන්න නිර්වචනය කරයි. තවත් යුග මඟින් ආකෘතියට දත්ත වලින් වැඩි විස්තර ඉගෙන ගැනීමට ඉඩ සලසයි, නමුත් අධික ලෙස සවි කිරීමේ අවදානම වැඩි කළ හැකිය.
කණ්ඩායම් ප්රමාණය : කණ්ඩායම් ප්රමාණය මතක භාවිතයට සහ අභිසාරී ස්ථායිතාවයට බලපායි. කුඩා කණ්ඩායම් ප්රමාණය ආකෘතිය දත්ත වලට වඩාත් සංවේදී කළ හැකි අතර, විශාල කණ්ඩායම් ප්රමාණය පුහුණු වේගය වැඩි දියුණු කළ හැකිය.
num-negs : සෘණ සාම්පල ලබා ගැනීම ආකෘතිය සත්ය සබැඳි සහ ව්යාජ සබැඳි වෙන්කර හඳුනා ගැනීමට ඉගෙන ගන්නා ආකාරයට බලපායි. සෘණ සාම්පල වැඩි සංඛ්යාවක් අනාවැකිවල ගුණාත්මකභාවය වැඩි දියුණු කළ හැකි නමුත් එය පරිගණක පිරිවැය වැඩි කරයි.
අතහැර දැමීම : පුහුණුව අතරතුර අහඹු ලෙස සමහර ස්නායු මඟ හැරීමෙන් අධික ලෙස ගැළපීම වැළැක්වීමට අතහැර දැමීම උපකාරී වේ. ඉහළ අතහැර දැමීමේ අනුපාතයක් අධික ලෙස ගැළපීම අඩු කළ හැකි නමුත් එය ආකෘතියට ඉගෙනීම දුෂ්කර කළ හැකිය.
නියාමනය-coef : ආකෘතිය අධික ලෙස සවි කිරීම වැළැක්වීම අරමුණු කරගත් නියාමනය.
මෙම එක් එක් පරාමිතිය සඳහා ඔබට පෙරනිමි අගයන්, පරාසය සහ පියවර ප්රමාණය වෙනස් කළ හැකිය. පරාමිතිවල සම්පූර්ණ ලැයිස්තුව මෙතැනින් සොයාගත හැකිය.
පරාමිතීන් වෙනස් කිරීමෙන් පසු, S3 හි මුල් model-hpo-configuration.json
ගොනුව ප්රතිස්ථාපනය කරන්න.
මෙම මාර්ගෝපදේශයේ 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 භූමිකාවන් -> භූමිකාව එක් කරන්න).
දැන් අපි ආකෘති පුහුණුව ආරම්භ කිරීමට සූදානම්. ඒ සඳහා, පොකුර පිහිටා ඇති 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" }'
අවශ්ය වන්නේ මෙම පරාමිතීන් පමණි:
විවිධ අධි පරාමිති කට්ටල සමඟ ක්රියාත්මක කිරීමට පුහුණු රැකියා ගණන සකසන maxHPONumberOfTrainingJobs පරාමිතිය ද ඇත. පෙරනිමියෙන්, එය 2 කි, නමුත් නිවැරදි ආකෘතියක් ලබා ගැනීම සඳහා අවම වශයෙන් රැකියා 10 ක් ක්රියාත්මක කිරීමට AWS නිර්දේශ කරයි .
විකල්ප පරාමිතීන් රාශියක් ද ඇත: උදාහරණයක් ලෙස, අපට trainingInstanceType සමඟ ආකෘති පුහුණුව සඳහා භාවිතා කරන EC2 නිදර්ශන වර්ගය අතින් තෝරා ගත හැකි අතර 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 ක් පමණක් වෙනස් අගයන් ඇත: num-hidden, num-negs සහ lr . දෙවන ආකෘතිය (Job 2 සමඟ පුහුණු කරන ලද) ඉහළ ඉගෙනුම් අනුපාතයක් ඇති අතර සංකීර්ණ රටා ග්රහණය කර ගැනීමට අඩු ධාරිතාවක් තිබුණි (එයට අඩු නියුරෝන තිබූ නිසා), සහ එය අඩු සෘණ සාම්පල මත පුහුණු කරන ලදී. එය වලංගුකරණ මධ්යන්ය ශ්රේණිය (115 vs 23) සහ HITS@K වලින් අපට දැකිය හැකි පරිදි සැලකිය යුතු ලෙස අඩු නිරවද්යතාවයකට හේතු විය:
මධ්යන්ය ශ්රේණිය (MR) යනු අනාවැකි අතර නිවැරදි සබැඳියේ සාමාන්ය ශ්රේණිගත ස්ථානයයි. පහළ MR අගයන් වඩා හොඳ වන්නේ ඒවා නිවැරදි සබැඳිය සාමාන්යයෙන් ඉහළට ආසන්නව ශ්රේණිගත කර ඇති බව පෙන්නුම් කරන බැවිනි .
HITS@K මිනුම් මඟින් ඉහළම K පුරෝකථනය කරන ලද ප්රතිඵලවල නිවැරදි සබැඳිය දිස්වන වාර ගණන අනුපාතය මනිනු ලැබේ.
පුහුණු කාර්යයන් සිදු කරන විට, පුහුණු සංඛ්යාලේඛන සහ මිනුම් අඩංගු ගොනු සමඟ, ප්රතිදාන S3 බාල්දිය තුළ ආකෘති කෞතුක වස්තු නිර්මාණය වේ:
මෙම JSON ගොනු වල ඇති මිනුම් සහ පරාමිතීන් අප කලින් සඳහන් කළ ඒවා වේ. 001 නාමාවලියෙහි පමණක් model.tar.gz ගොනුව සමඟ 'ප්රතිදාන' උප නාමාවලිය අඩංගු වේ, මන්ද එය සම්පූර්ණ කරන ලද එකම HPO කාර්යය වන බැවිනි. සබැඳි පුරෝකථනය සඳහා වන කෞතුක වස්තු වල DGL ප්රස්ථාර දත්ත ද අඩංගු වේ, මන්ද මෙහි පැහැදිලි කර ඇති පරිදි සත්ය අනාවැකි කිරීමට අවශ්ය වේ.
මෙම ගොනු අනුමාන අන්ත ලක්ෂ්යයක් නිර්මාණය කිරීමට සහ සත්ය සබැඳි අනාවැකි ජනනය කිරීමට භාවිතා කරනු ඇත. ඒ පිළිබඳව මෙම ලිපි මාලාවේ ඊළඟ සහ අවසාන සටහනේදී සාකච්ඡා කෙරේ.