Ben Rood
Ben Rood
我这边在wsl里面,都需要改成绝对路径,两行都要改。
> I fine with vicuna v1.0 and fastchat 0.2.1, but my model is converted on 0.1.9 And I've the same problem with v1.1, which is converted under 0.2.1
Same here
量化主要还是降低内存/显存需求,用transformer应该用gptq去量化,参考 https://github.com/qwopqwop200/GPTQ-for-LLaMa
我加载了测试后,效果没有 [performance-medical.md](https://github.com/Facico/Chinese-Vicuna/blob/master/docs/performance-medical.md) 那样啊? lora用的是 https://huggingface.co/Chinese-Vicuna/Chinese-Vicuna-continue-finetune-7epoch-cMedQA2 llama-7b-hf权重是 两个bin文件的版本,9.3G和3.3G ``` 937521a4055177a7443e601c87adc23299533c80299f8637d9e35000b726e4ef pytorch_model-00001-of-00002.bin 20e0016147f3373ed154e65d65865d4988cadfa128883425dc392db19b50cc71 pytorch_model-00002-of-00002.bin ``` 改了chat.py,启动如下 ``` python chat.py --model_path /DaTa/llama-7b-hf --lora_path /DaTa/chinese-vic-med/Chinese-Vicuna-continue-finetune-7epoch-cMedQA2 --use_local 1 --use_typewriter 0 --share_link 0 ``` debug最后的输入和输出(tokenizer之前): input...
> 请问您是使用了整个252K 的数据集进行LORA 微调吗? LR是脚本中默认值吗?我这边只有4K微调语料,LORA微调训练了10个epoch 感觉基本没学到东西。 嗯,我把训练限制从1000放到310000,eval限制从100放到500(如果换成1000会爆V100的32G显存),batchsize只能调整到2
> 我在训练时用qlora把base model固定在4bit,然后训练lora model,lora model训练好是fp的,训练完再把lora model和base model进行合并,最后再量化合并后的模型,好像没有出现很大的损失 https://github.com/shuxueslpi/chatGLM-6B-QLoRA CSC中文纠错数据集我这边比较明显,就是那个测试例子:”少先队员因该为老人让坐“,里面有两个错别字,不量化基本上100%识别出来,量化后50%机率”坐“没识别(改成座)。 我什么时候试试你的先量化后训练模式,跑一个epoch看看。 另外求救你推理代码里面: ``` q_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type='nf4', bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.float32) ``` 这个我原来理解BitSandBytes就是Transformer底层用的,官网量化到4的代码也就是 Model.quantize(4) 和你这个有什么区别吗? 缺省的bnb_4bit_quant_type应该也是nf4吧?
> 期待你测试的结果 @shuxueslpi 我测试下来效果确实好很多,几乎和不量化差不多了。不过因为我中间也调整了训练的prompt,暂时还没有和参照https://github.com/shibing624/MedicalGPT 方法直接PEFT训练做对比。 另外我用PEFT直接训练后,似乎没法用同样的nf4去量化再加载lora进行推理,报"RuntimeError: mat1 and mat2 must have the same dtype" 这类错误。
> @bash99 你是怎么合并lora的?我那里面有个合并lora model和base model的脚本 哦,我没做合并,直接用你推理代码的例子,先加载base_model (nf4量化),再model = PeftModel.from_pretrained(base_model, peft_model_path) 去加载lora然后推理了 你是说提前合并可能可以避免 "mat1 and mat2 must have the same dtype" 错误?
> @bash99 我觉得现在有几种模式,可能要测一下: 1、base model + lora model,不合并的模式,也就是你试验过的 2、base model 和 lora model做merge,但不量化(我那个脚本支持这种) 3、base model和 lora model做merge,用官方的量化方法到4bit(我那个脚本就是这样的量化) 4、base model和lora model做merge,不量化,加载的时候用BitsAndBytesConfig,即nf4的方式加载 3和1就是我之前对比的,推理质量(可靠性)大幅度下降的问题。1和2对比推理时无区别。 4我刚刚测了,对比1 推理质量下降很轻微(或者不可见)。 对比了两种训练方式(lora和qlora),两种量化加载方式,用的CSC数据集,测试用例暂时比较有限。 lora比qlora,劣势:训练内存占用高、速度似乎稍慢、后期加载时必须合并;优势:可并行GPU加速;loss下降更快,3个epoch后的最低loss也更好;推理结果更好 量化加载方式,nf4推理质量优势明显,但是不够灵活,对于lora训练(而非qlora量化训练)的adapter_model.bin,必须先合并再加载。