code window

顯示包含「LLM」標籤的文章。顯示所有文章
顯示包含「LLM」標籤的文章。顯示所有文章

2024年5月15日星期三

從MHA、MQA、GQA到MLA的演變歷程

前言

本文將與大家一起梳理從MHA、MQA、GQA到MLA的演變歷程,並重點介紹MLA的設計思路。

MHA

MHA(多頭注意力)是開創性論文《Attention is all you need》中提出的一種注意力形式,可以說是當前主流大型語言模型(LLM)的基礎工作。數學上,多頭注意力是多個獨立的單頭注意力的拼接。假設輸入的向量序列為 \(x_1, x_2, \ldots, x_l\),其中 \(x_i \in \mathbb{R}^d\),那麼MHA可以記為:

$$
\begin{aligned}
o_t &= [o_t^{(1)}, o_t^{(2)}, \ldots, o_t^{(h)}] \\
o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_{\leq t}^{(s)}, v_{\leq t}^{(s)}) \\
&\equiv \sum_{i \leq t} \frac{\exp(q_t^{(s)} k_i^{(s)\top})}{\sum_{i \leq t} \exp(q_t^{(s)} k_i^{(s)\top})} v_i^{(s)} \\
q_t^{(s)} &= x_t W_q^{(s)} \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k} \\
k_i^{(s)} &= x_i W_k^{(s)} \in \mathbb{R}^{d_k}, \quad W_k^{(s)} \in \mathbb{R}^{d \times d_k} \\
v_i^{(s)} &= x_i W_v^{(s)} \in \mathbb{R}^{d_v}, \quad W_v^{(s)} \in \mathbb{R}^{d \times d_v}
\end{aligned}
$$

為了簡化,這裡省略了注意力矩陣的縮放因數。在實踐中,常見的設置是 \(d_k = d_v = \frac{d}{h}\)。例如,對於LLAMA2-7b來說,有 \(d = 4096, h = 32, d_k = d_v = 128\);對於LLAMA2-70b則是 \(d = 8192, h = 64, d_k = d_v= 128\)。這裡只考慮了主流自回歸大型語言模型所使用的Causal Attention,這意味著在逐個token生成時,新預測出來的第 \( t+1 \) 個token並不會影響已經計算好的 \( k_{\leq t}^{(s)}, v_{\leq t}^{(s)} \),因此這部分結果我們可以快取下來供後續生成調用,避免不必要的重複計算,這就是所謂的KV快取(KV Cache)。

瓶頸

一個自然的問題是:為什麼降低KV快取的大小如此重要?

眾所周知,一般情況下大型語言模型的推理都是在GPU上進行,單張GPU的顯存是有限的,一部分我們要用來存放模型的參數和前向計算的啟動值,這部分依賴於模型的體量,選定模型後它就是個常數;另外一部分我們要用來存放模型的KV快取,這部分不僅依賴於模型的體量,還依賴於模型的輸入長度,也就是在推理過程中是動態增長的,當Context長度足夠長時,它的大小就會占主導地位,可能超出一張卡甚至一台機(8張卡)的總顯存量。

在GPU上部署模型的原則是:能一張卡部署的,就不要跨多張卡;能一台機部署的,就不要跨多台機。這是因為「卡內通信帶寬 > 卡間通信帶寬 > 機間通信帶寬」,由於「木桶效應」,模型部署時跨的設備越多,受設備間通信帶寬的拖累就越大,事實上即便是單卡H100內SRAM與HBM的帶寬已經達到了3TB/s,但對於短Context來說這個速度依然還是推理的瓶頸,更不用說更慢的卡間、機間通信了。

所以,減少KV快取的目的就是要實現在更少的設備上推理更長的Context,或者在相同的Context長度下讓推理的batch size更大,從而實現更快的推理速度或者更大的吞吐總量。當然,最終目的都是為了實現更低的推理成本。

MQA

MQA(多查詢注意力),是減少KV快取的一次非常樸素的嘗試,首次提出自《Fast Transformer Decoding: One Write-Head is All You Need》這篇2019年的論文,這也意味著早在LLM成為熱門話題之前,減少KV快取就已經是研究人員非常關注的一個議題了。

MQA的思路很簡單,直接讓所有注意力頭(Attention Head)共用同一個K(Key)、V(Value),用公式來說,就是取消了MHA中所有的 \( k \)、\( v \) 的上標 \( (s) \):

$$
\begin{aligned}
    o_t &= [o_t^{(1)}, o_t^{(2)}, \ldots, o_t^{(h)}] \\
    o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_{\leq t}, v_{\leq t}) \\
    &\equiv \sum_{i \leq t} \frac{\exp(q_t^{(s)} k_i^\top)}{\sum_{i \leq t} \exp(q_t^{(s)} k_i^\top)} v_i \\
    q_t^{(s)} &= x_t W_q^{(s)} \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k} \\
    k_i &= x_i W_k \in \mathbb{R}^{d_k}, \quad W_k \in \mathbb{R}^{d \times d_k} \\
    v_i &= x_i W_v \in \mathbb{R}^{d_v}, \quad W_v \in \mathbb{R}^{d \times d_v}
\end{aligned}
$$

使用MQA的模型包括PaLM、StarCoder、Gemini等。很明顯,MQA直接將KV快取減少到了原來的 \( \frac{1}{h} \),這是非常顯著的,單從節省顯存角度看已經是極限了。

效果方面,目前看來大部分任務的損失都比較有限,且MQA的支持者相信這部分損失可以通過進一步訓練來彌補回來。此外,注意到MQA由於共用了K、V,將會導致注意力的參數量減少了將近一半,而為了模型總參數量的不變,通常會相應地增大FFN(Feed Forward Network)/GLU(Gated Linear Unit)的規模,這也能彌補一部分效果損失。

GQA

然而,也有人擔心MQA對KV快取的壓縮太嚴重,以至於會影響模型的學習效率以及最終效果。為此,一個MHA與MQA之間的過渡版本GQA(分組查詢注意力)應運而生,出自論文《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》,是去年的工作。

事後看來,GQA的思想也很樸素,它就是將所有Head分為 \( g \) 個組( \( g \) 可以整除 \( h \)),每組共用同一對K、V,用數學公式表示為:

$$
\begin{aligned}
    o_t &= [o_t^{(1)}, o_t^{(2)}, \ldots, o_t^{(h)}] \\
    o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_{\leq t}^{(\lceil s\frac{g}{h} \rceil)}, v_{\leq t}^{(\lceil s\frac{g}{h} \rceil)}) \\
    &\equiv \sum_{i \leq t} \frac{\exp(q_t^{(s)} k_{(\lceil s\frac{g}{h} \rceil)i}^\top)}{\sum_{i \leq t} \exp(q_t^{(s)} k_{(\lceil s\frac{g}{h} \rceil)i}^\top)} v_{(\lceil s\frac{g}{h} \rceil)i} \\
    q_t^{(s)} &= x_t W_q^{(s)} \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k} \\
    k_i^{(\lceil s\frac{g}{h} \rceil)} &= x_i W_k^{(\lceil s\frac{g}{h} \rceil)} \in \mathbb{R}^{d_k}, \quad W_k^{(\lceil s\frac{g}{h} \rceil)} \in \mathbb{R}^{d \times d_k} \\
    v_i^{(\lceil s\frac{g}{h} \rceil)} &= x_i W_v^{(\lceil s\frac{g}{h} \rceil)} \in \mathbb{R}^{d_v}, \quad W_v^{(\lceil s\frac{g}{h} \rceil)} \in \mathbb{R}^{d \times d_v}
\end{aligned}
$$

這裡的 \( \lceil \cdot \rceil \) 是向上取整符號。GQA提供了從MHA到MQA的自然過渡,當 \( g = h \) 時就是MHA,當 \( g = 1 \) 時就是MQA。當 \( 1 < g < h \) 時,它只將KV快取壓縮到 \( \frac{g}{h} \),壓縮率不如MQA,但同時也提供了更大的靈活性,效果上更有保障。

GQA最知名的使用者,大概是Meta開源的LLAMA2-70B,以及LLAMA3全系列,此外使用GQA的模型還有TigerBot、DeepSeek-V1、StarCoder2、Yi、ChatGLM2、ChatGLM3等,相比使用MQA的模型更多(ChatGLM雖然在它的介紹中說自己是MQA,但實際是 \( g=2 \) 的GQA)。
在llama2/3-70B中,GQA的 \( g=8 \),其他用了GQA的同體量模型基本上也保持了這個設置,這並非偶然,而是同樣出於推理效率的考慮。我們知道,70B這個體量的模型,如果不進行極端的量化,那麼不可能部署到單卡(A100/H100 80G)上。單卡不行,那麼就能單機了,一般情況下一台機可以裝8張卡,剛才我們說了,Attention的每個Head實際上是獨立運算然後拼接起來的,當 \( g=8 \) 時,正好可以每張卡負責計算一組K、V對應的Attention Head,這樣可以在盡可能保證K、V多樣性的同時最大程度上減少卡間通信。

MLA

有了MHA、MQA、GQA的鋪墊,我們理解MLA(多頭潛在注意力)就相對容易一些了。DeepSeek-V2的技術報告裡是從低秩投影的角度引入MLA的,以至於有部分讀者提出「為什麼LoRA提出這麼久了,直到MLA才提出對KV快取低秩分解的做法」之類的疑問。

然而,筆者認為低秩投影這個角度並不貼近本質,因為要說低秩投影的話,事實上只要我們將GQA的所有K、V疊在一起,就會發現GQA也相當於在做低秩投影:

$$
\begin{aligned}
    [k_i^{(1)}, \dots, k_i^{(g)}, v_i^{(1)}, \dots, v_i^{(g)}] &\equiv c_i \in \mathbb{R}^{g(d_k+d_v)} \\
    c_i &= x_i[W_k^{(1)}, \dots, W_k^{(g)}, W_v^{(1)}, \dots, W_v^{(g)}] \in \mathbb{R}^{d \times g(d_k+d_v)}
\end{aligned}
$$

這裡我們將所有\( k_i^{(s)} \)和\( v_i^{(s)} \)拼在一起記為\( c_i \),相應的投影矩陣也拼在一起記為\( W_c \)。注意到一般都有\( d_c = g(d_k + d_v) < d \),所以\( x_i \)到\( c_i \)的轉換就是一個低秩投影。因此,MLA的本質改進不是低秩投影,而是在低秩投影之後的處理。

Part 1

GQA在投影之後做了什麼呢?首先它將向量對半分為兩份分別作為K、V,然後每一份又均分為\( g \)份,每一份複製\( h/g \)次,以此來「湊」夠\( h \)個Attention Head所需要的K、V。我們知道分割、複製都是簡單的線性變換,所以MLA的第一個想法是將這些簡單的線性變換換成一般的線性變換,以增強模型的能力:

$$
\begin{aligned}
    o_t &= [o_t^{(1)}, o_t^{(2)}, \ldots, o_t^{(h)}] \\
    o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_t^{(s)}, v_t^{(s)}) \\
    &\equiv \sum_{i \leq t} \frac{\exp(q_t^{(s)} k_i^{(s)\top})}{\sum_{i \leq t} \exp(q_t^{(s)} k_i^{(s)\top})} v_i^{(s)} \\
    k_i^{(s)} &= c_i W_k^{(s)} \in \mathbb{R}^{d_k}, \quad W_k^{(s)} \in \mathbb{R}^{d_c \times d_k} \\
    v_i^{(s)} &= c_i W_v^{(s)} \in \mathbb{R}^{d_v}, \quad W_v^{(s)} \in \mathbb{R}^{d_c \times d_v} \\
    q_t^{(s)} &= x_t W_q^{(s)} \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k}
\end{aligned}
$$

理論上這樣能增加模型能力,但別忘了GQA的主要目的是減少KV快取。MLA的這個做法,通過不同的投影矩陣讓所有的K、V Head都變得各不相同,那麼KV快取的大小就恢復成跟MHA一樣大了,違背了GQA的初衷。

對此,MLA發現,我們可以結合Dot-Attention的具體形式,通過一個簡單但不失巧妙的恒等變換來規避這個問題。首先,在訓練階段還是照常進行,此時優化空間不大;然後,在推理階段,我們利用

$$
q_t^{(s)}k_i^{(s)\top} = (x_t W_q^{(s)})(c_i W_k^{(s)})^\top = x_t (W_q^{(s)} W_k^{(s)\top}) c_i^\top
$$

這意味著推理階段,我們可以將\( W_q^{(s)} W_k^{(s)\top} \)合併起來作為Q的投影矩陣,那麼\( c_i \)則取代了原本的\( k_i^{(s)} \),同理,在\( o_t \)後面我們還有一個投影矩陣,於是\( v_i^{(s)} \)的\( W_v^{(s)} \)也可以吸收到後面的投影矩陣中去,於是等效地\( v_i^{(s)} \)也可以用\( c_i \)代替,也就是說此時KV快取只需要存下所有的\( c_i \)就行,而不必存下所有的\( k_i^{(s)} \)、\( v_i^{(s)} \)。注意到\( c_i \)跟\( s \)無關,也就是說是所有頭共用的,即MLA在推理階段它可以恒等變換為一個MQA。

再次強調,本文的主題一直都是減少KV快取,那到目前為止,MLA做到了什麼呢?答案是通過不同的投影矩陣來增強了GQA的能力,並且推理時可以保持同樣大小的KV快取。那麼反過來,如果我們只需要跟GQA相近的能力,那麼是不是就可以再次減少KV快取了?換言之,\( d_c \)沒必要取\( g(d_k + d_v) \),而是取更小的值(DeepSeek-V2取了512),從而進一步壓縮KV快取,這就是MLA的核心思想。

(注:這裡有一個細節,就是\( W_q^{(s)} W_k^{(s)\top} \)合併成一個矩陣的恒等變換,理論上只有在無限精度下才成立,實際上如果我們使用單精度尤其是BF16的話,經過變換後的精度損失往往還是挺明顯的,經過多層累積後可能放大到比較可觀的程度,這裡可能要根據實際誤差看要不要做一些後處理。)

Part 2

一切似乎都很完美,看上去一個又好又省的理想設計就要出爐了。不過別急,當我們再深入思考一下就會發現,到目前為止的MLA有一個難以繞開的缺陷——不相容RoPE(旋轉位置編碼)。

剛才我們提到,MLA之所以能保持與GQA相同大小的KV緩存,其關鍵一步是“將\(W_q^{(s)} W_k^{(s)^\top}\)”合併成一個與位置無關的矩陣作為Q的投影矩陣。但是,如果加入RoPE(旋轉位置編碼),這一步就無法實現了。RoPE是一個與位置相關的\(d_k \times d_k\)的分塊對角矩陣\(R_m\),滿足\(R_m R_n^\top = R_{m-n}\)。在MLA中加入RoPE後,會使得\(W_q^{(s)} W_k^{(s)^\top}\)之間多插入了一個項\(R_{t-i}\):

$$
q_i^{(s)} = x_i W_q^{(s)} R_i, \quad k_i^{(s)} = c_i W_k^{(s)} R_i \\
q_t^{(s)} k_i^{(s)^\top} = (x_t W_q^{(s)} R_t)(c_i W_k^{(s)} R_i)^\top = x_t (W_q^{(s)} R_{t-i} W_k^{(s)^\top}) c_i^\top
$$

這裡的\(W_q^{(s)} R_{t-i} W_k^{(s)^\top}\)就無法合併為一個固定的投影矩陣了(與位置差\(t-i\)相關),從而MLA的想法無法與RoPE結合實現。

前段時間,我也很榮幸地與DeepSeek團隊討論過這個問題,但這個問題可以說非常本質,所以當時我實際上也沒能提出什麼有效的建議。最簡單的方式是放棄RoPE,換用其他基於Attention Bias的位置編碼,如ALIBI,但DeepSeek的實驗顯示它明顯不如RoPE(注意,MLA不是不能加RoPE,而是加了RoPE之後無法用恒等變換技巧來減少KV緩存)。我也提議過換Sandwich,它不像ALIBI單調衰減到負無窮,估計效果會好些,但感覺是治標不治本。還有一個折中的辦法是將\(q_i^{(s)}\)的輸入也改為\(c_i\),然後RoPE加在\(c_i\)之後,即:

$$
q_i^{(s)} = c_i R_i W_q^{(s)}, \quad k_i^{(s)} = c_i R_i W_k^{(s)}
$$
這樣\(R_i\)就可以吸收到\(c_i\)中去,但這樣就沒有\(R_m R_n^\top = R_{m-n}\)的運算了,此時的RoPE不再是通過絕對位置實現相對位置,而單純是加在Q、K上的絕對位置資訊,讓模型自己想辦法提煉相對位置資訊。
最後發布的MLA,採取了一種混合的方法——每個注意力頭的Q、K新增\( d_r \)個維度用來添加RoPE,其中K新增的維度每個頭共用:

$$
o_t^{(s)} = \text{Attention}(q_t^{(s)}, k_{\leq t}^{(s)}, v_{\leq t}^{(s)}) \\
q_t^{(s)} = [x_t W_{qc}^{(s)}, x_t W_{qr}^{(s)} R_t] \in \mathbb{R}^{d_k + d_r}, \quad W_{qc}^{(s)} \in \mathbb{R}^{d \times d_k}, \quad W_{qr}^{(s)} \in \mathbb{R}^{d \times d_r} \\
k_i^{(s)} = [c_i W_{kc}^{(s)}, x_i W_{kr}^{(s)} R_i] \in \mathbb{R}^{d_k + d_r}, \quad W_{kc}^{(s)} \in \mathbb{R}^{d_c \times d_k}, \quad W_{kr}^{(s)} \in \mathbb{R}^{d \times d_r} \\
v_i^{(s)} = c_i W_{vc}^{(s)} \in \mathbb{R}^{d_v}, \quad W_{vc}^{(s)} \in \mathbb{R}^{d_c \times d_v}
$$

這樣一來,沒有RoPE的維度就可以重複「Part 1」的操作,在推理時KV快取只需要存下所有的\( c_i \),新增的帶RoPE的維度就可以用來補充位置資訊,並且由於所有頭共用,所以也就只有在K快取這裡增加了\( d_r \)個維度,原論文取了\( d_r = \frac{d_k}{2} = 64 \),相比原本的\( d_c = 512 \),增加的幅度不大。

Part 3

最後有一個細節,就是MLA的最終版本,還將Q的輸入也改為了低秩投影形式,這與減少KV快取無關,主要是為了減少訓練期間參數量和相應的梯度(原論文說的是啟動值,個人表示不大理解)所占的顯存:

$$
\begin{aligned}
    o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_{\leq t}^{(s)}, v_{\leq t}^{(s)}) \\
    q_t^{(s)} &= [c'_i W_{qc}^{(s)}, c'_i W_{qr}^{(s)} R_i] \in \mathbb{R}^{d_k + d_r}, \quad W_{qc}^{(s)} \in \mathbb{R}^{d'_c \times d_k}, \quad W_{qr}^{(s)} \in \mathbb{R}^{d'_c \times d_r} \\
    k_i^{(s)} &= [c_i W_{kc}^{(s)}, x_i W_{kr}^{(s)} R_i] \in \mathbb{R}^{d_k + d_r}, \quad W_{kc}^{(s)} \in \mathbb{R}^{d_c \times d_k}, \quad W_{kr}^{(s)} \in \mathbb{R}^{d \times d_r} \\
    v_i^{(s)} &= c_i W_{vc}^{(s)} \in \mathbb{R}^{d_v}, \quad W_{vc}^{(s)} \in \mathbb{R}^{d_c \times d_v} \\
    c'_i &= x_i W'_{c} \in \mathbb{R}^{d'_c}, \quad W'_{c} \in \mathbb{R}^{d \times d'_c}
\end{aligned}
$$

注意\( k_i^{(s)} \)中的第二項,帶RoPE的部分,其輸入還是\( x_i \)而不是\( c_i \),這裡保持了原論文的設定,不是筆誤,\( d'_c \)原論文的取值是1536,跟\( d_c = 512 \)不同。同時,我們把帶RoPE的MHA放在下面,方便大家對比:

$$
\begin{aligned}
    o_t^{(s)} &= \text{Attention}(q_t^{(s)}, k_{\leq t}^{(s)}, v_{\leq t}^{(s)}) \\
    q_t^{(s)} &= x_i W_q^{(s)} R_i \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k} \\
    k_i^{(s)} &= x_i W_k^{(s)} R_i \in \mathbb{R}^{d_k}, \quad W_k^{(s)} \in \mathbb{R}^{d \times d_k} \\
    v_i^{(s)} &= x_i W_v^{(s)} \in \mathbb{R}^{d_v}, \quad W_v^{(s)} \in \mathbb{R}^{d \times d_v}
\end{aligned}
$$

可以發現,其實在訓練階段,除了多了一步低秩投影以及只在部分維度加RoPE外,MLA與Q、K的Head Size由\( d_k \)換成\( d_k + d_r \)的MHA基本無異。

小結

本文簡單概述了多頭注意力的演變歷程,特別是從MHA向MQA、GQA,最終到MLA的變化理念,最後詳細展開了對MLA的介紹。在本文中,MLA被視為GQA的一般化,它用投影矩陣的方式替代了GQA的分割、重複,並引入了一個恆等變換技巧來進一步壓縮KV快取,同時採用了一種混合方法來相容RoPE。總的來說,MLA稱得上是一種非常實用的注意力變體,其創新在於如何在保持推理效率的同時減少存儲和計算資源的需求。

這種設計不僅顯示了深入的技術見解,也反映出當前大型語言模型推理優化的趨勢——即在最大限度減少資源消耗的同時,盡可能保持或提升模型的性能。未來的研究可能會繼續在這條路上進行探索,尋找更有效的方法來解決推理時的瓶頸問題,特別是在處理更大規模的數據和模型時。這些技術的進步將對AI的實用性和可達性產生深遠的影響。









2024年5月13日星期一

Transformer 語言模型內部運作機制的技術

這篇論文是一篇全面性的綜述,詳細介紹了目前用來解釋 Transformer 語言模型內部運作機制的技術。本文聚焦在生成式的 decoder-only 架構。作者在結論部分概述了這些模型的已知內部機制,揭示了當前流行方法和這個領域的積極研究方向之間的聯繫。 

論文出處: https://arxiv.org/pdf/2405.00208

數學符號說明

在本文中,我們採用以下數學符號:

- \( n \):序列長度

- \( V \):詞彙表

- \( t = \langle t_1, t_2, \ldots, t_n \rangle \):輸入的 token 序列

- \( x = \langle x_1, x_2, \ldots, x_n \rangle \):輸入的 token 嵌入序列

- \( d \):模型維度

- \( d_h \):注意力頭維度

- \( d_{FFN} \):前饋網路維度

- \( H \):注意力頭數量

- \( L \):層數

- \( x_{l,i} \in \mathbb{R}^d \):在位置 \( i \),第 \( l \) 層的殘差串流狀態

- \( x_{\text{mid},l,i} \in \mathbb{R}^d \):在位置 \( i \),第 \( l \) 層,經過注意力區塊後的殘差串流狀態

- \( f_c(x) \in \mathbb{R}^d \):在最後一個位置,組件 \( c \) 的輸出表示

- \( f_l(x) = x_{l,n} \in \mathbb{R}^d \):在最後一個位置,第 \( l \) 層的殘差串流狀態

- \( A_{l,h} \in \mathbb{R}^{n \times n} \):在第 \( l \) 層第 \( h \) 個注意力頭的注意力矩陣

- \( W_{l,h}^Q, W_{l,h}^K, W_{l,h}^V \in \mathbb{R}^{d \times d_h} \):在第 \( l \) 層第 \( h \) 個注意力頭的 queries、keys 和 values 權重矩陣

- \( W_{l,h}^O \in \mathbb{R}^{d_h \times d} \):在第 \( l \) 層第 \( h \) 個注意力頭的輸出權重矩陣

- \( W_{l}^{\text{in}} \in \mathbb{R}^{d \times d_{FFN}}, W_{l}^{\text{out}} \in \mathbb{R}^{d_{FFN} \times d} \):在第 \( l \) 層前饋網路的輸入和輸出權重矩陣

- \( W_E \in \mathbb{R}^{d \times |V|} \) 和 \( W_U \in \mathbb{R}^{|V| \times d} \):嵌入(Embedding)和去嵌入(Unembedding)矩陣


一個僅解碼器的模型 \( f \) 有 \( L \) 層,對一個序列的嵌入 \( x = \langle x_1, x_2, \ldots, x_n \rangle \) 進行操作,這些嵌入表示 tokens \( t = \langle t_1, t_2, \ldots, t_n \rangle \)。每個嵌入 \( x \in \mathbb{R}^d \) 是嵌入矩陣 \( W_E \in \mathbb{R}^{|V| \times d} \) 的一個列向量,其中 \( V \) 是模型詞彙表。中間層的表示,例如在位置 \( i \) 和層 \( l \),表示為 \( x_{l,i} \)。\( X \in \mathbb{R}^{n \times d} \) 代表將序列 \( x \) 表示為一個矩陣,嵌入堆疊為列。同樣地,對於中間表示,\( X_{l, \leq i} \) 是層 \( l \) 的表示矩陣,最多到位置 \( i \)。

遵循最近關於Transformers可解釋性的文獻,本文採用殘差串流的觀點來呈現架構。在這個觀點下,每個輸入嵌入都會透過注意力區塊和前饋網路區塊的向量相加來更新,產生殘差串流狀態(或中間表示)。最後一層的殘差串流狀態會透過去嵌入矩陣 \( W_U \in \mathbb{R}^{d \times |V|} \) 投影到詞彙空間,並透過softmax函數正規化以獲得詞彙上的機率分布,從中取樣出新的token。



在Transformer層中,LayerNorm是一種常見的操作,用於穩定深度神經網路的訓練過程。給定一個表示 \( z \),LayerNorm的計算為 \((z-\mu(z))/\sigma(z) \odot \gamma + \beta\),其中 \( \mu \) 和 \( \sigma \) 分別計算平均值和標準差,\( \gamma \in \mathbb{R}^d \) 和 \( \beta \in \mathbb{R}^d \) 是學習到的逐元素轉換和偏差。LayerNorm可以從幾何角度解釋,將減去平均值的操作視為將輸入表示投影到由法向量 \([1, 1, \ldots, 1] \in \mathbb{R}^d\) 定義的超平面上,然後將結果表示映射到 \(\sqrt{d}\) 範數的超球面。

注意力區塊由多個注意力頭組成。在解碼步驟 \( i \),每個注意力頭從先前位置(≤ \( i \))的殘差串流讀取,決定要關注哪些位置,從那些位置收集資訊,最後將其寫入當前的殘差串流。

注意力頭計算如下:


\[ \text{Attn}_{l,h}(X_{l-1, \leq i}) = \sum_{j \leq i} a_{l,h,i,j} x_{l-1,j} W_{l,h}^V W_{l,h}^O = \sum_{j \leq i} a_{l,h,i,j} x_{l-1,j} W_{l,h}^{OV} \]


可學習的權重矩陣 \( W_{l,h}^V \in \mathbb{R}^{d \times d_h} \) 和 \( W_{l,h}^O \in \mathbb{R}^{d_h \times d} \) 合併為 OV 矩陣 \( W_{l,h}^V W_{l,h}^O = W_{l,h}^{OV} \in \mathbb{R}^{d \times d} \),也稱為 OV (output-value) 電路。對於每個查詢(query)\( i \),給定當前的鍵(key)(\( \leq i \)),注意力權重計算為:


\[ a_{l,h,i} = \text{softmax}\left( \frac{x_{l-1,i} W_{l,h}^Q (X_{l-1, \leq i} W_{l,h}^K)^T}{\sqrt{d_k}} \right) \]


其中 \( W_{l,h}^Q \in \mathbb{R}^{d \times d_h} \) 和 \( W_{h}^Q (W_{h}^K)^T = W_{h}^{QK} \in \mathbb{R}^{d \times d} \) 組合為 QK (query-key) 電路 \[ W_{h}^Q (W_{h}^K)^T = W_{h}^{QK} \in \mathbb{R}^{d \times d} \]

QK 和 OV 電路可以視為負責分別從殘差串流讀取和寫入的單元。注意力區塊的輸出是各個注意力頭的總和,隨後加回到殘差串流:


\[ \text{Attn}_l(X_{l-1, \leq i}) = \sum_{h=1}^H \text{Attn}_{l,h}(X_{l-1, \leq i}) \]

\[ x_{\text{mid},l,i} = x_{l-1,i} + \text{Attn}_l(X_{l-1, \leq i}) \]


前饋網路區塊由兩個可學習的權重矩陣組成:\( W_{l}^{\text{in}} \in \mathbb{R}^{d \times d_{FFN}} \) 和 \( W_{l}^{\text{out}} \in \mathbb{R}^{d_{FFN} \times d} \)。\( W_{l}^{\text{in}} \) 從殘差串流狀態 \( x_{\text{mid},l,i} \) 讀取,其結果通過一個逐元素的非線性激活函數 \( g \),產生神經元激活。這些激活再由 \( W_{l}^{\text{out}} \) 轉換以產生輸出 \( \text{FFN}(x_{\text{mid},i}) \),然後加回到殘差串流:


\[ \text{FFN}_l(x_{\text{mid},l,i}) = g(x_{\text{mid},l,i} W_{l}^{\text{in}}) W_{l}^{\text{out}} \]

\[ x_{l,i} = x_{\text{mid},l,i} + \text{FFN}_l(x_{\text{mid},l,i}) \]


前饋網路的計算可以等同於鍵值記憶體檢索,\( W_{l}^{\text{in}} \) 中的列向量充當輸入序列上的模式檢測器(鍵),每個神經元激活加權了 \( W_{l}^{\text{out}} \) 的列向量(值)。元素式非線性在前饋網路內部創建了一個特權基底,鼓勵特徵與基底方向對齊。

預測層包含一個去嵌入矩陣 \( W_U \in \mathbb{R}^{d \times |V|} \),有時還有一個偏差。最後一個殘差串流狀態透過這個線性映射轉換,將表示轉換為下一個 token 的 logits 分布,再通過 softmax 函數轉換為概率分布。由於模型組件透過相加與殘差串流交互作用,未正規化的分數(logits)是透過組件輸出的線性投影獲得的。基於線性變換的性質,可以重新排列傳統的前向傳遞公式,使每個模型組件直接貢獻於預測的 token 的 logits:


\[ f(x) = x_L^n W_U = \left( \sum_{l=1}^L \sum_{h=1}^H \text{Attn}_{l,h}(X_{l-1}^{\leq n}) + \sum_{l=1}^L \text{FFN}_l(x_{\text{mid},l}^n) + x^n \right) W_U \]

\[ = \sum_{l=1}^L \sum_{h=1}^H \text{Attn}_{l,h}(X_{l-1}^{\leq n}) W_U + \sum_{l=1}^L \text{FFN}_l(x_{\text{mid},l}^n) W_U + x^n W_U \]


注意力頭 logits 更新 前饋網路 logits 更新

這個分解在定位負責預測的組件時扮演重要角色,因為它允許測量每個組件對預測 token 的 logits 的直接貢獻。

殘差網路就像淺層網路的集成,每個子網路定義了計算圖中的一條路徑。將前向傳遞分解為:


\[ f(x) = xW_U + xW_1^{OV} W_U + xW_1^{OV} W_2^{OV} W_U + xW_2^{OV} W_U \]


直接路徑 完整 OV 電路

虛擬注意力頭 (V-composition)

連結輸入嵌入與去嵌入矩陣的路徑稱為直接路徑。穿過單個 OV 矩陣的路徑稱為完整 OV 電路。涉及兩個注意力頭的路徑稱為虛擬注意力頭,執行 V-composition,因為兩個頭的順序寫入和讀取被視為 OV 矩陣的組合。

理解語言模型的內部運作機制意味著定位前向傳遞中負責特定預測的元素(輸入元素、表示和模型組件)。本文介紹了兩種不同類型的方法,允許定位模型行為:輸入歸因和模型組件歸因。

輸入歸因方法通常用於通過估計輸入元素(在語言模型的情況下是 tokens)對定義模型預測的貢獻來定位模型行為。對於像語言模型這樣的神經網路模型,梯度資訊經常被用作歸因目的的自然度量。基於梯度的歸因在這個上下文中涉及 Transformer 在點 \( x \) 處的一階泰勒展開,表示為 \( \nabla f(x) \cdot x + b \)。結果梯度 \( \nabla f_w(x) \in \mathbb{R}^{n \times d} \) 直觀地捕捉了模型對輸入中的每個元素在預測 token \( w \) 時的敏感度。雖然歸因分數是針對輸入 token 嵌入的每個維度計算的,但它們通常在 token 層面匯總,以獲得對個別 token 影響的更直觀概述。這通常是透過取梯度向量相對於第 \( i \) 個輸入嵌入的 \( L_p \) 範數來完成的:


\[ A_{\text{Grad},f_w}^{(x \rightarrow t_i)} = \| \nabla_{x_i} f_w(x) \|_p \]


透過梯度向量與輸入嵌入 \( \nabla_{x_i} f_w(x) \cdot x_i \) 的點積,稱為梯度 × 輸入方法,可以將這種敏感度轉化為重要性估計。然而,這些方法已知會出現梯度飽和和碎裂問題。這一事實促使引入了積分梯度和 SmoothGrad 等方法來過濾嘈雜的梯度資訊。例如,積分梯度近似基線輸入 \( \tilde{x} \) 和輸入 \( x \) 之間直線路徑上的梯度積分:


\[ \int_0^1 \nabla_{x_i} f_w(\tilde{x} + \alpha(x - \tilde{x})) d\alpha \]


隨後提出了適應文本輸入離散性的改編。最後,基於層次相關傳播 (Layer-wise Relevance Propagation, LRP) 的方法已廣泛應用於研究基於 Transformer 的語言模型。這些方法對梯度傳播使用自定義規則,以分解每一層的組件貢獻,確保它們的總和在整個網路中保持不變。

另一個流行的方法族是透過添加噪聲或消融輸入元素並測量對模型預測的結果影響來估計輸入重要性。例如,可以移除位置 \( i \) 處的輸入 token,結果機率差異 \( f_w(x) - f_w(x_{-x_i}) \) 可以用作其重要性的估計。如果給予 \( w \) 的 logit 或機率沒有改變,我們可以得出第 \( i \) 個 token 沒有影響的結論。

雖然原始模型內部資料(如注意力權重)通常被認為提供了不忠實的模型行為解釋,但最近的方法提出了注意力權重的替代方案來測量中間 token 級別的歸因。其中一些替代方案包括使用值加權向量和輸出值加權向量的範數,或使用向量距離來估計貢獻。这些方法的共同策略涉及使用注意力展開等技術聚合反映上下文混合模式的中間每層歸因,得到輸入歸因分數。

一個重要的限制是,歸因的輸出 token 屬於一個大的詞彙空間,在下一個詞預測中經常有語義上等價的 token 競爭機率質量。在這種情況下,歸因分數很可能誤代了驅動模型預測的幾個重疊因素,如語法正確性和語義適當性。最近的工作通過提出這些方法的對比公式來解決這個問題,為模型預測 token \( w \) 而不是替代 token \( o \) 提供反事實解釋。

另一個輸入歸因的維度涉及識別影響推理時特定模型預測的有影響力的訓練樣本。這些方法通常被稱為訓練數據歸因 (TDA) 或實例歸因方法,並被用來識別數據中的人工因素和語言模型預測中偏差的來源。最近的方法提出通過訓練運行模擬來執行 TDA。雖然已建立的 TDA 方法的適用性受到質疑,特別是由於其低效率,但這個領域最近的工作產生了更有效的方法,可以大規模應用於大型生成模型。

早期關於 Transformer 語言模型組件重要性的研究強調了模型能力的高度稀疏性。例如,即使刪除模型中相當一部分的注意力頭,也可能不會使其下游性能惡化。這些結果激發了一條新的研究路線,研究語言模型中的各種組件如何貢獻於其廣泛的能力。

讓我們稱組件 \( c \)(注意力頭或前饋網路)在特定層上對最後一個 token 位置的輸出表示為 \( f_c(x) \)。等式 (10) 中提出的分解允許我們測量每個模型組件對輸出 token \( w \in V \) 的直接 logit 歸因 (DLA):


\[ A_{DLA,f_w}^{(x \rightarrow c)} = f_c(x) W_U[:,w] \]


其中 \( W_U[:,w] \) 是 \( W_U \) 的第 \( w \) 列,即 token \( w \) 的去嵌入向量。實際上,組件 \( c \) 的 DLA 表示 \( c \) 對預測 token 的 logit 的貢獻,使用第 2.2 節中描述的模型組件的線性特性。



我們可以將模型的計算視為一個因果模型,並使用因果工具來闡明每個模型組件 \( c \in C \) 在不同位置對預測的貢獻。因果模型可以看作是一個有向無環圖 (DAG),其中節點是模型計算,邊是激活。



我們可以通過改變前向傳遞中由模型組件計算的某些節點值 \( f_c(x) \) 到另一個值 \( \tilde{h} \) 來干預模型,這被稱為激活修補。我們可以使用 do 算子表示這個干預:\( f(x \mid \text{do}(f_c(x) = \tilde{h})) \)。然後我們測量修補後預測的變化:


\[ A_{\text{Patch}, f}^{(x \rightarrow c)} = \text{diff}(f(x), f(x \mid \text{do}(f_c(x) = \tilde{h}))) \]


其中 \(\text{diff}(\cdot, \cdot)\) 函數的常見選擇包括 KL 散度和 logit/機率差異。修補後的激活 (\(\tilde{h}\)) 可以來自各種來源。一種常見的方法是創建一個具有分布 \(P_{\text{patch}}\) 的反事實數據集,其中一些關於任務的輸入信號被反轉。這種方法會導致兩種不同類型的消融:

- 重採樣干預,其中修補後的激活是從 \(P_{\text{patch}}\) 的單個樣本中獲得的,即 \(\tilde{h} = f_c(\tilde{x}), \tilde{x} \sim P_{\text{patch}}\)。

- 平均干預,其中多個 \(P_{\text{patch}}\) 樣本的平均激活用於修補,即 \(\tilde{h} = \mathbb{E}_{\tilde{x} \sim P_{\text{patch}}}[f_c(\tilde{x})]\)。

另外,修補激活的其他來源包括:

- 零干預,其中激活被替換為空向量,即 \(\tilde{h} = 0\)。

- 噪聲干預,其中新的激活是通過在受擾動的輸入上運行模型獲得的,例如 \(\tilde{h} = f_c(x + \epsilon), \epsilon \sim N(0, \sigma^2)\)。

在設計因果干預實驗時需要考慮的一個重要因素是設置的生態效度,因為零消融和噪聲消融可能使模型偏離自然激活分布,最終破壞組件分析的有效性。

機制可解釋性 (Mechanistic Interpretability) 子領域專注於將神經網路逆向工程為人類可理解的算法。MI 的最新研究旨在揭示電路的存在,電路是一組共同交互作用以解決任務的模型組件(子圖)。激活修補、logit 歸因和注意力模式分析是電路發現的常用技術。

邊緣修補和路徑修補利用每個模型組件輸入是其殘差串流中先前組件輸出之和這一事實,並考慮直接連接成對模型組件節點的邊。路徑修補將邊緣修補方法推廣到多條邊,允許更細粒度的分析。例如,使用等式中描述的淺層網路的前向傳遞分解,我們可以將圖中的單層 Transformer 視為由以下組件組成:


\[ f(x) = \text{Attn}(X^{\leq n}) W_u + \text{FFN}(\text{Attn}(X^{\leq n}) + x_n)W_u + x_n W_u \]



這裡的各個路徑包括:

- 直接從Attn到logits。

- 通過FFN再到logits的間接路徑。

其中每個發送節點Attn\( _L(X_{L-1}^{\leq n}) \)的副本都與單個路徑相關。在這個例子中,分別修補每個發送節點副本允許我們估計Attn\( _L(X_{L-1}^{\leq n}) \)對輸出logits\( f(x) \)的直接和間接效應。一般來說,我們可以將路徑修補應用於網路中的任何路徑,並測量頭部之間的組合、FFN或這些組件對logits的影響。

基於因果干預的電路分析存在幾個缺點:

1. 它需要為要評估的任務設計輸入模板,以及反事實數據集(即定義\( P_{\text{patch}} \))方面的大量努力。

2. 在獲得組件重要性估計後,需要人工檢查和領域知識來分離重要的子圖。

3. 已經表明,干預會在下游組件的行為中產生二階效應,在某些情況下甚至會引發類似於自我修復的補償行為。這種現象會使得難以得出關於每個組件作用的結論。

為了克服這些限制,Conmy等人提出了一種自動電路發現(ACDC)算法,通過迭代移除計算圖中的邊來自動識別電路的過程。然而,這個過程需要大量的前向傳遞(每個修補元素一次),在研究大型模型時變得不切實際。

修補的一個有效替代方法是基於梯度的方法,這些方法已經擴展到超越輸入歸因,以計算中間模型組件的重要性。例如,給定token預測\( w \),為了計算中間層\( l \)的歸因,表示為\( f_l(x) \),計算梯度\( \nabla f_w(f_l(x)) \)。Sarti等人將等式中的對比梯度歸因公式擴展到使用單次前向和後向傳遞來定位對正確延續的預測貢獻大於錯誤延續的組件。Nanda等人提出了邊緣歸因修補(EAP),包括修補前後預測差異的線性近似,以估計計算圖中每個邊的重要性。這種方法的主要優點是它只需要兩次前向傳遞和一次後向傳遞就可以獲得圖中每個邊的歸因分數。

另一個研究方向是在較低層次的神經網路中尋找可解釋的高層次因果抽象概念。這些方法涉及大量的計算搜索,並假設高層次變數與單元或神經元組對齊。為了克服這些限制,Geiger等人提出了分佈式對齊搜索(Distributed Alignment Search, DAS),它在通過梯度下降找到的低層次表示空間的非基底對齊子空間上執行分佈式交換干預(Distributed Intervention Interchange, DII)。DAS干預在使用語法評估尋找具有因果影響的特徵方面被證明是有效的,同時在分離實體的個別屬性的因果效應方面也有顯著效果。

最後,在Transformer語言模型的內部行為方面,本文總結了以下主要發現:

注意力區塊:

  • 位置頭:有些頭主要關注相對於正在處理的token的特定位置,如token本身、前一個token或下一個位置。
  • 子詞連接頭: 專門關注屬於與當前處理的token相同詞的前一個子詞token。
  • 語法頭: 一些頭關注具有與被處理token相關語法角色的token,明顯多於隨機基準。
  • 重複token:** 關注上下文中同一個token的先前出現。
  • 複製頭: OV矩陣表現出複製行為。
  • 歸納頭: 由兩個在不同層組合的頭組成,讓語言模型完成模式。一個早期的前一個token頭將第一個token A的資訊複製到B的殘差流,然後一個下游的歸納頭關注token B,增加B的可能性。
  • 複製抑制頭: 如果它們出現在上下文中並且當前殘差流正在自信地預測它,則減少它們關注的token的logit分數。

前饋網路區塊:

  • 神經元的輸入行為:有些神經元僅在特定位置範圍上激發;技能神經元,其激活與輸入提示的任務相關;概念特定神經元,其反應可用於預測上下文中概念的存在。
  • 神經元的輸出行為:有些神經元促進與特定語義和句法概念相關的token的預測;一小部分後層神經元負責做出在語言上可接受的預測;抑制不可能延續的神經元。
  • 多語義神經元: 早期層的大多數神經元專門用於n-gram集合,充當n-gram偵測器,大多數神經元在大量n-gram上激發。

殘差流:

  • 殘差流可以被視為Transformer中的主要通訊通道。直接路徑主要對應於bi-gram統計,而網路中的最新偏差根據詞頻轉移預測,促進高頻token。
  • 一些組件執行記憶體管理,以移除存儲在殘差流中的資訊。例如,有負特徵值的OV矩陣關注當前位置的注意力頭,以及輸入和輸出權重具有較大負餘弦相似性的前饋網路神經元。
  • 在殘差流中發現了離群值維度。這些維度展現出相對於其他維度的大幅度,與各向異性表示的生成相關聯。消融離群值維度已被證明會顯著降低下游性能,表明它們編碼任務特定的知識。

多組件行為:

  • 歸納機制: 是兩個組件(注意力頭)組合在一起以完成模式的一個明顯例子。最近的證據表明,多個注意力頭協同工作,在給定上下文樣本時創建描述任務的「函數」或「任務」向量。
  • Variengien 和 Winsor 研究了涉及回答可以在上下文中找到答案的請求的上下文檢索任務
  • 作者確定了一種在子任務和模型之間通用的高層次機制。具體而言,中間層處理請求,然後由後層的注意力頭執行從上下文中檢索實體的步驟。
  • 在 GPT-2 Small 中發現了用於間接賓語識別 (IOI) 任務的電路,主要包括:
    • 重複信號:重複token頭和涉及前一個token頭的歸納機制表明S(John)的重複性。這個資訊被最後位置的S-抑制頭讀取,它們在殘差流中寫入一個token信號,表明S被重複,以及S1 token的位置信號。
    • 名稱複製: 後層的名稱移動頭將它們在上下文中關注的名稱的資訊複製到最後的殘差流。然而,先前層S-抑制頭的信號修改了名稱移動頭的query,使得重複的名稱(在S1和S2中)受到較少關注,有利於複製間接賓語(IO),從而推動其預測。


這篇論文全面而深入地介紹了目前用於解釋 Transformer 語言模型內部運作的技術,並總結了通過這些方法得到的關於模型內部機制的見解。作者強調,雖然在可解釋性研究方面取得了顯著進展,但將這些見解應用於調試和改進未來模型的安全性和可靠性,為開發人員和用戶提供更好的工具來與之交互並理解影響其預測的因素,仍然是一個巨大的挑戰。未來可解釋性研究的發展將面臨從在模型組件空間運作的方法和分析轉向人類可解釋空間(即從模型組件到特徵和自然語言解釋)的挑戰性任務,同時仍然忠實地反映模型行為。

此外,跨學科研究將在擴大可解釋性分析的範圍方面發揮關鍵作用,以考慮從人的角度看模型解釋的感知和交互維度。最終,作者認為,確保對先進語言模型的內部機制的開放和便利訪問,將仍然是這一領域未來進展的基本先決條件。

這篇綜述論文對於理解 Transformer 語言模型的內部運作機制,以及目前在這個領域的最新研究進展,提供了全面而詳盡的概覽。透過系統性地介紹各種可解釋性技術,並深入探討它們揭示的模型內部行為,本文為相關研究人員提供了寶貴的參考。

不過,正如作者所指出,將這些見解應用到實際中仍面臨諸多挑戰。未來的可解釋性研究需要在忠實反映模型行為的同時,努力向更加貼近人類直觀理解的方向發展。這需要不同學科領域的通力合作。此外,開放模型內部機制的訪問,或許是這一領域能夠取得突破性進展的關鍵。


2024年5月9日星期四

深層網路的異常低效率

摘要

Meta的FAIR實驗室研究了一個簡單的層剪枝策略,用於流行的開放權重預訓練大型語言模型(LLMs),發現在不同的問答基準上,性能幾乎沒有退化,直到移除很大一部分(高達一半)的層之後才出現退化。為了修剪這些模型,他們先根據不同層之間的相似度來確定要修剪的最佳層區塊;然後,為了 "修復" 損害,他們進行少量的微調。具體而言,他們使用參數高效微調(PEFT)方法,特別是量化和低秩適應器(QLoRA),這樣他們的每個實驗都可以在單個A100 GPU上執行。從實務的角度來看,這些結果表明層修剪方法可以補充其他PEFT策略,一方面進一步減少微調所需的計算資源,另一方面可以改善推論的記憶體和延遲。從科學的角度來看,這些LLMs對刪除層的魯棒性意味著,要麼目前的預訓練方法沒有正確地利用網路深層的參數,要麼淺層在儲存知識方面扮演關鍵角色。

論文參考: https://arxiv.org/pdf/2403.17887

1 介紹 

在過去幾年中,大型語言模型(LLMs)已經從單純的研究成果演變成有用的產品。這種演變在很大程度上可以歸因於用於訓練的資源規模的巨大增長。由於這些模型在訓練完成後可能會在推論模式下看到其總生命週期FLOP的大部分,因此LLM的預訓練不僅需要考慮高效(即計算最優)訓練,還需要推論感知。

那麼已經訓練過的模型呢?除了神經縮放定律所指出的訓練考量之外,還有許多後訓練技術可以用來降低LLMs的微調和推論成本和時間。特別是,量化可以通過減少模型權重的精度來減少模型的記憶體佔用,低秩適應器(LoRA)可以通過只更新模型參數的一小部分來降低微調和自定義的成本,或者修剪可以通過直接消除不必要的參數或連接來減少推論的記憶體佔用和時間。由於這三種策略或多或少是正交的,因此在資源受限的環境中,理想情況下我們希望能夠結合使用這三種後訓練效率技術。朝著這個方向,流行的QLoRA方法引入了一些創新,使得4位元量化的參數和LoRA微調可以一起工作。


基於這種組合,在這項工作中,他們使用開放權重LLMs研究了一種非常簡單的修剪策略。具體而言,他們開發了一種方法,該方法使用不同層之間的表示相似性來識別給定修剪分數的最佳修剪層;然後,在移除這些層之後,他們使用少量微調(使用QLoRA)來"修復"修剪引起的不匹配。他們的主要結果是,他們可以從模型中刪除大量最深層,而對下游性能的影響最小。例如,對於Llama-2-70B,在性能崩潰之前,他們可以消除大約一半的層。他們的策略概述和修剪Llama-2-70B的結果如圖1所示。


修剪不僅有助於減少推論的佔用,而且還有助於了解網路如何使用其參數:如果您可以移除網路的大部分區塊而對其性能影響最小,那麼這些區塊可能並不是很重要。具體而言,他們對刪除層的直覺來自考慮transformer架構的殘差結構。更詳細地說,最終層的輸出可以分解為所有模型層的輸出之和加上嵌入的輸入。如果這樣一個和具有大量獨立項,那麼刪除其中幾項應該不會顯著改變輸出。然而,由於這些項並非獨立——每一層都是下一層的輸入——因此,如果特定層的殘差貢獻很小,我們應該期望能夠刪除這些項。換句話說,如果每一層的輸出在層與層之間的變化不大。


與他們的層修剪一起,他們研究了不同分離下層表示之間的相似性,並廣泛發現,與淺層相比,更深層在質量上更類似於鄰近層(最後一層除外)。這表明了一個更簡單的修剪策略:從倒數第二層開始刪除層,並從深到淺繼續進行,直到刪除所需的層數。在這種情況下,他們發現,在用少量QLoRA微調修復損害之後,他們可以達到與更複雜的基於相似性的層修剪策略幾乎匹配的性能。這種方法的有效性證明了LLMs可能沒有正確利用網路深層中的參數。


總的來說,他們希望你帶走這三個要點:


• 模型的記憶體佔用和推論時間隨著移除的層數線性減少。這使得層修剪成為一個強大的工具,特別是如果模型的性能對刪除層具有魯棒性。

• 所有的效率方法——修剪、PEFT和量化——都可以有效地相互結合。因此,在這項工作中,每個實驗都在單個A100 GPU上執行,開源和學術界都可以輕鬆使用。

• 模型對移除深層的魯棒性、下游知識任務(如MMLU和BoolQ)性能的急劇轉變、以及自回歸損失相對於這些修剪分數的平滑行為,總體上表明淺層可能在儲存知識方面起著關鍵作用。

本文的結構如下。在§2中,他們首先對實際後訓練策略和激發他們工作的深度學習科學調查進行文獻回顧。然後,在§3中,他們直觀地解釋了他們的層修剪策略,並詳細解釋了他們的方法,而在§4中,他們迭代了所有的實驗結果。最後,在§5中,他們通過強調未來工作的方向來總結。具體的模型、微調、數據集和評估細節可以在附錄A中找到,評估消融實驗可以在附錄B中找到。


2 文獻回顧

在本節中,他們回顧了後訓練效率的實用策略,並討論了一些為他們的方法提供動機或洞見的科學研究:在§2.1中,他們首先回顧了修剪的歷史,然後討論了其在LLM中的現代應用;在§2.2中,他們將修剪與蒸餾進行對比,蒸餾是減少LLM參數數量的另一種策略;然後在§2.3中,他們討論了可以與他們的修剪策略結合使用的各種實用的高效微調和推理加速方法;最後在§2.4中,他們重點介紹了一些對LLM的一些深度相關統計特性的科學研究,這些研究與他們的結果相輔相成。


2.1 修剪

修剪是一種通過刪除不必要的參數(單個或成組)來減小已訓練的機器學習模型大小的方法。神經網路的修剪歷史悠久,最初的構想是,非結構化修剪技術通過根據預定義的標準刪除單個參數來稀疏化網路。例如,如果模型的某個參數的值非常小,那麼刪除它(即將其設置為零)可能對性能影響最小。受這一早期工作的啟發,現代研究人員開始探索這種非結構化修剪的不同標準,主要集中在計算機視覺模型上。具體而言開發了一種迭代修剪方法,用於交替修剪和微調網路,以達到更好的壓縮率和性能。

雖然這些模型變得更小了,但它們不一定更有效:通過根據標準刪除單個參數來稀疏化網路會導致不規則或偽隨機的稀疏模式,如果沒有專門為稀疏設計的硬體或庫,就很難加速。為此,開發了結構化修剪技術,以組的形式刪除不相關的參數,例如卷積網路中的特定通道或過濾器。隨著這增加了它們的實用相關性,研究人員開始在計算機視覺和預transformer NLP架構中探索結構化修剪。

隨著語言建模取得了前所未有的進展,最近的工作集中在將結構化修剪方法應用於Transformer。這些研究幾乎考慮了模型架構的每一個可能的組件來進行消除,方法包括丟棄注意力頭、丟棄層、修剪隱藏狀態、秩約簡大權重矩陣、用更小的密集矩陣替換稀疏權重矩陣、以及上述組的許多組合。

在先前也考慮transformer層丟棄的工作中,大多數研究BERT風格的模型,而他們考慮GPT風格的模型,這是用於大規模語言建模和生成的最常見模型。由於其雙向masked語言模型(MLM)目標,BERT風格的模型自然適合於理解任務,而GPT風格的模型由於其自回歸目標而更適合生成。雖然鑑於更強大的GPT風格模型,這種分歷已經受到質疑,但先前的工作發現BERT和GPT模型在單詞的層表示演變方面存在顯著的定性差異。總的來說,這表明層丟棄策略在兩個系列之間的行為會有所不同。

一項針對BERT風格預訓練模型的研究得出結論,最佳的層修剪策略是丟棄最後的層;這部分與他們的結果產生共鳴,儘管相比之下,他們發現(a)對於某些修剪尺寸,保留模型的最後幾層實際上是有益的,而且(b)對於所有修剪尺寸,保留最後一層是必不可少的。此外,雖然作者也研究了不同層之間表示的相似性(如同他們的方法),但他們實際上發現淺層表示之間的相似性高於深層表示,這與他們的結果非常不同。重要的是考慮的模型由幾億個參數組成,這比他們在工作中考慮的模型規模要小得多。也許正因為如此,儘管作者也對修剪後的模型進行了微調,但他們沒有觀察到我們在§4.1中報告的下游精度的急劇轉變。

相比之下,雖然確實考慮了GPT風格的模型,但方法論卻大不相同:(i)他們沒有先進行預訓練,然後使用固定的層丟棄策略,而是在修改後的預訓練過程中增量丟棄層; (ii)作者研究了他們自己的1B以下參數模型,而他們專注於常用和/或微調用於實際應用的現成可用的開放權重的大規模2.7B-70B參數模型系列。

最後,transformer中的層丟棄的系統方法也在wav2vec模型的背景下進行了研究,wav2vec模型是僅編碼器模型,將語音映射到嵌入,參數規模在億級。使用這些模型開發了一種基於層與下游指標相關性的層修剪算法。除了模型架構和領域之外,與他們工作的一個重要區別是考慮了非連續的修剪方案,例如丟棄交替層。他們對層修剪的直覺預測,這不應該同樣有效——至少對於僅解碼器語言模型而言——因為它會在每個移除的層塊處產生多個不匹配。 


2.2 模型蒸餾

另一種完全不同的減少已訓練機器學習模型大小的方法是模型蒸餾,其中知識從大的"教師"模型轉移到更小的"學生"模型通過訓練學生模型以模仿教師模型預測的分佈。其基本見解是,這可以將教師模型的非常通用的知識和能力轉化為更簡潔、壓縮和可能特定於技能的表示。

雖然是一種非常通用的技術,但在語言模型的設置中,蒸餾已經通過以下方式實現:(a)白盒方法,其中學生模型被訓練以模仿教師模型的logits或隱藏狀態;以及(b)黑盒方法,其中學生模型只能訪問教師模型生成的輸出token。後一種方法廣泛涵蓋了學生模型在某種程度上用教師模型增強的文本上訓練的情況,例如通過添加合成標籤、生成高質量的合成文本、提供思路推理(旨在增強學生模型的推理能力)或通過註釋指令來增強學生模型的指令跟隨能力。

與層修剪相比,這些蒸餾方法需要大量計算資源,因為它們依賴於大型教師模型處理大量數據。相比之下,他們基於相似性的修剪策略只需要計算預訓練語料庫的一小部分上不同層之間的相似性,而他們的第二個更簡單的修剪策略只使用修剪後的精簡模型。


2.3 高效微調和推理加速  

作為直接減小模型大小的補充,參數高效微調(PEFT)專注於降低將LLMs專門化到特定任務的成本。具體而言,低秩適應器(LoRA)通過凍結預訓練模型並引入少量額外可訓練權重來減少微調的內存和計算。他們使用其量化版本QLoRA來保持實驗的成本效益。可以與他們工作結合的其他PEFT方法是:在第一種方法中,LoRA矩陣的初始化被調整為量化方案;在第二種方法中,LoRA秩是根據不同LLM模塊自適應選擇的。

為了進一步提高效率,他們可以將層修剪後的模型與進一步加速推理的方法相結合:使用推測解碼,tokens從較小的草稿模型中快速生成,然後由主模型並行評估;使用Medusa,草稿模型被丟棄以換取額外的解碼頭,但最終實現了類似的效果。特別是,在推測解碼設置中,考慮高度壓縮的層修剪模型作為潛在的草稿模型會很有趣。


2.4 深度相關研究的廣度

最後,讓我們重點介紹一些研究LLMs深度相關特性的科學工作。一個相關方向考慮語言模型中知識和語言特性是如何編碼的。一方面分析了事實關聯的存儲和回憶:這些工作強調知識位於中間層或最終層,這對直接編輯或刪除模型的部分事實知識有影響。另一方面,嘗試執行此類編輯的證據表明,信息可能跨層非局部存儲。類似研究了推理過程中處理事實的方式,區分了注意力頭(用於屬性提取)和MLP塊(用於主題豐富)的作用:兩者都分佈在幾個層中。

接下來,在早期的"邏輯鏡頭"之後,發明了一種稱為"調諧鏡頭"的技術,通過使用可學習的仿射變換將中間表示轉換為token分佈來研究預測的軌跡。通過研究這種分佈的層到層動力學,作者注意到它傾向於收斂。這種收斂非常強烈地表明,更深的層可能是可修剪的,而他們必須訓練仿射探測器的事實可能與他們觀察到最後一層不能修剪有關。觀察到只要激活深度超過一半,就可以從在中間激活上訓練的線性探測器確定基礎文本中的地理特徵。

更抽象地發現,激活的稀疏性在網路前向傳遞的大約一半處發生轉變,從稀疏演變為密集。也許與此相關,研究了在微調過程中更新最多的模型權重,發現它們位於中間層。

總的來說,這些深入研究是對他們工作的補充,一方面,提供證據表明刪除LLM最深層不會顯著改變模型的性能,另一方面,表明在刪除大約一半LLM最深層後,性能會出現急劇的修剪轉變。


3 方法

在本節中,他們給出了為什麼他們認為層修剪有效的直覺(§3.1),然後詳細解釋了他們的方法(§3.2)。


3.1 直覺

他們對層丟棄的直覺來自將表示視為層索引的緩慢變化函數。具體而言,transformer的層到層表示演化由殘差迭代方程給出  


$$x^{(\ell+1)} = x^{(\ell)} + f(x^{(\ell)}, \theta^{(\ell)})$$


其中\((x^{(\ell)}, \theta^{(\ell)})\)分別是層\(\ell\)的多維輸入和參數向量,\(f(x, \theta)\)描述了一個多頭自注意力和MLP層塊的變換。像任何殘差網路一樣,如果我們展開這個迭代,我們看到經過\(L\)個總層後,輸出描述為所有層變換之和 


$$x^{(L)} = x^{(0)} + \sum_{\ell=0}^{L-1} f(x^{(\ell)}, \theta^{(\ell)})$$


如果和中的項很多\((L \gg 1)\)且獨立,例如,如果塊函數改為整體輸入的函數\(f(x^{(0)}, \theta^{(\ell)})\),那麼對和式(2)的任何特定貢獻都可能被忽略。

當然,它們根本不是獨立的:如果我們刪除層\(\ell - 1\),那麼我們現在必須將該層的舊輸入\(x^{(\ell-1)}\)連接到層\(\ell\)的塊函數中,如下所示:  


$$x^{(\ell+1)} = x^{(\ell-1)} + f(x^{(\ell-1)}, \theta^{(\ell)})$$


其中,為了清晰起見,儘管刪除了層,我們沒有對層或輸入重新標記。一般來說,原始輸入和新輸入之間的這種不匹配應該對網路造成很大損害。然而,如果在一些初始層之後,表示收斂到關於層索引的緩慢變化函數,


$$x^{(\ell)} \approx x^{(\ell-1)} + \epsilon$$


其中在某種適當意義上\(\epsilon \ll x^{(\ell)}\),那麼刪除特定層\(\ell\)(即,在從(1)到(3)的過程中進行替換\(x^{(\ell)} \to x^{(\ell-1)}\))應該只會將後續層\(x^{(\ell+1)}\)中的表示變化一小部分。類似地,要成功修剪層\(\ell\)之前的\(n\)層,即從\(\ell - n, \ldots, \ell - 1\)開始索引的那些層,我們希望修剪塊的輸入應該與修剪塊的輸出非常相似:


$$x^{(\ell)} \approx x^{(\ell-n)} + \epsilon$$


無論如何,任何層刪除都有級聯效應:由於在修剪後,\(x^{(\ell+1)}\)是由與之前不同的函數計算的,參見(1)與(3)的對比,並且由於\(x^{(\ell+1)}\)直接或間接地輸入到後續層\(\ell + 2, \ldots, L\),刪除淺層應該比刪除深層有更大的影響。

由此,他們有以下假設,他們將通過實驗來驗證:

(0) 我們應該能夠修剪殘差網路的層。

(1) 我們應該在修剪更深層方面獲得更大的成功。  

(2) 我們成功修剪的層塊應該具有與其輸入相似的輸出。


在下一小節§3.2中,他們將解釋修剪算法的細節,在接下來的§4中,他們將呈現支持(0)-(2)點的實驗證據。


3.2 層修剪算法

他們的主要層修剪算法非常簡單:

0. 選擇要修剪的層數\(n\)。

1. 計算層\(\ell\)的輸入\(x^{(\ell)}\)與層\(\ell+n\)的輸入\(x^{(\ell+n)}\)之間的角距離\(d(x^{(\ell)}, x^{(\ell+n)})\),參見下面的(7),在中性預訓練數據集或感興趣的下游任務的代表性數據集上。  

2. 找到使該距離最小化的層$\ell^*$:

$$\ell^*(n) \equiv \arg\min_{\ell} d(x^{(\ell)}, x^{(\ell+n)})$$

3. 丟棄層\(\ell^*\)到\(\ell^*+n-1\);將舊\(\ell^*\)的舊輸入連接到舊的\((\ell^*+n)\)層塊。

4. (可選)在中性預訓練數據集或感興趣的特定數據集上用少量微調來修復層\(\ell^*+n\)處的不匹配。

如果圖中的文字比列表中的文字對你更有幫助,那麼請注意,該算法也描述在圖1的(a)-(b)面板中。

詳細說明進一步說明第一步,單個長度為\(T\)的序列的角距離(7)由下式給出


$$d(x^{(\ell)}, x^{(\ell+n)}) \equiv \frac{1}{\pi} \arccos \left( \frac{x^{(\ell)T} \cdot x^{(\ell+n)T}}{\|x^{(\ell)T}\| \|x^{(\ell+n)T}\|} \right)$$


其中內積是在序列的最後token \(T\)處在模型的隱藏維度上進行的,\(| \cdot |\)表示\(L_2\)範數,而\(1/\pi\)是慣例。然後應該在足夠多的樣本上對這個距離求和,以獲得低波動估計,但總體而言應該非常小。 

詳細說明進一步說明最後一步的"可選性",他們發現,在問答基準上幾乎沒有性能下降,參見圖1(d)和§4.1中的其他,可以通過少量微調擴展到更大的修剪分數。根據資源限制和修剪模型的預期應用,這可能是不必要的。然而,修復過程確實對困惑度有顯著影響,參見圖1(d)和§4.2中的其他。

對於角距離測量和修復,如果最終目標是對下游任務進行監督微調(SFT),那麼在該數據集的樣本上評估距離,然後將修復過程與SFT結合起來可能會很有用。相反,為了獲得最大的通用性,最自然的做法是用近似模型最初預訓練時的統計數據的預訓練數據集來測量距離和修復。

最後,他們還研究了一種更簡單的修剪策略,該策略受到跨不同模型系列分析角距離的啟發:丟棄最深層(不包括LLM頭之前的最後一層),然後像之前一樣通過少量微調來(非可選地)修復損害。為了絕對清晰,這意味著如果我們從一個\(L\)層模型中修剪\(n\)層,那麼我們將刪除從\((L-n)\)到\((L-1)\)的層(包括兩端)。


4 結果

在本節中,他們展示了修剪策略在不同問答(QA)基準上的有效性,並強調了性能中一個穩健的修剪驅動轉變(§4.1),而相比之下,他們發現修復後修剪模型的自回歸困惑度在其轉變點處是連續的(§4.2);然後,在比較不同模型大小和系列之間的相似性統計後(§4.3),他們將主要的基於相似性的修剪策略與更簡單的移除最深層的策略進行對比(§4.4)。



對於實驗,他們修剪了從2.7B到70B參數的各種大規模LLMs,跨越32到80個未修剪層。具體而言,他們使用了Llama-2系列、Qwen系列、Mistral-7B和Phi-2中的模型。對於這些模型,他們使用QLoRA執行"修復"步驟:模型量化為4位精度,然後在Colossal Clean Crawled Corpus(C4)的164M或328M個token上進行微調,這是一個常見的預訓練數據集。因此,他們的每個實驗都在單個A100 GPU上執行。對於QA評估,他們使用了Massive Multitask Language Understanding(MMLU),這是一個常見的世界知識和問題解決基準,以及BoolQ,這是一個常見的是/否閱讀理解基準,其中答案必須從文本本身推斷出來。關於模型、修復過程、數據集選擇和評估細節的具體內容可以在附錄A中找到;不同超參數選擇的評估消融實驗可以在附錄B中找到。


4.1 QA基準的準確性 

他們的第一組結果如圖2所示,其中繪製了5-shot MMLU準確性與移除層的比例的關係:在左面板中,他們展示了Llama-2系列;在中間面板中,他們展示了Qwen系列的模型;在右面板中,他們展示了Mistral-7B和Phi-2。為了更好地比較具有不同總層數的模型,在這些圖中,他們選擇將x軸歸一化為移除層的比例(而不是移除層的絕對數量)。請注意,由於MMLU包含具有四個可能回答的多項選擇問題,隨機猜測的預期準確性為25%。


重要的是,他們觀察到穩健性能的特徵平坦區域,隨後是隨機準確性的急劇轉變,對於Llama-2系列中的模型,修剪分數約為45%-55%,對於Mistral 7B為35%,對於Phi-2為25%,對於Qwen系列的模型為20%。這意味著獲得模型最高分數所需的基本知識不會因大量層移除而丟失——即使這一比例可能相當大(!)——直到最終在特定於模型的臨界閾值處丟失該知識。比較有無修復的曲線,他們看到微調通過更好地保持未修剪的性能並將隨機猜測的相變推到稍大的修剪分數而提供了適度的改進。 


總的來說,他們看到層修剪對於更大和更深的模型(如Llama-2-13B和Llama-2-70B)更加穩健,他們假設這可能與以下事實有關:要麼較小的模型過度訓練,使參數冗餘度降低,要麼更深的模型在絕對意義上可以承受更多層的丟失。此外,Qwen系列很奇怪,他們將在§4.3中進一步詳細說明這一點。




4.2 下一個token預測的損失

在本節中,他們研究了層修剪對預訓練優化目標(即下一個token預測的交叉熵損失)的影響,當在C4驗證數據集的子集上評估時。為了在具有不同大小詞彙表\(V\)的模型之間進行公平比較,他們將損失歸一化為\(\log V\),這對應於以均勻概率隨機採樣token的損失。(有關更多詳細信息,請參閱附錄A.2。)

在圖3中,他們繪製了所有七個模型的歸一化C4驗證損失,在修復後(左面板)和修復前(右面板),作為移除層的比例的函數。在沒有修復的情況下,他們看到每個模型都有一個稍微尖銳的轉變到隨機猜測,大約在QA基準準確性也急劇轉變到隨機猜測的修剪分數處,這表明模型在這一點上已經無可救藥地受損,參見圖2。接下來,對比兩個圖的尺度,他們看到修復顯著恢復了所有模型接近未修剪水平的下一個token預測能力,損失隨著層丟棄緩慢線性增加。最突出的是——從科學角度來看——修復後的連續性通過我們之前發現QA基準有急劇轉變的修剪分數:這種解耦說明了一種使下游任務性能(如MMLU和BoolQ)與連續性能指標(如交叉熵損失)脫鉤(或創造不一致)的方法。


4.3 表示之間的角距離

鑑於角距離在他們的修剪策略中發揮的核心作用,讓我們花一小節來看看這七個模型的這些距離。對於這個分析,每個模型的角距離是在C4驗證集的10k個樣本上平均的。

回想一下之前的圖1(c):對於Llama-2-70B,它繪製了比較第\(\ell\)層和第\((\ell+n)\)層的角距離\(d(x^{(\ell)}, x^{(\ell+n)})\),跨所有初始索引\(\ell\)用於從\(n=1\)到\(n=64\)的塊大小;曲線的最小值\(\ell^*(n)\)給出了給定\(n\)的最佳修剪塊。一種更緊湊的顯示相同數據的方式如圖4的熱圖所示:每個方塊都用顏色表示層\(\ell\)和\(\ell+n\)之間的行歸一化角距離,跨所有可能的\(\ell\)和\(n\),直到總層數的很大一部分;給定塊大小的最佳修剪層\(\ell^*(n)\)對應於每行中的最小距離。 

跨模型,他們得出兩個廣泛的結論:(i)最小距離存在於更深的塊之間,這意味著更深的層通常彼此非常相似,可以更容易地丟棄; (ii)包括最後一層的最深塊的距離具有最大值或接近最大值,這意味著永遠不應該丟棄最後一層。雖然大體上是正確的,但也有一些例外。對於某些模型,例如Phi-2-2.7B,或者對於某些模型中最大的塊,例如Llama-2-7B,最後幾層似乎很重要。如前所述,Qwen系列有點不尋常:在這裡,他們看到淺層塊有一些奇怪的高相似性"島嶼";這可能解釋了圖2中更短的穩健性能區域。




4.4 一個更簡單的修剪策略

受最近結論的啟發,他們嘗試了一個非常簡單的啟發式修剪策略:

(1) 如果從一個\(L\)層模型中修剪\(n\)層,丟棄\((L-n)\)到\((L-1)\)層,以便刪除不包括最後一層的最深塊;  

(2) 然後像之前一樣通過少量微調來修復。

與主要的基於相似性的修剪策略相比,這個更簡單的啟發式算法的優勢在於從未要求從業者將未修剪模型加載到GPU上或進行推理。它還提供了一個有意義的消融實驗,用於優化要修剪的塊的重要性。



在圖5中,他們對比了兩種修剪策略,在修復前(左面板)和修復後(右面板),用於QA基準(MMLU/BoolQ,上/中面板)和自回歸損失(C4驗證,下面板)。一方面,如果不修復修剪造成的損害,簡單的啟發式方法表現非常糟糕:隨著修剪分數的增加,QA基準的準確性迅速下降到(接近)隨機,即使修剪量很小,損失也開始非常迅速地增加。另一方面,在修復後,兩種修剪策略在評估中的結果非常接近:對於QA基準,基於相似性的算法在相變發生之前稍微更好地保持了準確性,儘管簡單算法可能將相變推到稍大的修剪分數;對於損失,曲線幾乎重疊,儘管基於相似性的策略在所有修剪量下都稍微優於簡單策略。這些實驗有力地證明,後修剪微調的目的是修復修剪接口處的損害,而不是獲取額外的知識。

 

5 討論與未來方向 

隨著開放權重LLaMA系列的發布,開源機器學習社區圍繞著讓LLM人人可及的理念團結在一起。這催生了許多圍繞效率的創新,如LoRA和量化(與LoRA),使得大型(接近)最先進的70B模型可以只在單個80GB A100 GPU上進行微調。結合這些其他工具,他們的工作通過一種易於實現的層修剪技術實現了進一步的效率提升。

具體而言,發布版本的Llama-2-70B跨越140 GB內存,每個token消耗大約\(3 \times 10^{10}\) FLOP。通過4位量化和50%的層修剪分數,該模型佔用大約17.5 GB內存,每個token需要大約$1.5 \times 10^{10}$ FLOP:從16位bfloat量化到4位QLoRA精度將模型內存減少4倍,但FLOP基本保持不變,因為計算是以16位精度執行的;層修剪還將根據層修剪分數按比例減少內存和FLOP。這些內存和計算要求使得開放權重最先進模型能夠在消費級GPU上高效運行,甚至無需任何CPU卸載即可進行微調,且只有很小的性能權衡。

在工作結束時,他們留下了以下問題:

• 有哪些更好的層修剪策略?有哪些更好的修復方法?

• 為什麼修復消除了損失中的相變,但沒有消除QA準確性中的相變?

• 使用更全面的評估,不同任務的準確性是否會在不同深度下降?

• 相關地知識通常存儲在淺層或中間層,還是非局部化的?

• 預訓練細節是否會影響修剪能力,例如,基於縮放定律過度訓練或蒸餾的模型是否更難修剪?

• 我們如何使LLM更有效地利用其最深層中的參數? 

其中一些問題將受益於研究不同預訓練檢查點的層相似性和修剪;例如,QA準確性中的急劇相變和臨界深度是在什麼時候出現的,更多的訓練是否會導致更好地使用可修剪參數?其他問題表明需要探索不同的預訓練架構和目標,例如為了更好地利用更深層。通過更全面的評估,如果不同種類的任務在非常不同的深度下降,那麼這可能表明完成這些任務所需的知識存儲在不同的深度。使用修剪來系統地研究這些可解釋性問題將是非常有趣的。

參考文獻(略)

A 實驗細節

在這裡,他們解釋了模型和修復(§A.1)以及評估(§A.2)的各種細節。

A.1 模型和修復細節

本文中的所有模型都使用Hugging Face Trainer API進行微調。模型列表及其在Hugging Face上的路徑如下:



對於修復,他們使用了來自Hugging Face的Colossal Clean Crawled Corpus(C4)版本:data = load_dataset("c4", 'en')。他們如後面段落所述截斷了長樣本,並在可用時添加了特殊token。模型以全局批次大小16進行微調5000步:這對應於每個模型的總微調token為16 × 5000 × [max_seq_length]。他們使用了cosine退火的學習率調度,預熱100步。如果可能,則將峰值學習率設置為模型預訓練的峰值學習率;在實踐中,這意味著除Phi-2(在預訓練期間使用2e-4的峰值LR)、Llama-2-70B(使用3e-5的峰值LR,這是掃描得到的值)和Mistral-7B(使用3e-6的峰值LR,也是掃描得到的值)外,所有模型都使用3e-4的峰值LR進行訓練。所有7B參數或更小的模型都使用2048 token的最大序列長度進行訓練,而所有13B參數或更大的模型都使用4096 token的最大序列長度進行訓練。雖然他們意識到一些模型可能已經在更長的序列上進行了預訓練,例如Qwen-the-outlier,但他們決定在類似大小的模型中保持最大序列長度一致,以便在模型系列之間進行更公平的比較。

除了Hugging Face Trainer API之外,他們還在所有微調中使用了量化和低秩適應器(LoRA):

• 對於量化,他們使用bitsandbytes庫進行QLoRA將模型量化為4位。

• 對於LoRA,他們使用Hugging Face peft庫。他們將LoRA dropout設置為0.05,並將LoRA α保持等於LoRA秩,遵循。除了兩個例外(下面討論),模型都使用LoRA秩64進行訓練。

• 僅將LoRA應用於FFN模塊:

  1. 對於Llama-2和Mistral模型為["gate_proj", "down_proj", "up_proj"],
  2. 對於Phi-2為["fc1", "fc2"],  
  3. 對於Qwen模型為["w1", "w2", "c_proj"]。

這些超參數選擇中絕大多數都是標準的,可以在以前的工作中找到。為了絕對清晰,他們在下面列出了所有模型特定的架構和修復細節:


A.2 評估細節

他們執行了三個主要評估:MMLU的準確性、BoolQ的準確性和C4的損失。

對於MMLU準確性:

• 他們使用來自Hugging Face的cais/mmlu版本的資料集。  

• 他們遵循原始參考文獻中建議的格式,無需進一步的提示工程。

• 對於構建few-shot樣本,他們使用cais/mmlu中的dev集。 

• 對於實驗,他們使用0個few-shot樣本;他們的結果和分析對這種選擇是穩健的,參見圖7。

• 他們報告所有主題的平均準確性。


對於BoolQ準確性:

• 他們使用來自Hugging Face的hassansh/boolq_n_shot版本。

• 對於實驗,他們使用0個few-shot樣本。  

• 完整的BoolQ結果(從正文中截斷)如圖6所示:在左面板中,他們展示Llama-2系列,在中間面板中,他們展示Qwen系列的模型,在右面板中,他們展示Mistral-7B和Phi-2;他們還將沒有修復的實驗設為半透明,以更好地顯示完整的基於相似性的修剪方法的結果。重要的是,雖然他們在這裡看到修復比在圖2的MMLU中發揮了更重要的作用,但在修復後,我們仍然有一個特徵性的穩健性能平坦區域;如前所述,獲得模型最高分數所需的能力不會因大量層修剪而丟失,直到達到特定於模型的臨界閾值。


對於C4驗證損失:

• 他們使用來自Hugging Face的c4版本(即將被棄用,以支持allenai/c4)。

• 由於使用train split進行修復,因此他們在validation split上進行評估。

• 鑑於其大小,他們隨機採樣了60k個序列,並在所有模型中保持固定。

• 在圖3中,他們將損失標準化以便於不同模型系列之間的公平比較,這些模型使用不同的詞彙表大小:為了標準化,他們除以\(\log V\),其中\(V\)是每個模型的詞彙表大小(在§A.1的表格中列出)。這,\(\log V\),自然地設置了給定模型的尺度,對應於均勻採樣token的損失。



B 消融實驗

在這裡,他們詳細說明了各種超參數的消融實驗:提示(§B.1)、微調種子(§B.2)、LoRA秩(§B.3)。定性地說,本文的結果對任何這些參數的變化都非常穩健。

B.1 提示

眾所周知,改變QA評估的提示可以顯著影響結果。為了控制提示,他們在§3.2中描述的主要基於相似性的修剪應用於Llama-2-13B時,對MMLU準確性進行了消融:在圖7的左面板中,他們顯示了改變提示中few-shot樣本順序的結果,在同一圖的右面板中,他們顯示了改變few-shot樣本數量的結果。總的來說,我們看到層修剪方法對這些變化是穩健的。 

B.2 微調種子

在這裡,他們改變微調種子。對於所有實驗,他們使用以下代碼片段來確保可重複性:

SEED_VAL = 0 

transformers.enable_full_determinism(SEED_VAL)


由於從預訓練模型開始,微調種子不會影響初始化,但會影響進一步訓練的隨機方面,如數據順序。為了控制這一點,他們在§3.2中描述的主要基於相似性的修剪應用於Llama-2-13B時,對微調種子進行了消融:在圖8中,我們觀察到層修剪方法對種子選擇是穩健的。




B.3 LoRA秩

在這裡,他們改變用於修復的LoRA秩。不幸的是,他們的計算預算不允許他們在所有實驗配置中進行詳盡的掃描。作為替代,他們採用以下協議進行主要實驗:

• 從秩64開始,遵循QLoRA設置。

• 如果使用該秩進行修復會顯著損害性能(與不修復相比),則為該模型掃描LoRA秩,並根據MMLU準確性選擇性能最佳的LoRA秩用於其他評估。

該協議旨在最大化修復在所有評估中改善性能的機會。為簡單起見,他們使用簡單的修剪啟發式運行此秩選擇協議,Llama-2-70B除外。

在實踐中,這導致他們對每個模型使用秩64,Mistral-7B(秩4)、Llama-2-7B(秩2)和Llama-2-70B(秩8)除外。 (要以表格形式查看相同的信息,請參見§A.1中的第二個表格。)圖9顯示了支持Mistral-7B(左下面板)、Llama-2-7B(中下面板)和Llama-2-70B(右上面板)這些選擇的MMLU準確性掃描:總的來說,雖然LoRA秩對修復模型的定性行為沒有顯著影響,但降低LoRA秩通常會提高性能。在圖9的左上和中上面板中,我們顯示了使用基於相似性的修剪策略對Mistral-7B(上)和Llama-2-7B(中)進行相應的掃描:我們看到,對於這種修剪方法,兩個模型都更加穩健,儘管秩2仍然是Llama-2-7B的最佳表現秩。


LoRA秩下降對MMLU準確性的特徵性改善(即使對於極低的秩(!))值得解釋。一種可能性是,降低LoRA秩可以更好地正則化微調以防止過擬合。特別是,一些敏銳的讀者可能會對§A.1中關於峰值學習率的討論感到驚訝:模型使用預訓練中相同的峰值進行微調;一個"大"的LoRA秩64引入了一些額外的參數,可能會過擬合C4。這種過擬合肯定是有害的,因為我們考慮的模型的實際預訓練數據集(a)我們未知,(b)可能比C4的質量高得多。  

他們直接為Mistral-7B研究了這一點。在圖9的右下面板中,他們繪製了不同LoRA秩的C4驗證損失:我們看到,雖然降低LoRA秩通常會提高MMLU準確性(參見最左面板),但同時它會損害C4驗證損失。這支持了他們的過擬合假設。在未來資源更充足的情況下,通過考慮其他形式的正則化和學習率調整來改善修復過程將會很有趣。

這篇論文研究了一個非常有趣而且實用的問題:如何在不顯著影響性能的情況下修剪大型語言模型的層數,從而減少模型的記憶體佔用和推理延遲。作者提出了一種基於層間表示相似性的啟發式修剪策略,並通過在各種問答任務上的實驗證明了該方法的有效性。


我的閱讀筆記

我認為這項工作有以下幾點意義和啟示:

1. 實用價值。層修剪可以顯著減少模型部署的成本,尤其是在雲端推理等受限資源場景下。該方法與LoRA、量化等其他模型壓縮技術正交,可以協同使用。

2. 理論洞見。作者發現修剪後的模型在QA任務上存在突變點(phase transition),即準確率在某一修剪比例後驟降,而自回歸loss則是平滑變化。這表明QA任務可能主要依賴模型的淺層知識。此外,更深層之間的表示相似性更高,修剪也更魯棒。

3. 簡單有效。基於相似性的啟發式修剪策略已經很有效,而更簡單的從後往前修剪策略也能取得接近的效果。這種簡單性很有吸引力。

4. 擴展空間。在更大的模型、更長序列、更多任務上驗證層修剪效果,以及進一步優化修復方法,都是有趣的未來方向。此外層修剪也為分析知識在網路中的分佈提供了新思路。

不過這項工作也有一些局限性,比如只考慮了GPT類的decoder-only模型,在encoder-decoder模型上效果如何還有待研究。而且修剪比例較大時仍然需要一些微調,並非完全零樣本。

我認為這是一篇兼具實用性和啟發性的好工作,對於降低大模型部署成本和分析語言模型的知識特性都有重要價值。未來進一步擴展層修剪的適用性,并結合知識蒸餾等其他技術,有望進一步提升大模型的效率。

2024年4月30日星期二

「Next token Prediction」還能再走多遠?

近年來大語言模型(Large Language Models, LLMs)在自然語言處理領域取得了顯著的突破。而支撐這些 LLMs 的核心技術之一,就是下一個 token 預測(Next Token Prediction, NTP)。

NTP 技術由「資訊理論之父」Claude Shannon在其著作《通信的數學原理》(A Mathematical Theory of Communication)中首次提出。其核心思想是,通過給定一個詞序列的上下文,讓模型預測下一個最可能出現的詞。這種預測能力使得語言模型能夠生成連貫、邏輯性強的文本,在機器翻譯、文本摘要、自動寫作等場景中發揮重要作用。

 Shannon在這篇劃時代的論文中,首次系統地定義了「資訊」這個概念,並給出了資訊的數學表示方法。他引入了「bit」(比特)作為資訊量的基本單位,提出了著名的「香農熵(Shannon entropy)」公式來計算一個隨機變數所包含的平均資訊量。這個公式後來被廣泛應用於各個領域,成為現代資訊論的核心概念之一。

香農熵的定義如下:

對於一個離散隨機變量 X,其概率分佈為 P(X=x_i) = p_i,i=1,2,...,n,則 X 的香農熵為:

H(X) = -∑[i=1 to n] p_i log p_i

其中,log 通常以 2 為底,這樣熵的單位為比特(bit)。如果以自然常數 e 為底,則熵的單位為納特(nat)。

香農熵的一些重要性質:

非負性:H(X) ≥ 0,即香農熵總是非負的。

當 X 的分佈是均勻分佈時,香農熵達到最大值 log n。這意味著均勻分佈具有最大的不確定性。

當 X 的分佈是確定性分佈(即某個事件的概率為 1,其他事件的概率為 0)時,香農熵達到最小值 0。這意味著確定性分佈沒有不確定性。

香農熵滿足一些重要的不等式,如均值不等式、次加性不等式等,這些性質在信息論的推導中非常有用。

在信息論和編碼理論中,香農熵被用來衡量信息源的平均信息量,或者說,傳輸一個符號所需的平均比特數。

此外,Shannon還在論文中提出了兩大定理:

香農第一定理(Shannon's Source Coding Theorem):給出了信源編碼的極限壓縮率,即信源熵。這意味著,當編碼長度趨於無窮時,每個編碼符號的平均長度不會小於信源的香農熵。

香農第二定理(Shannon's Channel Coding Theorem):論證了存在一種編碼方式,使得通過帶噪信道進行通信時,傳輸誤碼率可以任意接近零,只要資訊傳輸速率低於信道容量。信道容量公式為:

C = B log2(1 + S/N)

其中,C是信道容量(單位:bit/s),B是信道頻寬(單位:Hz),S/N是信噪比。

這兩大定理奠定了現代編碼理論的基礎,指明了可靠通信的理論極限,對現代通信技術的發展產生了深遠影響。

雖然Shannon的原始論文並沒有直接提及「下一個token預測」(Next Token Prediction, NTP)這個概念,但他的資訊理論思想無疑為 NTP 技術的發展提供了理論基石。NTP 的核心思路可以看作是對香農理論的延伸和應用——通過最小化預測下一個 token 的不確定性(即香農熵),來訓練語言模型生成連貫、高質量的文本。

OpenAI 首席科學家 Ilya Sutskever 更堅信,NTP 是通往 AGI(Artificial General Intelligence,通用人工智慧)的關鍵。他認為,token 預測的質量反映了模型對語言背後隱藏的語義和知識的理解程度,這不僅僅是統計,更是對世界本質的壓縮和表達。如果讓一個足夠強大的語言模型去預測一個睿智、博學且能力非凡的人會有怎樣的行為舉止,它很可能可以通過人類資料進行推理和外推,模擬出超越現實的假想情況。

事實上,OpenAI 的研究員 Jack Rae 在斯坦福的研討會上做了題為《Compression for AGI》的報告,詳細論證了「壓縮即智慧」的觀點。他認為,壓縮能力體現了模型對資料的泛化和抽象能力,而泛化能力正是智慧的基石。

NTP 技術的基本原理可以概括如下:

1. NTP 是因果語言模型的核心任務,目標是準確預測給定文本序列中下一個令牌(token),如單詞或字元。Token 預測過程基於自迴歸機制,即模型一次預測一個令牌,並以由左至右的順序進行。

2. 大多數 NTP 模型基於 Transformer 架構,尤其是其僅解碼器(Decoder-Only)變體。Transformer 透過自注意力(Self-Attention)機制,讓模型在生成每個新 token 時,都能考慮到之前所有 token 的上下文資訊,從而生成更加準確和連貫的文本。

3. 在進行下一個 token 預測之前,文本首先需要被切分成模型可理解的最小單位,即 token。這些 token 隨後被轉換為嵌入向量(embedding vector),以數值形式表示。為了讓模型理解 token 的順序,每個 token 的嵌入向量會與位置嵌入向量相加,使模型能夠捕捉序列中的位置資訊。

4. 大型語言模型通過在大規模文本資料集上進行預訓練來學習下一個 token 預測。這個過程是自監督的(self-supervised),意味著模型通過預測文本序列中的下一個 token 來自我訓練,無需外部標註的訓練資料。透過這種方式,模型學會了理解和生成自然語言。

傳統的機器人控制方法,如波士頓動力公司採用的運動控制算法、強化學習和行為克隆等,通常需要對環境和任務進行專門的建模和規劃。這種方法雖然在特定環境下表現出色,但泛化能力有限,難以應對複雜多變的真實世界。

而基於自回歸生成的 NTP(Next Token Prediction)技術,為機器人控制開闢了一條新的路徑。通過將感官運動資料序列化為類似於自然語言的 tokens,並訓練類似 GPT 的自回歸語言模型來預測下一個 token,機器人可以直接從大量歷史互動資料中學習到連貫、鮮活的行為模式,而無需對環境進行顯式建模或路徑規劃。


這種範式轉變的優勢在於,自回歸生成模型具有強大的泛化能力。通過從海量多樣的感官運動資料中學習,模型可以掌握環境和任務的隱含規律,並在新的情景下自主地採取合適的行動。就像 GPT 模型可以根據上下文生成連貫的自然語言一樣,基於 NTP 的機器人控制器可以根據當前的感知狀態和歷史行為,自主產生連貫、適宜的運動控制指令,而無需為每個場景專門設計路徑。

以柏克萊團隊的工作為例,他們將多個來源的機器人感官運動資料(如手動設計的控制器輸出、強化學習模型的決策序列、人類運動捕捉資料等)匯總成一個龐大的「軌跡語料庫」,並在此基礎上訓練類似 GPT 的自回歸運動控制模型。他們將仿人機器人的感覺運動軌跡視作類似於自然語言中的單詞序列,將感覺輸入(如傳感器資料)和運動輸出(如馬達指令)的輸入軌跡進行 token 化,組成軌跡的「單詞」和「句子」。

接著,研究者們訓練了一個通用的 Transformer 模型來自迴歸地預測移位的輸入序列。與語言模型不同的是,機器人資料是高維的,包含多個感官模態和動作。研究者通過將輸入軌跡進行標記化,然後訓練 Transformer 模型來預測這些標記,處理了這種多模態性。模型能夠預測完整的輸入序列,包括感官和動作標記。

更有趣的是,當軌跡資料不完整(即感覺或運動資訊缺失)時,模型可以通過預測存在的資訊,並用可學習的遮罩標記(learnable mask tokens)替換缺失的標記來從中學習。這使得模型能夠從不完美或缺失的資料中學習,提高其泛化能力,在面對真實世界的不完整資料時仍能有效運作。

研究者們還發現,使用更多軌跡進行訓練可以減少位置追蹤誤差,展現了 scaling 定律在機器人控制中同樣有效。此外,實驗顯示,更大的上下文視窗和模型參數規模能產生更好的策略和更低的追蹤誤差。

實驗表明,訓練後的模型可以在各種場景下自主產生連貫、合理的運動軌跡,展現出了良好的泛化能力。機器人無需再依賴專門的路徑規劃,即可自如地在複雜環境中行動。

自回歸生成模型在機器人控制領域的應用,為打造更加智能、自主、泛化的機器人系統開闢了一條充滿潛力的新路徑。隨著 NTP 等技術的不斷發展和完善,我們有望在未來看到更多具備「類人般常識」的通用機器人助手,它們能夠像人一樣自然地感知、思考和行動,為人類的生產生活提供更加智能、貼心的服務。這無疑將是人工智能發展史上又一個激動人心的里程碑。

雖然這些結果令人振奮,但 NTP 技術在機器人控制中的應用仍存在一些疑慮和局限性。一些學者質疑論文中對「觀測」和「行動」概念的定義是否清晰一致,以及具體實現細節是否完備。也有人指出,即使對於簡單的行走任務,也需要大量(如數萬條)軌跡資料,而這些資料在現實中難以收集。

此外,NTP 技術本身也存在一些固有的局限性。例如,在長序列中,每個步驟的小錯誤可能會指數級累積,導致整體準確性大幅下降;模型可能學習到錯誤的規劃策略,在需要前瞻性規劃的任務中表現不佳;快速和慢速兩種思考過程難以同時模擬;一些 token 可能天生難以學習,需要對未來有全局理解。

當然,基於 NTP 的機器人控制方法仍處於探索階段,還面臨著一些挑戰和局限性。例如,如何在訓練過程中更好地引入物理約束和安全保障?如何進一步提高感官運動資料的採集和處理效率?如何賦予模型更強的因果推理和長期規劃能力?這些都是亟待研究者進一步探索的問題。

最近,蘇黎世聯邦理工學院和谷歌研究院的學者在論文"The Pitfalls of Next-token Prediction"中全面總結了 NTP 技術在大型語言模型中的問題和局限性。他們指出,目前的爭議很大程度上源於沒有區分推理階段的自迴歸和訓練階段的 teacher-forcing 兩種 token 預測方式。如果不加以區分,在模型預測錯誤時,對複合誤差的分析往往會將問題導向至推理過程,誤以為是模型執行方面的問題。

https://arxiv.org/pdf/2403.06963.pdf

論文還透過實驗指出了 NTP 技術目前存在的幾個主要問題:

1. 在自迴歸推理中,即使每步錯誤率很小,錯誤也可能在長序列中指數級累積,導致整體準確性顯著下降。

2. NTP 模型可能在需要前瞻性規劃的任務中表現不佳,難以有效學習如何制定和執行長期計畫。

3. Teacher-forcing 訓練可能無法學習到準確的下一個 token 預測器,因為模型可能會利用輸入中洩露的答案前綴來生成未來的詞,而非從問題本身推導出答案。

4. Teacher-forcing 訓練可能誘導模型使用「Clever Hans 作弊」策略。

5. Teacher-forcing 訓練可能導致早期答案詞難以學習,因為模型在訓練過程中失去了關於完整答案的監督。

6. 即使在簡單的路徑查找任務中,Transformer 和 Mamba 架構的模型也可能失敗,令人質疑 NTP 是否能泛化到更複雜或不同類型的任務。

NTP 技術雖然強大,但仍存在一些固有的局限性。在機器人控制領域,它能否真正走通還有待進一步的研究和驗證。未來,我們或許還需要探索其他潛在的技術路線,如多模態大模型、具身大模型、自然模態世界模型等,來實現通用人形機器人的智慧控制。這需要學界和業界的共同努力。

Llamafile: 專為大模型設計的推論框架(二)

隨著 ChatGPT、BERT 等大型語言模型在自然語言處理領域掀起巨大波瀾,AI 技術正以前所未有的速度走近大眾生活。然而,這些 LLM 的訓練和推論對計算資源提出了極高要求,動輒數十甚至數百 GB 的模型體積也給分發和部署帶來諸多不便。為了讓 LLM 真正為更多人所用,我們不僅需要更強大的硬體和演算法,還需要打造全新的工具鏈和基礎設施。

正是基於這一考慮,Mozilla 創新團隊於去年底發布了 llamafile 專案。透過巧妙結合 llama.cpp 和 Cosmopolitan Libc 兩大開源專案,llamafile 可將 LLM 權重檔案直接轉換為可執行檔,讓使用者無需編程即可在多種環境一鍵部署 AI 服務。自首發以來,在社群開發者的積極參與下,llamafile 迭代了多個重大版本,新增了一系列振奮人心的特性,有力推動了 LLM 技術的普及。本文將深入剖析 llamafile 的設計理念和關鍵實現,探討其在 LLM 工程化中的重要意義。

LLM 部署的技術挑戰

隨著 Transformer 等新架構的發明,LLM 的參數規模和計算開銷呈指數級增長。以 GPT-3 為例,其參數量高達 1750 億,訓練時使用了多達 10000 個 GPU,耗費了數百萬美元的算力成本。即便是在推論階段,為了獲得最佳的回應速度,仍然需要 TB 量級顯存的支援。這對絕大多數潛在使用者而言是難以企及的。

為了降低准入門檻,LLM 的開發者們開始探索各種優化技術,包括:

- 模型蒸餾:將大模型的知識提煉到小模型中,在保留核心能力的同時大幅減少參數量。 

- 量化感知訓練:透過低位元表示權重,在犧牲部分精度的前提下顯著降低儲存和頻寬佔用。

- 稀疏注意力:利用注意力矩陣的稀疏特性,避免計算無關 Token 之間的相關度,節省算力。

經過這些優化,LLM 的體積得以大幅壓縮,如今流行的開源模型如 LLaMA 和 GPT-J 的體積已降至百 GB 以下,資源佔用也在業餘愛好者可接受的範圍內。但與此同時,模型檔案格式也呈現出多樣化的趨勢。由於缺乏統一的標準,不同的模型在權重儲存方式上存在顯著差異。比如有的採用 NumPy 的 npz 格式,有的則使用 PyTorch 的 pt 格式,還有的會自訂一套序列化方案。這就導致了模型利用的碎片化問題,不利於推廣普及。

除了格式不一致,LLM的硬體適配也面臨諸多障礙。一方面,儘管上述優化在降低推論開銷上已經卓有成效,但對於複雜的任務而言,CPU 計算能力仍嫌不足,必須借助 GPU、TPU 等專用加速器。而這些異構設備在編程模型上存在顯著差異,且驅動配置繁瑣,應用程式很難做到一次編寫,隨處執行。另一方面,由於模型體積仍然較大,單機記憶體很難將其全部裝載,因此通常需要分散式推論,這進一步加劇了環境依賴。

由此可見,要真正普及 LLM 技術,我們需要在工具鏈和基礎設施層面做出改變。具體而言,期望有這樣一套方案,能夠:

1. 屏蔽 LLM 檔案格式的差異,提供統一的模型描述和轉換機制。

2. 封裝異構硬體差異,實現可移植、高效能的加速方案。  

3. 簡化分散式環境配置,做到開箱即用、按需擴縮。

llamafile 正是基於這些考量應運而生。透過在兩個成熟專案的基礎上提供薄薄一層"膠水",它巧妙地化解了上述矛盾,讓部署 LLM 變得無比簡單。

llama.cpp:為 LLM 注入 C 的效能

在介紹 llamafile 的核心設計之前,我們有必要先了解其重要組成部分:llama.cpp。

眾所周知,Python 以簡潔優雅著稱,是機器學習研究人員的首選語言。但在工程實踐中,Python 的執行效率一直飽受詬病。這在 LLM 推論場景下尤為突出,因為模型體積巨大,稍有不慎就會引入性能瓶頸。為了避免這一問題,llama.cpp 的作者選擇用 C/C++ 從頭實現 LLM 推論。

Agent使用第三方的大模型隨著使用頻率增加,成本也會上升,是否有更省錢的方法呢?有的,就是將這些大模型跑在CPU上。

一般來說,月租GPU伺服器至少也要花費9000左右,使用第三方服務的API可能很划算,但使用第三方服務始終存在資料外洩的風險。而且隨著用戶增加,按token計價的方式也一樣會讓花費快速增加。一些技術專家找到了一個省錢的方法,那就是讓大型模型在AMD的GPU,甚至在CPU上運行。如果在CPU上運行,我們只需要租一台核心夠用且內存較大的伺服器即可,每個月的價格瞬間就能降低千元甚至千元以下,有時候選擇折扣方案只要花費四千多塊台幣就能租一年。

想要在CPU上跑LLM,關鍵在於兩個要點:

1. 有效的CPU運算架構。

2. 充分利用大型模型的性能。

只要做到以上兩點再配合一台硬體配置還不錯的CPU伺服器,就可以得到一個性價比極高的本地大型模型服務。

有關第一點,Georgi Gerganov提出了用C/C++重新實現模型框架的想法。就是我們上次提到的llama.cpp。

使用C/C++的優點在於:

不需要額外的依賴,相比Python代碼需要的PyTorch等庫,C/C++直接編譯出可執行文件,避免了不同硬體的繁瑣準備工作:

1. 支持Apple Silicon芯片的ARM NEON加速,x86平台則以AVX2替代。

2. 具有F16和F32的混合精度。

3. 支持4-bit量化。

4. 不需要GPU,只需CPU即可運行。

由於這是純C/C++實現,不需要其他依賴,運行效率很高。除了MacBook Pro外,甚至還可以在Android上運行。

第二點,如何對100B大小的大型模型進行壓縮,以便於CPU機器運行呢?答案是通過「量化」。量化是指將連續取值的浮點型模型權重進行裁剪和取捨的技術,簡單來說就是壓縮,丟失部分精度,換取空間和性能。Georgi Gerganov提出了自己的量化方案ggml,ggml成為一種量化模型的文件格式。不過,由於大模型發展太快,ggml很快就跟不上,於是在去年年8月,推出了改進方案gguf,成為最新的量化模型文件格式。目前,HuggingFace也大力支持這個格式。當然,除了gguf方案外,還有其他量化方案,例如GPTQ等。總之,經過量化後的模型,可以提升性能,降低對硬體資源的要求。

有了llama.cpp和gguf,我們就可以在CPU上跑大模型了。

雖然llama.cpp可以直接運行,但運作起來總是不太方便。畢竟現在很少有人用C++來寫系統,所以最好能夠直接與我們的應用結合起來。

這裡有兩種方案:

1. 建立獨立服務,通過RPC或HTTP進行調用。

2. 將其編譯為業務系統開發語言所支持的模組,直接在代碼中調用。

第一種方案可以使用llama.cpp專案提供的輕量級HTTP服務,或者使用第三方的Docker容器來啟動服務。啟動後,就可以通過HTTP API來調用大型模型。

第二種方案,技術社群裡會有很多神人提供不同語言的模組,可以在llama.cpp專案的首頁找到這些專案。只需要找到適合你業務系統編程語言的模組,安裝到你的系統中,就可以像調用一個第三方庫一樣調用大型模型。另外,如果想要快速體驗,還可以通過ollama一鍵安裝和啟動大模型的功能。

量化後的模型對硬體的要求降低,但並不是說隨便一台舊電腦就能跑得動。比如我們有一個需要8G內存的大模型,我們可以試試6B的量化模型。如果有必要,可以升級到32G,這樣就可以增加量化的精度,獲得更好的結果。如果只有2G內存,建議用第三方接口調用。

模型經過量化後失去了一部分精度,會不會影響模型的準確性?

對於這個問題,應該根據自己的需求來選擇。會有不同參數量級的模型,是因為對於不同的應用場景所需要的資料精度是不同的。對於應用開發來說,要學會根據需要選擇適合的模型,適度降低成本。如果將所有LLM的處理都交給一個大模型去處理,代表模型要承受巨大的服務壓力,成本也會相應增加。因此,合理將不同的處理分配給不同的模型,在學習和調試的過程中,可以自己搭建一個本地的大模型服務,等調試完Agent之後,再將部分調用切換到付費的大模型上。如此一來,就可以降低成本。

具體而言,llama.cpp 提供了一個通用的推論引擎,可以載入 LLaMA、GPT-J、GPT-NeoX 等主流模型,並執行高效的文字生成。它採用自訂的權重格式,將模型劃分為若干個分片,每個分片包含其全部參數。這種組織方式可以充分利用局部性原理,在載入和訪問權重時盡可能減少快取缺失和頁面調度。

在演算法實現上,llama.cpp 對矩陣乘等關鍵路徑進行了極致優化,充分利用了 SIMD、Loop Unrolling 等現代 CPU 特性,再加上精心調教的多執行緒並行,使其在工業級伺服器上的推論效能可比肩商用解決方案。

為了方便地與現有應用整合,llama.cpp 還提供了一個相容 OpenAI API 的 HTTP 伺服器。使用者只需將請求發送至指定埠,即可獲得類似於 GPT-3 的對話體驗。這極大降低了二次開發的門檻。

然而,llama.cpp 仍存在一些不足之處:

1. 儘管提供了 Python binding,但在實際使用中仍不可避免地需要一些 C++ 知識,對非專業開發者不太友善。

2. 雖然權重格式經過優化,但轉換過程需要花費較長時間,且佔用大量磁碟空間。  

3. 雖然已經適配了 CUDA 後端,但配置過程較為繁瑣,且未考慮 AMD 平台。

llamafile 透過引入 Cosmopolitan Libc,巧妙地解決了這些問題。

Cosmopolitan Libc:賦予 C 跨平台的靈魂

談到跨平台,很多人首先想到 Java 的"一次編寫,到處執行"。然而,對於偏好 C/C++ 的系統級開發者而言,這一理念似乎遙不可及。一個主要原因是,不同作業系統在底層 API 的語義和呼叫規範上存在顯著差異。為了適配多種環境,開發者不得不編寫大量膠水程式碼,人工處理各種邊界情況,既繁瑣又容易出錯。這嚴重阻礙了 C/C++ 程式的可移植性。

Cosmopolitan Libc 試圖從根本上解決這一困境。它的核心理念是:透過提供一層統一的系統呼叫抽象,讓開發者只需面向 Cosmopolitan API 編程,生成的目標碼就可以不經修改地在 Linux、Windows、macOS 等各種環境直接執行。

實現這一點的關鍵是 Cosmopolitan 的連結器。傳統的連結器如 ld 只負責解析符號、分配位址,對目標平台並不作過多假設。而 Cosmopolitan 的連結器則內置了一個微型作業系統,可在裸機環境直接啟動。在入口函數執行之前,它會初始化 GDT、頁表等關鍵資料結構,並提供執行緒調度、虛擬記憶體、動態連結等現代作業系統的核心功能。這使得 Cosmopolitan 程式可以不依賴宿主機核心,直接控制硬體資源。

在 API 層面,Cosmopolitan 參考了 POSIX 規範,提供了檔案、網路、多執行緒等常用系統服務。為了適配不同 ISA,它還實現了通用的原子操作、鎖機制等並發原語。對於跨平台必須的元件如 libc、libm,Cosmopolitan 也提供了自己的實現。這些努力最終使得開發者只需遵循 Cosmopolitan 的編程規範,就能編寫可移植的系統級應用。

但光有可移植性還不夠,Cosmopolitan 還需為高效能計算提供支援,這主要體現在兩個方面:

1. 動態連結。LLM 推論通常需要呼叫 CUDA、BLAS 等第三方程式庫。為此,Cosmopolitan 實現了自己的動態連結器,可以載入宿主機的共享物件,並自動完成重定位。

2. GPU 加速。考慮到異構計算的廣泛應用,Cosmopolitan 透過封裝 CUDA driver API,使得 GPU 核心可以直接內聯到 Cosmopolitan 程式中,避免了 JIT 編譯帶來的額外開銷。

這兩個特性是 Cosmopolitan 區別於傳統 Libc 的關鍵所在,也是 llamafile 實現其設計目標的重要基石。

https://github.com/Mozilla-Ocho/llamafile

融合創新:llamafile 的架構設計

有了前面的鋪墊,我們就可以詳細解讀 llamafile 的核心設計思路了。

簡單來說,llamafile 直接利用 llama.cpp 作為 LLM 推論後端,透過 Cosmopolitan Libc 將其打包為可執行檔。這裡的關鍵是,llamafile 將模型權重硬編碼到可執行檔中,使得最終產物可脫離原始碼獨立執行,且不受環境約束。

具體實現上,llamafile 主要經過如下步驟:

1. 模型轉換。首先使用 llama.cpp 提供的工具,將各種常見格式的權重檔案轉換為 llama.cpp 定制格式。這個過程是一次性的,轉換結果可供重複使用。

2. 構建 blob。利用 Cosmopolitan 的連結器 objcopy,將轉換後的權重檔案以 blob 的形式內嵌到目標檔案中。

3. 連結可執行檔。將 llama.cpp 的核心程式碼、Cosmopolitan Libc、權重 blob 等目標檔案一起連結,生成最終的可執行檔。在這個過程中,連結器會進行符號解析和重定位,並生成元資料供啟動期使用。

4. 執行期載入。當可執行檔啟動時,首先由 Cosmopolitan 執行期完成初始化,並解析命令列參數。隨後,llamafile 利用 mmap 將嵌入的權重 blob 映射到記憶體,模擬 llama.cpp 的模型載入過程,繼而可以開始推論。

整個過程無需依賴 Python 直譯器,權重載入也省去了從檔案系統讀取的 I/O 開銷,再加上 Cosmopolitan 對資源的細粒度控制,使得 llamafile 的端到端效能接近原生應用。

為了進一步提高效能,llamafile 還在 Cosmopolitan 的基礎上實現了以下增強:

- 利用 GPU 加速矩陣運算,針對 NVIDIA 平台封裝了 cuBLAS API,AMD 平台則使用 ROCm。

- 針對 NUMA 架構進行 NUMA-aware 記憶體分配和執行緒調度優化。

- 引入 Cosmopolitan 對 JIT 編譯的支援,可在執行期產生高度優化的計算核心。

- 在模型並行方面,llamafile 支援多 GPU 橫向擴展,並利用 NCCL 實現高效通訊。

同時,llamafile 還致力於提供開箱即用的使用者體驗:

- 提供 llamafile-convert 工具簡化模型轉換,並與 Hugging Face 等社群生態深度整合。

- 持續完善 API server,提供易用的 RESTful 介面,同時相容各種應用框架。  

- 針對 CPU 後端實施 Lazy Tensor 優化,減少不必要的顯存佔用。

這些設計使得 llamafile 不僅在性能上拔得頭籌,也讓 LLM 開發和使用前所未有地便捷。


推動大語言模型民主化進程

自面世以來,llamafile 迅速俘獲了開源社群的芳心。憑藉卓越的性能和體驗,它已躍升為 Mozilla 最受歡迎的專案之一。在眾多貢獻者的推動下,llamafile 正以驚人的速度迭代演進,展現了開源力量的非凡魅力。

開源程式碼,技術創新,社群協作,這是 llamafile 專案的三大法寶,也是它不斷突破自我、續寫傳奇的力量源泉。  

自 v0.1 發布以來,llamafile 幾乎以每月一版的速度迭代。在 v0.8 中,它不僅支援了 Meta 最新發布的 LLaMA 3 等 SOTA 模型,還帶來了一系列性能優化:透過手寫組合語言實現的 BLAS 核心將 CPU 運算效率提高了一個數量級;針對 NVIDIA 和 AMD GPU 的異構調度策略也更加完善;為樹莓派等 ARM 平台提供了專門的低位元量化方案,即便在這些小型設備上也能實現即時對話。如此迅猛的進化速度,展現了開源力量的驚人魅力。

與此同時,llamafile 還在架構層面做出了前瞻性的嘗試。比如在 v0.7 中,它引入了混合執行引擎,可以根據模型規模和硬體條件動態調整執行策略。對於超大規模模型,它會自動採用流水線並行、張量融合等圖優化技術,最小化資料移動;對於中小規模模型,則會利用 Lazy Tensor 避免無謂的顯存分配,提高快取利用率。這為 LLM 推論提供了一套全局優化的範式。  

llamafile 也在積極擁抱社群生態。透過提供相容 OpenAI 的 API,它可以直接取代商業方案,為各種創新應用提供基礎支撐。在 LangChain、AutoGPT 等熱門專案中,我們已經可以看到 llamafile 的身影。Mozilla 還專門成立了 MIECO專案,為 llamafile 等開源技術搭建產學研用協同創新的平台,推動 AI 生態良性發展。

展望未來,隨著演算法優化的不斷突破,以及晶圓代工工藝的持續進步,LLM 推論已展現出阿米巴原生的趨勢特徵。從雲端到邊緣、從資料中心到終端,llamafile 這樣的"蘋果核"有望成為 AI 民主化的助推器,讓智慧應用遍地開花。  

作為這一變革的先行者,Mozilla 正在 llamafile 的基礎上謀劃更宏大的藍圖。相信在可見的未來,它必將釋放出比肩作業系統和瀏覽器的顛覆性力量,成為 AI 新紀元的基石。讓我們拭目以待,見證 llamafile "出圈"的那一天。

小結

llamafile 是 Mozilla 為推動 LLM 大眾化做出的重要努力。它巧妙結合了 llama.cpp 和 Cosmopolitan Libc 兩大開源專案,透過將模型權重內嵌到可執行檔,徹底解決了 LLM 分發和部署的難題。  

性能方面,得益於 Cosmopolitan 細粒度的系統呼叫抽象和 llamafile 在 GPU 加速、BLAS 優化等方面的卓越工作,其端到端回應速度可比肩商業方案,且可輕鬆橫向擴展。

體驗方面,llamafile 提供了豐富的工具鏈支援,簡化了模型轉換和自訂流程。其 API server 更是開箱即用,無需過多配置即可實現靈活呼叫。

llamafile 的成功離不開開源社群的積極參與。Mozilla 不僅以 MIECO 的形式搭建產學研用協同創新的平台,更以 llamafile 為起點規劃 AI 普惠的宏偉藍圖。  

站在 IT 發展的新起點,Mozilla 正以 llamafile 為引擎,驅動 AI 技術向更廣闊的應用場景滲透。我們有理由相信,這場由開源力量領跑的 AI 革命,必將像當年的個人電腦和網際網路一樣,以摧枯拉朽之勢重塑數位世界的格局。讓我們攜手共進,做 AI 新時代的見證者和開創者!

個人觀點

作為一個開源愛好者和AI研究者,我對 llamafile 這樣的創新專案感到由衷的敬佩和興奮。在我看來,它不僅是一個技術突破,更代表了開源精神和創新動力的完美結合。

llamafile最令人印象深刻的,是它在複雜的異構環境中實現了"一次編寫,隨處執行"的理想。這在以往的 AI 部署中幾乎是不可想像的。無論是格式轉換、運行時優化還是分散擴展,llamafile 提供的全流程自動化方案堪稱教科書般的典範。更難能可貴的是,這一切都建立在開源專案的基礎之上,展現了開源社群協作的驚人力量。

同時,llamafile 對 LLM 生態的推動作用也不容小覷。一方面,它大大降低了 LLM 的准入門檻,讓更多人可以參與到這場 AI 變革中來。透過與主流開源社群的緊密整合,llamafile 將釋放出更多創新活力。另一方面,llamafile 的成功也為商業公司敲響了警鐘。在开源力量面前,封閉平台和專有格式已經岌岌可危。唯有擁抱開放,合作共贏,才能在 AI 新時代佔得一席之地。

當然,llamafile 還有進一步完善的空間。比如在安全和隱私方面,目前的方案可能還不夠成熟;在支援更多的模型和硬體時,也需要投入大量的適配工作。但我相信,在開源社群的共同努力下,這些問題終將迎刃而解。Mozilla 樹立的"開源+創新"範式,也必將在更多領域綻放異彩。

展望未來,我對 AI 技術的民主化充滿期待。隨著 llamafile 這樣的基石工程不斷夯實,LLM 推論從雲端向終端滲透的趨勢已勢不可擋。在可見的未來,也許我們每個人都將擁有自己的"AI助手"。它們不再是大公司的專利,而是真正服務於每個人的智慧夥伴。這場變革不僅將提升生產力,改善生活品質,更將從根本上重塑人與科技的關係。而這一切,都將由開源力量來推動和實現。作為這個偉大時代的一分子,我們每一個人都應該努力探索開源的無限可能,用創新和協作為 AI 新紀元續寫傳奇。讓我們攜手並進,共創美好未來!

CRISPR-GPT: Google DeepMind領軍自動化基因編輯實驗設計的LLM Agent

當大家還在討論AI是否能進行複雜推論的時候,另一個有"破壞力創造"的進步卻在悄然發生。那就是AI與基因編輯技術的結合!!

我曾經參與生物晶片公司的營運, 所以從實務上深入分析這個應用帶來的影響, 但是如果產業知識對您過於艱澀, 您可以直接看我的結論。

基因工程技術的引入徹底改變了生物醫學研究,使得對基因資訊進行精確修改成為可能。然而,創建一個高效的基因編輯系統需要對CRISPR技術和複雜的實驗系統有深入的理解。雖然大型語言模型(LLM)在各種任務中表現出了前景,但它們往往缺乏特定知識,難以準確解決生物學設計問題。

在由DeepMind領軍Stanford U.及Princeton U.實驗室的這項工作中,該報告介紹了CRISPR-GPT,這是一個融合了領域知識和外部工具的LLM agent,可以自動化和增強CRISPR基因編輯實驗的設計過程。CRISPR-GPT利用LLM的推理能力,幫助選擇CRISPR系統、設計向導RNA、推薦細胞遞送方法、起草實驗方案,並設計驗證實驗以確認編輯結果。該報告展示了CRISPR-GPT在協助非專家研究人員從頭開始進行基因編輯實驗方面的潛力,並在一個真實世界的案例中驗證了agent的有效性。此外,該報告探討了與自動化基因編輯設計相關的倫理和監管考量,強調需要負責任和透明地使用這些工具。該報告的工作旨在彌補初學生物研究人員與CRISPR基因組工程技術之間的差距,並展示LLM agent在促進複雜生物學發現任務中的潛力。

背景

基因編輯技術代表了一項開創性的科學進步,它使得精確改變生物體的遺傳物質成為可能。這一創新技術在生物學和醫學的各個領域都得到了廣泛應用,從糾正導致囊性纖維化、血友病和鐮刀型貧血等疾病的基因缺陷,到為對抗癌症、心血管疾病、神經退行性疾病和感染等複雜疾病提供新策略。最著名的基因編輯系統之一被稱為CRISPR-Cas9。它是從細菌用作免疫防禦的天然發生的基因組編輯系統改編而來。除了CRISPR-Cas9,最近的進展還促成了CRISPR啟動/干擾、CRISPR基礎上的Prime編輯和Base編輯技術的發展。CRISPR啟動/干擾,也稱CRISPRa/CRISPRi,能夠通過表觀遺傳調控來增強基因表達或沉默特定基因的活性。被認為是DNA的"搜索和替換"方法的Prime編輯可以在不引入雙鏈斷裂的情況下進行精確編輯。另一方面,Base編輯可以在目標位置直接、不可逆地將一種DNA鹼基轉換為另一種,進一步擴大了精確基因組修飾的工具箱。所有這些技術在醫學、農業及其他領域都有廣泛的應用潛力,提高了基因組編輯在尋求治療遺傳疾病和其他應用方面的能力。

設計基因編輯實驗需要深入理解一系列技術以及目標器官相關的生物學。CRISPR Cas基礎編輯的工作原理是與一個短的"向導"序列(導向RNA)的RNA相互作用,該序列與細胞DNA中的特定目標序列結合,類似於細菌從CRISPR陣列產生的RNA片段。當導入細胞時,導向RNA識別預定的DNA序列,Cas酶(通常是Cas9或其他)在目標位置切割DNA,模仿細菌中的過程。在設計這類實驗時,有許多考慮因素,包括選擇合適的基因編輯系統、開發最佳的導向序列和驗證方法。這通常需要大量的領域專業知識、對目標器官生物學的理解以及反復試驗。開發人工智能輔助計算工具來幫助基因編輯有巨大的前景,可以讓技術更容易獲得,加速科學和治療的發展。

大型語言模型(LLM)已經在語言技能方面展示了非凡的能力,並包含了大量的世界知識,近似於人工通用智能的某些方面。最近的研究還探索了用外部工具增強LLM,提高它們解決問題的能力和效率。LLM也展示了作為工具製造者和黑盒優化器的潛力。研究人員探索了用於各種應用領域的基於LLM的專門模型,以及用於解決科學和數學任務的模型。例如,ChemCrow使用工具增強LM來解決一系列與化學相關的任務,如對乙酰氨基酚的合成,而Coscientist也由GPT-4驅動並整合了自動實驗,在優化鈀催化的交叉偶聯反應方面取得了成功。

然而,一般用途的LLM並不知道如何設計生物學實驗。儘管運用大型語言模型(LLM)來輔助基因編輯實驗的設計前景誘人,但目前最先進的通用模型在這一專業領域存在明顯不足。這些模型雖然知識儲備豐富,卻缺乏精確、最新的特定領域知識,而這對於準確設計生物學實驗至關重要。

通用LLM的一個關鍵局限性是它們傾向於產生自信但不準確的回應,即當被要求回答專業生物學查詢時的 "幻覺"。例如,當被要求為靶向特定人類基因(如EMX1或EGFR)設計向導RNA(gRNA)序列時,像ChatGPT-3/ChatGPT-4這樣的通用LLM往往會用高置信度給出錯誤序列。然而,它們提供的gRNA序列通常與任何已知的基因組區域都不對應。這種差異可以通過將LLM生成的序列與NCBI的BLAST等數據庫中的參考序列進行比對來輕易發現,BLAST可以將序列與人類基因組和轉錄組比對。如果不經過適當的審核,這種虛構的設計序列不僅缺乏實用性,還可能誤導研究人員,導致資源和時間的浪費。

此外,通用LLM產生的回應通常缺乏實驗設計所需的基本細節,如具體材料、方案、非目標效應考量、gRNA效率和特異性。這些資訊上的差距可能讓研究人員,尤其是基因編輯領域的新手,無法為實驗的實際執行做好準備。

值得注意的是,生成的回應可能包含大量與基因編輯實驗設計無直接關係的資訊。這種無關的文字會導致混淆和誤導,使研究人員難以識別最相關和最實用的資訊。

所有這些局限性都凸顯了開發專門針對基因編輯實驗設計的新型LLM的必要性。這些模型需要整合深入、精確的領域知識和批判性評估並生成可行實驗解決方案的能力,從而克服通用LLM在設計CRISPR基因編輯實驗時面臨的當前障礙。

CRISPR-GPT概述

在基因工程快速發展的領域,CRISPR技術已成為精確基因編輯的關鍵工具。儘管它很有前景,但設計CRISPR實驗的複雜性——從向導RNA(gRNA)的選擇到預測非目標效應——對那些剛接觸該領域的人來說帶來了重大挑戰。為了彌合這一差距,該報告推出了CRISPR-GPT,這是一種新型解決方案,它將大型語言模型(LLM)的優勢與特定領域知識和計算工具相結合,專門用於CRISPR基因編輯任務。

CRISPR-GPT的核心是一個量身定制的LLM驅動的設計和規劃agent。這個agent的引擎不僅利用了基因編輯領域領先從業者的專家知識,還整合了對最新文獻的廣泛回顧以及一套計算工具包,包括向導RNA設計工具。

CRISPR-GPT Agent的創新之處在於通過簡化複雜的過程為一系列可管理的步驟,實現基因編輯實驗的自動化設計:

  1. CRISPR系統的選擇:根據實驗需要量身定制CRISPR系統的選擇。
  2. gRNA設計:根據Broad Institute的金標準guideRNA庫和CRISPRPick工具包,包括預先設計的gRNA庫,優化guideRNA序列的效率和特異性。
  3. 遞送方法選擇:就將CRISPR組分導入目標細胞的最有效方法提供建議。 
  4. 非目標效應預測:評估預期編輯的同時可能出現的意外改變。
  5. 實驗方案的推薦:根據實驗目標量身定制分步過程。
  6. 驗證方法推薦和引物設計:推薦驗證編輯的最佳方法,並幫助設計相關引物。

這種方法利用連續思考推理模型和狀態機,確保即使是基因編輯的新手也能反復完善他們的實驗設計,以達到滿足他們具體研究需求的方案。此外,CRISPR-GPT還提供:

  • 一個自由問答模式,用於精確解答臨時查詢。
  • 一個用於深入分析預設計gRNA的非目標預測模式。

當使用者在實驗設計過程中遇到其他問題時,這些功能可以為使用者提供幫助。

考慮到圍繞基因編輯(尤其是人類應用)的倫理和安全問題,該報告已經將保障措施整合到CRISPR-GPT中。這些措施包括限制其在人類受試者中的使用、確保遺傳資訊隱私的措施,以及對潛在意外後果的警示,反映了該報告致力於在與基因編輯技術相關的更廣泛的科學和倫理討論中負責任地使用這些工具。

方法和算法

大型語言模型 

CRISPR-GPT agent由以下4個核心模塊組成:LLM規劃器、工具提供者、任務執行器和LLM Agent,後者作為與使用者的介面,用於接收輸入和傳達輸出。

任務執行器以狀態機的形式運行,提供穩健的子目標分解和進度控制。該報告以狀態機的形式為CRISPR-GPT實現了22個任務,總結於表1。狀態機負責為當前任務提供充分的指示,並引導使用者通過多輪文字互動完成決策。通過這些狀態機,該報告為任務執行器手動分解每個任務為子目標。具體而言,每個狀態負責一個特定的子目標。轉移邏輯被很好地定義,因此任務執行器可以根據當前進度適當地轉移到另一個子目標。

該報告有4個預定義的元任務,支援4種基因編輯相關實驗的完整流程;見表1。此外,LLM規劃器可以根據使用者的元請求生成定制的任務清單。相應任務的狀態機被鏈接在一起,形成一個更大的狀態機以支援整個流程。

工具提供者將任務執行器與外部API連接起來。為了將語言模型與外部功能連接起來,系統需要(1)分析當前形勢並判斷是否適合調用外部工具;
(2)知道有哪些工具可用,並從中選擇最佳工具。

在CRISPR-GPT中,該報告沒有直接向LLM公開API的介面,而是將API的使用包裝在狀態中,並通過手寫的指示和回應公開更加使用者友好和LLM友好的文本介面。通俗地說,該報告是在教使用者(人類agent和LLM agent)如何使用這些工具。這些工具包括Google網路搜索、運行Primer3等程式,以及從外部向導RNA庫、研究論文和實驗方案中檢索資訊。

LLM規劃器根據使用者的請求自動生成任務清單。大型語言模型(如GPT-4、Gemini和Claude)可以作為LLM驅動的agent的推理核心,以解決現實世界的決策問題。該報告採用流行的ReAct提示技術,其中LLM被提示輸出連續思考推理路徑和從可能的行動集合中選出的最終行動。為了讓LLM執行任務分解,該報告提供一個表格,其中包含所有任務的描述和依賴關係作為LLM的提示。基於LLM的內部知識以及該報告手動編寫的任務描述和任務分解指示,LLM可以智能地分析使用者的請求,並將使用者的請求分解為一系列任務,同時考慮任務之間的依賴關係。分解後,相應的狀態機被鏈接在一起以完成所有任務。任務分解的提示格式可以在附錄B中找到。

為了提高魯棒性,該報告不允許LLM在自動執行過程中動態添加/刪除新任務(新狀態機)。然而,該報告相信這是邁向更智能的CRISPR-GPT版本的重要一步,並將其作為未來的工作。

LLM-Agent根據使用者的元請求自動與任務執行器互動。在解決自動化CRISPR基因編輯任務這一複雜挑戰時,該報告通過序貫決策的視角來構建問題。這一視角將使用者與自動化系統之間的互動框定為一系列步驟,每一步都需要精確的決策以朝著實驗設計和執行的最終目標前進。該報告系統的核心是LLM-agent,它充當使用者與狀態機之間的中介。這個狀態機源自初始任務分解步驟,有效地將基因編輯過程分解為一個結構化的動作和決策序列。在這個序列的每一步,狀態機都向LLM-agent呈現一個當前狀態。這個狀態封裝了手頭任務的描述,並指定了使用者需要提供的任何輸入以推進進程。

LLM-agent的角色是解釋當前狀態並代表使用者做出明智的決定。為了有效地做到這一點,agent可能會利用各種資訊,包括:

  • 當前狀態固有的指示,
  • 使用者提出的具體請求,
  • 當前任務會話中過去互動的歷史,
  • 已整合到系統中的外部計算工具的結果。

這些資訊被整合到LLM-agent的提示中,然後agent利用其能力來確定最合適的下一步行動。這些提示的格式和結構旨在優化決策過程。

使用者監督是該系統的一個關鍵組成部分。雖然LLM-agent自主運作,但使用者並沒有被排除在這個過程之外。相反,該報告鼓勵他們監控任務的進展並與agent互動。這種設置確保LLM-agent的任何錯誤或誤解都能被使用者及時發現和糾正,維持基因編輯實驗設計的準確性和完整性。這種自動化方法強調人類專業知識與人工智能之間的協同合作。通過利用LLM-agent處理和應對複雜資訊的能力,該報告為設計CRISPR基因編輯實驗提供了一種更高效、更使用者友好的體驗。序貫決策框架不僅簡化了任務執行過程,而且確保使用者的輸入仍然是實驗規劃和設計的基石。

人工評估

為了評估CRISPR-GPT agent在協助基因編輯和實驗設計方面的有效性,該報告組織了一個由12位CRISPR和基因編輯研究領域專家組成的多元化小組。這12位專家根據既定標準,對三種模式對實驗設計任務的回應進行了1(差)到5(優)的評分。為了提供一個比較視角,該報告使用類似的提示生成了ChatGPT 3.5和ChatGPT 4.0(模型版本gpt-4-0613)的輸出,並使用相同的標準進行評估。

生物學實驗和濕實驗驗證 

該報告通過人工-agent協作使用ChatGPTv4 API的CRISPR-GPT進行了生物學實驗,作為該報告方法的真實世界濕實驗驗證。具體而言,該報告讓獨立的科學家(他們不熟悉基因編輯實驗)使用CRISPR-GPT來協助他們在一個癌症研究項目中進行基因敲除(KO)實驗。詳細的方法如下。

細胞系和細胞培養。A375細胞系在添加了10%胎牛血清(FBS,Gemini Bio)、100 U/ml青霉素和100ug/ml鏈黴素(Gibco)的DMEM高糖、GlutaMAX(Gibco)中培養,溫度為37 ∘C,CO2濃度為5%。

crRNA克隆。通過Golden Gate組裝方法使用BbsI或Esp3I(NEB)將4個crRNA(TGFBR1/SNAI1/BAX/BCL2L1)克隆到表達Cas12a的骨架載體中。使用U6測序引物通過Sanger測序驗證構建: 5'-GACTATCATATGCTTACCGT-3'。

慢病毒包裝和轉導。通過使用PEI轉染試劑(Sigma-Aldrich)將組裝好的慢病毒載體與VSV-G包膜和Delta-Vpr包裝質粒共轉染到HEK-293T細胞中來產生慢病毒。轉染48小時後收集上清液。使用8µg/mL polybrene通過1000*g 45分鐘的離心感染,以低MOI轉導A375細胞。24小時後,用1µg/mL嘌呤霉素篩選細胞以建立穩定表達的細胞系。

gDNA提取、PCR和測序。7天後使用QuickExtract(Lucigen)從篩選的細胞中提取基因組DNA。然後根據製造商的說明,使用含有Illumina測序接頭的引物和Phusion Flash高保真PCR Master Mix(ThermoFisher Scientific)擴增目標位點。在Illumina MiSeq平臺上生成配對末端讀數(150 bp)。 

結果

CRISPR-GPT利用LLM的推理能力、領域知識、檢索技術和外部工具,為基因編輯實驗設計任務提供全面的解決方案。它支持廣泛的基因編輯場景,包括單基因敲除、無雙鏈斷裂的鹼基編輯、通過prime編輯進行插入/缺失/替換,以及用於基因激活或抑制的表觀遺傳編輯(CRISPRa和CRISPRi)。

CRISPR-GPT通過三個模塊協助研究人員進行基因編輯實驗設計

CRISPR-GPT agent通過三個不同的模塊幫助研究人員設計基因編輯實驗。"元模式"為一般基因編輯場景(稱為元任務)提供專家定義的流程,使使用者,特別是基因編輯領域的新手,能夠使用這些流程。"自動模式"根據使用者輸入自動生成定制的必要設計任務清單,幫助各個層次的使用者實現目標。"問答模式"作為一個高級GPT-4聊天機器人,在整個設計過程中解答使用者與CRISPR和基因編輯相關的查詢。

元模式 

"元模式"涉及使用4種CRISPR基礎基因編輯系統(元任務)規劃和實施22個獨特的基因編輯實驗設計任務。它利用預定義的流程來幫助使用者徹底完成一個元任務。在這種模式下,CRISPR-GPT agent引導使用者完成設計基因編輯實驗所需的每個任務。這包括選擇合適的CRISPR系統、推薦遞送方法、設計sgRNA、預測sgRNA非靶向效率、選擇實驗方案以及計劃驗證實驗。

對於每一個設計任務,CRISPR-GPT agent都與使用者互動,應用各種技術和外部工具來提供最佳解決方案。例如,在選擇CRISPR系統時,CRISPR-GPT不斷與使用者互動,提供指示並收集資訊,根據已發表的方案提出選項。對於遞送方法推薦等與上下文相關的任務,CRISPR-GPT不僅會推薦常用方法,還會根據使用者的要求通過網路搜索提供定制解決方案。對於sgRNA/pegRNA設計,來自現有設計和出版物的多物種資料庫使CRISPR-GPT能夠根據使用者資訊快速提出預設計的sgRNA。在sgRNA/pegRNA設計之後,使用者可以根據CRISPR-GPT提供的詳細指示和代碼評估設計的指引的潛在非靶向效應。完成設計任務後,CRISPR-GPT根據互動歷史提供選定的方案,包括CRISPR系統選擇和遞送方法。最後,對於驗證任務,CRISPR-GPT利用外部API(如Primer3)來幫助使用者設計用於驗證實驗的引物。

自動模式

"自動模式"也有助於規劃和執行13個獨特的基因編輯實驗設計任務。與"元模式"不同的是,它不依賴預定義的元任務和流程;相反,它使用LLM-規劃器將使用者的請求分解為一系列依賴任務。例如,如果使用者請求"設計sgRNA以敲除人類EGFR",CRISPR-GPT agent會從請求中識別關鍵字,並列出必要的設計任務,如"CRISPR/Cas系統選擇"和"用於敲除的sgRNA設計"。此外,它使用來自初始請求的資訊(例如,靶基因"EGFR"和物種"人類")來自動填充相關欄位並生成sgRNA設計,而不需要使用者重複輸入。同時,CRISPR-GPT闡明其選擇背後的理由,允許使用者跟蹤該過程並在必要時進行修正。  

問答模式

在"元模式"和"自動模式"的設計任務中,CRISPR-GPT agent通過"問答模式"即時回應或建議CRISPR和基因編輯相關的查詢。例如,在選擇CRISPR系統後,尋求有關所選系統(如Cas12a)更多資訊的使用者可以通過提問"Q: 什麼是Cas12a?"來快速獲得答案。CRISPR-GPT利用其知識庫以及來自該領域專家選定資料庫的文件檢索,迅速提供準確、相關的資訊。

CRISPR-GPT通過人工專家評估在基因編輯設計任務中優於通用LLM

為了評估CRISPR-GPT agent的性能,該報告邀請了12位CRISPR和基因編輯領域的專家,設計了一組任務來測試CRISPR-GPT在協助研究人員進行實驗設計方面的能力。結果從四個不同方面進行評估:準確性、推理、完整性和簡潔性。準確性反映CRISPR-GPT是否能提供關於CRISPR研究和方法學當前狀態的準確資訊。推理評估CRISPR-GPT是否能對建議的設計提供有見地的、有充分依據的解釋。完整性確保使用者收到CRISPR實驗設計所需的所有資訊。最後,簡潔性確保CRISPR-GPT向使用者提供與設計任務直接相關的資訊,不必要的資訊最少。所有評估者都被要求對三種模式下的任務集在這四個方面進行1(差)到5(優)的評分。使用等效的提示生成ChatGPT 3.5和ChatGPT 4.0的回應,並使用相同的標準進行評分。

該報告觀察到,在該報告設計的任務集中,CRISPR-GPT在所有三種模式下的準確性明顯高於通用LLM-agent,因為該報告在CRISPR和基因編輯領域採用了大量領域知識來確保CRISPR-GPT agent的魯棒性。而ChatGPT 3.5和ChatGPT 4.0等通用LLM agent產生的回應由於已知的問題(包括領域知識不足和幻覺)而包含更多細微的事實錯誤。同時,該報告發現CRISPR-GPT和通用LLM agent在不同的任務集上都表現出良好的推理能力。對於"自動模式"相關的任務,CRISPR-GPT表現出更好的推理能力,這可能是由於agent中編碼的更好的提示技術。正如該報告所預期的那樣,"完整性"是通用LLM-agent在執行基因編輯實驗設計任務時的主要問題。它們通常可以為設計提供一般性指導,但由於缺乏領域知識和外部工具,無法提供設計細節。相反,CRISPR-GPT在設計任務中表現出更好的"完整性"性能分數,使使用者能夠僅根據CRISPR-GPT提供的資訊執行基因編輯實驗。值得注意的是,ChatGPT 3.5和4.0在"問答"模式下的"完整性"性能分數優於CRISPR-GPT。這種結果是由於"完整性"和"簡潔性"之間有意的權衡。通用LLM-agent直接生成的答案通常包含大量無關資訊,以便向使用者提供更完整的回應。這通常會讓使用者感到困惑,難以抓住關鍵資訊。在這種情況下,該報告有意設計CRISPR-GPT在所有不同模式下向使用者提供簡潔準確的答案,因此CRISPR-GPT在"簡潔性"性能分數上表現一致更好。 

總的來說,通過專家的評估,該報告發現CRISPR-GPT在各個方面都表現出顯著優於通用LLM-agent的性能,用於基因編輯實驗設計任務。儘管如此,CRISPR-GPT在更複雜的基因編輯場景和罕見的生物案例中遇到了困難。未來可以通過更多最新的領域知識和更好的外部工具集來進一步擴展和改進它。

CRISPR-GPT通過真實世界的應用展示其功效

為了展示CRISPR-GPT在協助研究人員設計基因編輯實驗方面的能力,該報告通過與CRISPR-GPT的持續互動,在人類A375細胞系中進行了基因敲除實驗。

在這個實驗中,該報告的目標是在人類A375細胞系中分別敲除4個基因(TGFBR1、SNAI1、BAX、BCL2L1)。首先,該報告選擇"元模式"從頭設計基因敲除實驗。按照CRISPR-GPT中選擇CRISPR系統的指示,該報告選擇了AsCas12a,因為該報告希望進行多位點編輯並降低潛在的非靶向編輯率。對於在A375細胞中遞送CRISPR系統,該報告遵循CRISPR-GPT的建議,使用慢病毒轉導,以確保Cas酶和sgRNA的穩定表達。 

然後,基於這些資訊,該報告能夠獲得Cas12a質粒(之前已有)。在設計sgRNA時,該報告特別針對人類TGFBR1/SNAI1/BAX/BCL2L1基因,充分意識到CRISPR-GPT提出的人類基因編輯的倫理影響。CRISPR-GPT從已發表的文庫中為每個基因提供了4個sgRNA序列,所以該報告能夠訂購合成序列。

隨後,CRISPR-GPT提供了gRNA克隆的方案。然後提供了詳細的說明,使用必要的質粒和病毒包裝組分,通過磷酸鈣轉染HEK293T細胞來產生慢病毒。在此之後,該報告完全按照CRISPR-GPT生成的方案,通過轉導過程,包括細胞培養程式、添加慢病毒以及使用聚凝乙烯(polybrene)促進高效轉導。為了進行驗證,該報告在CRISPR-GPT中選擇了新一代測序(NGS)用於突變檢測和敲除驗證,並遵循CRISPR-GPT agent提供的方案。為了準備NGS,該報告根據方案使用DNeasy Blood & Tissue Kit從細胞中提取基因組DNA。對於PCR引物設計這一關鍵步驟,該報告向CRISPR-GPT提供了詳細的序列資訊,它自動返回了一組用Primer3設計的引物,專門用於擴增目標位點。在該報告實驗的最後階段,CRISPR-GPT建議該報告在PCR產物上連接Illumina接頭用於文庫構建,並強調有必要用NCBI BLAST檢查引物特異性。這最後的驗證步驟對於防止錯配和確保測序結果能準確反映預期的基因組編輯至關重要。

最後,該報告分析了NGS的資料,觀察到在所有4個靶基因上都有持續高比例的預期編輯結果。通過這一過程,CRISPR-GPT提供了:(1)CRISPR系統選擇(2)向導RNA設計(3)遞送系統推薦(4)質粒和病毒載體選擇以及克隆方案(5)組織培養、細胞轉導程式(6)細胞收集和基因編輯效率量化方法(7)測序引物設計和讀出驗證方案。因此,該報告的專業知識與CRISPR-GPT的計算指導之間的動態互動,對執行一個精確且在倫理上審慎的基因編輯實驗至關重要。

安全和倫理問題 

當使用AI工具來指導基因組編輯時,會出現安全和倫理問題,從非法改變人類基因組的風險到涉及使用者基因組資訊時的隱私問題。

減輕人類可遺傳編輯的風險

CRISPR-Cas9等技術已經使改變人類基因組成為可能,這帶來了一些倫理和安全風險。特別是,生殖細胞和胚胎基因組編輯帶來了許多倫理挑戰,包括是否允許使用這項技術來增強正常的人類特徵(如身高或智力)。基於對倫理和安全的考量,生殖細胞和胚胎基因組編輯目前在美國和許多其他國家是非法的。為了確保CRISPR-GPT遵循可遺傳基因組編輯暫緩令中給出的指引。

CRISPR-GPT採用一種機制,以確保在所有任務中,使用者無法繞過現有步驟詢問他們正在編輯哪個生物體。agent會檢查編輯目標是否屬於人類組織或器官。如果發現編輯目標是人類器官,將觸發以下解決方案:當使用者繼續設計人類基因編輯實驗時發出警告說明。提供這個國際暫緩令的連結並註明。要求使用者在繼續之前確認他們理解風險並已閱讀這個國際指南。

保護使用者基因組資料隱私

其他問題與使用者資料隱私有關,特別是當使用AI工具可能交換人類基因組序列資訊時。該報告遵循醫療保健中的資料隱私和HIPAA隱私規則。儘管基因組規模的序列從根本上與身份相關,但最長20 bp的DNA片段被認為是安全的,無法識別人類身份。CPISPR-GPT配備了以下功能,以避免向公共LLM模型提供任何可識別的私人人類/患者序列。具體而言,該報告的解決方案是:

  • CRISPR-GPT永遠不會在伺服器上儲存任何可識別的長基因組序列,這可能會洩露患者的私人資訊。
  • CRISPR-GPT實現了一個過濾器,在將提示發送到外部LLM之前,檢測提示中是否包含任何≥20bp的A/T/G/C/U序列。在檢測到這種序列存在後,agent會發出錯誤警告,要求使用者手動刪除輸入中的此類序列。通過這種方式,避免將此類敏感資訊洩露給公共LLM模型。

CRISPR-GPT agent展示了LLM在自動化和增強複雜生物學實驗設計過程方面的非凡潛力。通過無縫整合LLM與領域知識、外部工具和模組化任務執行系統,CRISPR-GPT使研究人員能夠以前所未有的輕鬆和效率來駕馭CRISPR基因編輯實驗的複雜領域。CRISPR-GPT的多模態功能包括元任務流程、互動提示和隨需問答支援。研究人員可以利用agent的專業知識來規劃和執行基因編輯實驗,從CRISPR系統選擇和向導RNA設計到自動起草詳細的方案和驗證策略。這種簡化的工作流程不僅加速了設計過程,而且降低了出錯和疏漏的風險,從而提高了研究成果的品質和可重複性。

雖然在化學等其他科學領域存在LLM agent,但涉及活體材料的生物學實驗的複雜性需要一套不同的考量。與通常遵循明確方案的化學反應不同,生物學實驗需要複雜的程式,以考慮活體系統的動態特性。CRISPR-GPT通過提供針對具體實驗環境量身定制的詳細、分步指導來解決這一挑戰,確保研究人員能夠有效地駕馭使用活細胞和有機體的細微差別。

此外,CRISPR-GPT的自由風格提示和即時問答能力使其有別於許多現有的agent。研究人員可以提出非結構化的查詢,並獲得情境化的回應,促進與agent更自然、更直觀的互動。這一特性在面對實驗過程中可能出現的意外挑戰或不可預見的情況時非常有價值,使研究人員能夠尋求及時指導並根據需要調整他們的方法。

儘管CRISPR-GPT具有令人印象深刻的能力,但它並非沒有局限性。雖然agent可以設計單個組分,如向導RNA和引物,但它目前缺乏從自然語言輸入生成完整構建或載體的能力。這一局限性突顯了一個未來發展的領域。例如,基因編輯的模組化設計領域的最新進展,如FragMID,可以與CRISPR-GPT整合,實現LLM賦能研究人員探索和優化CRISPR設計和客製化策略的潛力,從而帶來更高效的基因編輯。

展望未來,CRISPR-GPT與自動化實驗室平臺和機器人技術的整合蘊藏著巨大的前景。通過連接計算設計和物理執行,研究人員可以利用agent的專業知識來編排端到端的自動化實驗,最大限度地減少人工干預,加速發現的步伐。

https://arxiv.org/pdf/2404.18021

個人見解

從第三方角度來看,這篇題為《CRISPR-GPT:一個自動化基因編輯實驗設計的大型語言模型Agent》的論文無疑代表了人工智能技術在生物醫學領域應用的一個重要里程碑。

本文的核心創新點在於巧妙地將大型語言模型(LLM)與領域知識和外部工具相結合,構建了一個名為CRISPR-GPT的智能agent,以協助研究人員設計和優化CRISPR基因編輯實驗。通過采用多種互動模式,如專家定義的元任務流程、自動任務分解、自由問答等,該系統將復雜的實驗設計過程分解為一系列易於管理的步驟,大大降低了技術門檻。

這一成果的意義首先體現在其對基因編輯技術的普及和應用的推動作用上。CRISPR作為一項革命性的生物技術,其在基礎研究和應用開發領域的前景不可限量。然而,設計一個成功的CRISPR實驗對於許多科研新手而言卻是一個巨大的挑戰。CRISPR-GPT的出現為他們提供了一個智能助手,引導他們以最優的方案和流程開展實驗,有望顯著提升這一領域的研究效率和產出。

同時,這項研究也為利用人工智能和大數據來驅動科學發現勾勒了一幅藍圖。通過無縫整合LLM的語言理解和推理能力,專家知識庫的權威解釋,以及各種任務專用的外部工具,CRISPR-GPT建立了一種全新的人機協作范式。這種范式不僅可以在基因編輯領域復制,也可以推廣到其他高度專業化、任務複雜的學科領域。可以想見,隨著這一模式的成熟和發展,我們有望看到越來越多的"AI科學家"在各個前沿領域崛起,成為人類專家強有力的助手和夥伴。

當然,本文也坦誠地指出了這一方案的局限性和有待完善之處。比如CRISPR-GPT目前還不能直接生成端到端的實驗流程,在處理一些複雜任務時也會遇到困難。這些問題為未來工作指明了努力的方向,比如進一步擴充其任務編排能力,引入更豐富的知識和工具,並在更多場景中予以測試和打磨。

此外,在充分肯定這一突破性成果的同時,我們也要理性看待其局限性和潛在風險。在技術層面,類似系統的有效性和可靠性還有待在更廣泛的實驗中得到嚴格驗證。在倫理層面,雖然CRISPR-GPT已經設置了一些基本的防護措施,但隨著應用場景的拓展,我們恐怕還需要更細緻入微、更具前瞻性的倫理規範框架。在實用層面,這類智能工具能否真正融入科研的日常工作流程,提高生產力的同時又不帶來過度依賴等問題,也是一個值得關注和研究的問題。

總的來說,CRISPR-GPT作為將LLM技術引入生物醫學研究的一次重要嘗試,其價值和意義不容小覷。它為攻克疾病、增進人類福祉提供了一個全新的思路和工具,展現了人工智能在賦能科學探索方面的巨大潛力。同時,它也為其他學科應用類似模式提供了有益的參考和借鑒。未來,隨著技術的不斷進步,倫理的持續審慎,以及跨領域協作的深入推進,相信這樣的智能輔助系統必將在更廣闊的疆域上大放異彩,開啟科學研究的智能化新紀元。我們有理由對這一前景充滿期待。


2024年企業購置AIGC應用的變化

生成式AI在2023年席捲消費市場,創下超過十億美元的驚人消費規模。而在2024年,企業市場的商機可望再翻倍成長。

去年,消費者花了無數時間與AI聊天機器人對話,或用擴散模型製作圖像和影片。但多數企業在生成式AI的應用似乎僅限於少數明顯的案例,並將「GPT包裝」產品作為新的銷售品項。一些懷疑論者質疑,生成式AI能否真正在企業市場擴大應用?我們會不會只能做那幾個老案例?新創公司能否賺到錢?這會不會只是炒作泡沫?

過去幾個月,a16z與幾十家財富500大企業和頂尖企業領袖對話,並調查了另外70位,希望了解他們如何使用、採購和編列生成式AI的預算。令人驚訝的是,企業在過去6個月內對生成式AI的態度和資源配置有了顯著的改變。雖然這些領導者對部署生成式AI仍有些保留,但他們也幾乎增加了3倍的預算,擴大基於開源模型的應用案例,並將更多工作負載從早期實驗轉移到生產環境。

這對創業者來說是巨大的機會。a16z相信,AI新創公司如果能夠

1)根據企業以AI為中心的戰略需求開發產品,同時預見和解決他們的痛點;

2)從服務導向轉變為打造可擴展的產品,就能搶佔這波新投資的商機,獲得大量的市場份額。

一如既往,要為企業開發和銷售任何產品,都需要深入了解客戶的預算、顧慮和技術藍圖。為了讓創業者掌握企業領導們部署生成式AI的決策方式,也讓AI高管了解其他同業如何應對相同的問題,a16z根據近期與這些領導人的交流,歸納出16個關於資源配置、模型和使用案例的重點考量。  

資源配置:預算大幅增加且不可逆轉

1. 生成式AI的預算正在飆升。  

2023年,a16z接觸的幾十家公司平均在基礎模型API、自行部署和微調模型上的支出為700萬美元。此外,幾乎每一家企業在生成式AI的早期實驗中都看到了前景,計劃在2024年將支出增加2到5倍,以支援更多工作負載投入生產。

2. 企業開始將AI投資重新分配到經常性軟體預算項目。

去年,企業在生成式AI上的支出不出所料大多來自「創新」預算和其他一次性的資金池。但在2024年,許多領導者正將這筆支出重新分配到更長期的軟體項目;不到四分之一的人表示今年的生成式AI支出會來自創新預算。a16z也開始看到一些企業將生成式AI預算用於節省人力成本,特別是在客戶服務領域,雖然規模還很小。如果這個趨勢持續下去,a16z認為這預示著未來企業在生成式AI上的支出將大幅增加。一家公司表示,每通電話由大語言模型(LLM)支援的客服系統可節省約6美元,總共可節省約90%的成本,因此計劃將生成式AI投資增加8倍。

以下是企業如何分配LLM支出的整體情況:

3. 衡量投資報酬率(ROI)仍是一門藝術和科學。

企業領導目前主要透過AI帶來的生產力提升來衡量ROI。雖然他們依賴淨推薦值(NPS)和客戶滿意度作為很好的代理指標,但也在尋找更具體的方法來量化回報,例如根據使用案例的不同,衡量營收增長、成本節約、效率提升和準確率改善等。短期內,企業領導仍在推廣這項技術,並找出最佳指標來量化回報,但未來2到3年,ROI將變得越來越重要。在領導者找出答案的同時,當員工表示他們正在更有效地利用時間時,許多人選擇相信這一點。

4. 實施和擴展生成式AI需要合適的技術人才,目前許多企業內部還不具備。

僅僅擁有模型提供商的API還不足以大規模構建和部署生成式AI解決方案。實施、維護和擴展必要的計算基礎設施需要高度專業化的人才。單是實施就占了2023年AI支出的最大領域之一,在某些情況下甚至是最大的。一位高管提到,「LLM可能只占構建使用案例成本的四分之一」,開發成本占了大部分預算。 

為了幫助企業在模型上快速啟動和運行,基礎模型提供商提供了並且仍在提供專業服務,通常與定制模型開發相關。a16z估計,這在2023年占了這些公司相當大一部分收入,除了性能之外,也是企業選擇特定模型提供商的主要原因之一。由於企業很難獲得合適的生成式AI人才,提供工具使企業更容易將生成式AI開發內部化的新創公司可能會看到更快的採用。

模型:企業正朝向多模型、開源的世界發展  

5. 多模型的未來。

就在6個多月前,絕大多數企業還在試驗1種(通常是OpenAI)或最多2種模型。而當a16z今天與企業領導交談時,他們都在測試,甚至在某些情況下已經在生產中使用多種模型,這讓他們能夠1)根據性能、規模和成本量身定制使用案例,2)避免供應商綁定,以及3)快速利用這個快速發展領域的進步成果。第三點對領導者來說尤為重要,因為模型排行榜是動態變化的,公司都渴望納入當前最先進的模型和開源模型,以獲得最佳效果。 

