iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
生成式 AI

Local LLM infra & Inference 一部曲系列 第 19

Day19 - 教練,我想要更長的context length......

  • 分享至 

  • xImage
  •  

前言

這篇是最後一篇硬體加速技術理論篇了!介紹的是 資料面最佳化 (Data-level Optimization) 的方法。 🚀

簡單複習一下,在很久以前的 Day6 中提到過,context length越長,KV cache也會需要更多的記憶體空間。而雖然在 Day13 中提到過PagedAttention可以減少長序列的記憶體空間浪費問題。不過每個LLM可以用的context length依舊是那個長度,不夠用啊。 (;´д`)ゞ

User在問LLM問題時,並不想要出現長度限制不給問、我忘記你前面講了什麼這兩種狀況。 🤔

https://ithelp.ithome.com.tw/upload/images/20240919/201681154cvnAWLFm1.png
(圖源: LLMLingua)

雖然GPT系列最大的128k使用起來很舒服,但那很貴 💸,而且是call別人的API,如果是local model的話呢!?

這時有兩個簡單的選擇:

  1. 是增加你的硬體設備的VRAM,選擇使用更高context length微調的模型。 💻
  2. 是對input prompt施壓,把他們壓縮到可以裝的下的長度,也就是prompt compression。 🔧

https://ithelp.ithome.com.tw/upload/images/20240918/20168115oXcbYFY89L.jpg
(圖源: 自製)


📈 使用更高context length模型

跟去年比起來,今年long context length的LLM比起去年來得多很多,從最一開始的llama的2048 tokens到llama3的8k tokens和llama3.1的128k tokens,直接變多了62.5倍。 🔥

🔍 要怎麼找到這些更高context length的模型呢?

打開HuggingFace ➡️ 查你要的模型的context length長度,通常特殊微調的long context length模型,取名都會有長度在後面,像是-128k或是-524k。 📜

https://ithelp.ithome.com.tw/upload/images/20240919/20168115dKJzSnXnXh.png

Gradient AI這間公司做了非常多llama 3的long context length版本,其中最長的有到4194k,非常瘋狂。

https://ithelp.ithome.com.tw/upload/images/20240919/20168115zZU8bYm4cE.png

當然在台灣就支持yentinglin/Llama-3-Taiwan-8B-Instruct-128k囉!這應該是目前台灣唯一context length最長的local model。 🏆
https://huggingface.co/yentinglin/Llama-3-Taiwan-8B-Instruct-128k

最後,如果想知道怎麼增加context window,雖然看大部分模型沒有特別寫,但其中一種方法是YaRN,其中RoPE的部分去年冠軍文章也有寫到,如果有興趣的讀者可以深入研究看看!


✂️ Prompt Compression

另一種方法是「提示壓縮」,當上下文長度有限時,透過壓縮prompt來保留重要的資訊,減少不必要的tokens,從而在有限的字數內去做prompting,以讓推理速度加快和降低input成本,而這個方法目前發展的最完整的是LLMLingua。 💡

  • LLMLingua / LLMLingua的demo頁面
    • LLMLingua透過小型語言模型來辨識並移除prompt中多餘的token。而後來也發展了LongLLMLingua和LLMLingua-2,分別針對長上下文和多語言應用進行優化。
    • 目前LLMLingua已經與LlamaIndex和LangChain整合,可以用在RAG當中。

它的用法也非常簡單,但延伸功能很多。

pip install llmlingua

安裝後只要下:

from llmlingua import PromptCompressor

llm_lingua = PromptCompressor() #這邊可以選擇model
compressed_prompt = llm_lingua.compress_prompt(prompt, instruction="", question="", target_token=200)
  • prompt: 需要壓縮的提示內容,這邊從 / 英文 wiki上抓了蘋果派介紹。 🍎🍏
  • instruction: 可以指定額外的指令。
  • question: 可以添加問題以指導壓縮的重點。
  • target_token: 壓縮後的最大token數量。

就可以看到結果:

{'compressed_prompt': 'An apple pie a pie filling is. is witham (""),ard or. is generally withtry both fillingust be oriced (oven of cross). The beaked separatelyind") to prevent from. pieust. isaked the on top, but with it\n\nNoted first in piepes are a ofines countries. Apple are an States and of its signature\n pie be with different of The popular include,,,, The fruit be or.ried orles were originallyuted only. The are, aenerarch and.ices added,,. preventles when the. Many for the\n served, is, topped with ice cream.\n\nIn another serving style, a piece of sharp cheddar cheese is placed on top of or alongside a slice of the finished pie. Apple pie with cheddar is popular in the American Midwest and New England, particularly in Vermont, where it is considered the state dish. In the north of England, Wensleydale cheese is often used.\n\nA commercially prepared apple pie is 52% water, 34% carbohydrates, 2% protein, and 11% fat (table). A 100-gram serving supplies 237 Calories and 13% of the US recommended Daily Value of sodium, with no other micronutrients in significant content (table).\n',
 'origin_tokens': 472,
 'compressed_tokens': 260,
 'ratio': '1.8x',
 'rate': '55.1%',
 'saving': ', Saving $0.0 in GPT-4.'}

如果是中文的部分,LLMLingua會變成亂碼。

{'compressed_prompt': '�果�(:�式�,要果�是化。在�多的都用,表面是��時�多是焂上和\n料��用�、果。,的料在有。��,果存上�以更��的��。一��的:上、、。�c�用花��求放�,有�在�的行,時代中�能。語�����以��:)的���有的硗有Greinet或����可�法國姐妹斯蒂芳妮·塔坦和卡羅琳·塔坦發明。其特點是將蘋果置於焦糖和麵糊之間,烤好後上下翻轉,是一種顛倒蛋糕。',
 'origin_tokens': 1296,
 'compressed_tokens': 207,
 'ratio': '6.3x',
 'rate': '16.0%',
 'saving': ', Saving $0.1 in GPT-4.'}

但LLMLingua-2就可以處理。

from llmlingua import PromptCompressor

llm_lingua = PromptCompressor(
    model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
    use_llmlingua2=True, # Whether to use llmlingua-2
)
compressed_prompt = llm_lingua.compress_prompt(prompt, rate=0.5)

compressed_prompt
  • rate: 0.33代表將prompt壓縮到原本的33%。
  • force_tokens: ['\n', '?']代表即使在壓縮過程中,\n和?這些符號也必須保留。

因為用了force_tokens會將每個段落都保留換行符號,結果不太漂亮就沒放這個版本了XD

{'compressed_prompt': '蘋果派(英語:apple pie),或稱蘋果餡餅,是一種西式水果餡餅,屬於甜點分類,餡料主要材料是蘋果,表面覆蓋了餡餅皮,內裏是切碎的蘋果。製作蘋果派時人們多是加上糖、葡萄乾、肉桂和肉豆蔻等調味品 配料與做法 英式蘋果派 英式蘋果派的菜譜可以追溯到喬叟時代。一份1381年的英國菜譜列出了做蘋果派的配料:上好的蘋果、香料、無花果、葡萄乾和梨。放入一種叫cofyn的蛋糕模,古代的蘋果派菜譜並沒有放糖,蘋果派是一種流行的甜點 荷式蘋果派(荷蘭語:appeltaart或appelgebak,一幅1626年荷蘭黃金時代的畫中就有荷式蘋果派。荷式蘋果派常用桂皮或檸檬汁調味,內部則填充著切為條狀或塊狀的蘋果。常用的蘋果品種有Goudreinet或Elstar,經過烘焙即可食用。在荷蘭,人們通常在蘋果派冷卻後吃瑞典式蘋果派 法式蘋果派 姐妹蛋塔或翻轉蘋果塔是一種法式蘋果派,烤好後上下翻轉',
 'compressed_prompt_list': ['蘋果派(英語:apple pie),或稱蘋果餡餅,是一種西式水果餡餅,屬於甜點分類,餡料主要材料是蘋果,表面覆蓋了餡餅皮,內裏是切碎的蘋果。製作蘋果派時人們多是加上糖、葡萄乾、肉桂和肉豆蔻等調味品 配料與做法 英式蘋果派 英式蘋果派的菜譜可以追溯到喬叟時代。一份1381年的英國菜譜列出了做蘋果派的配料:上好的蘋果、香料、無花果、葡萄乾和梨。放入一種叫cofyn的蛋糕模,古代的蘋果派菜譜並沒有放糖,蘋果派是一種流行的甜點 荷式蘋果派(荷蘭語:appeltaart或appelgebak,一幅1626年荷蘭黃金時代的畫中就有荷式蘋果派。荷式蘋果派常用桂皮或檸檬汁調味,內部則填充著切為條狀或塊狀的蘋果。常用的蘋果品種有Goudreinet或Elstar,經過烘焙即可食用。在荷蘭,人們通常在蘋果派冷卻後吃瑞典式蘋果派 法式蘋果派 姐妹蛋塔或翻轉蘋果塔是一種法式蘋果派,烤好後上下翻轉'],
 'origin_tokens': 1296,
 'compressed_tokens': 563,
 'ratio': '2.3x',
 'rate': '43.4%',
 'saving': ', Saving $0.0 in GPT-4.'}

其他詳細應用都可以參考他的Github。另外最近也有一個新的框架500xCompressor,它的論文上個月才發上Arxiv,也許未來可以期待一下它的發展。


章節總結

為了避免在LLM應用中遇到字數限制,有時會需要更長的context length ⏳。除了這章節提到的兩種方法之外,還有很多方法可以做到類似的事情,像是 Day2 稍微提過的RAG也是一種減少LLM input的技術 📉,或是用一些prompting技術(如SoT)搭配平行運算或batching也可以達到類似的效果 ⚙️。

🔍 照慣例來一個總結:

  1. 用不同方法減少模型的input ✂️📉
  2. 可能會有額外運算花費,或是壓縮不好導致資訊流失 ⚠️💻
  3. 整體而言可以得到更大的context length 🌐🚀✨

最後,推理加速技術的理論章節就到這邊結束囉!🎉🎉
30天也要走到2/3了,真的是非常的快!


參考資料

A Survey on Efficient Inference for Large Language Models
https://arxiv.org/pdf/2404.14294
Open-Source LLM Document Extraction Using Mistral 7B (這是筆者第一次知道LLMLingua的文章,他寫得很棒XD)
https://blog.gopenai.com/open-source-document-extraction-using-mistral-7b-llm-18bf437ca1d2


上一篇
Day18 - 快......還要更快:Speculative decoding
下一篇
Day20 - 實作之前先來聊一下系統
系列文
Local LLM infra & Inference 一部曲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言