天天看點

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

作者:新智元

編輯:alan

【新智元導讀】近日,天才程式員Justine Tunney發推表示自己更新了Llamafile的代碼,通過手搓84個新的矩陣乘法核心,将Llama的推理速度提高了500%!

谷歌的美女程式員,将Llama的推理速度提高了500%!

近日,天才程式員Justine Tunney發推表示自己更新了Llamafile的代碼,

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

她重寫了84個新的矩陣乘法核心,使得Llamafile可以更快地讀取提示和圖像。

與llama.cpp相比,新的Llamafile在CPU上的推理速度提升了30%到500%。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

其中,ARMv8.2+(如RPI 5)、Intel(如Alderlake)和AVX512(如Zen 4)計算機的改進最為顯著。

另外,對于适合L2緩存的矩陣,新的核心比MKL快2倍!

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

Justine Tunney表示:負責MKL的大家,你們有事做了!

畢竟,由微軟,英特爾,TI,AMD,HPE,Oracle,Huawei,Facebook,ARM和National Science Foundation資助的BLIS,作為最強大的開源BLAS,輸了就太沒面子了!

Any time somebody outside Intel beats MKL by a nontrivial amount, I report it to the MKL team. It is fantastic for any open-source project to get within 10% of MKL... [T]his is why Intel funds BLIS development.

每當英特爾以外的人以不小的幅度擊敗MKL時,我都會向MKL團隊報告。對于任何開源項目,超過MKL 10%以内就已經非常厲害了......這就是英特爾為BLIS開發提供資金的原因。

跨平台的「羊駝」

Llamafile作為一個本地LLM項目,誕生于去年11月,由Justine Tunney與Mozilla團隊合作開發。

他們使用Cosmopolitan Libc,将llama.cpp打包為一個跨平台的單個二進制檔案,讓「羊駝」可以在基于AMD64和ARM64的六個作業系統上運作。

而且在GPU短缺的情況下,Llamafile可以不需要昂貴的CUDA核心,——家裡的舊CPU,隻要性能還行,再加一點RAM就足夠了,很好地保護了大家的錢包。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

項目位址:https://github.com/Mozilla-Ocho/llamafile/releases

Llamafile代碼可以在GitHub上找到,使用C++編寫的,沒有外部依賴,可以在Linux、macOS、Windows、FreeBSD,甚至SerenityOS上編譯。

而且,Justine Tunney并沒有就此止步。她已經在努力支援新的資料格式,比如FP16和BF16,以進一步減少記憶體占用,——她甚至在Raspberry Pi上成功運作了TinyLlama!

性能提升

老惠普

Justine Tunney最開始嘗試LLM時,用的是下面這台簡陋的HP主機,運作Alpine,機械硬碟、慢速RAM、AVX2處理器、沒有 GPU。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

HP Intel® Core™ i9-9900 ($439) w/ 2200 MT/s RAM

出于對llama.cpp的喜愛,Justine Tunney與人合作為其引入了mmap()支援,使得權重可以立即加載,隻使用原來一半的RAM。

之後,Justine又花了很長的時間來優化代碼,讓我來看一下改進後的效果:

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

在Skylake上,llamafile實作了2倍的加速,llama.cpp也獲得了50%的性能提升。

到目前為止,Justine為q8_0、f16、q4_1、q4_0和f32資料類型編寫了優化的核心。

樹莓派

最新版的樹莓派不僅提升了主頻,還引入了對ARMv8.2 dotprod 和fp16算術ISA的支援,僅這兩個功能就讓llama.cpp在f16權重上實作了10倍性能提升。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

因為樹莓派的兩個CPU都有32個矢量寄存器,Justine使用為AVX512編寫的核心,使推理速度又提高了2倍。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

不過值得注意的是,新的ARMv8.2 fp16 ISA可能會引入比平時更多的錯誤,因為它會導緻llamafile使用fp16。是以,Q8_0權重實際上的效果更好,因為它使用dotprod ISA。

遊戲主機

在Alderlake CPU上,Justine将float16的性能提高了五倍。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

與ARMv8.2不同,Alderlake能夠在不引入舍入錯誤的情況下做到這一點,因為核心在内部使用float32計算類型。

另外讓人吃驚的是,當涉及到小工作負載時,這個晶片甚至能夠在CUDA開始之前就完成任務。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

蘋果

Mac Studio,作為llama.cpp開發人員最關心的硬體平台,想要在這裡提升性能比較困難。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

另一個問題則是蘋果自身的封閉環境:

M2 Ultra将RAM DIMM放在了CPU内部,使得token生成等受延遲限制的操作速度更快,因為CPU不再需要打「長途電話」了。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

我們可以看到,與便宜得多的英特爾計算機相比,M2 Ultra僅通過ARM ISA暴露了30%的計算能力。

如果開發者想通路更多内容,則需要通過蘋果的專有架構,例如Metal和Accelerate。

AMD

雖然llamafile非常關心幫助缺乏GPU的人,但也為另外1%的人提供了一流的體驗。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

AMD Ryzen Threadripper PRO 7995WX,通過花費10,000美元左右,你會得到96個基于Zen4架構的AVX512核心。

盡管價格隻有M2 Ultra的兩倍,但7995WX x86 ISA提供的原始計算能力是M2 Ultra ARM ISA的7倍,token生成速度幾乎相同,這可能要歸功于384M的L3緩存。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

通過Justine的優化,現在可以在Zen4上以2.8倍的速度運作LLaMA。

天才程式員

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

Justine Tunney出生于1984年,14歲就開始幫别的黑客開發軟體,當時的綽号是「Oogle」。

我們來淺淺地看一下她這些年的一些工作:

RedBean

一個web伺服器,神奇的是可以跨平台在6種作業系統上運作!

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

這可不是Java那種疊了一層虛拟機的機制,Justine開發了一種叫做APE(Acctually Portable Executbale)的檔案格式,可以在任何x86-64的作業系統上執行。

「一次編譯,處處運作」——Java:嗯?這不是我嗎?

cosmopolitan libc

為了能夠跨平台調用外部程式,比如c标準庫,Justine直接手搓了一個libc,在各種平台上實作了所有需要的核心操作:

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

看一下上面的工作量,實在是太炸裂了,而且一般人就算想肝,沒有實力也是不可能的。

sectorLisp

僅有512個位元組,最小的Lisp實作,可通過BIOS引導啟動:

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

除了上面這幾個,還有諸如Blinkenlights、RoseHub等天才項目,這裡不再一一列舉。

對于這番成就,有網友感歎道:

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心
Every time I read something by Justine Tunney, I am continually reminded of my mediocrity.

對于之前提到的mmap工作,網友評價:「有Fabrice Bellard之風」。

Justine Tunney is a true genius. Similar to Fabrice Bellard, a truly unique mind.

Justine or Fabrice are the true 10x engineers, their output is world class and they are much rarer than any hiring article about these gurus want us to believe. With Justine's work, I feel would need to be more than a 1x engineer myself just to find the time to play with all of her creations.

2012年,Justine Tunney開始在谷歌工作,并負責了一些知名項目的關鍵部分。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

比如大名鼎鼎的TensorFlow,Tunney為這個項目做出了許多貢獻,包括用于存儲資料的摘要系統。

Bazel是谷歌從Make演變而來的PB級建構系統,Tunney的主要貢獻是下載下傳器代碼部分,用于自動化營運商級公共工件傳輸。

Llama提速500%!谷歌美女程式員手搓矩陣乘法核心

Nomulus是一項用于管理頂級域名的服務,是谷歌的第一個開源生産服務。Tunney負責為其編寫系統資料庫資料托管系統。

繼續閱讀