a16z認為我們可能會看到更多模型激增。在下表中,企業領導報告了許多正在測試的模型,這是未來將用於推動工作負載進入生產的模型的領先指標。在生產使用案例中,OpenAI仍然佔據主導地位,這在意料之中。

6. 開源正在蓬勃發展。 

這是過去6個月裡最令a16z驚訝的變化之一。a16z估計2023年的市場份額有80%到90%是封閉源代碼,其中大部分份額被OpenAI佔據。然而,46%的受訪者表示,他們在2024年更傾向或非常傾向於開源模型。在訪談中,近60%的AI領導者表示,他們有興趣增加開源使用,或者在微調後的開源模型性能與封閉源代碼模型大致相當時進行轉換。因此,在2024年及以後,企業預計會大幅轉向開源,一些企業明確以50/50的比例為目標,高於2023年80%封閉/20%開源的比例。

7. 雖然成本是開源吸引力的一個因素,但在關鍵選擇標準中,它的排名低於控制力和客制化。

控制力(專有資料的安全性和了解模型產生特定輸出的原因)和客制化(能夠針對特定使用案例進行有效微調)遠遠超過成本,成為採用開源的主要原因。a16z很驚訝成本並不是最重要的考量,但這反映出領導層目前堅信,生成式AI創造的超額價值可能遠遠超過其價格。正如一位高管解釋的那樣:「獲得準確的答案是值得花錢的」。

