-
Notifications
You must be signed in to change notification settings - Fork 421
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
为什么fine-tune过程中loss会忽大忽小呢? #39
Comments
是v100的,我之前就感觉配置环境的时候,这个bitsandbytes总是感觉不太正常,但本人对GPU不是很懂。因为一直感觉fine-tune不太正常,还没有generate和interaction。 |
讲道理load_in_8bit=True的话,v100跑个程序应该会报错啊,我是一直报错的,后面改成了load_in_8bit=False 才正常,然后用了.half()来记载模型训练,否则32Gv100会报oom |
|
好的,我试试,感谢。我想问问你之前load_in_8bit=True的时候,v100报错是什么呀?我也有bug信息,但是能执行fine-tune,就是loss不对;可是我换成A100,好像bug信息也没变,但是按照硬件信息,A100是支持8int的呀 ~ |
没报错,看上去是个奇怪的bug, 但是我马上反应过来可能是load_in_8bit设置为True了,改了就好了,我推理的时候,generate.py 设置load_in_8_bit也不会报错 |
@alisyzhu 把prepare_model_for_int8_training(model)去掉,然后在get_peft_model之后加上model.half()试试 |
我按照上面改了model的half部分,但还是OOM,哭了 ~ |
|
是不是load_in_8bit=False了,v100就跑不了13B的模型了。。。一直OOM |
@alisyzhu 我好像忘记问你mirco batch size开的多少了,你可以试试开到1 |
v100 7B是可以训练的,只是int8太慢了(可能是huggface里面int8很慢)。 |
This may be due to hardware reasons. On some hardware, the quantization model is not compatible with fp16. You can try set fp16=False. It works for me. |
我有个问题,如果int8加载的参数是freeze掉的,还会影响训练吗,因为看官网介绍,v100其实是不支持int8 tensor cores |
@fclearner 你说的方式就是正常的qlora+fp16/fp32优化器的方式。如果是qlora的话,按照之前的写法用的是默认的fp16/fp32的混合精度优化,本质上是只有lora那块需要训练,lora那块的梯度其实是fp16。显存里保存的模型本身是int8,而这一块确实是freeze住的,只有计算的时候会dequant出来。v100不支持int8,可能导致dequant计算的这一部分,速度和精度都不行 |
嗯嗯,感谢解答,我对int8 tensor core和int8的定义有些困惑,我之前理解int8 tensor core是用于训练加速的,int8是正常推理计算的,所以我觉得freeze掉int8相关参数,这部分参数不会参与训练加速的部分,所以不会有异常,但看你的描述,计算部分的int8 v100也是不支持的是吗,那这个图里的v100 int8支持具体是什么意思呢,期待你的回复! |
@fclearner 你的理解是对的,我的回答确实会产生误解。int8 tensor core就是用来优化int8 tensor的计算的,支持int8就是能进行计算。所以上面用v100训练是能在一定程度上进行的(不炸loss的情况下),但是可能速度精度受限。如果支持int8 tensor core速度会更快,精度可能也会高一点。 |
好的,感谢解惑 |
13B llama + 70w开源语料,其中1w作为test,为什么fine-tune的loss最开始是1.0左右,后续就一会儿变得很大,一会儿变成0呢?是因为test集合相对于fine-tune的集合太小吗?
The text was updated successfully, but these errors were encountered: