მჯერა, რომ მანქანური სწავლება (ML) პროგრამული უზრუნველყოფის შექმნის ახალი გზაა და ვიცი, რომ ბევრ Swift დეველოპერს სურს ხელოვნური ინტელექტის (AI) ფუნქციების ინტეგრირება თავიანთ აპლიკაციებში. ML ეკოსისტემა მნიშვნელოვნად მომწიფდა, ათასობით მოდელით, რომლებიც პრობლემების ფართო სპექტრს აგვარებს. უფრო მეტიც, ბოლო დროს გამოჩნდა დიდი ენობრივი მოდელები (LLM), როგორც თითქმის ზოგადი დანიშნულების ხელსაწყოები – მათი ადაპტირება შესაძლებელია ახალ სფეროებზე, მანამ სანამ შეგვიძლია ჩვენი ამოცანის მოდელირება ტექსტთან ან ტექსტის მსგავს მონაცემებთან სამუშაოდ. ჩვენ ვართ მომსწრენი გამოთვლითი ტექნოლოგიების ისტორიაში გარდამტეხი მომენტის, როდესაც LLM-ები სცდება კვლევითი ლაბორატორიების ფარგლებს და ხდება საყოველთაო გამომთვლელი ინსტრუმენტი. თუმცა, LLM მოდელის, მაგალითად Llama-ს, აპლიკაციაში გამოყენება მოიცავს რამდენიმე ამოცანას, რომელთა წინაშეც ბევრი ადამიანი დგას და მარტო აგვარებს. ჩვენ ვსწავლობდით ამ სფეროს და გვსურს გავაგრძელოთ მასზე მუშაობა საზოგადოებასთან ერთად. ჩვენი მიზანია შევქმნათ ინსტრუმენტებისა და სამშენებლო ბლოკების ნაკრები, რომელიც დეველოპერებს უფრო სწრაფად აშენებაში დაეხმარება. დღეს, ჩვენ ვაქვეყნებთ ამ სახელმძღვანელოს, რათა გაგაცნოთ ნაბიჯები, რომლებიც საჭიროა Llama 2-ის მსგავსი მოდელის გასაშვებად თქვენს Mac-ზე Core ML-ის გამოყენებით. ჩვენ ასევე ვუშვებთ ალფა ბიბლიოთეკებსა და ინსტრუმენტებს დეველოპერების ამ გზაზე მხარდასაჭერად. ჩვენ მოვუწოდებთ ყველა Swift დეველოპერს, ვინც დაინტერესებულია ML-ით – ნუთუ ეს ყველა Swift დეველოპერია? – წვლილი შეიტანოს PR-ების (Pull Requests), შეცდომების შესახებ მოხსენებების ან მოსაზრებების გაზიარებით, რათა ეს ერთად გავაუმჯობესოთ. დავიწყოთ! ვიდეო: Llama 2 (7B) ჩატის მოდელი, რომელიც მუშაობს M1 MacBook Pro-ზე Core ML-ის გამოყენებით. როდესაც ტვიტები გამოვაქვეყნე, სადაც ნაჩვენები იყო Falcon ან Llama 2, რომლებიც ჩემს Mac-ზე მუშაობდნენ, ბევრი შეკითხვა მივიღე სხვა დეველოპერებისგან, თუ როგორ უნდა გადაეკეთებინათ ეს მოდელები Core ML-ად, რადგან მათაც სურთ მათი გამოყენება თავიანთ აპლიკაციებში. კონვერტაცია გადამწყვეტი ნაბიჯია, მაგრამ ეს მხოლოდ თავსატეხის პირველი ნაწილია. ამ აპლიკაციებს რეალურად იმიტომ ვწერ, რომ იმავე პრობლემების წინაშე დავდგე, რის წინაშეც ნებისმიერი სხვა დეველოპერი დგას და გამოვავლინო სფეროები, სადაც შეგვიძლია დახმარება. ამ პოსტის დანარჩენ ნაწილში განვიხილავთ ზოგიერთ ამ ამოცანას, ავხსნით სად (და სად არა) გვაქვს დამხმარე ინსტრუმენტები. Core ML არის Apple-ის მშობლიური ფრეიმვორკი მანქანური სწავლისთვის და ასევე იმ ფაილის ფორმატის სახელი, რომელსაც ის იყენებს. მას შემდეგ, რაც მოდელს (მაგალითად) PyTorch-დან Core ML-ში გადაიყვანთ, შეგიძლიათ გამოიყენოთ ის თქვენს Swift აპლიკაციებში. Core ML ფრეიმვორკი ავტომატურად ირჩევს საუკეთესო აპარატურას თქვენი მოდელის გასაშვებად: CPU, GPU, ან სპეციალიზებული ტენზორული ერთეული, სახელად ნერვული ძრავა (Neural Engine). ამ გამომთვლელი ერთეულების რამდენიმე კომბინაციაც შესაძლებელია, თქვენი სისტემის მახასიათებლებისა და მოდელის დეტალების მიხედვით. იმის სანახავად, თუ როგორ გამოიყურება მოდელის კონვერტაცია რეალურ ცხოვრებაში, განვიხილავთ ცოტა ხნის წინ გამოშვებული Llama 2 მოდელის კონვერტაციას. პროცესი ზოგჯერ შეიძლება რთული იყოს, მაგრამ ჩვენ გთავაზობთ რამდენიმე ინსტრუმენტს დასახმარებლად. ეს ინსტრუმენტები ყოველთვის არ იმუშავებს, რადგან მუდმივად შემოდის ახალი მოდელები და ჩვენ გვჭირდება კორექტირება და მოდიფიკაცია. ჩვენი რეკომენდებული მიდგომაა: ეს არის ავტომატიზირებული ინსტრუმენტი, რომელიც აგებულია ექსპორტერების თავზე (იხილეთ ქვემოთ) და რომელიც ან მუშაობს თქვენი მოდელისთვის, ან არ მუშაობს. მას არ სჭირდება კოდირება: შეიყვანეთ Hub მოდელის იდენტიფიკატორი, აირჩიეთ ამოცანა, რისთვისაც აპირებთ მოდელის გამოყენებას, და დააჭირეთ Apply. თუ კონვერტაცია წარმატებით დასრულდა, შეგიძლიათ ატვირთოთ კონვერტირებული Core ML წონები Hub-ზე და მზად ხართ! შეგიძლიათ ეწვიოთ Space-ს ან გამოიყენოთ ის პირდაპირ აქ: ეს ბიბლიოთეკა გაძლევთ ბევრად მეტ ვარიანტს კონვერტაციის ამოცანის კონფიგურაციისთვის. გარდა ამისა, ის საშუალებას გაძლევთ შექმნათ თქვენი საკუთარი კონვერტაციის კონფიგურაციის კლასი, რომელიც შეიძლება გამოიყენოთ დამატებითი კონტროლისთვის ან კონვერტაციის პრობლემების მოსაგვარებლად. ეს არის ყველაზე დაბალი დონის მიდგომა და, შესაბამისად, უზრუნველყოფს მაქსიმალურ კონტროლს. მას მაინც შეუძლია ჩავარდეს ზოგიერთი მოდელისთვის (განსაკუთრებით ახლებისთვის), მაგრამ თქვენ ყოველთვის გაქვთ შესაძლებლობა ჩაუღრმავდეთ საწყის კოდს და ეცადოთ გაარკვიოთ მიზეზი. კარგი ამბავი Llama 2-ის შესახებ ის არის, რომ ჩვენ შევასრულეთ მოსამზადებელი სამუშაოები და კონვერტაციის პროცესი მუშაობს ამ მეთოდებიდან ნებისმიერის გამოყენებით. ცუდი ამბავი ის არის, რომ ის ვერ მოხერხდა კონვერტირება მისი გამოშვებისას და ჩვენ მოგვიწია მისი გამოსწორება მის მხარდასაჭერად. დანართში მოკლედ განვიხილავთ, რა მოხდა, რათა წარმოდგენა შეგექმნათ, რა უნდა გააკეთოთ, როდესაც ყველაფერი არასწორად წავა. მე მივყევი კონვერტაციის პროცესს ზოგიერთი ბოლო მოდელისთვის (Llama 2, Falcon, StarCoder) და ის, რაც ვისწავლე, გამოვიყენე როგორც ექსპორტერებზე, ასევე transformers-to-coreml Space-ზე. ეს არის ზოგიერთი დასკვნის შეჯამება: ჩვენ გავაგრძელებთ საუკეთესო პრაქტიკის დამატებას ჩვენს ინსტრუმენტებში, რათა თქვენ აღარ მოგიწიოთ იგივე პრობლემების ხელახლა აღმოჩენა. მოდელების კონვერტაციას აზრი არ აქვს, თუ ისინი სწრაფად არ მუშაობენ თქვენს სამიზნე აპარატურაზე და არ იცავენ სისტემის რესურსებს. ამ პოსტში ნახსენები მოდელები საკმაოდ დიდია ადგილობრივი გამოყენებისთვის და ჩვენ შეგნებულად ვიყენებთ მათ, რათა გავაფართოვოთ დღევანდელი ტექნოლოგიით შესაძლებლის საზღვრები და გავიგოთ, სად არის შეფერხებები. ჩვენ გამოვავლინეთ რამდენიმე ძირითადი ოპტიმიზაციის სფერო. ეს ძალიან მნიშვნელოვანი თემაა ჩვენთვის და მიმდინარე და მომავალი სამუშაოს საგანი. ზოგიერთი მათგანი მოიცავს: საპროდუქციო აპლიკაციებისთვის გაითვალისწინეთ მცირე ზომის მოდელებით იტერაცია, განსაკუთრებით განვითარების ეტაპზე, შემდეგ კი გამოიყენეთ ოპტიმიზაციის ტექნიკა თქვენი გამოყენების შემთხვევისთვის ყველაზე მცირე მოდელის შესარჩევად, რომლის შეძენაც შეგიძლიათ. swift-transformers არის მიმდინარე Swift პაკეტი, რომლის მიზანია Swift დეველოპერებისთვის Transformers-ის მსგავსი API-ის მიწოდება. ვნახოთ, რა