8. 對控制力的渴望源於敏感的使用案例和企業資料安全顧慮。

由於法規或資料安全顧慮,企業仍然不願與封閉源模型提供商共享其專有資料,而那些以IP為核心的企業在商業模式上尤其保守。雖然一些領導者通過自行託管開源模型來解決這一顧慮,但其他人則表示,他們優先考慮具有虛擬私有雲(VPC)整合的模型。

9. 企業通常透過微調而非從頭構建模型來客制化模型。

2023年,有很多關於構建BloombergGPT這樣的定制模型的討論。在2024年,企業仍然對定制模型感興趣,但隨著優質開源模型的興起,大多數企業選擇不從頭開始訓練自己的LLM,而是使用檢索增強生成(RAG)或微調開源模型以滿足其特定需求。  

10. 雲端仍然對模型採購決策有很大影響。  

2023年,出於安全原因,許多企業透過其現有的雲端服務提供商(CSP)購買模型,領導者更擔心封閉源模型會濫用其資料,而不是CSP,並希望避免冗長的採購流程。2024年仍然如此,這意味著CSP和首選模型之間的相關性相當高:Azure用戶通常偏好OpenAI,而Amazon用戶偏好Anthropic或Cohere。如下圖所示,在72%透過API訪問模型的企業中,超過一半使用了其CSP託管的模型。(請注意,超過四分之一的受訪者進行了自託管,可能是為了運行開源模型。)

11. 客戶仍然關注早期上市的功能。

雖然領導者將推理能力、可靠性和易用性(例如,在其CSP上)列為採用特定模型的首要原因,但領導者也傾向於具有其他差異化功能的模型。例如,多位領導者將之前20萬token的上下文視窗作為採用Anthropic的關鍵原因,而其他人則因為Cohere早期推出的易用微調服務而採用它。

12. 儘管如此,大多數企業認為模型性能正在趨同。 

雖然科技界的大部分人都專注於將模型性能與公開基準進行比較,但企業領導更關注將微調後的開源模型和微調後的封閉源模型與自己的內部基準集進行比較。有趣的是,儘管封閉源模型在外部基準測試中通常表現更好,但由於開源模型更容易針對特定使用案例進行微調,企業領導仍然給予它們相對較高的淨推薦值(NPS)(在某些情況下甚至更高)。一家公司發現,「在微調之後,Mistral和Llama的性能幾乎與OpenAI一樣好,但成本要低得多」。按照這些標準,模型性能的趨同速度甚至比a16z預期的還要快,這讓領導者有更多非常強大的模型可供選擇。


13. 優化靈活性。

大多數企業在設計應用程式時,使在模型之間切換只需要一個API更改。一些公司甚至在預先測試提示,使更改只需一個開關即可完成,而其他公司則建立了「模型花園」,可以根據需要將模型部署到不同的應用程式。企業採取這種方法,一方面是因為他們從雲端時代吸取了一些艱難的教訓,需要減少對提供商的依賴,另一方面是因為市場發展如此之快,致力於單一供應商似乎是不明智的。

