首頁 >科技週邊 >人工智慧 >不用4個H100!340億參數Code Llama在Mac可跑,每秒20個token,程式碼產生最拿手

不用4個H100!340億參數Code Llama在Mac可跑,每秒20個token,程式碼產生最拿手

PHPz
PHPz轉載
2023-09-19 13:05:01842瀏覽

開源社群的一位開發者Georgi Gerganov發現,自己可以在M2 Ultra上運行全F16精度的34B Code Llama模型,而且推理速度超過了20 token/s。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

M2 Ultra的頻寬達到了800GB/s,這在其他人通常需要使用4個高階GPU才能實現的情況下

而這背後真正的答案是:投機採樣(Speculative Sampling)。

喬治的發現立刻引發了人工智慧界大佬們的討論

#Karpathy轉發評論道,「LLM的投機執行是一種出色的推理時間優化」。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

「投機取樣」加速推理

在這個例子中,Georgi借助Q4 7B quantum草稿模型(也就是Code Llama 7B)進行了投機解碼,然後在M2 Ultra上使用Code Llama34B進行產生。

簡單講,就是用一個「小模型」做草稿,然後用「大模型」來檢查修正,以此加速整個過程。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

GitHub地址:https://twitter.com/ggerganov/status/1697262700165013689

根據Georgi的介紹,這些模型的速度分別如下:

F16 34B:每秒約10個令牌

需要進行改寫的內容是:Q4 7B:每秒約80個令牌

##以下是一個沒有使用投機取樣的標準F16取樣範例:

在加入投機取樣策略之後,速度可以達到每秒約20個標記

根據Georgi的說法,產生內容的速度可能會有所不同。然而,這種方法在程式碼產生方面似乎非常有效,因為大多數詞庫都能被草稿模型正確猜測

#使用「語法取樣」的用例也有可能從中受益匪淺

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

投機取樣是如何實現快速推理的?

Karpathy根據先前谷歌大腦、UC伯克利、DeepMind的三項研究,做出了解釋。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

請點擊以下連結查看論文:https://arxiv.org/pdf/2211.17192.pdf

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

#論文網址:https://arxiv.org/pdf/1811.03115.pdf

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

論文網址:https://arxiv.org/pdf/2302.01318.pdf

這取決於以下不直觀的觀察結果:

在單一輸入token上轉發LLM所需的時間,與在K個輸入token上批量轉發LLM所需的時間相同(K比你想像的要大)。

這個不直覺的事實是因為取樣受到記憶體的嚴重限制,大部分「工作」不計算,而是將Transformer的權重從VRAM讀取到晶片上快取進行處理。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手


#

為了完成讀取所有權重的任務,最好將它們應用於整個批次的輸入向量

我們之所以不能天真地利用這一事實,來一次採樣K個token,是因為每N個token都取決於,我們在第N-1步時採樣的token。這是一種串行依賴關係,因此基線實現只是從左到右逐個進行。

現在,一個巧妙的想法是使用一個小而便宜的草稿模型,首先產生一個由K個標記組成的候選序列-「草稿」。然後,我們將所有這些資訊一起批次送入大模型

根據上述方法,這與只輸入一個token的速度幾乎一樣快。

然後,我們從左到右檢查模型,以及樣本token預測的logits。任何與草稿一致的樣本都允許我們立即跳到下一個token。

如果存在分歧,我們將放棄草稿模型,並承擔進行一些一次性工作的成本(對草稿模型進行採樣,並對後續的標記進行前向傳遞)

這在實踐中行之有效的原因是,大多數情況下,draft token都會被接受,因為是簡單的token,所以即使是更小的草稿模型也能接受它們。

當這些簡單的token被接受時,我們就會跳過這些部分。大模型不同意的困難token會「回落」到原始速度,但實際上因為有額外的工作會慢一些。

所以,總而言之:這怪招之所以管用,是因為LLM在推理時是受記憶體限制。在「批次大小為1」的情況下,對感興趣的單一序列進行取樣,而大部分「本地 LLM」用例都屬於這種情況。而且,大多數token都很「簡單」。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

HuggingFace的共同創辦人表示,340億參數的模型在一年半以前的資料中心之外,看起來非常龐大且難以管理。現在只需使用筆記型電腦就可以輕鬆處理了

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

#現在的LLM並不是單點突破,而是需要多個重要元件有效協同工作的系統。投機解碼就是一個很好的例子,可以幫助我們從系統的角度思考。

不用4个H100!340亿参数Code Llama在Mac可跑,每秒20个token,代码生成最拿手

#

以上是不用4個H100!340億參數Code Llama在Mac可跑,每秒20個token,程式碼產生最拿手的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除