Comments (5)
这个是一个好问题,问的质量非常高。其实修改的地方不多(只是修改了_save
方法)。但是我也是经过对模型结构的研究、对peft包源码的研究之后、之前就反复看过transformers
包的trainer.py
之后,才知道在哪里改。
一、就是保存tokneizer
的时候,出错了。
- 因为chatglm-6b模型的tokenizer使用的是icetk包来做的,有一个
ice_text.model
文件。 - 但是huggingface的tokenizer基本上都是把数据保存在json里面的。
- 所以说,两个保存的方式不一样,导致出错了。
- 因为,这个是大模型,覆盖的tokenizer已经很多了,而且你在训练的时候,也没必要添加新的token。
- 所以,没必要保存tokenizer了。我直接把这个代码给注销了。
二、模型训练好之后,没办法generate
,也就是没办法生成数据
- 这个就很奇怪,因为我在训练的时候,loss都是正常下降的,也没出现nan
- 我在训练的时候,进行debug,发现模型的参数也都正常。那怎么会出现模型权重都是为0的情况呢。
- 我怀疑是不是半精度fp16的问题,但是检查也没问题。
- 我直接使用torch 加载checkpoint的bin文件,发现每一层的权重都是正常的。
- 那我就很奇怪,怎么会这样呢。
- 经过很久,我才发现,是peft包的问题,peft在对model做完处理之后,会把模型包装在
basemodel.xxx
里面,导致模型的每一个网络层的名称都变了。 - 比如,之前的网络层较
transformer
,现在被peft处理之后,网络层叫basemodel.transformer
了。 - 那么模型在推理的时候,进行初始化的时候,就是找不到对应的权重,然后把这个权重全部设置为0.
- 然后模型就没办法推理。
- 因为torch在保存权重的时候,本质的就是一个collection的orderdict(有序字典)。
- 所以,我在保存的时候,对model的权重名称做了修改。把
basemodel.
前缀抹掉。这样就保存成功了。 - 而且在后面的加载中,也不会出现问题。
- 没想到,这个还是在
Trainer
的_save
方法里面。
具体可以查看我的源码,或者按照我的分析,查看Trainer
的_save
方法部分。🚀
from zero_nlp.
是的,有初步对比过Trainer发现好好多不同之处的差异,应该是我们的transformers版本不一样,所以问问你的transformers版本,例如下面几处:
简单看介绍以为楼主只是包了层peft,想不到背后做了这么深的研究,再次感谢付出,根据你的提示我再继续学习~
from zero_nlp.
from zero_nlp.
你这用的是官网提供的modeling_chatglm.py代码,不是我提供的代码。看清楚喽
from zero_nlp.
是的,有初步对比过Trainer发现好好多不同之处的差异,应该是我们的transformers版本不一样,所以问问你的transformers版本,例如下面几处:
简单看介绍以为楼主只是包了层peft,想不到背后做了这么深的研究,再次感谢付出,根据你的提示我再继续学习~
是的,版本问题,你直接下载最新的transformers就行了。核心点,就是我上面说的那个#7 (comment)
from zero_nlp.
Related Issues (20)
- ChatGLM2 lora finetuning 加载 lora 参数:RuntimeError: Expected 4-dimensional input for 4-dimensional weight [3072, 32, 1, 1], but got 3-dimensional input of size [1, 64, 4096] instead HOT 4
- 4张3080ti跑chatglm2-6b-lora报oom HOT 5
- 求助:chatglm2 lora训练error:RuntimeError: Expected is_sm80 to be true, but got false. HOT 2
- 训练的时候报错ValueError: The current `device_map` had weights offloaded to the disk. HOT 11
- 训练出错
- 两张4090单机多卡跑,咋感觉越跑越慢了,比单卡慢 HOT 2
- 请问有部署或者运行的文档吗?在哪里可以看?
- 实时微调可以通过加入传统RL实现吗
- 请问如果单纯使用zeroth-order向前优化少量batch(只要体现出一定的优化效果)的话要怎么实现 HOT 2
- lora推理中只能指定一个输入吗?有办法实现batch_size的推理吗
- 救命!!ChatGlm-v2-6b_Lora该怎么设置epoch?? HOT 1
- 大佬,可以多个多个lora叠加使用吗?
- chatglm_v2_6b_lora多卡如何设置,没有找到 HOT 2
- 能出一个ChatGLM
- 能出一个ChatGLM的教程吗
- Segment Fault 是哪的问题?
- 大佬 chinese_llama 还可以用吗 HOT 1
- 出个chatglm3的吧 微调后 推理老是出问题 HOT 1
- internlm-sft 单机多卡微调 GPU 利用率低 HOT 5
- 大佬出个教程把 HOT 2
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 zero_nlp.