使用案例:更多轉移到生產環境

14. 企業正在構建而非購買應用,至少目前如此。  

企業絕大多數專注於內部構建應用,並將缺乏經過實戰檢驗、佔據主導地位的企業AI應用作為驅動因素之一。畢竟,這類應用還沒有魔力象限(至少目前還沒有!)。基礎模型透過提供API,也使企業比以往任何時候都更容易構建自己的AI應用。企業現在正在構建自己版本的熟悉案例,如客戶支援和內部聊天機器人,同時也在嘗試更新穎的使用案例,如編寫消費品配方、縮小分子發現範圍和提供銷售建議。許多人已經寫過關於「GPT包裝器」(即新創公司為LLM的知名輸出建立一個熟悉的介面,如聊天機器人)的有限差異化;a16z認為這些公司將難以競爭的一個原因是,AI進一步降低了內部構建類似應用的門檻。

然而,當更多面向企業的AI應用程式進入市場時,這種情況是否會轉變,目前尚未定論。雖然一位領導者指出,儘管他們正在內部構建許多使用案例,但他們對「將會出現新工具」持樂觀態度,並希望「使用現有最好的工具」。其他人則認為,生成式AI越來越成為一種「戰略工具」,使企業能夠將某些功能內部化,而不是像傳統那樣依賴外部供應商。考慮到這些動態,a16z認為,在這個市場中,那些不僅僅局限於「LLM+UI」模式,而是從根本上重新思考企業基礎工作流程或幫助企業更好地利用其專有資料的應用程式,將有望獲得特別出色的表現。

15. 企業對內部使用案例感到興奮,但對外部案例仍持謹慎態度。 

這是因為企業對生成式AI仍存在2個主要顧慮:

1)幻覺和安全性的潛在問題;

2)部署生成式AI的公關問題,特別是在敏感的消費者領域(如醫療保健和金融服務)。

去年最受歡迎的使用案例要麼專注於內部生產力,要麼在到達客戶之前由人工審核,如編程輔助、客戶支援和行銷。如下圖所示,這些使用案例在2024年仍然主導企業應用,企業以更高的比例將完全內部的使用案例(如文本摘要和知識管理,例如內部聊天機器人)推向生產,而不是敏感的人工參與的使用案例(如合同審查)或面向客戶的使用案例(如外部聊天機器人或推薦演算法)。企業渴望避免加拿大航空客戶服務事件等生成式AI失誤造成的負面影響。由於大多數企業仍然非常關注這些問題,因此能夠幫助控制這些問題的新創公司可能會獲得大量採用。

總體機會:巨大且快速增長 

16. a16z認為,到2024年底,模型API和微調的總支出將增長到超過50億美元的執行率,企業支出將占這一機會的很大一部分。

根據a16z的計算,a16z估計模型API(包括微調)市場在2023年底的營收執行率約為15-20億美元,其中包括透過Azure在OpenAI模型上的支出。考慮到整體市場的預期增長和企業的具體表示,僅這一領域的支出到今年年底就將增長到至少50億美元的執行率,並且有巨大的上行潛力。正如a16z所討論的,企業已將生成式AI部署列為優先事項,增加預算並將其重新分配到標準軟體項目,針對不同模型優化使用案例,並計劃在2024年將更多工作負載推向生產,這意味著他們可能會推動這一增長的很大一部分。 

在過去6個月裡,企業從高層發出了尋找和部署生成式AI解決方案的指令。過去需要一年多才能達成的交易現在在2到3個月內就被推動完成,而且這些交易的規模比過去大得多。雖然這篇文章著重於基礎模型層面,但a16z也認為企業的這一機會延伸到堆疊的其他部分,從幫助微調的工具、模型服務、應用程式構建,到專門構建的原生AI應用程式。我們正處於企業生成式AI的拐點,a16z很高興能夠與服務這個充滿活力和不斷增長的市場的下一代公司合作。

https://a16z.com/generative-ai-enterprise-2024/

個人見解:

這份由a16z發布的報告以翔實的第一手調研和深入的分析,為我們勾勒出企業在生成式AI領域的最新發展和未來趨勢。報告揭示,儘管仍存在一些顧慮,但企業正以前所未有的速度擁抱生成式AI,大幅增加相關預算,並積極將之前的實驗項目推向生產環境。

這一轉變的背後,是企業領導者對生成式AI在提升生產力、優化流程、創造價值等方面潛力的日益認同。隨著技術的快速進步和開源模型的崛起,企業比以往任何時候都更容易利用這些先進的AI能力來重塑業務。生成式AI正在從曇花一現的炒作走向真正的產業變革。


不過,要真正實現這一願景,仍需克服不少障礙。企業普遍缺乏頂尖的AI人才,對資料安全和模型魔性輸出也有合理的顧慮。如何在控制風險的同時,將生成式AI深度整合到關鍵業務中,將是一大考驗。此外,儘管報告顯示當前企業更傾向自建應用,但我認為隨著第三方解決方案的日益成熟,未來市場格局可能出現變化。新創公司若能洞悉企業痛點,為其提供靈活、穩定、安全的生成式AI工具和平台,定能在這場變革中搶得先機。

a16z的這份報告清晰地展現了生成式AI在企業市場爆發式增長的趨勢,為創業者指明了巨大的創新與創業機會。但要真正抓住這波浪潮,恐怕不能簡單複製to C的模式,而需對企業的獨特需求有深刻理解,在魔性、隱私、安全等核心問題上狠下功夫,以降低企業的顧慮,贏得信任。相信在大家的共同努力下,生成式AI必將重塑更多行業,開創智能經濟的新時代。

SambaNova SN40L: 利用Dataflow和專家組合(COE)來克服AI記憶牆的大模型

摘要 GPT-4等整體式大型語言模型(LLM)為現代生成AI應用鋪路。然而,大規模訓練、服務及維護整體式LLM仍然極其昂貴和充滿挑戰。現代AI加速器計算能力與記憶體比例的不成比例增長已經造成了記憶體壁障,需要新的方法來部署AI。最近的研究顯示,許多小型專家模型的組合,每個模型參數...