first_prompt = """
作为一位专业的xxxx,您的任务是从给定的上下文回答问题。
给定的上下文:
last_prompt = """
请综合上述信息,你给出的回复需要包含以下三个字段:
1.questions: 基于上下文内容,提出与这个内容相关的问题,至少两个以上。
2.answers: 然后根据问题,分别给出每个问题的答案,请用 markdown 格式。
3.instruction: 给出上下文内容的总结,尽量精简,用 markdown 格式。
请按照以下JSON格式来回答:
"questions": [
"<内容相关问题1>",
"<内容相关问题2>"
"answers": [
"<内容相关问题1的答案>",
"<内容相关问题2的答案>"
instruction: "<总结性的内容>"
注意:如果碰到上下文内容信息不够,无法回答问题的情况,answers和questions可以返回空。
最后强调一下:你的回复将直接用于javascript的JSON.parse解析,所以注意一定要以标准的JSON格式做回答,不要包含任何其他非JSON内容,否则你将被扣分!!!
Lora / QLora [14]
根据实际经验,这里推荐采用 Lora 或 QLora。简单介绍一下 QLoRA,重点改进是将模型采用 4bit 量化后加载,训练时把数值反量化到 bf16 后进行训练,利用 LoRA 可以锁定原模型参数不参与训练,只训练少量 LoRA 参数的特性使得训练所需的显存大大减少。例如 33B 的 LLaMA 模型经过这种方式可以在 24GB 的显卡上训练,也就是说消费级单卡都可以实现,大大降低了微调的门槛。
英文模型需要做词表扩充吗?
对于像 LLaMA 模型的词表大小是 32K,其主要针对英语进行训练(具体详见 LLaMA 论文 [15]),对多语种支持不是特别理想(可以对比一下多语言经典模型 XLM-R 的词表大小为 250K)。
通过初步统计发现,LLaMA 词表中仅包含很少的中文字符,所以在切词时会把中文切地更碎,需要多个 byte token 才能拼成一个完整的汉字,进而导致信息密度降低。比如,在扩展词表后的模型中,单个汉字倾向于被切成 1 个 token,而在 LLaMA 中可能就需要 2-3 个才能组合成一个汉字,显著降低模型的推理效率。
如何避免灾难遗忘
通常我们有以下方式,可以减少或避免灾难性遗忘问题
将重要的权重冻结 - 像 Lora 就是采用的这种方案,只学习部分网络权重。但这里 Lora 的配置其实是要注意一下,如果你是用 Lora 做预训练,lora 训练模块可以配上 q_proj,v_proj,k_proj,o_proj 如果是微调则只需要训练 q_proj,v_proj lora_rank 的设置也有讲究,初始设 lora_ran 为 8,训练存在遗忘时,可以将 lora_rank 改为 64(原因是与原模型数据领域相差较大的话,需要更大的秩,原论文有说明)。
复习 - 跟人一样,在预训练或微调时,回看之前训练的数据。还可以专门把特征图存起来,量化以后放在一个类似于记忆库的地方,之后在新任务上训练的时候从这个记忆库里重构出记忆和新数据一起训练。感兴趣可以看这篇论文 [16]。
MoE - 稀疏门控制的专家混合层,最近爆出 GPT4 是由 8 个 220B 的模型组合。关于 Moe 相关资料 [17] 大家自行了解。
对于推理,一般我们采用量化方案,这里有两个办法。第一个则是采用 ggml 工具,比如 llama.cpp [18] 针对 llama 模型,将模型量化运行在 cpu 或 gpu 上,也可以 cpu 和 gpu 一起跑,内存则大大减少,推理速度有极大的提高。
这里如果将 llama.cpp 运行在 gpu 上, 编译时一定要加 LLAMA_CUBLAS=1,同时推理的时候,指定 --gpu-layers|-ngl 来分配运行在 gpu 上的层数,当然越大,占用 gpu 的内存会越多。
如果是 RWKV 模型,则考虑采用 rwkv.cpp [19],此方法与 llama.cpp 类似,使用方式也是类似的。
还有 Llama 模型还可以考虑使用 exllama [20] 纯 GPU 的加速,虽然还不够完善,但也可以值得一试。
另一个,采用 LLM Accelerator [21],LLM 存在大量的相似性推理,基于此,可以做一些优化加速推理,具体请看论文。最后采用架构上的调整,faster transformer [22] 要优于传统的 transformer 架构。
最后总结几条原则:
参数多量化低的模型要优于参数低量化高的模型
模型质量与训练数据质量是存在相关性的
扩充中文词表有助于提高推理效率
微调推荐采用 Lora QLora 方案
模型加速必然需要对模型进行量化
[1] https://lmsys.org/blog/2023-06-22-leaderboard/
[2] https://www.cluebenchmarks.com/index.html
[3] https://www.superclueai.com/
[4] https://kexue.fm/archives/9431
[5] https://huggingface.co/mosaicml/mpt-7b-storywriter
[6] https://arxiv.org/abs/2108.12409
[7] https://github.com/miso-belica/jusText
[8] https://github.com/adbar/trafilatura
[9] https://github.com/salesforce/ctrl-detector
[10] https://perspectiveapi.com/
[11] https://github.com/bigscience-workshop/promptsource
[12] https://github.com/THUDM/P-tuning-v2
[13] https://zhuanlan.zhihu.com/p/415168620
[14] https://github.com/artidoro/qlora
[15] https://arxiv.org/abs/2302.13971v1
[16] https://arxiv.org/abs/1910.02509
[17] https://zhuanlan.zhihu.com/p/542465517
[18] https://github.com/ggerganov/llama.cpp
[19] https://github.com/saharNooby/rwkv.cpp
[20] https://github.com/turboderp/exllama
[21] https://arxiv.org/pdf/2304.04487.pdf
[22] https://github.com/NVIDIA/FasterTransformer
欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。
计算机视觉入门1v3辅导班
【技术文档】《从零搭建pytorch模型教程》122页PDF下载
QQ交流群:470899183。群内有大佬负责解答大家的日常学习、科研、代码问题。
分享一个CV知识库,上千篇文章、专栏,CV所有资料都在这了
明年毕业,还不知道怎么做毕设的请抓紧机会了
LSKA注意力 | 重新思考和设计大卷积核注意力,性能优于ConvNeXt、SWin、RepLKNet以及VAN
CVPR 2023 | TinyMIM:微软亚洲研究院用知识蒸馏改进小型ViT
ICCV2023|涨点神器!目标检测蒸馏学习新方法,浙大、海康威视等提出
ICCV 2023 Oral | 突破性图像融合与分割研究:全时多模态基准与多交互特征学习
听我说,Transformer它就是个支持向量机
HDRUNet | 深圳先进院董超团队提出带降噪与反量化功能的单帧HDR重建算法
南科大提出ORCTrack | 解决DeepSORT等跟踪方法的遮挡问题,即插即用真的很香
1800亿参数,世界顶级开源大模型Falcon官宣!碾压LLaMA 2,性能直逼GPT-4
SAM-Med2D:打破自然图像与医学图像的领域鸿沟,医疗版 SAM 开源了!
GhostSR|针对图像超分的特征冗余,华为诺亚&北大联合提出GhostSR
Meta推出像素级动作追踪模型,简易版在线可玩 | GitHub 1.4K星
CSUNet | 完美缝合Transformer和CNN,性能达到UNet家族的巅峰!
AI最全资料汇总 | 基础入门、技术前沿、工业应用、部署框架、实战教程学习
计算机视觉入门1v3辅导班
计算机视觉交流群