Tekoälyn päivälehti — mallit, työkalut ja hardware
llama.cpp · Työkalut
Vulkan aamulla, ROCm iltapäivällä, Metal illalla. Kaikki kolme saivat radix-pohjaisen top-k-poiminnan, koska Qwen 3.8 Flash Next tarvitsee sitä tuhannen vaihtoehdon kokoluokassa eikä vanha lajittelu enää riitä.
llama.cpp:n commit-lokissa on maanantailta harvinainen kuvio. Kello 05.04 UTC yhdistettiin Vulkan-taustalle radix-pohjainen top-k-valinta, kello 13.00 sama ROCm-taustalle ja kello 18.31 Metalille. Kolme eri kehittäjää, kolme eri rajapintaa, sama päivä. Vulkanin muutosviestissä lukee syy suoraan: ”top_k radix select for k ≥ 1024 for Qwen 3.8 Flash Next”.
Taustalla on näytteenoton mekaniikka. Kun malli on tuottanut todennäköisyydet koko sanastolle — GLM- ja Qwen-luokan malleilla se on yli 100 000 vaihtoehtoa — top-k poimii niistä k parasta ennen kuin seuraava sana arvotaan. Perinteinen toteutus lajittelee tai ajaa osittaisen valinnan, mikä on halpaa kun k on neljäkymmentä. Kun k on tuhat tai enemmän, kustannus kasvaa niin, että näytteenotto alkaa näkyä tokeninopeudessa — eli siinä kohdassa, jossa näytönohjain on jo tehnyt oman osansa ja odottaa.
Radix-valinta ratkaisee saman tehtävän eri tavalla: se käy luvut bittiryhmä kerrallaan ja karsii pois ne, jotka eivät voi mahtua parhaaseen k:hon, ilman että mitään lajitellaan järjestykseen. Työ tehdään yhtenä läpikäyntinä koko rivin yli, mikä sopii näytönohjaimelle paremmin kuin vertailupohjainen lajittelu. Vulkanin muutokseen sisältyy myös top-k:n sulautus näytteenoton seuraavaan vaiheeseen sekä uudet testit juuri Qwen 3.8 Flash Nextin arvoilla; ROCm-toteutus on otsikoitu pitkille riveille.
Metal-version muutosviestissä on yksityiskohta, joka kertoo ajasta enemmän kuin itse koodi: rivi ”Assisted-by: DeepSeek-v4-Flash-0731”. Applen näytönohjaimille kirjoitettu lajitteluydin on siis syntynyt avoimen painon mallin avustuksella, ja avustaja on merkitty näkyviin samalla tavalla kuin ihmisavustaja merkittäisiin.
Samana päivänä yhdistettiin kaksi muutakin asiaa, jotka kannattaa tietää. CUDA-taustan asiantuntijasekoituksen fuusio ulotettiin spekulatiiviseen dekoodaukseen — aiemmin fuusio toimi vain yhden tokenin kerrallaan, mikä sulki pois juuri luonnostelupäät. Ja spekulatiivisessa polussa DFlash-enkooderi sulautettiin avain-arvo-välimuistin syöttöön: enkooderi on vain yksi täysin kytketty kerros ja normalisointi, mutta erillisenä ajona se pakotti sen tuloksen siirtymään näytönohjaimelta suorittimelle ja takaisin jokaisella askeleella.
Käytännön ohje on lyhyt. Jos ajat Qwen 3.8 Flash Nextiä tai muuta mallia isolla top-k-arvolla, käännä llama.cpp uudestaan. Jos ajat pientä mallia tavallisella neljänkymmenen kokoluokan k:lla, tämä ei muuta mitään — radix-polku otetaan käyttöön vasta suurilla arvoilla.