Comments (2)
@RuSignalFlag
训练过程加载的量化模型是base model,真正的lora adapter其实不是量化的,所以保存的adapter也不是量化的。
然后在merge的时候,加载的base model是fp16的,和adapter合并之后再量化。
所以真正的反量化应该是发生在训练/推理时的模型4bit矩阵乘法和fp16乘法的结果合并时,可以看我参考的关于这部分用时间换空间的文档。
下面是训练加载量化模型,再调用peft后得到的peft model的张量打印,可以看到lora部分确实不是量化的:
# qkv量化部分
In [12]: model.base_model.model.transformer.layers[0].attention.query_key_value.weight
Out[12]:
Parameter containing:
Parameter(Params4bit([[184],
[215],
[183],
...,
[148],
[ 54],
[249]], device='cuda:0', dtype=torch.uint8))
# lora部分,非量化
In [17]: model.base_model.model.transformer.layers[0].attention.query_key_value.lora_A.default.weight
Out[17]:
Parameter containing:
tensor([[-0.0144, 0.0076, -0.0096, ..., 0.0113, -0.0150, 0.0060],
[-0.0096, 0.0049, -0.0014, ..., -0.0060, -0.0140, 0.0115],
[-0.0101, 0.0134, -0.0066, ..., -0.0097, 0.0116, -0.0127],
[-0.0054, 0.0090, -0.0131, ..., 0.0082, 0.0068, 0.0122]],
device='cuda:0', requires_grad=True)
In [18]: model.base_model.model.transformer.layers[0].attention.query_key_value.lora_A.default.weight.dtype
Out[18]: torch.float32
from chatglm-6b-qlora.
@shuxueslpi 后来看代码看明白了,谢谢。保存的只是adapter,合并的时候重新load全精度的基础模型然后应用这个训练好的adapter实例化peftmodel,这个peftmodel Lora层的原始权重是fp16,lora_a和lora_b都是fp32,这个时候就可以相加了。
from chatglm-6b-qlora.
Related Issues (20)
- 不能训练被加载的8bit模型 HOT 2
- 数据集格式instruction,input,output时tokenized出错 HOT 2
- 训练结束后,数据展示出现问题
- merge后模型Loading checkpoint shards Killed HOT 6
- 调优后的模型是否可以在CPU服务上部署? HOT 1
- protobuf 和 icetk 版本不兼容 HOT 1
- ImportError: libcudnn.so.8: cannot open shared object file: No such file or directory HOT 12
- RuntimeError: mat1 and mat2 shapes cannot be multiplied (588x4096 and 1x9437184) ,ChatGLM2-6B做微调,请问如何设置参数?? HOT 1
- RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0! (when checking argument for argument target in method wrapper_CUDA_nll_loss_forward),请问如何调整训练代码,适配多卡训练?? HOT 1
- transformers>4.30.2时,模型不会进行量化,是因为什么?
- BrokenPipeError: [Errno 32] Broken pipe HOT 7
- 训练结束后没有保存完整的adapter文件 HOT 2
- 用V100显卡微调chatglm2-6b,但是loss一直为0,eval_loss=nan
- 训练显存有些问题
- 微调后推理性能问题 HOT 1
- ChatGLM3-6B 微调报错 RuntimeError: CUDA error: invalid argument HOT 1
- ChatGLM2-6B微调后合并报错We need an `offload_dir` to dispatch this model according to this `device_map`, the following submodules need to be offloaded: HOT 2
- 合并模型的时候显存不够,用的4090,24G
- qlora微调训练随机性
- ValueError:
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from chatglm-6b-qlora.