首页 > 科技周边 > 人工智能 > 无矩阵vs matmul llms:速度和内存消耗

无矩阵vs matmul llms:速度和内存消耗

William Shakespeare
发布: 2025-03-05 10:18:10
原创
240 人浏览过

大型语言模型(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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板