大型语言模型(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中文网其他相关文章!