Generatiivinen tiedustelu

Llamafile LLM -ohjainprojekti parantaa suorituskykyä suorittimen ytimillä

Treffi:

Kätevä avoimen lähdekoodin työkalu LLM:ien pakkaamiseen yhdeksi yleiskäyttöiseksi chatbot-suoritustiedostoksi, joka on helppo jakaa ja ajaa, on ilmeisesti parantanut suorittimen suorituskykyä 30–500 prosenttia x86- ja Arm-järjestelmissä.

Hanketta kutsutaan lamatiedosto, ja sen loi Justine Tunney Mozillan tuella.

Siellä on paljon malleja, joita voit ladata ja kokeilla omassa järjestelmässäsi, kuten olemme tehneet aiemmin peitetty yksityiskohtaisesti. Loppujen lopuksi nämä mallit ovat vain erittäin suuria numerotiedostoja, jotka kuvaavat hermoverkkoja – sinulla on oltava ohjelmisto, joka voi avata ja jäsentää mallin, ja osata suorittaa syöttökehotteita ja kyselyitä hermoverkon kautta tulosteen tuottamiseksi käyttäjälle.

Yksi tällainen ohjelmisto on call.cpp – yksinkertainen C++-ohjelma, jonka on kehittänyt pääasiassa Georgi Gerganov. Vaikka llama.cpp päätti tukea Metan LLaMA-mallisarjaa – tästä myös nimi – se pystyy käsittelemään myös venekuorman muita LLM:itä, kuten Mistral-7B ja Orion-14B.

Metan alkuperäisen Python-pohjaisen LLaMA-ohjaimen inspiroima llama.cpp on melko siisti, koska siinä ei ole riippuvuuksia, se toimii ainakin Windowsissa, Linuxissa, macOS:ssä ja FreeBSD:ssä ja voi hyödyntää laitteistokiihdytystä – Nvidia GPU:sta Appleen. , Intel- ja AMD-laajennukset.

Voit rakentaa ja suorittaa llama.cpp:n natiivisti, antaa sille mallin ladattavaksi ja sitten olla vuorovaikutuksessa kyseisen LLM:n kanssa eri tavoilla. Hankalaa on se, että mukana olevat mallitiedostot ovat yleensä melko suuria, ja voi olla hieman hämmentävää tietää, mikä versio on paras käyttää.

Ja tässä Llamafile on hyödyllinen – yhdistämällä valittu LLM-tiedosto llama.cpp:n kanssa tuottamaan yksi yleinen suoritettava tiedosto, joka voi toimia macOS-, Windows-, Linux-, FreeBSD-, OpenBSD- ja NetBSD-järjestelmissä 64-bittisellä x86- ja Arm-järjestelmäprosessorilla. . Mikä tekee sen mahdolliseksi, on suoraan sanottuna maaginen Kosmopoliittinen Libc projekti, joka mahdollistaa C/C++-koodin rakentamisen siten, että tuloksena on yksi suoritettava tiedosto vain juoksee edellä mainituissa käyttöjärjestelmissä ja suoritinarkkitehtuureissa.

Se yksinkertaistaa massiivisesti jakelua, jos haluat vain antaa mallin jollekin kokeiltavaksi. Siisti.

Nopeuden lisäys

Vain muutama päivä sitten Tunney kirjoitti blogiin perusteellisesti kuinka hän otti käyttöön 84 uutta matriisin kertolaskuydintä parantaakseen llamafilen suorittimen suorituskykyä päättelyn aikana 30-500 prosenttia käytettäessä malleja, joissa on FP16- tai Q8_0-tyyppiset painot. Meille kerrotaan, että "parannukset ovat dramaattisimmat ARMv8.2+ (esim. RPI 5), Intel (esim. Alderlake) ja AVX512 (esim. Zen 4) tietokoneissa."

Tunney testasi koodia monenlaisilla laitteistoilla – vaatimattomasta mutta halvasta Raspberry Pi 5:stä AMD:n 96-ytimiseen lippulaivaan Threadripper Pro 7995WX:ään. Lähes jokaisessa tapauksessa sekä Mistral 7B- että TinyLlama 1.1B -malleissa parannettu llamafile (versio 0.7) oli mukavasti edellä llama.cpp:tä (versio 2024-03-26) ja harppauksia edellä llamafile 0.6.2:ta. Selvyyden vuoksi: Suuret hyödyt tapahtuvat melko paljon nopean arvioinnin aikana, kun LLM käsittelee syöttödataa. Tuotosvaiheen (alias arviointi) aikana parannukset olivat vähemmän dramaattisia.

