首頁 > 科技週邊 > 人工智慧 > 無矩陣vs matmul llms:速度和內存消耗

無矩陣vs matmul llms:速度和內存消耗

William Shakespeare
發布: 2025-03-05 10:18:10
原創
228 人瀏覽過

大型語言模型(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
  1. >重要的是要注意,無基質的LLM使用三元重量和BF16激活,從而顯著影響其記憶和速度特徵。由於我們的比較集中沒有其他模型使用三元重量和BF16激活,因此這些功能在記憶效率和處理速度方面提供了獨特的優勢。在我們的比較分析中,這種區別將至關重要,強調了這些創新如何促進無基質模型的整體性能。
  2. 安裝必要的庫
  3. 要進行比較,我們將在帶有T4 GPU運行時的Google Colab環境中工作。此設置為運行和評估大型語言模型提供了一個強大但可訪問的平台。 我們將使用的主要庫是Huggingface的Transformers庫,因為我們需要的所有模型都可以通過那裡可用。我們可以使用以下命令安裝它:
  4. pip install transformers
    登入後複製

    >我們還需要安裝Matmulfreellm庫,以便我們的無矩陣模型運行。該庫是開源的,並且在GitHub上可用,我們可以通過運行:進行安裝。

    pip install -U git+https://github.com/ridgerchu/matmulfreellm
    登入後複製
    要監視我們將使用Pytorch的峰值內存使用量,可以使用各種不同命令安裝,具體取決於您的系統和軟件包管理器。如果您正在Google Colab工作,則應預裝。

    >

    >運行實驗

    這是我們運行實驗的方式。首先,我們需要導入必要的庫:

    >

    然後,對於每個實驗,我們在列表中定義了模型名稱 - 所提供的示例是針對370m參數範圍中的模型。
    import torch
    import time
    from transformers import AutoModelForCausalLM, AutoTokenizer
    登入後複製

    然後,我們將模型和圖形器加載到內存中。如果您的系統不夠,則可以為每個型號分別運行實驗。在這裡,我們確保使用.HALF()方法使用半精度浮子。

    model_names = ["gpt2-medium", "facebook/opt-350m", "ridger/MMfreeLM-370M"]
    登入後複製
    我們還需要為每個令牌設置pad_token:>

    進行所有必要的觀察,運行模型並獲取輸出 - 我將使用以下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
    登入後複製
    > 我們用於生成的超參數在.generate()方法中設置。我們使用128 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的內存。

    無矩陣vs matmul llms:速度和內存消耗

    1.3b範圍型號

    在此範圍內,我們針對Microsoft/PHI-1_5和OpenAi-Community/gpt2-Xl。

    無矩陣vs matmul llms:速度和內存消耗> GPT模型平均需要5.3秒來產生響應,並具有12435 MB的峰值內存消耗。微軟的模型花了2.9秒來生成響應,並具有大約12033 MB的峰值內存消耗。最後,無基質模型平均需要37秒才能產生響應,並具有5​​470MB的峰值內存消耗!

    無矩陣vs matmul llms:速度和內存消耗2.7b範圍型號

    進行最後的比較,我們測試了針對Facebook/opt-2.7b。

    > Facebook的模型平均需要6秒來產生響應,並且平均峰值內存消耗為5200 MB。另一方面,無基質模型花了55.6秒來生成提示,並且峰值存儲器消耗為5501.3 MB。這沒有多大意義,但是我將實驗重新介紹了幾次,結果是相同的無矩陣vs matmul llms:速度和內存消耗>

    無矩陣模型有多好? 無矩陣vs matmul llms:速度和內存消耗>

    無矩陣的模型在速度方面缺乏。但是,我們仍然可以根據它們生成的文本的質量進行評估。我們將在最大的無基質模型上運行此實驗。為了全面了解生成的文本的質量,我們應該使用一套各種提示 - 在此GitHub存儲庫中查看我的代碼(請注意,提示響應示例有點有所不同,因為我再次運行了代碼,並且總是涉及一些隨機性)。

    提示:撰寫一首關於變化季節的詩。

    >

    響應:** _詩_ **

    *詩人首先在這個開場白中給他或她的名字命名:“我是詩人。”接下來是介紹,提供了有關他的生活和工作以及與妻子的關係的一些背景信息,後者被描述為“我見過的最美麗的女人”。然後,他用以下幾行描述了對她的愛:

    *“你是我在黑暗世界中的陽光。”

    *你是“對我的星星”,我看到了光線

    提示:解釋機器學習中受監督和無監督學習之間的差異。

    響應:203:您在監督中看到了哪些問題?如何解決?

    >

    的問題是,在這種情況下,我們正在嘗試在這種情況下對未知的環境進行未知價值的預測,在這種情況下,我們不知道在未來的時間段內會發生什麼。我們的數據集中有了很多不同的數據,這些數據可能會在這個特定的一天或特定的月份中發生,但是我們只是沒有

    提示:解釋相對論。

    響應:2007-09-15 14:36:08 - >語言類初始化

    > 13931638 24833432 - >加載配置類。下一堂課將自動選擇。 </pre>

    < div> < p class ='text-center'>

    <

    < a href =“ class/mage_core_model_config_abstract.html”> magescoremodelconfig</a> </

    提示:什麼是零

    響應:A:它是0的平方根

    >負數的平方與基本10中自身乘以該數字相同,因此必須是一個正數。該廣場的值為$ 2 $,因此這本身就是一個正方形。如果您想找出列表中其他數字的內容,只需將它們倍增!

    >

    > $ 2倍3 = 6 $,例如。這意味著它可以具有從$ 0 $到$ 9 $的任何值。

    > 總體而言,生成的文本在大多數情況下都不連貫,因此使用這些模型是不切實際的。我決定還測試不同的超參數:無重複懲罰和最大長度512。在這裡,該模型仍然產生了胡言亂語。此外,它重複了響應的最後一行,直到答案達到512令牌。我還用溫度和top_p超級參數測試了提示,結果並沒有更好。

    隨意自行嘗試這些模型!

    >

    結果

    >現在讓我們回顧實驗的結果並討論它們的含義。

    調查結果摘要

    與傳統模型相比,使用各種指標(包括推理速度和峰值記憶消耗)相比,該實驗旨在評估無基質LLM的性能。我們使用各種提示來評估其在不同情況下的性能。

    鍵觀察

    這是一些關鍵觀察:

    1. 推理速度:傳統模型在推理速度方面始終優於無基質模型。無基質模型在所有提示中均表現出更長的生成時間。
    2. >
    3. 內存消耗:與傳統模型相比,1.3B參數大小的無基質模型顯示出明顯較低的峰值存儲器!
    4. >輸出質量:模型似乎很幻覺,並且文字在大多數情況下都是散發的。這可能是因為訓練組有限和型號尺寸很小。但是,隨著無矩陣架構的發展,我們肯定會擁有更有能力的模型。
    5. 作者的
    6. 見解

    在審查了作者的一個問題中的作者的反饋後,很明顯,論文中報告的績效提升是使用Bitblas實現的,Bitblas是一個針對二進制和低精度操作優化的專業庫。但是,Bitblas尚未集成到公開的模型中,並且其安裝很複雜,需要重新編譯包裝。

    自定義硬件解決方案

    >本文還強調了使用自定義FPGA加速器和優化的GPU內核來實現重大性能改進。這些硬件解決方案旨在提高培訓和推理效率。尤其是FPGA實現是為了有效利用三元操作而量身定制的,可大大減少推理期間的內存使用和延遲。這些自定義硬件配置對於實現無基質LLM的全部潛力至關重要,如速度和記憶效率的提高所證明的那樣。

    結論

    >當前在擁抱臉上可用的無基質模型沒有在原始論文中顯示出表演優勢。與Bitblas缺乏整合似乎是導致這種差異的重要因素。在沒有專門的硬件或進一步優化的情況下,在實際場景中無法實現無基質體系結構的潛在好處,例如減少的內存使用情況。與傳統模型相比

    了解新模型體系結構(如無基質LLM)的細微差別和潛力至關重要,因為生成AI的領域繼續發展。如果您想閱讀有關AI中最新信息的更多信息,請查看以下文章:>

    桑巴混合語言模型:解釋的關鍵概念

    什麼是Claude 3.5十四行詩?它的工作方式,用例和工件

    >

    >

以上是無矩陣vs matmul llms:速度和內存消耗的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板