结论:使用Jetson能够实现Qwen14B模型的微调、量化、部署,解决了前文中遗留的Lora量化精度损失的问题。主要是依赖llamacpp。
前言: 之前按照网络上的帖子,直接把lora和base合并后,使用llama cpp进行量化,但结果非常不理想,量化后的模型不但失去了Lora权重的能力,并且本身的推理能力也下降了。
具体表现在(system prompt相同的情况下):
先merge再量化(int5_1) 最差,完全无法理解指令任务,增加两轮对话样本能够稳定格式
不使用Lora直接量化,使用一轮对话样本,能够稳定输出格式和指令
使用Lora(int8)和量化的base模型(int5_0),表现稳定。
记录其中踩的坑点(主要是jetson的特性)
1. 使用llamacpp,带cuda编译完成后,运行发现gpu未使用,需要增加某个参数,把模型从CPU转到GPU,具体看llamacpp的官方文档。
2. 量化后的base直接加载lora,速度很慢,把lora转换为int8的gguf格式,速度正常(最终约比base慢10%)
3. 抛弃ollama镜像,ollama的docker镜像可能不支持lora加载,不建议使用,但其速度几乎与直接用llamacpp推理速度相当。
4. llamacpp不支持AutoGPTQ(目前看来),而且AutoGPTQ在jetson上推理会报错(未解决),并且transformers也会出现类似的问题。
5. llamacpp server支持自由切换多个Lora
Todo:准备测试集以及更多功能和方向的数据集