Esimerkiksi Intel Skylake Core i9-9900:ssa nopea käsittely nousi 50 prosenttia llama.cpp:hen verrattuna, kun taas arviointi pysyi samana.

Vaikka raportoidut suorituskyvyn parannukset koskevat FP16- ja Q8_0-tietotyyppien painoja, myös muiden tyyppien rajoitettu testaus osoitti suuria parannuksia. Core i9-9900:ssa, joka käytti Mistral 4B:n Q0_7-varianttia, nopea suorituskyky oli 65 prosenttia parempi llamafilella. Threadripper Pro 7995WX:n suorituskyky yli kaksinkertaistui FP32:lla, mikä saavutettiin myös Mistral 7B:ssä.

Se ei kuitenkaan ollut puhdas pyyhkäisy llamafile 0.7:lle. Apple M2 Ultra -tehoisen Mac Studion suorituskyky heikkeni sekä nopeassa että arvioinnissa Q8_0-tietotyypin osalta. Tämä johtui ilmeisesti siitä, että llama.cpp on jo optimoitu Applen laitteistolle, eikä Tunney valinnut Applen omaa kääntäjää.

Se päihittää jopa Intelin matriisikertolaskuohjelmiston

Tällaisten vaikuttavien suorituskyvyn lisäysten saavuttaminen oli monivaiheinen prosessi, jonka Tunney dokumentoi yksityiskohtaisesti. Hänen arvionsa mukaan vanilla llama.cpp:n suorituskyky on 233 gigaFLOPS hänen Core i9-9900 PC:llään, ja se voidaan kääntää jopa 384 gigaFLOPS:iin, kun Intelin Math Kernel Library (MKL) otetaan käyttöön.

Vaikka MKL:n tuomat suorituskyvyn lisäykset ovat suuria, se, että se on suljettu lähdekoodi, ei ole Tunneyn mukaan ihanteellinen tälle avoimen lähdekoodin yritykselle. Hän huomautti, että "ulkomaisten BLAS-kirjastojen integrointi llama.cpp:hen ei ole niin käytännöllistä sen ketjutusmallin toimintatavan vuoksi." Ja koska MKL on suljettu lähdekoodi, ei ole mahdollista vain katsoa sitä ja nähdä, kuinka sitä voidaan parantaa.

Tämä ei ilmeisesti estänyt Tunneyta, joka kirjoitti: "Uskon, että prosessorin matemaattisten ytimien temppu hyödyntää käskytason rinnakkaisuutta vähemmällä muistiviittauksella." Sieltä kehittäjä osoitti, kuinka kahden ulomman silmukan avaaminen llama.cpp:ssä johti koodiin, joka voi toimia 810 gigaFLOPS:lla käyttämällä OpenMP:tä Intel Alderlake i9-14900K:ssa ja 6400 MT/s RAM-muistilla. Sitä vastoin sama MKL:n kautta kulkeva koodi on vain 295 gigaFLOPS.

Yhteensopivuusongelmat tarkoittivat, että OpenMP:tä ei voitu käyttää llamafile-tiedostossa, mutta mukautettu ydinkehys pystyi enimmäkseen säilyttämään suorituskyvyn 790 gigaFLOPSissa. Se on yli kaksi kertaa nopeampi kuin MKL:n nopein toteutus.

Vaikka tämä ratkaisu on nopea, se ei skaalaudu hyvin monimutkaisemmalla. MKL voittaa (Tunney ei kertonut kuinka paljon), kun monimutkaisuus nostetaan 1,024 512:ään XNUMX:sta. Tunney kuitenkin ehdotti, että tämä ei toistaiseksi ole kriittinen ongelma - koska llama.cpp suorittaa oletusarvoisesti pienempiä ongelmakokoja, ja hän odottaa saavansa lopulta selville, kuinka optimoida suurempia kokoja varten.

BF16:n optimoinnit ja tuki on lähetetty itse llama.cpp:lle, ja vastaanotto vaikuttaa positiiviselta. Gerganov sanoi, että yhdistämispyynnöt tulevat olemaan tarkistetaan tulevina päivinä. ®

spot_img

Uusin älykkyys

spot_img