詞元與推理成本(tokens and the cost of inference)
/ TOH-kunz and the kawst uv IN-fur-uns /
每一次你使用語言模型——即「推理」,區別於那一次性的「訓練」——都要花真金白銀與能源,而那塊計量表所走的單位,就是「詞元」。詞元,是模型讀寫時所用的一小塊文字:大致是一個短詞或一個詞的碎片(「banana」可能是一個詞元,「unbelievable」是兩三個)。模型看到的並不嚴格是字母或單詞;它看到的是一串詞元,而幾乎每個API都按詞元計費,把你送進去的、和模型寫出來的,都算上。
有兩個事實讓這一點在實務上很要緊。其一,你每次都要為「整個上下文」付費:如果你拖著一段長對話、或貼了一份大文件進去,它們在每一個新回合都會被重新讀一遍,於是一份反覆餵入的50頁報告,會讓成本飛快累加。其二,生成輸出在本質上是順序的——模型一次產出一個詞元,每一個都依賴於上一個——所以一個長答案,既比短答案慢、也比它貴,而且沒法簡單地靠並行把它消解掉。成本,隨著「進去多少文字、出來多少文字」而水漲船高。
為什麼這超出帳單本身也要緊:它塑造著這些系統如何被設計、以及它們讓社會付出多少代價。單次查詢很便宜,可一項熱門服務,要處理數十億次查詢,就會在電力與專用晶片上大筆花銷,留下真實的環境足跡。這也正是蒸餾、量化、快取這類技術存在的原因——它們全都是從「每一個詞元那麼多的計算」裡榨出更多答案的辦法。詞元,是整個行業那個安靜的經濟原子。
你貼進一份1萬詞元的合約,在一段對話裡追問了五個問題。因為整份合約在每個回合都被重新讀一遍,你被計費的大約是5萬個輸入詞元,而非1萬——再加上每個回答的輸出詞元。把文件裁剪到只剩相關條款,能把帳單砍掉其中的大半。
整個上下文,在每一個回合都被重新讀取——也被重新計費。
一個常見的意外:成本隨「整段對話」而增長,而非只隨你最新那條訊息,因為整個上下文在每個回合都被重新處理。又因為輸出是一個詞元一個詞元地生成的,你沒法僅靠堆更多硬體就讓一個長答案變快——長度本身,就是那個瓶頸。