34-წუთიანი სამუშაო სესია იმაზე, თუ რა ხდება მას შემდეგ, რაც მოდელი notebook-ში მუშაობს — პაიპლაინები, ექსპერიმენტების ტრეკინგი, სერვინგი, ნიშნების საცავები, დრიფტზე მონიტორინგი და ინსტრუმენტები, რომლებიც ამ ყველაფერს ერთად კრავს. MLOps სინამდვილეში არის CI/CD პლუს მონაცემებისა და მოდელის მონიტორინგი.
მოდელის გაწვრთნა, რომელიც თქვენს ლეპტოპზე კარგ შედეგს იძლევა, მარტივი ნაწილია. რთული ის ყველაფერია, რაც მის გარშემოა: ახალი მონაცემების შემოტანა, თვეების შემდეგ იმავე შედეგის გამეორება, პროგნოზების საიმედოდ მიწოდება და იმის შემჩნევა, როცა მოდელი ჩუმად ძველდება. ეს დეკი სწორედ იმ დანარჩენ 90%-ზეა — ინჟინერიაზე, რომელიც მოდელს პროდაქშენში სასარგებლოდ ინარჩუნებს. თავად მოდელებისთვის იხილეთ მანქანური სწავლების საფუძვლები და ღრმა სწავლება.
MLOps არის ხიდი ამ ნაპრალზე — მოსაწყენი სამზარეულო, რომელიც ერთჯერად შედეგს საიმედო სერვისად აქცევს.
რეალურ ML პროდუქტში ძალისხმევისა მოდის ყველაფერზე, გარდა მოდელის კოდისა.
რამ იცვლება — კოდი, მონაცემები და ნასწავლი წონები — ანუ სამი რამ, რომელსაც ვერსია სჭირდება.
შეცდომის შეტყობინება, როცა მოდელი ჩუმად უარესდება. გაიგებთ მხოლოდ მაშინ, თუ აკვირდებით.
პროგრამული უზრუნველყოფა გამოდის და მეტწილად დასრულებულია. მოდელი გამოდის, ძველდება და ხელახლა უნდა გაიწვრთნას ახალ მონაცემებზე — ისევ და ისევ. MLOps-ის საქმეა, ეს ციკლი აქციოს ავტომატიზებულ, გამეორებად პაიპლაინებად იმის ნაცვლად, რომ ადამიანი ხელით უშვებდეს notebook-ის უჯრებს.
ციკლი თავის თავზე იკვრება: სწორედ პროდაქშენში მონიტორინგი იწვევს წვრთნის შემდეგ რაუნდს.
// a pipeline = small, ordered, re-runnable steps const ingest = step((): DataFrame => { /* ... */ }); const train = step((df: DataFrame): Model => { /* ... */ }); const evaluate = step((m: Model): Metrics => { /* ... */ }); // the orchestrator runs the DAG on a schedule const pipeline = sequence(ingest, train, evaluate, deploy);
იგივე ლოგიკა, რაც notebook-ში — ოღონდ ერთმანეთთან დაკავშირებული, სატესტო ნაბიჯების სახით, რომლებსაც ორკესტრატორი ზედამხედველობის გარეშე უშვებს.
მონაცემთა მეცნიერები ასობით ექსპერიმენტს უშვებენ. სისტემის გარეშე „ის კარგი“ მოდელის ფაილია ვიღაცის ლეპტოპზე და აღარავის ახსოვს, რომელმა პარამეტრებმა მოგვცა ის. ამას ორი ინსტრუმენტი წყვეტს: ექსპერიმენტების ტრეკინგი ძიებისთვის და მოდელების რეესტრი გამარჯვებულებისთვის.
Staging ან Production, და გამჭვირვალე კვალით იმ გაშვებამდე, რომელმაც ის შექმნა.აღრიცხეთ ყოველი გაშვება; რეესტრში დააწინაურეთ მხოლოდ გამარჯვებული — ვერსიითა და სტადიით.
რეპროდუცირებადობას სჭირდება კოდი (git), მონაცემები (სნეპშოტი ან ჰეში, მაგალითად DVC-ით ან ცხრილის ვერსიით) და მოდელი + პარამეტრები (აღრიცხული გაშვება). ერთი გამოგრჩეთ და „გუშინ ხომ მუშაობდა“ დაბრუნდება.
დარეგისტრირებული მოდელი უკან თავის გაშვებაზე მიუთითებს, ის კი — კოდის კომიტსა და მონაცემთა ნაკრების ვერსიაზე. როცა პროგნოზი ეჭვქვეშ დგება, შეგიძლიათ მთელი ჯაჭვი აღადგინოთ.
MLflow (ღია კოდის, ჩვეული არჩევანი), Weights & Biases, Neptune და Comet ტრეკინგისთვის; MLflow, SageMaker და Vertex AI — სამივე რეესტრსაც გთავაზობთ.
ინფერენსი არის გაწვრთნილი მოდელის გამოყენება ახალ მონაცემებზე პროგნოზების გასაკეთებლად. მთავარი არქიტექტურული არჩევანია, როდის უშვებთ მას: წინასწარ, პარტიებად, თუ მოთხოვნისამებრ, რეალურ დროში. სწორედ ეს ერთი გადაწყვეტილება განსაზღვრავს თქვენს შეყოვნების ბიუჯეტს, ღირებულებასა და ინფრასტრუქტურას.
app.post("/predict", (req, res) => { const x = featurize(req.body); // MUST match training const score = model.predict(x); // warm, in-memory res.json({ score: Number(score) }); // target: p99 < 50ms · autoscale on RPS });
შუალედური ვარიანტი: მოდელი კითხულობს მოვლენების ნაკადს (Kafka, Kinesis, Pub/Sub) და პროგნოზებს გასცემს მაშინვე, როგორც კი მოვლენა შემოვა — გამოიყენება, მაგალითად, რეალურ დროში ანომალიების აღმოსაჩენად ან კლიკების ნაკადის გასამდიდრებლად. ეს იგივე ონლაინ ინფერენსია, ოღონდ სინქრონული HTTP გამოძახებების ნაცვლად მოვლენებით მართული.
პარტიული რეჟიმი შეყოვნებას წინასწარი გამოთვლით მალავს; ონლაინი კი შეყოვნებას თითო მოთხოვნაზე იხდის, რომ პასუხი ახალი იყოს.
პროდაქშენში ML-ის ყველაზე გავრცელებული ბაგი მოდელი კი არაა — ის არის, რომ სერვინგის დროს მიწოდებული ნიშნები არ ემთხვევა იმას, რაც მოდელმა წვრთნის დროს ნახა. ეს არის წვრთნა/სერვინგის გადახრა და ნიშნების საცავი დიდწილად სწორედ მის თავიდან ასაცილებლად არსებობს.
„საშუალო ხარჯის“ ორი იმპლემენტაცია ერთმანეთს სცილდება — მოდელი უარესდება და ვერცერთი ტესტი ვერ იჭერს.
ერთი აღწერა კვებავს ორივე საცავს, ასე რომ წვრთნა და სერვინგი ნიშანს იდენტურად ითვლიან.
ნიშნების საცავი წვრთნასა და სერვინგს შორის საერთო ხერხემალია.
მოდელი, რომელიც გაშვებისას 91%-იან სიზუსტეს იძლეოდა, სამუდამოდ 91%-იანი არ დარჩება. სამყარო, რომლისგანაც ისწავლა, მუდმივად იცვლება. პროდაქშენის მონიტორინგი სწორედ ისაა, რითაც ამ დაძველებას თქვენს მომხმარებლებზე (ან თქვენს შემოსავალზე) ადრე იჭერთ. ის პირდაპირ ეყრდნობა კლასიკურ დაკვირვებადობასა & მონიტორინგს — იგივე დაშბორდები და გაფრთხილებები, პლუს ორი ML-სპეციფიკური სიგნალი.
პირველი შრე ჩვეულებრივი სერვისის მონიტორინგია: მოთხოვნების სიხშირე, p99 შეყოვნება, შეცდომების წილი, CPU/GPU და მეხსიერება. მოდელი, რომელიც ტაიმაუტში ვარდება, გატეხილია მისი სიზუსტის მიუხედავად. ეს ზუსტად ის დაკვირვებადობაა, რომელსაც ნებისმიერ სერვისს დაადებდით.
ჯერ დააკვირდით შემომავალ ნიშნებს — გატეხილი სქემები, null-ები და დიაპაზონს გარეთ დარჩენილი მნიშვნელობები: გადარქმეული სვეტი, რომელიც ჩუმად ნულებს კვებავს, ნამდვილ დრიფტზე ხშირია. შემდეგ თვალი ადევნეთ შესასვლელების განაწილებას საწვრთნელ ეტალონთან შედარებით. სტანდარტული საზომებია Population Stability Index (PSI), Kolmogorov–Smirnov ტესტი და KL / Jensen–Shannon დივერგენცია.
// Population Stability Index per feature const psi = populationStabilityIndex({ ref: trainDist, cur: liveDist }); if (psi > 0.2) { // 0.1–0.2 minor · >0.2 major shift alert("data drift"); triggerRetrain(); }
სინამდვილეში გაინტერესებთ სიზუსტე ცოცხალ მონაცემებზე. ხრიკი ისაა, რომ ჭეშმარიტი ლეიბლები გვიან მოდის (გავიდა თუ არა სესხი დეფოლტში? წავიდა თუ არა მომხმარებელი?), ამიტომ ხარისხს ხშირად მაშინვე ვერ შეაფასებთ. სანამ ლეიბლები მოვა, დააკვირდით ირიბ სიგნალებს — თავად პროგნოზების განაწილებას, ნდობის ქულებს და ბიზნეს-KPI-ებს — შემდეგ კი, ლეიბლების მოსვლისთანავე, გამოთვალეთ ნამდვილი მეტრიკები.
სამი გზა იმის გადასაწყვეტად, რომ გადაწვრთნის დროა: განრიგით (მაგალითად, ყოველკვირეულად — მარტივი და პროგნოზირებადი), შედეგებზე დაყრდნობით (მეტრიკა ზღვარს ქვემოთ ეცემა — იდეალურია, მაგრამ დროულ ლეიბლებს საჭიროებს) და დრიფტზე დაყრდნობით (PSI/KS ლიმიტს კვეთს — სასარგებლო ადრეული გაფრთხილება). გუნდების უმეტესობა განრიგით იწყებს და გამოცდილებასთან ერთად ამატებს დრიფტის ტრიგერებს. რომელიც არ უნდა ამუშავდეს, მან იგივე ავტომატიზებული პაიპლაინი უნდა გაუშვას, რაზეც მე-2 ნაწილში იყო საუბარი.
როცა ცოცხალი შესასვლელების განაწილება საწვრთნელ ეტალონს სცილდება, მოდელი პროგნოზს აკეთებს მონაცემებზე, რომლებიც ფაქტობრივად არასდროს უნახავს.
ინსტრუმენტების სია გრძელია, მაგრამ ისინი იმ ციკლში ჯდება, რომელიც უკვე იცით. ქვემოთ: როგორ ედრება ერთმანეთს ოთხი დიდი პლატფორმა და შემდეგ გამაერთიანებელი ჩარჩო — MLOps = CI/CD + მონაცემებისა და მოდელის მონიტორინგი.
მოდელი მხოლოდ მაშინ ეშვება, თუ ზღვარზე მოქმედ პროდაქშენ-მოდელს სჯობს — ბილდი, რომელიც ტესტებს ვერ გადის, რელიზში არ ხვდება.
ღია კოდის ტრეკინგი, მოდელების რეესტრი და შეფუთვა — ფრეიმვორკისა და ღრუბლისგან დამოუკიდებელი.
ღია კოდის პაიპლაინები, წვრთნის ოპერატორები და სერვინგი (KServe), რომლებიც თქვენსავე Kubernetes კლასტერზე მუშაობს.
წვრთნა, ჰოსტირებული ენდპოინტები, პაიპლაინები, ნიშნების საცავი, რეესტრი და მოდელის მონიტორი — ყველა მართული სერვისი.
GCP-ის ანალოგი — პაიპლაინები (Kubeflow Pipelines-ზე აგებული), პროგნოზირება, ნიშნების საცავი, რეესტრი და მოდელის მონიტორინგი; მჭიდრო ინტეგრაცია BigQuery-სთან.
ხუთი სწრაფი კითხვა ML-ის სასიცოცხლო ციკლზე, სერვინგზე, გადახრაზე, დრიფტსა და ინსტრუმენტებზე — მყისიერი უკუკავშირი, ავტორიზაციის გარეშე.
ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში