
10 წლის Xeon-იც საკმარისია
ახალი წერილი აჩვენებს, რომ 2016 წლის Xeon DDR3 მეხსიერებით და GPU-ს გარეშე 26-მილიარდიან ექსპერტების ნარევის მოდელს კითხვის სიჩქარით ამუშავებს — სპეციალიზებული ფორკითა და 25 დროშით, რომლებსაც შავი ყუთის ხელსაწყოები არასოდეს აჩვენებენ.
ტექნიკა, რომელსაც ამის გაშვება არ უნდა შეეძლოს
კრისტინა ემილიე სორენსენის მესამე პოსტი Gemma 4-ის MTP დრაფტერებზე იქიდან იწყება, სადაც წინა ნაწილი დასრულდა: როგორ გაუშვას შედეგი გადამუშავებულ სერვერზე, რომელსაც ეს არ უნდა შეეძლოს. მანქანას 128 GB ოპერატიული მეხსიერება აქვს, მაგრამ ეს DDR3-ია — დღევანდელ საუკეთესო ლეპტოპის მეხსიერებაზე ხუთ-ექვსჯერ ნელი. პროცესორი 2016 წლის ერთი Intel Xeon E5-2620 v4-ია: 8 ფიზიკური ბირთვი, 16 ნაკადი, მხოლოდ AVX2 — არც AVX-512, არც BF16 — 20 MiB L3 და 2 MiB L2 ქეში, GPU კი საერთოდ არ არის. ollama და სტანდარტული llama.cpp საკმარის „ბერკეტებს“ არ იძლევა, ამიტომ გამოსავალი ik_llama.cpp-ის ფორკი და 25 დროშისანი ბრძანების ხაზია. CPU-ზე გენერაცია მეხსიერების გამტარობით შემოიფარგლება: პროცესორი მატრიცულ გამოთვლებს ამთავრებს და ელოდება, სანამ წონები RAM-იდან ქეშში გადაიტანება.
სპეკულაციური დეკოდირება და MoE მარშრუტიზაცია CPU-ზე
Gemma 4 26B-A4B ექსპერტების ნარევის მოდელია: 128 ექსპერტი, თითო ტოკენზე 8 აქტიური — დაახლოებით 3,8 მილიარდი აქტიური პარამეტრი 25,2 მილიარდიდან. დროშები --spec-type mtp, --draft-max 3, --draft-p-min 0.0 და --spec-autotune 26-მილიარდიან ვერიფიკატორს პატარა MTP დრაფტერთან აკავშირებს და თითო მონახაზზე სამ ტოკენამდე იღებს. სორენსენის აზრით, სპეკულაციური დეკოდირება CPU-ზე უფრო მეტს იძლევა, ვიდრე GPU-ზე: CPU-ის ციკლები იაფია ვერიფიკატორის წონების ქეშში გატარების ფონზე, დრაფტერის სამუშაო ნაკრები კი L3-ში ეტევა. --cpu-moe ექსპერტების მარშრუტიზაციას CPU-ის ქეშის იერარქიასთან ასწორებს, რომ 128 ექსპერტს შორის ხტომამ ქეში არ „აჭედოს“, --merge-up-gate-experts კი ორ პროექციას ერთ matmul-ში აერთიანებს — ლოგებში fused_up_gate = 1. ნაკადების რაოდენობა, -t 8, ფიზიკურ ბირთვებს ემთხვევა და არა 16 SMT ნაკადს, რადგან მეხსიერებით შემოსაზღვრულ დატვირთვაზე ზედმეტი ნაკადები მხოლოდ დაგეგმვის ხარჯს მატებს.
მიმაგრება, გადაფუთვა და დროშები, რომლებიც ჩუმად ცვივა
--mlock ბირთვს სთხოვს, ~27 GB წონა ფიზიკურ მეხსიერებაში დარჩეს, და ნაგულისხმევად მოთხოვნა ვერ სრულდება: „failed to mlock 27628376064-byte buffer ... Try increasing RLIMIT_MEMLOCK“. დროშა სწორია, memlock-ის ლიმიტი კი არა, და შავი ყუთის ხელსაწყოები ამ ოპტიმიზაციას საერთოდ არ ითხოვენ — მოდელი დისკზე გადაინაცვლებს. --run-time-repack წონის მატრიცებს ინფერენციამდე CPU-ის ქეშის განლაგებასთან ასწორებს (ლოგები: 265 ტენზორი გადაფუთულია), --no-kv-offload კი წყვეტს GPU-ს ძებნას KV ქეშისთვის. გრაფის გაყოფის დროშა MTP-ს ვერ უძლებს: ძრავა იუწყება „Split mode 'graph' is not supported for Gemma4 external MTP => changing split mode to 'layer'“ და ფენობრივ გაყოფაზე გადადის.
Flash Attention CPU-ზე და მეხსიერების ანგარიში
ik_llama.cpp-ის ავტორმა ikawrakow-მა Flash Attention-ისთვის სპეციალური CPU-ის ბირთვები დაწერა: ის attention-ის softmax-ს matmul-ებთან აერთიანებს და N×N მატრიცა RAM-ში არასოდეს იწერება — ოპტიმიზაცია, რომელიც თავდაპირველად GPU-სთვის შეიქმნა. --mla-use 3 რთავს Multi-Head Latent Attention-ს, რომელიც KV ქეშს პატარა ლატენტურ წარმოდგენაში აკუმშავს. ორივე მუშაობს: ლოგებში flash_attn = 1, fused_moe = 1, fused_up_gate = 1. საბოლოო ანგარიში 82 355 MiB-ია — დაახლოებით 25 GB წონა და 56 GB KV ქეში სრულ 262K კონტექსტზე; ქეში მოდელზე დიდია. სორენსენის დასკვნა: ლოკალური ღია მოდელების ბარიერი სილიკონი არ არის — საჭიროა ინფერენციის ძრავის ღრმად გაგება.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.