大型語言模型(LLMS)在很大程度上依賴於矩陣乘法(MATMUL)進行操作,從而導致了實質性的計算和峰值內存需求。但是,在最近的一篇論文中,出現了新的無基質LLM的原型,有希望的可比性能,並有潛在地減少資源使用。
在本文中,我將將無矩陣的LLM與他們的經典同行進行比較。我將研究它們的生成能力和資源消耗,跨三個不同的型號:370m,1.3b和2.7b參數。我的分析將涵蓋模型的速度和峰值記憶消耗,強調了現代NLP中無矩陣架構的潛在優勢。
>要了解有關無矩陣LLMS的更多信息,您可以閱讀本文:不含Matmul的LLM:所解釋的關鍵概念。>設置
本節將跨越我用於進行實驗的設置。
>本文的作者沒有明確提及哪些模型將其無原模型的模型與與之相比。他們僅指出,他們“比較了我們的無原始LM的兩個變體與三種型號的重現的高級變壓器體系結構(基於Llama-2的變壓器):370m,1.3B和2.7B參數。”此外,所有型號均在Slimpajama數據集上進行了培訓。
為了確保公平的比較,使用在同一數據集上訓練的開源模型是理想的選擇。但是,由於此類模型的不可用,本文將相似大小的可用模型的峰值內存消耗和速度與論文中的發現進行了比較。370m -gpt2-Medium,Facebook/opt-350m
1.3B-Microsoft/Phi-1_5,OpenAi-Community/gpt2-Xl
2.7b- facebook/opt -2.7b
pip install transformers
>我們還需要安裝Matmulfreellm庫,以便我們的無矩陣模型運行。該庫是開源的,並且在GitHub上可用,我們可以通過運行:
pip install -U git+https://github.com/ridgerchu/matmulfreellm
>
>運行實驗>
然後,對於每個實驗,我們在列表中定義了模型名稱 - 所提供的示例是針對370m參數範圍中的模型。import torch import time from transformers import AutoModelForCausalLM, AutoTokenizer
然後,我們將模型和圖形器加載到內存中。如果您的系統不夠,則可以為每個型號分別運行實驗。在這裡,我們確保使用.HALF()方法使用半精度浮子。
model_names = ["gpt2-medium", "facebook/opt-350m", "ridger/MMfreeLM-370M"]
進行所有必要的觀察,運行模型並獲取輸出 - 我將使用以下MESE_PERFORMANCE()函數:
models = [AutoModelForCausalLM.from_pretrained(name).half().cuda() for name in model_names] tokenizers = [AutoTokenizer.from_pretrained(name) for name in model_names]
>該功能通過測量推理速度和峰值內存消耗來評估語言模型的性能。它首先將輸入提示提示,確保適當的注意力面罩和填充,並將輸入轉移到GPU。通過先重置然後記錄峰值內存統計信息,將跟踪內存使用量 - 我們在返回之前將其轉換為MB。
>我認為峰值內存使用是最重要的統計量,因為那是導致溢出的原因。該函數還通過記錄文本生成之前和之後的時間來測量推理速度(這是測量Python運行時間的標準方法)。for tokenizer in tokenizers: if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token
>
def measure_performance(model, tokenizer, prompt): inputs = tokenizer(prompt, return_tensors="pt", padding=True) input_ids = inputs.input_ids.cuda() attention_mask = inputs.attention_mask.cuda() torch.cuda.reset_peak_memory_stats() # Measure speed start_time = time.time() with torch.no_grad(): outputs = model.generate( input_ids, attention_mask=attention_mask, max_length=128, pad_token_id=tokenizer.eos_token_id, repetition_penalty=1.1, no_repeat_ngram_size=2 ) end_time = time.time() # Measure memory after inference peak_memory = torch.cuda.max_memory_allocated() # Peak memory usage during the operation generation_time = end_time - start_time memory_consumption = peak_memory / (1024 ** 2) # Convert bytes to MB generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return generation_time, memory_consumption, generated_text
比較:無矩陣與matmul
不幸的是,傳統模型在速度和峰值內存使用方面始終超過其無矩陣的對應物。370m範圍型號
在370m範圍內,我們將370m的無MATMUL型號與GPT2-MEDIUM和Facebook/Opt-350m進行了比較
prompt = "What are the benefits of renewable energy?" #example prompt results = {} for name, model, tokenizer in zip(model_names, models, tokenizers): time_taken, memory_used, output = measure_performance(model, tokenizer,prompt) results[name] = { "time_taken": time_taken, "memory_used": memory_used, "output": output } print(f"Model: {name}\nTime taken: {time_taken} seconds\nMemory used: {memory_used} MB\nOutput: {output}\n")
>平均而言,在所有提示中,無MATMUL的模型花費了16秒來生成響應並使用了2900 MB的內存。另一方面,GPT2-m花了3秒鐘來生成一個提示和2810 MB的內存(這可能是由於尺寸差異所致,GPT2-M的參數為350m)。同樣,Opt350-m花了2.3秒才能生成響應和2815 MB的內存。
> GPT模型平均需要5.3秒來產生響應,並具有12435 MB的峰值內存消耗。微軟的模型花了2.9秒來生成響應,並具有大約12033 MB的峰值內存消耗。最後,無基質模型平均需要37秒才能產生響應,並具有5470MB的峰值內存消耗!
2.7b範圍型號
> Facebook的模型平均需要6秒來產生響應,並且平均峰值內存消耗為5200 MB。另一方面,無基質模型花了55.6秒來生成提示,並且峰值存儲器消耗為5501.3 MB。這沒有多大意義,但是我將實驗重新介紹了幾次,結果是相同的>
無矩陣模型有多好? >
響應:** _詩_ **
*詩人首先在這個開場白中給他或她的名字命名:“我是詩人。”接下來是介紹,提供了有關他的生活和工作以及與妻子的關係的一些背景信息,後者被描述為“我見過的最美麗的女人”。然後,他用以下幾行描述了對她的愛:
*“你是我在黑暗世界中的陽光。”
*你是“對我的星星”,我看到了光線
提示:解釋機器學習中受監督和無監督學習之間的差異。
響應:203:您在監督中看到了哪些問題?如何解決?>
的問題是,在這種情況下,我們正在嘗試在這種情況下對未知的環境進行未知價值的預測,在這種情況下,我們不知道在未來的時間段內會發生什麼。我們的數據集中有了很多不同的數據,這些數據可能會在這個特定的一天或特定的月份中發生,但是我們只是沒有提示:解釋相對論。
響應:2007-09-15 14:36:08 - >語言類初始化
> 13931638 24833432 - >加載配置類。下一堂課將自動選擇。 </pre>
< div> < p class ='text-center'>
提示:什麼是零
響應:A:它是0的平方根
>負數的平方與基本10中自身乘以該數字相同,因此必須是一個正數。該廣場的值為$ 2 $,因此這本身就是一個正方形。如果您想找出列表中其他數字的內容,只需將它們倍增!
>> $ 2倍3 = 6 $,例如。這意味著它可以具有從$ 0 $到$ 9 $的任何值。
> 總體而言,生成的文本在大多數情況下都不連貫,因此使用這些模型是不切實際的。我決定還測試不同的超參數:無重複懲罰和最大長度512。在這裡,該模型仍然產生了胡言亂語。此外,它重複了響應的最後一行,直到答案達到512令牌。我還用溫度和top_p超級參數測試了提示,結果並沒有更好。隨意自行嘗試這些模型!
>結果
>現在讓我們回顧實驗的結果並討論它們的含義。
調查結果摘要與傳統模型相比,使用各種指標(包括推理速度和峰值記憶消耗)相比,該實驗旨在評估無基質LLM的性能。我們使用各種提示來評估其在不同情況下的性能。
鍵觀察>本文還強調了使用自定義FPGA加速器和優化的GPU內核來實現重大性能改進。這些硬件解決方案旨在提高培訓和推理效率。尤其是FPGA實現是為了有效利用三元操作而量身定制的,可大大減少推理期間的內存使用和延遲。這些自定義硬件配置對於實現無基質LLM的全部潛力至關重要,如速度和記憶效率的提高所證明的那樣。
>當前在擁抱臉上可用的無基質模型沒有在原始論文中顯示出表演優勢。與Bitblas缺乏整合似乎是導致這種差異的重要因素。在沒有專門的硬件或進一步優化的情況下,在實際場景中無法實現無基質體系結構的潛在好處,例如減少的內存使用情況。與傳統模型相比
了解新模型體系結構(如無基質LLM)的細微差別和潛力至關重要,因為生成AI的領域繼續發展。如果您想閱讀有關AI中最新信息的更多信息,請查看以下文章:什麼是Claude 3.5十四行詩?它的工作方式,用例和工件
>
以上是無矩陣vs matmul llms:速度和內存消耗的詳細內容。更多資訊請關注PHP中文網其他相關文章!