关于 ChatGLM 的 50 个 FQAs

Q1:训练后模型会生成重复的文本。
答:绝大部分是由于训练集过小并且训练步数过多导致,可以适当降低training step。

Q2:训练后模型丧失了通用对话能力

答:这很正常,如果是使用垂域数据训练,一般而言,训练的步数越多,垂域能力越强,通用能力越弱,这是两种能力之间的一个tradeoff。如果想保持通用对话能力,可以考虑混一些通用对话数据一起训练,例如使用开源的SFT数据。

Q3:V100能否部署glm2

答:可以

Q4:A100部署需要几张卡

答:80G4,40G8

Q5:官方提供的ptuning例子也无法得到合理的训练结果。

答:ptuning的训练variance是有些大的,可能要多试几次

Q6:如果使用int8/int4进行全参数微调

答:不支持int8/int4进行全参数微调,因为性能会有较大下降

Q7:

答:可能是模型目录过期,建议更新一下

Q8:GLM和GLM2有什么区别

答:GLM2采用了causal lm的方式

Q9:Chatglm运行的时候 可以配置类似temperature参数来进行精度调整吗?

答:可以的,类似这样

Q10:16fp模型可以正常推理,而使用int4模型推理就报错 RuntimeError: Library cudart is not initialized

答:可能是cuda版本的问题,可以升级到12.0试试看,如果是win平台可能有环境变量配置的原因

Q11:请问这个模型可以用在Finetune别的语言上吗,比如小语种那些 阿拉伯语之类的什么的

答:小语种可能比较困难,预训练的时候见的很少

Q12:glm2 7b可以做角色扮演吗

答:可能达不到你想要的效果,尤其是当对话轮数稍多的时候,可能会忘记最初给定的人设

Q13:启动cli_demo的时候 报这个错是啥原因呀

答:检查一下 chatglm-6b 文件夹下面是否有 ice_text.model 文件,如果有的话,更新一下

Q14:长文本我这里初步试了一些 感觉好像效果不太理想,我是用glm做判别,比如文本前半部分是说判别规则,后面文本输入待判别的case。这种组合成一个长文本,我实验感觉它attention不太住半部分的判别规则,最后瞎判断。我们现在的glmv2版本 有没有什么方法可以缓解long context的问题~训练语料组成方式优化 或者模型结构优化?或者训练方式优化?

答:现在确实有这种问题,我们在着手解决了。如果想自己解决的话,可以收集一些包含长距离依赖的训练数据,效果可能比较好。

Q15:这东西能接自己的api吗?例如我说我想吃KFC,他能调我已经封装好的kfc接口按我的喜好下单到我账户里的地址。

问:我也想这种根据用户输入自动调接口的功能,生成类场景其实还没这种场景多感觉

Q16:接是可以接,但如果不微调,只通过prompt去接可能效果不会好。我们正在通过微调去实现这种需求。

补充问:最好是能看懂接口文档,丢给他接口文档,然后他自己会知道怎么调接口,怎么解析

Q17:windows cuda报错。Torch not compiled with CUDA enabled

答:没有正确安装gpu版本的pytorch

Q19:web_demo在首行数字时会自动换行,显示异常如何处理

Q20:我没能复现出来这个问题

补充问:我是套用这个代码另一个大模型的,出现了这个问题

答:web_demo会根据生成内容添加


之类的标识符,如果是另一个大模型,可能输出格式不一样,导致添加标识符的时候出了点问题

(很无语的问题)

Q21:请问大家有遇到过不稳定的情况吗 不是会大不一样 是同样的prompt 一次很正常 一次直接死循环不停输出。尤其是遇到结构化输出或者是数字编码这类的

答:想稳定点可以把温度调小点,或者beam search。如果是结构化输出,或者要求输出序列严格符合某种规范,比如semantic parsing这种的,可以考虑beam search

