明敏 發自 凹非寺
量子位 公眾號 | QbitAI
專為AI而來的新語言Mojo,推理LLaMA2性能比Python/ target=_blank class=infotextkey>Python提升250倍!
比C語言也要快上20%。
上周五才開放下載,Mojo這么快就自證實力了。
要知道,之前官方號稱Mojo可以比Python快6.8萬倍。
而且作者表示,其實還有進一步提升的空間。
這也展示了通過Mojo進行硬件優化的潛力。
OpenAI創始成員Karpathy已經趕來圍觀了。
目前,LLaMA.mojo已開放下載~
幾行代碼即可下載
帶來這個版本的老哥是一位前Meta工程師Aydyn Tairov。
他利用Mojo的SIMD(Single Instruction Multiple Data,單指令多數據)和向量化原語,將llama2.py轉化為Mojo,性能較Python版本提升了近250倍。
即便在快速運行模式下,Mojo版本也比C語言版本性能提升15-20%。
不過作者嘗試了在Mojo中使用并行模式,速度就慢了很多。
作者進行性能比較的系統和硬件情況如下:
如果你也想下載運行這個模型,需要先在環境中安裝配置Mojo(文檔鏈接見文末)。
首先將存儲庫保存到保存項目時的文件夾:
gitclone https://Github.com/tairov/llama2.mojo.git
然后打開存儲文件夾:
cdllama2.mojo
下面就可以下載模型:
wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin
然后即可運行:
mojo llama2.mojo
num hardware threads: 6SIMD vector width: 8
checkpoint size: 60816028
<s>
Once upon a time, there was a little girl named Lily. She loved toplay outside inthe sunshine. One day, she saw a big, red ball inthe sky. It was the sun! She thought it was so pretty.
Lily wanted toplay withthe ball, but it was too high up inthe sky. She tried tojump andreach it, but she couldn't. Then, she had an idea. She would use a stick to knock the ball down.Lily found a stick and tried to hit the ball. But the stick was too short. She tried again and again, but she couldn't reach it. She felt sad.
Suddenly, a kind man came by andsaw Lily. He asked her what was wrong. Lily told him about the ball. The man smiled andsaid, "I have a useful idea!"He took out a long stick andused it toknock the ball down. Lily was so hAppy! She thanked the man andthey played together inthe sunshine.
<s>
Once upon a time, there was a little girl named Lily. She loved toplay outside inthe sunshine. One day, she saw a big, red
achieved tok/s: 264.24870466321244
為啥Mojo這么快?
不過話說回來,為啥Mojo的速度可以這么快?
這還得從Mojo的來歷說起。
它誕生于今年5月,專為AI領域開發,由LLVM之父和Swift之父Chris Lattner帶來。
它兼顧了Python和C++的優點,語法簡單、運行快,而且可以和任何Python庫無縫交互。
自從上線以來,Mojo已經吸引了12萬開發者,GitHub星標達9K。
今年8月,Mojo背后公司Modular新獲1億美元融資,總融資金額達1.3億美元。
Mojo語言這么快的原因,可以歸結為4點。
第1步,通過類型注釋消除Python動態類型的損失,并做代數簡化(algebraic simplifications),避免開方運算以及簡化復數平方運算,達到89倍加速。
第2步,通過向量化實現SIMD(單指令多數據)的并行計算,并讓向量寬度以匹配CPU的FMA(浮點乘法累加單元)數量,達到874倍。
第3步,把前兩步開發好的單線程實現改成多核并行化,對于88核的系統再獲得30倍加速,與原始Python相比已經到了26000倍。
第4步,解決并行化中的加載不均衡問題,讓線程從池中動態獲取任務,得到最終結果68000倍。
幾天前,Mojo正式開放下載。目前支持linux系統,后續將陸續添加mac和windows。
同時支持VSCode插件,可以實現語法高亮和代碼補全等功能。
以及也能像Python一樣在Jupyter里交互式操作。
感興趣的童鞋,可以去上手體驗一下~
GitHub地址:
https://github.com/tairov/llama2.mojo
Mojo文檔:
https://docs.modular.com/mojo/manual/get-started/index.html
— 完—