- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
主要为了测试模型增加Lora模块后,参数量和训练速度的变化情况。
结论:正常情况下,增加Lora模块是会增加参数量的,因此前向传播和反向传播的时间也会增加。
但是,在大语言模型训练的情况下,因为基础模型本身参数量非常大,Lora模块增加的参数量相对非常小。并且,基础模型不参与梯度更新,可以做模型量化,实际上是能减少模型训练时间和显存使用量的。
以下是实验脚本和运行结果:
#部分参考https://zhuanlan.zhihu.com/p/666000885
import time import torch from torch import nn from peft import LoraConfig, get_peft_model, PeftModel from torchsummary import summary x_train = torch.randn((1000, 10)) y_train = torch.randn((1000, 1)) net = nn.Sequential( nn.Linear(10,20), nn.Sigmoid(), nn.Linear(20,30), nn.Sigmoid(), nn.Linear(30,1) ) summary(net, (1,10)) config = LoraConfig(target_modules=["0"], r=2) model = get_peft_model(net, config) criterion = torch.nn.MSELoss(reduction='mean') # 定义损失函数,采用均方误差 optimizer = torch.optim.Adam(model.parameters(), lr=0.3) # 定义优化器,采用Adam summary(model, (1,10)) # base 前向计算时间 start = time.time() for i in range(100000): y_pre = net(x_train) # 前向传播 print("base 前向计算时间: ", time.time() - start) # lora 前向计算时间 start = time.time() for i in range(100000): y_pre = model(x_train) # 前向传播 print("lora 前向计算时间", time.time() - start) # base 反向传播时间 start = time.time() for i in range(1000): y_pre = net(x_train) # 前向传播 loss = criterion(y_pre, y_train) # 计算损失 optimizer.zero_grad() # 梯度清零 loss.backward() # 反向传播 optimizer.step() # 使用优化器更新梯度 print("base loss after training: ", loss.item()) print("base 反向计算时间", time.time() - start) # lora 反向传播时间 start = time.time() for i in range(1000): y_pre = model(x_train) # 前向传播 loss = criterion(y_pre, y_train) # 计算损失 optimizer.zero_grad() # 梯度清零 loss.backward() # 反向传播 optimizer.step() # 使用优化器更新梯度 print("lora loss after training: ", loss.item()) print("lora 反向计算时间", time.time() - start)
运行代码输出:
---------------------------------------------------------------- Layer (type) Output Shape Param # ================================================================ Linear-1 [-1, 1, 20] 220 Sigmoid-2 [-1, 1, 20] 0 Linear-3 [-1, 1, 30] 630 Sigmoid-4 [-1, 1, 30] 0 Linear-5 [-1, 1, 1] 31 ================================================================ Total params: 881 Trainable params: 881 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.00 ---------------------------------------------------------------- ---------------------------------------------------------------- Layer (type) Output Shape Param # ================================================================ Linear-1 [-1, 1, 20] 220 Identity-2 [-1, 1, 10] 0 Linear-3 [-1, 1, 2] 20 Linear-4 [-1, 1, 20] 40 Linear-5 [-1, 1, 20] 220 Sigmoid-6 [-1, 1, 20] 0 Linear-7 [-1, 1, 30] 630 Sigmoid-8 [-1, 1, 30] 0 Linear-9 [-1, 1, 1] 31 ================================================================ Total params: 1,161 Trainable params: 60 Non-trainable params: 1,101 ---------------------------------------------------------------- Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.01 ---------------------------------------------------------------- base loss after training: 1.0724023580551147 base 反向计算时间 2.9570980072021484 lora loss after training: 1.0643658638000488 lora 反向计算时间 3.053032159805298
最后此篇关于Lora训练的参数和性能的文章就讲到这里了,如果你想了解更多关于Lora训练的参数和性能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
随着 llama.cpp 对 LoRA 支持的重构,现在可以将任意 PEFT LoRA 适配器转换为 GGUF,并与 GGUF 基础模型一起加载运行。 为简化流程,我们新增了一个名为 GGUF-my
你是否已厌倦管理多个 AI 模型所带来的复杂性和高成本? 那么, 如果你可以部署一次就搞定 30 个模型推理服务会如何? 在当今的 ML 世界中,哪些希望充分发挥其数据的价值的组织可能最终会进入一个“
我想使用 LoRa 在两个 Raspberry Pi 之间建立点对点通信链接。 我知道 lorawan 有(至少在我居住的欧洲)有一个占空比限制,因此每个设备每天只能在空中传输平均 30 秒的上行链路
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文地址: https://arxiv.org/pdf/2106.09685.pdf
我从LoRa节点收集数据,然后网关转发到lora服务器,最后,数据到lora应用服务器。但我找不到以下界面。( https://docs.loraserver.io/lora-app-server/i
为什么这会给我一个月的预期处理时间?。更重要的是,如何加快这一进程?。我的数据集是20K个短句的集合(每个短句最多100个单词)。
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等] 由于LLM参数量都是在亿级以上,少则数十亿,多
我正在尝试以低功耗模式从一个 ESP32 LoRa 节点传输到另一个节点,并符合欧洲法规。 ESP32 板:TTGO LoRa32 OLED 板 V1.0(here 和 here)。 在我写的 LoR
我是一名优秀的程序员,十分优秀!