Q22: raise EnvironmentError(OSError: /data/web/ChatGlm-6B-model/checkpoint-3000 does not appear to have a file named tokenization_chatglm.py. Checkout ‘https://huggingface.co//data/web/ChatGlm-6B-model/checkpoint-3000/None’ for available files. 自己调优的模型,怎么出现这个错误

image

答:你看下/data/web/ChatGlm-6B-model/checkpoint-3000路径下有哪些文件。感觉好像有些文件没存下来,如果你没对tokenization_chatglm.py做修改的话,要不你从官网手动下载一下缺失的文件(tokenization_chatglm.py)。

Q23:你们使用api方式正常不,我这边一请求就报各种错误。postman调用报编码有问题。

答:反馈给visualglm团队了。

Q24:请问训练好以后,一直重复一句话,请问是为啥呢?语料是拿的生产环境上的对话记录,然后进行多轮训练

答:可能是语料的问题,生产环境的对话记录有做过筛选过滤吗

Q25:chatglm2-6b 微调 4080显卡 可以不?

答:有点难,全参数微调的话需要8*40G A100,ptuning或者lora应该没问题

Q26:谁知道有那种“有害问题”的数据集吗?

答:REALTOXICITYPROMPTS,不过是英文的

Q27:按照 P-Tuning v2 的微调ADGEN的方法能完成,那如果用自己的数据集,该怎么生成这个训练数据集呢,必须要类似ADGEN的{content:,summary:***}这种格式吗**

答:不想改代码的话就得这种格式的,但是content、summary的key name可以换一换,在训练脚本里对应修改prompt_column/response_column/history_column就行。想改代码的话,可以改一改main.py中的数据处理部分,比如preprocess_function_train、preprocess_function_eval等内容,就可以自定义格式了。

补充答:但我感觉还是改自己数据集的格式比较简单

Q28:大佬们,问一下,为啥我按照这个参数微调了,会生成3个bin文件出来,并且每次问答,第一次都是对的,第二次问,就毫不相干了

答:3个checkpoint是因为每1000个step存一次,一共3000个step存三次。第二次问毫不相干,可能是因为训练集中都是单轮对话,因此训练后多轮对话能力受损。

Q29:

答:可能是网络原因导致模型文件没有下载全,你再重新下载一下提示损毁的文件

Q30:我有三个参数,这个地方怎么修改呢?只填两个的话,剩下一个会自动加载进去吗?

答:不会自动加载,建议你预处理一下你的数据,把instruction和input合并为input,然后prompt_column填input,response_column填output

Q31:微调样本的数据格式有要求吗?现在看到p-tuning v2和chatglm两种样例格式,还有其他的支持格式吗?另外有没有内建的特殊token说明啊?哪位大佬解一下惑[合十][合十]

答:不想改代码的话就得这种格式的,但是content、summary的key name可以换一换,在训练脚本里对应修改prompt_column/response_column/history_column就行。想改代码的话,可以改一改main.py中的数据处理部分,比如preprocess_function_train、preprocess_function_eval等内容,就可以自定义格式了。

Q32:还要大佬知道,为啥我把max_steps调整到3000以后,训练速度很慢,20条数据,都得要6.7个小时

答:训练时间和max step有关,和数据多少没啥关系

Q33:chatglm2翻译的时候结果出现了中文是怎么回事呀

第三部分 法律依据

FTO检索与侵权判定的法律依据相同,主要包括:全面覆盖原则、等同原则、禁止反悔原则和多余指定原则。

其适用的法律依据为:《中华人民共和国专利法(2008修正)》第五十九条:发明或者实用新型专利权的保护范围以其权利要求的内容为准,说明书及附图可以用于解释权利要求的内容。

《最高人民法院关于审理侵犯专利权纠纷案件应用法律若干问题的解释》第七条:人民法院判定被诉侵权技术方案是否落入专利权的保护范围,应当审查权利人主张的权利要求所记载的全部技术特征。被诉侵权技术方案包含与权利要求记载的全部技术特征相同或者等同的技术特征的,人民法院应当认定其落入专利权的保护范围;被诉侵权技术方案的技术特征与权利要求记载的全部技术特征相比,缺少权利要求记载的一个以上的技术特征,或者有一个以上技术特征不相同也不等同的,人民法院应当认定其没有落入专利权的保护范围。

答:确实还存在一些中英夹杂的现象,我们正在尝试解决

补充答:嗯嗯,我尝试了一下,确实有中英混杂的问题,多谢反馈

问:我有什么办法改善吗?调整设置什么的

答:我感觉不微调的话可能有点难,这可能是因为中英对齐得过于一致了,导致它们的词向量比较接近。如果你只是使用的话,可以用一下我们的线上版本chatglm.cn,那个效果比较好。如果你想要微调的话,可以拿通用领域的中英翻译数据集训练模型。

Q34:老哥们 运行ds_train_finetune.sh,train_batch_size设置为1报CUDA内存不够,我是两块T4显卡,是训练不起来吗

答:确实显存不太够,全参数微调的话大概需要A100 80G * 4

Q35:p-tuning的时间是固定的吗?我只给了20条数据,为啥半小时都没训练完?

答:max step是3000,这个决定训练时间,和数据多少无关

Q36:简单的做了一下数据清洗 数据量太大,好几万个,人工不过来,有什么好办法吗?这两种方式哪种更好一些呢?【提高质量降低数量】还是【提高数量降低质量】

答:提高质量更关键,有条件的话也可以考虑用gpt4辅助清洗数据

Q37:各位老师 打搅了 有没有训练过大模型学习写复杂json结构啊。我想训练模型写低代码的 json 有没有类似目标的朋友啊

答:你这个需求听起来像是semantic parsing的问题,就是要求输出严格符合一个明确的格式,可以看看text-to-SQL相关的工作

Q38:我想训练模型能写这种json,您看有什么思路吗

Q39:两个方案:(1)数据量足够,直接把json转化成文本输出,微调就行(2)数据有点少,可以尝试一下constrained decoding,就是在生成的时候加上规则约束,保证生成结果符合json语法,这种方法训练的时候也要做相应的调整。constrained decoding是类似这里面的做法,就是约束模型的输出空间Constrained Language Models Yield Few-Shot Semantic Parsers

Q40:长文本训练生成重复问题有遇到的吗

Q41:我loss都降不下来。五点几 六点几的样子。有知道是啥问题的吗?

Q42:我用自己训练的模型,跑 cli_demo.py就是这个样子,训练过程是正常结束的,就是不出结果

答:感觉有两种可能的原因。第一种是训练数据or训练参数有问题,导致模型直接输出了终止符。第二种是,因为某些原因,一些模型参数没有被load进来,导致模型行为异常。

补充答:在运行cli_demo的时候,你仿照main.py中的这几行改一改,手动把ptuning中prefix的参数load进来。感觉可能是prefix参数没加载进来导致的问题

Q43:为什么我的模型一直输出英文呀,我跟他说要使用中文回答,回复还是英文

答:现在的模型在instrcution following方面还有待提升

Q44:很奇怪,我损失函数很低了。但是训练出来还经常答非所问。我只用了20行训练数据,问的也是这20行里面的。而且还有出现回答被截断的情况

反馈个问题哈,GLM2-6B针对同一个问题在两次对话里给出完全相反的答案

Q45:为啥 ptuning后,模型回答不了问题了?

答:拟合到训练集的领域了,对通用领域的回答能力下降

补充答:可以考虑混一些通用对话数据进行训练

Q46:

答:收到[捂脸]这种问题在尝试解决

Q47:请教一个问题哈,像是量化模型这里加载的这个二进制内核,看是否是通过nvcc 指定类似“-gencode arch=compute_61,code=sm_61” 这样参数编译出来的,如果是的话,能否帮忙更新一版支持compute_87,code=sm_87的编译版本,发现在jetson orin上跑量化模型的话会报no kernel image is available for execution on the device的错,猜测是这个原因

Q48:ConnectionError: (ProtocolError(‘Connection aborted.’, ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。’, None, 10054, None)), ‘(Request ID: 93aebebe-2600-413c-b6b3-522955aa92c8)’) 请问这个报错是什么原因?

