
ESP32-S3-ის 7 დაფამ ერთად 1,58-ბიტიანი ენის მოდელი გაუშვა
GitHub-ზე გამოქვეყნებულ პროექტში Qwen2-0.5B-ის 24 ფენა 7 ESP32-S3 დაფაზე განაწილდა: 6 გამომთვლელი კვანძი SPI ჯაჭვითაა დაკავშირებული, წონები კი 1,58-ბიტიან სამეულ ფორმატშია შეფუთული.
GitHub-ზე გამოქვეყნებული ESP32s3-LLM-Cluster აჩვენებს, როგორ მუშაობს 7 ESP32-S3 დაფა ერთ პატარა ენის მოდელზე. 6 დაფა გამომთვლელი კვანძია, მეშვიდე კი მასტერი: მას BPE ტოკენიზატორი, ჩაშენებების (embedding) ძებნა, საბოლოო ნორმალიზაცია და LM Head ეკუთვნის. საფუძვლად Qwen2-0.5B აღებულია, რომელიც მიკროკონტროლერებისთვის შემცირდა და კვანტიზაცია გაიარა.
თითოეულ გამომთვლელ კვანძს მოდელის 24 ტრანსფორმერ ბლოკიდან 4 ხვდება. დაფები ერთმანეთს პირდაპირ არ ელაპარაკებიან: ისინი ჯაჭვად არიან ჩაბმული, ამიტომ ფარული მდგომარეობა მასტერიდან გამოდის, რიგრიგობით გაივლის ყველა კვანძს და ბოლო ფენისთვის უკან ბრუნდება.
1,58 ბიტი ერთ წონაზე
ყველა ხაზოვანი ფენა BitNet-ის სამეულ კვანტიზაციას იყენებს: წონას მხოლოდ სამი მნიშვნელობა აქვს, -1, 0 ან 1. სამი მნიშვნელობა 2 ბიტში ეტევა, ამიტომ ერთ ბაიტში ოთხი წონა იწერება. სწორედ ეს აძლევს მოდელს საშუალებას, ასეთ პატარა ჩიპებზე დაეტიოს. ჩაშენებების ცხრილი ცალკე INT4 ფორმატში ინახება.
README-ის მიხედვით, ერთ ფენას დაახლოებით 3,82 მეგაბაიტი სჭირდება, ოთხ ფენას კი დაახლოებით 15,3 მეგაბაიტი, რაც 16 მეგაბაიტიანი flash-ის დანაყოფში ეტევა. მასტერზე დაახლოებით 14 მეგაბაიტი INT4 ჩაშენებებისთვის და 64 კილობაიტი საბოლოო ნორმისთვისაა გამოყოფილი. კონტექსტის ფანჯარა 512 ტოკენია, KV ქეში კი კვანძების PSRAM-ში ინახება.
SPI ჯაჭვი
ყოველ დაფას ორი SPI არხი აქვს: ერთი აგზავნის (CS 4, MOSI 5, CLK 7), მეორე იღებს (CS 15, MOSI 16, CLK 18). პირველი კვანძის გამგზავნი მეორის მიმღებს უერთდება, ბოლო კვანძი კი შედეგს მასტერს უბრუნებს. ცალკე ხაზები გადატვირთვასა და მზადყოფნას ემსახურება: მასტერის GPIO 1 კვანძებს გადატვირთვის სიგნალს უგზავნის, GPIO 3 კი ჯაჭვის ბოლოდან პასუხს აბრუნებს, რომ ყველა დაფა ჩაირთო. GPIO 8-ზე მიერთებული LED მუშაობის დროს ინთება.
ენერგია და შეზღუდვები
ავტორის გაზომვებით, კლასტერი უმოქმედოდ 5 ვოლტზე და 0,23 ამპერზე მუშაობს, რაც დაახლოებით 1,17 ვატია; ინფერენსის დროს მოხმარება დაახლოებით 1,53 ვატამდე იზრდება. თითო დაფა საკუთარ ნაწილს დაახლოებით 1,3 წამში ითვლის, ამიტომ დაფების დამატებასთან ერთად დროც წრფივად იზრდება: ერთ ESP32-S3-ს 4 ფენა ეკუთვნის.
პროექტი საკუთარ სისუსტეებს არ მალავს. კვანტიზაციის გათვალისწინებით სწავლება მხოლოდ ნაწილობრივ ჩატარდა, loss დაახლოებით 8,0-ზე ჩერდება და მოდელი ხშირად შემთხვევით ტოკენებს გამოსცემს ან greedy შერჩევისას ერთ სიტყვას იმეორებს. README ასევე აფრთხილებს, რომ თუ 2-ბიტიანი შეფუთვის რიგი Python-ის სკრიპტში იმავე წესით არ იშლება C-სა და ასემბლერის კოდში, ყველა წონა დუმილით ფუჭდება. კოდი MIT ლიცენზიით ვრცელდება, შთაგონების წყაროებად კი Microsoft BitNet და ESP32-ის ორი ადრინდელი პროექტია დასახელებული.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.