ბოლო რამდენიმე წლის განმავლობაში, LLM-ების განვითარების უმეტესი ნაწილი განპირობებული იყო მჭიდრო ენობრივი მოდელების მასშტაბირებით. ადრეული მოდელებიდან, როგორიცაა ორიგინალური ULMFiT (~30M პარამეტრი) ან GPT-2 (1.5B პარამეტრი, რომელიც იმ დროს „გამოსაქვეყნებლად მეტისმეტად საშიშად“ ითვლებოდა 🧌), დღევანდელ ასობით მილიარდი პარამეტრის მქონე სისტემებამდე, რეცეპტი მარტივი იყო: მეტი მონაცემი + მეტი პარამეტრი = უკეთესი შესრულება. მასშტაბირების კანონებმა გაამყარა ეს ტენდენცია, მაგრამ მჭიდრო მასშტაბირებას პრაქტიკული ლიმიტები აქვს: სწორედ აქ შემოდის სურათზე ექსპერტთა ნარევი (Mixture of Experts - MoE) მოდელები. თუ უკვე იცნობთ MoE-ებს და გსურთ პირდაპირ ტრანსფორმერებში შესრულებულ საინჟინრო სამუშაოზე გადახვიდეთ, შეგიძლიათ პირდაპირ მიმართოთ განყოფილებას „ტრანსფორმერები და MoE-ები“. ექსპერტთა ნარევის მოდელი ინარჩუნებს ტრანსფორმერის ძირითად არქიტექტურას, მაგრამ ცვლის ზოგიერთ მჭიდრო „feed-forward“ ფენას ექსპერტთა ნაკრებით. „ექსპერტი“ არ არის თემატურად სპეციალიზებული მოდული (მაგ., „მათემატიკის ექსპერტი“, „კოდის ექსპერტი“). ის უბრალოდ სასწავლო ქვექსელია. თითოეული ტოკენისთვის, როუტერი ირჩევს ექსპერტთა მცირე ქვეჯგუფს მის დასამუშავებლად. სხვადასხვა ტოკენი ააქტიურებს სხვადასხვა ექსპერტს, მათი ფარული წარმოდგენების საფუძველზე. მოდელის სიმძლავრე დამოკიდებულია მთლიან პარამეტრებზე, მაგრამ დასკვნის/ინფერენციის სიჩქარე დამოკიდებულია აქტიურ პარამეტრებზე. ეს არის მთავარი იდეა. მაგალითად, ავიღოთ gpt-oss-20b. მას აქვს 21 მილიარდი მთლიანი პარამეტრი, მაგრამ იყენებს 4 აქტიურ ექსპერტს თითოეული ტოკენისთვის, სულ 32 ექსპერტიდან. საერთო კომპონენტებისა და აქტიური ექსპერტების გათვალისწინებით, ეს მოდელი იყენებს დაახლოებით 3.6 მილიარდ აქტიურ პარამეტრს თითო ტოკენზე. ამ მოდელის M3 Ultra Mac-ზე გაშვებით, რომელსაც აქვს დაახლოებით 800 გბ მეხსიერების გამტარობა, შეგვიძლია შევაფასოთ გენერაციის სიჩქარე, როგორც ~ 800 / (3.6 * 2) bfloat16 ფორმატში, სადაც თითოეული პარამეტრი იკავებს 2 ბაიტს. ეს იძლევა დაახლოებით 111 ტოკენს წამში. რეალური შესრულების მაჩვენებელი, რასაც ვიღებთ, არის ~115 ტოკენი/წმ, რაც ძალიან ახლოსაა სავარაუდო გამოთვლასთან. ეს სუპერ სწრაფი სიჩქარე ადასტურებს, რომ მოდელი მუშაობს დაახლოებით ისე, როგორც 3.6 მილიარდი პარამეტრის მქონე მოდელი, მაგრამ მას აქვს იგივე სიმძლავრე (ან ხარისხი), რაც 21 მილიარდი პარამეტრის მქონე მოდელს. (შენიშვნა: სიჩქარე კიდევ უფრო სწრაფი იქნებოდა, თუ გამოვიყენებდით ქერნელებს მშობლიური mxfp4 კვანტიზაციისთვის, რომელსაც მოდელი იყენებს). MoE-ები მიმზიდველია შემდეგი მიზეზების გამო: უკეთესი გამოთვლითი ეფექტურობა: მოცემული ფიქსირებული FLOP ბიუჯეტის პირობებში, MoE-ები ხშირად აჭარბებენ მჭიდრო ანალოგებს. ეს ნიშნავს უფრო სწრაფ იტერაციას და მასშტაბირების უკეთეს ეფექტურობას. ბუნებრივი პარალელიზაციის ღერძი: ექსპერტები უზრუნველყოფენ სტრუქტურულ საზღვარს გამოთვლით გრაფაში. ვინაიდან სხვადასხვა ტოკენი სხვადასხვა ექსპერტს ააქტიურებს, ჩვენ შეგვიძლია პარალელიზება მოვახდინოთ ექსპერტებს შორის (ამას მოგვიანებით განვიხილავთ „ექსპერტთა პარალელიზმის“ განყოფილებაში). ინდუსტრიული მიღება: ბოლო რამდენიმე კვირის განმავლობაში გამოშვებული ღია MoE მოდელების ძირითადი რელიზები მოიცავს Qwen 3.5-ს, MiniMax M2-ს, GLM-5-ს ან Kimi K2.5-ს. ტენდენცია დაჩქარდა DeepSeek R1-ის წარმატების შემდეგ 2025 წლის იანვარში, რაც ეფუძნებოდა ადრეულ სისტემებს, როგორიცაა DeepSeek V2. კიდევ ერთი ადრეული MoE იყო Mixtral-8x7B, რომელიც გამოვიდა 2023 წლის დეკემბერში. დახურული ლაბორატორიებიც იყენებენ MoE-ებს. ChatGPT-ს დიდი ხანია მიეწერება მეჩხერი არქიტექტურის გამოყენება, და ღია gpt-oss მოდელები ნამდვილად იყენებენ მას. თუ ზოგადად MoE-ების შესახებ მეტის გაგება გსურთ, გირჩევთ წაიკითხოთ ეს ბლოგი და ნახოთ ჩვენი უახლესი YouTube ვიდეო მარშრუტიზაციის შესახებ. ეკოსისტემის უმეტესი ინსტრუმენტები, მათ შორის მოდელის ჩატვირთვა, მოწყობილობის განლაგება, კვანტიზაცია და ბეკენდზე შესრულება, თავდაპირველად მჭიდრო მოდელებისთვის იყო შექმნილი. MoE-ები ამ ვარაუდებს ეჭვქვეშ აყენებენ. MoE-ების ტრანსფორმერებში პირველი კლასის მოქალაქეებად ქცევა ნიშნავს ჩატვირთვის კონვეიერის, შესრულების მოდელისა და განაწილებული აბსტრაქციების ნაწილების გადამუშავებას და არა მხოლოდ ახალი მოდელის კლასების დამატებას. ჩვენ ყურადღებას გავამახვილებთ იმაზე, თუ როგორ განვითარდა ტრანსფორმერების ბიბლიოთეკა მეჩხერი არქიტექტურების მხარდასაჭერად: AutoModelForCausalLM.from_pretrained("model_id") ჩამოტვირთავს და ტვირთავს მოდელის წონებს PyTorch მოდელში. მჭიდრო მოდელებისთვის ჩატვირთვა შედარებით მარტივია, სადაც ჩეკპოინტში თითოეული ტენზორი ერთ-ერთზე შეესაბამება პარამეტრს გაშვების დროის მოდულში. MoE-ებისთვის ეს უფრო რთულია. MoE-ის ჩეკპოინტების უმეტესობაში, თითოეული ექსპერტი სერიალიზებულია დამოუკიდებლად. თუ გადახედავთ DeepSeek-V3 ჩეკპოინტის ინდექსს, დაინახავთ გასაღებებს, როგორიცაა: თითოეულ ექსპერტს აქვს საკუთარი წონის მატრიცების ნაკრები, არსებითად 256 (0-დან 255-მდე სულ, DeepSeek-V3-ის მაგალითზე) მცირე „feed-forward“ ქსელი შენახული გვერდიგვერდ. თუმცა, გაშვების დროს GPU-ები ასრულებენ ოპტიმიზებულ ქერნელებს. თანამედროვე MoE ქერნელები, როგორიცაა „grouped GEMMs“ და „fused MoE“ იმპლემენტაციები, შექმნილია ყველა ექსპერტის ერთ ოპერაციაში დასამუშავებლად და არა მათზე სათითაოდ ციკლის გავლებით. ამის ეფექტურად გასაკეთებლად, მათ სჭირდებათ ექსპერტთა წონები, რომლებიც შეფუთული იქნება ერთ განუწყვეტელ ტენზორში. ასე რომ, ჩვენ გვაქვს შეუსაბამობა: ამ ხარვეზის სისტემატურად შევსება სწორედ ის არის, რასაც წონის ჩატვირთვის რეფაქტორინგი შესაძლებელს ხდის. უნივერსალური WeightConverter-ის დანერგვით, აზროვნების მოდელი შეიცვალა: „ჩეკპოინტი უკვე შეესაბამება ჩემს გაშვების დროის განლაგებას; ჩატვირთვა ძირითადად გასაღები-გასაღებით კოპირებაა.“-დან: „ჩეკპოინტი უბრალოდ ტენზორების სერიალიზებული წყაროა. ჩატვირთვა არის კონვერტაციის კონვეიერი, რომელიც მათ გარდაქმნის სასურველ გაშვების დროის განლაგებად.“ ამ რეფაქტორინგით დანერგილი ცენტრალური აბსტრაქცია არის წონის დინამიური ჩატვირთვა WeightConverter-ის მეშვეობით. WeightConverter საშუალებას გვაძლევს განვსაზღვროთ: პრიმიტიული ოპერაციები