ამ პოსტში ჩვენ გავაგრძელებთ მუშაობას ბმულის პროგნოზირებაზე Twitch მონაცემთა ნაკრებით.
ჩვენ უკვე გვაქვს ნეპტუნიდან ექსპორტირებული გრაფიკის მონაცემები ნეპტუნი-ექსპორტის უტილიტის და 'neptune_ml' პროფილის გამოყენებით. წინა ნაბიჯები აღწერილია ამ სახელმძღვანელოს მე-2 და 1 ნაწილებში.
წაიკითხეთ ნაწილი 1 აქ და ნაწილი 2 აქ.
მონაცემები ამჟამად ინახება S3-ში და ასე გამოიყურება:
CSV წვეროები (nodes/user.consolidated.csv):
~id,~label,days,mature,views,partner "6980","user",771,true,2935,false "547","user",2602,true,18099,false "2173","user",1973,false,3939,false ...
კიდეები CSV (edges/user-follows-user.consolidated.csv):
~id,~label,~from,~to,~fromLabels,~toLabels "3","follows","6194","2507","user","user" "19","follows","3","3739","user","user" "35","follows","6","2126","user","user" ...
ექსპორტის პროგრამამ ასევე შექმნა ეს კონფიგურაციის ფაილი ჩვენთვის:
training-data-configuration.json:
{ "version" : "v2.0", "query_engine" : "gremlin", "graph" : { "nodes" : [ { "file_name" : "nodes/user.consolidated.csv", "separator" : ",", "node" : [ "~id", "user" ], "features" : [ { "feature" : [ "days", "days", "numerical" ], "norm" : "min-max", "imputer" : "median" }, { "feature" : [ "mature", "mature", "auto" ] }, { "feature" : [ "views", "views", "numerical" ], "norm" : "min-max", "imputer" : "median" }, { "feature" : [ "partner", "partner", "auto" ] } ] } ], "edges" : [ { "file_name" : "edges/%28user%29-follows-%28user%29.consolidated.csv", "separator" : ",", "source" : [ "~from", "user" ], "relation" : [ "", "follows" ], "dest" : [ "~to", "user" ], "features" : [ ] } ] }, "warnings" : [ ] }
ჩვენი ამჟამინდელი მიზანია შევასრულოთ მონაცემთა დამუშავება, რაც გულისხმობს ჩვენს ხელთ არსებული მონაცემების კონვერტაციას ფორმატში, რომელიც Deep Graph Library-ს შეუძლია გამოიყენოს მოდელის ტრენინგისთვის. (მხოლოდ DGL-ით ბმულის პროგნოზირების მიმოხილვისთვის იხილეთ ეს პოსტი ). ეს მოიცავს რიცხვითი მახასიათებლების ნორმალიზებას, კატეგორიული მახასიათებლების დაშიფვრას, კვანძების წყვილების სიების შექმნას არსებული და არარსებული ბმულებით, რათა ჩართოთ ზედამხედველობითი სწავლება ჩვენი ბმულის პროგნოზირების ამოცანებისთვის, და მონაცემების დაყოფა ტრენინგზე, ვალიდაციაზე და ტესტირების ნაკრებებად.
როგორც ხედავთ training-data-configuration.json ფაილში, კვანძის ფუნქციები „დღეები“ (ანგარიშის ასაკი) და „ნახვები“ იქნა აღიარებული, როგორც რიცხვითი და შემოთავაზებული იყო მინ-მაქს ნორმალიზება. მინ-მაქს ნორმალიზება ახდენს თვითნებური მნიშვნელობების მასშტაბებს [0; 1] ასე: x_normalized = (x - x_min) / (x_max - x_min). და imputer = მედიანა ნიშნავს, რომ გამოტოვებული მნიშვნელობები შეივსება მედიანური მნიშვნელობით.
კვანძის ფუნქციები „სექსუალური“ და „პარტნიორი“ მონიშნულია, როგორც „ავტო“, და რადგან ეს სვეტები შეიცავს მხოლოდ ლოგიკურ მნიშვნელობებს, ჩვენ ველით, რომ ისინი იქნება აღიარებული, როგორც კატეგორიული მახასიათებლები და დაშიფრული იქნება მონაცემთა დამუშავების ეტაპზე. Train-validation-test split არ შედის ამ ავტომატურად გენერირებულ ფაილში და ნაგულისხმევი გაყოფა ბმულის პროგნოზირების ამოცანისთვის არის 0.9, 0.05, 0.05.
თქვენ შეგიძლიათ დაარეგულიროთ ნორმალიზაციისა და კოდირების პარამეტრები და შეგიძლიათ აირჩიოთ მორგებული ტრენინგის დადასტურების ტესტის გაყოფა. თუ ამას აირჩევთ, უბრალოდ შეცვალეთ ორიგინალური training-data-configuration.json ფაილი S3-ში განახლებული ვერსიით. ამ JSON-ში მხარდაჭერილი ველების სრული სია ხელმისაწვდომია აქ . ამ პოსტში ჩვენ ამ ფაილს უცვლელად დავტოვებთ.
ისევე, როგორც მონაცემთა ჩატვირთვის ეტაპზე (რომელიც აღწერილია ამ სახელმძღვანელოს 1-ლ ნაწილში), ჩვენ უნდა შევქმნათ IAM როლები, რომლებიც საშუალებას მისცემს წვდომას სერვისებზე, რომლებსაც ჩვენ ვიყენებთ და ასევე უნდა დავამატოთ ეს როლები ჩვენს ნეპტუნის კლასტერში. ჩვენ გვჭირდება ორი როლი მონაცემთა დამუშავების ეტაპისთვის. პირველი არის ნეპტუნის როლი, რომელიც უზრუნველყოფს ნეპტუნის წვდომას SageMaker-სა და S3-ზე. მეორე არის SageMaker-ის შესრულების როლი, რომელსაც იყენებს SageMaker მონაცემთა დამუშავების ამოცანის გაშვებისას და საშუალებას აძლევს S3-ზე წვდომას.
ამ როლებს უნდა ჰქონდეთ ნდობის პოლიტიკა, რომელიც საშუალებას აძლევს 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 როლები -> როლის დამატება).
ახლა, როდესაც ჩვენ განვაახლეთ training-data-configuration.json ფაილი და დავამატეთ IAM როლები ნეპტუნის კლასტერში, ჩვენ მზად ვართ დავიწყოთ მონაცემთა დამუშავების სამუშაო. ამისათვის ჩვენ უნდა გავუგზავნოთ მოთხოვნა ნეპტუნის კლასტერის HTTP API-ს VPC-ის შიგნიდან, სადაც კლასტერი მდებარეობს. ჩვენ გამოვიყენებთ და EC2 მაგალითს ამისათვის.
ჩვენ გამოვიყენებთ curl-ს მონაცემთა დამუშავების სამუშაოს დასაწყებად:
curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/dataprocessing \ -H 'Content-Type: application/json' \ -d '{ "inputDataS3Location" : "s3://SOURCE_BUCKET/neptune-export/...", "processedDataS3Location" : "s3://OUTPUT_BUCKET/neptune-export-processed/...", "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLDataProcessingNeptuneRole", "sagemakerIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLDataProcessingSagemakerRole" }'
საჭიროა მხოლოდ ეს 4 პარამეტრი: შეყვანის მონაცემები S3 მდებარეობა, დამუშავებული მონაცემები S3 მდებარეობა, ნეპტუნის როლი, Sagemaker როლი. არსებობს მრავალი არჩევითი პარამეტრი: მაგალითად, ჩვენ შეგვიძლია ხელით ავირჩიოთ EC2 ინსტანციის ტიპი, რომელიც შეიქმნება მონაცემთა დამუშავების ამოცანისთვის processingInstanceType
ით და დავაყენოთ მისი შენახვის მოცულობის ზომა processingInstanceVolumeSizeInGB
ით. პარამეტრების სრული სია შეგიძლიათ იხილოთ აქ .
კლასტერი პასუხობს JSON-ით, რომელიც შეიცავს მონაცემთა დამუშავების სამუშაოს ID-ს, რომელიც ახლახან შევქმენით:
{"id":"d584f5bc-d90e-4957-be01-523e07a7562e"}
ჩვენ შეგვიძლია გამოვიყენოთ იგი ამ ბრძანებით სამუშაოს სტატუსის მისაღებად (გამოიყენეთ იგივე neptuneIamRoleArn, როგორც წინა მოთხოვნაში):
curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/dataprocessing/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLDataProcessingNeptuneRole'
როგორც კი ის პასუხობს მსგავსი რამით,
{ "processingJob": {...}, "id":"d584f5bc-d90e-4957-be01-523e07a7562e", "status":"Completed" }
ჩვენ შეგვიძლია შევამოწმოთ გამომავალი. ეს ფაილები შეიქმნა დანიშნულების S3 თაიგულში:
graph.* ფაილი შეიცავს გრაფიკის დამუშავებულ მონაცემებს.
features.json ფაილი შეიცავს კვანძისა და კიდეების ფუნქციების ჩამონათვალს:
{ "nodeProperties": { "user": [ "days", "mature", "views", "partner" ] }, "edgeProperties": {} }
დეტალები იმის შესახებ, თუ როგორ დამუშავდა მონაცემები და როგორ იყო დაშიფრული ფუნქციები, შეგიძლიათ იხილოთ updated_training_config.json ფაილში:
{ "graph": { "nodes": [ { "file_name": "nodes/user.consolidated.csv", "separator": ",", "node": [ "~id", "user" ], "features": [ { "feature": [ "days", "days", "numerical" ], "norm": "min-max", "imputer": "median" }, { "feature": [ "mature", "mature", "category" ] }, { "feature": [ "views", "views", "numerical" ], "norm": "min-max", "imputer": "median" }, { "feature": [ "partner", "partner", "category" ] } ] } ], "edges": [ { "file_name": "edges/%28user%29-follows-%28user%29.consolidated.csv", "separator": ",", "source": [ "~from", "user" ], "relation": [ "", "follows" ], "dest": [ "~to", "user" ] } ] } }
ჩვენ ვხედავთ, რომ სვეტები 'mature' და 'partner' ლოგიკური მნიშვნელობებით, რომლებიც თავდაპირველად იყო მონიშნული როგორც 'auto' train-data-configuration.json ფაილში, დაშიფრული იყო, როგორც კატეგორიის მახასიათებლები.
'train_instance_recommendation.json' ფაილი შეიცავს SageMaker ინსტანციის ტიპს და შენახვის ზომას, რომელიც რეკომენდირებულია მოდელის ტრენინგისთვის:
{ "instance": "ml.g4dn.2xlarge", "cpu_instance": "ml.m5.2xlarge", "disk_size": 14126462, "mem_size": 4349122131.111111 }
model-hpo-configuration.json ფაილი შეიცავს მოდელის ტიპს, მის შეფასებისთვის გამოყენებულ მეტრიკას, შეფასების სიხშირეს და ჰიპერპარამეტრებს.
ამით დასრულდა მონაცემთა დამუშავების პროცესის ეტაპი, რადგან ჩვენ მზად ვართ დავიწყოთ ML მოდელის ტრენინგი. ეს იქნება განხილული ამ სახელმძღვანელოს შემდეგ ნაწილში.