答:感觉像是网络环境的原因https://github.com/THUDM/ChatGLM2-6B/issues/47

Q49:怎么解决灾难性遗忘问题,只能搞垂直领域的知识库么

答:可以在微调的时候按一定配比,添加一些通用数据;也可以考虑加上和原模型的KL loss。

Q50:微调数据应该是什么格式?

为每个示例准备文本输入和标签,以问答形式呈现,如下所示:

  • 问题: 维珍澳大利亚何时开始运营?背景: 维珍澳大利亚,是维珍澳大利亚航空有限公司的交易名称,是一家总部设在澳大利亚的航空公司。它是使用维珍品牌的最大机队规模的航空公司。它于2000年8月31日作为维珍蓝航空公司开始运营,在一条航线上有两架飞机。在2001年9月安捷澳大利亚公司倒闭后,它突然发现自己成为澳大利亚国内市场的一家主要航空公司。此后,该航空公司发展到直接服务于澳大利亚的32个城市,从布里斯班到墨尔本和悉尼的枢纽。

  • 回应: 维珍澳大利亚于2000年8月31日以维珍蓝的名义开始提供服务,在一条航线上使用两架飞机。

问答格式可以处理成多种文件格式, 例如JSONL, Excel File, CSV; 核心是要保持两个独立的字段, 即问题和答案。(from 文心千帆)