models =[AutoModelForCausalLM.from_pretrained(name).half().cuda()for name in model_names]
tokenizers =[AutoTokenizer.from_pretrained(name)for name in model_names]技术支持
我们还需要为每个分词器设置 pad_token:
for tokenizer in tokenizers:if tokenizer.pad_token isNone:
tokenizer.pad_token = tokenizer.eos_token技术支持
Evaluating model: gpt2-medium
Prompt: What are the benefits of renewable energy?
Time taken: 3.17 seconds
Peak memory used: 3521.02 MB
Output: What are the benefits of renewable energy?
The answer is that it's cheaper than fossil fuels. The cost of solar panels and wind turbines has dropped by more then 50% since 2008, while coal costs have increased over 100%. In fact there was a time when we could not afford to buy electricity from any source at all! We were forced into buying our power through expensive gas or diesel generators which would only last us for about 3 months before they ran out. Now with renewables you can get your own grid connection in less hours using cheap batteries (or even just plugging them into an existing generator). Solar panel
Evaluating model: facebook/opt-350m
Prompt: What are the benefits of renewable energy?
Time taken: 2.15 seconds
Peak memory used: 3452.84 MB
Output: What are the benefits of renewable energy?
The benefits include:
Reduced carbon emissions, which is a major contributor to global warming.
Increased energy efficiency and reduced energy consumption. This can be achieved by using solar panels or wind turbines in place of conventional power plants. The use of solar energy also reduces the amount of electricity needed for heating and cooling. Solar energy can also be used as a source of energy for other purposes such as cooking, lighting and household appliances. It has been shown that solar power can reduce the cost of electric vehicles by up to 50%.
Improved energy security. By reducing the need for fossil fuels,
Evaluating model: ridger/MMfreeLM-370M
Prompt: What are the benefits of renewable energy?
Time taken: 31.68 seconds
Peak memory used: 3788.36 MB
Output: What are the benefits of renewable energy?
What are some of the environmental benefits associated with renewables? What is the potential impact on our environment and people's health? How can we make our buildings more energy efficient? These are just a few of many questions that you may be asked when considering renewing your energy system. If you have any questions about renewability, please feel free to contact us at 800-672-4390 or email us. We look forward to hearing from you!
How much does it cost to install solar panels in my home? The average cost for installation技术支持
大型语言模型(LLM)在运算中高度依赖矩阵乘法(MatMul),这会带来可观的计算量与峰值内存需求。不过,在一篇近期论文中,一种新的无矩阵乘法(MatMul-free)LLM原型逐渐浮现,声称在资源占用可能更低的同时,达到可比的性能。
本文将无矩阵乘法 LLM 与经典模型进行对比。我将评估它们在三种不同规模(370M、1.3B、2.7B 参数)下的生成能力与资源消耗。分析涵盖模型速度与峰值内存占用,突出无矩阵乘法架构在现代 NLP 中的潜在优势。
要进一步了解无矩阵乘法 LLM,可阅读本文:无矩阵乘法 LLM:关键概念解读。
实验设置
本节介绍我用于开展实验的设置。
对比的模型
论文作者并未明确说明其无矩阵乘法模型对比了哪些具体模型,仅提到“我们在三种规模(370M、1.3B、2.7B 参数)下,将两种无矩阵乘法语言模型的变体,与复现的先进 Transformer 架构(Transformer++,基于 Llama-2)进行比较。”此外,所有模型都在 SlimPajama 数据集上训练。
为了公平比较,理想情况是使用在相同数据集上训练的开源模型。但由于此类模型不可得,本文将采用可用的、规模相近的模型,对其峰值内存占用与速度进行比较,并与论文中的结果对照。
我们将与下列模型进行对比:
需要强调的是,无矩阵乘法 LLM 使用三值权重与 BF16 激活,这会显著影响其内存与速度特性。由于我们的对比模型中没有使用三值权重与 BF16 激活的,因而这些特性为无矩阵乘法 LLM 在内存效率与处理速度方面带来了独特优势。在比较分析中,这一区别至关重要,有助于凸显这些创新对无矩阵乘法模型整体性能的贡献。
安装必要的库
为开展比较,我们将在配有 T4 GPU 的 Google Colab 环境中工作。该配置既强大又易用,适合运行与评估大型语言模型。
主要使用 huggingface 的
transformers库,因为我们需要的所有模型都可通过该库获取。可用以下命令安装:我们还需安装
matmulfreellm库,以运行无矩阵乘法模型。该库为开源,托管在GitHub,可运行以下命令安装:为监控峰值内存使用,我们将使用
pytorch。其安装方式因系统与包管理器不同而异,详见此处。如果您在 Google Colab 中工作,它应已预装。运行实验
以下是我们运行实验的方式。首先,导入必要的库:
然后,在每次实验中,我们在列表中定义模型名称——下例为 370M 参数范围内的模型。
接着,将模型与分词器加载到内存中。如果系统内存不足,可分别针对每个模型独立运行实验。此处我们通过
.half()方法使用半精度浮点。我们还需要为每个分词器设置
pad_token:为进行必要的观测,运行模型并获取输出——我将使用如下的
measure_performance()函数:该函数通过测量推理速度与峰值内存占用来评估语言模型性能。它首先对输入提示进行分词,确保设置正确的注意力掩码与填充,并将输入转移至 GPU。内存使用通过先重置再记录峰值内存统计进行跟踪——返回前将其转换为 MB。
我认为峰值内存使用是最重要的统计量,因为它决定是否会溢出。函数还通过在文本生成前后记录时间来测量推理速度(这是 Python 中测量运行时间的标准方法)。
生成用到的超参数在
.generate()方法中设置。我们将最大长度设为 128,并设置重复惩罚(这样做是因为无矩阵乘法模型似乎会多次生成相同的回复)。最终函数返回时间、峰值内存占用以及生成的文本。现在,我们可以定义提示并运行实验。我还会收集数据,并在不同提示下运行模型以汇总数据。
输出示例如下:
对比:无矩阵乘法 vs. MatMul
遗憾的是,传统模型在速度和峰值内存使用上始终优于其无矩阵乘法对应模型。
370M 量级模型
在 370M 量级,我们将 370M 的无矩阵乘法模型与 gpt2-medium 和 facebook/opt-350m 进行比较。
在所有提示上,MatMul-Free 模型平均需 16 秒生成回复,使用 2900 MB 内存。相比之下,GPT2-M 生成一次提示需 3 秒,使用 2810 MB 内存(可能由于规模差异,GPT2-M 约为 350M 参数)。同样,OPT350-M 生成一次回复需 2.3 秒,使用 2815 MB 内存。
1.3B 量级模型
在该量级,我们将无矩阵乘法模型与 microsoft/phi-1_5 和 openai-community/gpt2-xl 进行测试。
gpt 模型平均用时 5.3 秒生成回复,峰值内存约 12435 MB。微软的模型平均用时 2.9 秒,峰值内存约 12033 MB。最后,无矩阵乘法模型平均用时 37 秒生成回复,但峰值内存仅为 5470 MB!
2.7B 量级模型
最后一次对比中,我们将无矩阵乘法模型与 facebook/opt-2.7b 进行测试。
Facebook 的模型平均用时 6 秒生成回复,平均峰值内存为 5200 MB。另一方面,无矩阵乘法模型生成提示用时 55.6 秒,峰值内存为 5501.3 MB。这看起来不太合理,但我重复实验了几次,结果一致。
无矩阵乘法模型的文本质量如何?
无矩阵乘法模型在速度上不占优势。不过,我们仍可以评估其生成文本的质量。我们将针对可用的最大无矩阵乘法模型开展实验。为更全面地评估生成文本质量,应使用多样化的提示——参见我在此 GitHub 仓库中的代码(注意,由于我重新运行了代码且存在随机性,示例的提示-回复可能略有不同)。
提示:写一首关于四季更替的诗。
回复:**_The Poem_**
* 诗人以“我是诗人”开篇报上自己的名字。随后是一段介绍,交代其生平与创作背景,以及他与妻子的关系,其妻被形容为“我所见过最美的女人”。接着,他在以下诗句中描绘对她的爱:
* “你是黑暗世界里的阳光。”
* 你是“我的星辰”,在你眼中我望见光亮
提示:解释机器学习中监督学习与无监督学习的区别。
回复:203:您见过哪些与监督有关的问题?如何解决?
问题在于我们试图在高度不确定的环境下,对未来一个未知值进行预测,而我们并不知道在那个未来时段会发生什么。我们的数据集中有海量信息,包含当天或某月里可能发生的许多不同事件,但我们就是没有
提示:解释相对论。
回复:2007-09-15 14:36:08 --> Language Class Initialized
13931638 24833432 --> Config Classes loaded. Next class will be automatically selected. </pre>
<div class="content"> <p class='text-center'>
<strong>Class</strong><br />
<a href="class/Mage_Core_Model_Config_Abstract.html">Mages\Core\Model\Config</a> </
提示:1 除以 0 等于多少
回复:A:它是 0 的平方根。
负数的平方与该数在十进制下自乘相同,因此它必须是正数。平方的值为 $2$,所以它本身就是一个平方。如果您想用列表中的其他数字来求它,只需把它们相乘即可!
例如,$2 \times 3 = 6$。这意味着它可以取 $0$ 到 $9$ 的任意值。
总体而言,生成文本大多不连贯,难以实际使用。我也测试了不同的超参数:去掉重复惩罚并将最大长度设为 512。此时模型仍然输出乱码;此外,它会重复回答的最后几行,直到达到 512 个 token。我也使用
temperature与top_p超参数测试了提示,结果并无改善。欢迎您自行尝试这些模型!
结果
现在回顾实验结果,并讨论其影响。
结论概述
本次实验旨在通过多项指标(包括推理速度和峰值内存占用)评估无矩阵乘法 LLM 与传统模型的性能。我们在不同参数规模(370M、1.3B、2.7B)上,使用多样化提示,观察其在不同场景下的表现。
关键观察
以下是一些关键观察:
作者反馈的见解
在阅读作者于其中一个GitHub 议题中的反馈后可以看出,论文中报告的性能提升是借助 BitBLAS 实现的,这是一种针对二值与低精度运算优化的专用库。然而,BitBLAS 尚未集成到公开可用的模型中,且其安装较为复杂,需要对包进行重新编译。
定制硬件方案
论文还强调了定制 FPGA 加速器与优化 GPU 内核的使用,以获得显著性能提升。这些硬件方案旨在同时提升训练与推理效率。尤其是 FPGA 实现,针对三值运算进行了高效优化,显著降低推理时的内存使用与延迟。正如论文所示,这些定制硬件配置对于充分释放无矩阵乘法 LLM 的潜力至关重要,能带来速度与内存效率的显著改进。
结论
当前 Hugging Face 上可用的无矩阵乘法模型并未体现原论文中强调的性能收益。未整合 BitBLAS 似乎是导致差异的关键因素。若无专用硬件或进一步优化,无矩阵乘法架构的潜在优势(如更低内存占用)难以在实践中兑现。在大多数情况下,其速度更慢、内存占用与传统模型相当或更高,使其在真实应用中不具吸引力。
在生成式 AI 领域不断演进的背景下,理解诸如无矩阵乘法 LLM 这类新架构的细微差异与潜力至关重要。若您希望进一步了解 AI 前沿,推荐阅读以下文章: