找回密码
 立即注册
首页 业界区 业界 deepseek-llamafactory模型微调并转为gguf

deepseek-llamafactory模型微调并转为gguf

愆蟠唉 2025-6-4 22:33:07
模型微调测试

基础设施配置

使用云计算平台
1.png

使用vscode进行配置
2.png

打开系统盘文件夹
3.png

llamafactory基础配置
  1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
  2. root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# cd LLaMA-Factory/
  3. CITATION.cff  MANIFEST.in  README.md     assets  docker      examples        requirements.txt  setup.py  tests
  4. LICENSE       Makefile     README_zh.md  data    evaluation  pyproject.toml  scripts           src
  5. root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/LLaMA-Factory
  6. # - 创建虚拟环境对应目录,数据盘可以被保留
  7. mkdir -p /root/autodl-tmp/conda/pkgs
  8. conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs
  9. mkdir -p /root/autodl-tmp/conda/envs
  10. conda config --add envs_dirs /root/autodl-tmp/conda/envs
  11. # - 创建 conda 虚拟环境(一定要 3.10 的 python 版本,不然和 LLaMA-Factory 不兼容)
  12. conda create -n llama-factory python=3.10
  13. root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/LLaMA-Factory# conda env list
  14. # conda environments:
  15. #
  16. llama-factory            /root/autodl-tmp/conda/envs/llama-factory
  17. base                     /root/miniconda3
  18. root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/LLaMA-Factory#
  19. conda init
  20. source /root/.bashrc
  21. conda activate llama-factory
  22. pip install -e ".[torch,metrics]"
  23. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/LLaMA-Factory# llamafactory-cli version
  24. ----------------------------------------------------------
  25. | Welcome to LLaMA Factory, version 0.9.2.dev0           |
  26. |                                                        |
  27. | Project page: https://github.com/hiyouga/LLaMA-Factory |
  28. ----------------------------------------------------------
  29. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/LLaMA-Factory#
  30. llamafactory-cli webui
复制代码
4.png

也没端口转发就这样打开了,这个vscode还挺方便,我也不知道啥原理
再开一个终端
  1. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# conda activate llama-factory
  2. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp#
  3. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# mkdir Hugging-Face
  4. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# export HF_ENDPOINT=https://hf-mirror.com
  5. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# export HF_HOME=/root/autodl-tmp/Hugging-Face
  6. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp#
  7. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# pip install -U huggingface_hub
  8. (llama-factory) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
  9. 下载好大模型
  10. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# du -sh Hugging-Face/
  11. 3.4G    Hugging-Face/
  12. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# pwd
  13. /root/autodl-tmp
  14. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# ls
  15. Hugging-Face  LLaMA-Factory  conda
  16. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp#
复制代码
聊天测试

5.png

6.png

编写数据集

数据集定义
llama_factory - data - README_zh.md
7.png

8.png

训练模型

9.png

学习率:开车的油门,一脚油门会过终点,太少就很慢才达到终点(最优解)
训练轮数:太少会欠拟合(没有学到足够知识)太多会过拟合模型泛化能力下降,在训练数据表现很好但是新数据会很差
最大梯度范数:当梯度的值超过这个范围时会被截断,防止梯度爆炸现象,当成保险丝
最大样本数:每轮训练中最多使用的样本数。不设置,则拿整个数据集都去训练,但是十几万的时候就会特别多
计算类型:常见float32 float16 用float16会减少内存占用会速度快,但导致精度损失
截断长度:处理长文本时如果太长超过这个阈值的部分会被截断掉,避免内存溢出
批处理大小:由于内存限制,分批次处理
梯度累计:默认情况下模型会在每个 batch 处理完后进行一次更新一个参数,但你可以通过设置这个梯度累计,让他直到处理完多个小批次的数据后才进行一次更新
验证集比例:训练时数据会被分成训练集和验证集,80与20
学习率调节器:动态调节率,列如开车一开始加速,快到地方则降速
10.png

这些参数会导致过拟合
11.png

损失从2.7降低为0
损失曲线:降低太慢就加大学习率,如果学习结束还是下降趋势,还没到底就为欠拟合。降低太快降低学习率
检查点路径:保存的是模型在训练过程中的一个中间状态,包含了模型权重、训练过程中使用的配置(如学习率、批次大小)等信息,对LoRA来说,检查点包含了训练得到的 B 和 A 这两个低秩矩阵的权重
12.png


  • 若微调效果不理想,你可以:

    • 使用更强的预训练模型
    • 增加数据量
    • 优化数据质量(数据清洗、数据增强等,可学习相关论文如何实现)
    • 调整训练参数,如学习率、训练轮数、优化器、批次大小等等

导出合并后的模型

  • 为什么要合并:因为 LoRA 只是通过低秩矩阵调整原始模型的部分权重,而不直接修改原模型的权重。合并步骤将 LoRA 权重与原始模型权重融合生成一个完整的模型
  • 先创建目录,用于存放导出后的模型
  1. (base) root@autodl-container-10a44fbcf4-b07c334b:~# cd /root/autodl-tmp/
  2. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# mkdir -p Models/deepseek-r1-1.5b-merged
  3. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp#
复制代码
13.png

部署模型
  1. conda create -n fastApi python=3.10
  2. (base) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/Models/deepseek-r1-1.5b-merged# conda activate fastApi
  3. (fastApi) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/Models/deepseek-r1-1.5b-merged#
  4. conda install -c conda-forge fastapi uvicorn transformers pytorch
  5. pip install safetensors sentencepiece protobuf
  6. (fastApi) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# mkdir App
  7. (fastApi) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp# cd App/
  8. (fastApi) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/App# touch main.py
  9. (fastApi) root@autodl-container-10a44fbcf4-b07c334b:~/autodl-tmp/App#
复制代码
  1. from fastapi import FastAPI
  2. from transformers import AutoModelForCausalLM, AutoTokenizer
  3. import torch
  4. app = FastAPI()
  5. # 模型路径
  6. model_path = "/root/autodl-tmp/Models/deepseek-r1-1.5b-merged"
  7. # 加载 tokenizer (分词器)
  8. tokenizer = AutoTokenizer.from_pretrained(model_path)
  9. ### 分词器十分重要自动加载模型匹配分词器
  10. # 加载模型并移动到可用设备(GPU/CPU)
  11. device = "cuda" if torch.cuda.is_available() else "cpu"
  12. model = AutoModelForCausalLM.from_pretrained(model_path).to(device)
  13. @app.get("/generate")
  14. async def generate_text(prompt: str):
  15.     # 使用 tokenizer 编码输入的 prompt
  16.     inputs = tokenizer(prompt, return_tensors="pt").to(device)
  17.    
  18.     # 使用模型生成文本
  19.     outputs = model.generate(inputs["input_ids"], max_length=150)
  20.    
  21.     # 解码生成的输出
  22.     generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
  23.    
  24.     return {"generated_text": generated_text}
复制代码
  1. python -m uvicorn main:app --reload --host 0.0.0.0
复制代码
http://localhost:8000/docs
14.png

训练的过拟合了
  1. python3 /root/llama.cpp/convert_hf_to_gguf.py    /mnt/c/Users/DK/Desktop/投喂的资料/deepseek-r1-1.5b-merged --outfile /root/test.gguf --outtype f16
复制代码
  1. modelfile文件已经被llamafactory定义
  2. PS C:\Users\DK\Desktop\投喂的资料\deepseek-r1-1.5b-merged> ollama create haimianbb
  3. gathering model components
  4. copying file sha256:a998574673a76c152a2aabce1ab7eaf0c307990dc6c0badd964617afb9d79652 100%
  5. copying file sha256:8dd737d110cceb8396782d1b0c9196655a4a78fee4de35f056b22d1f9e96bf96 100%
  6. copying file sha256:59cda48bbe8bab9d61ffb410e6e3c07b6d98bff73cee7c88ff8b51f95f21ab1c 100%
  7. copying file sha256:e20ddafc659ba90242154b55275402edeca0715e5dbb30f56815a4ce081f4893 100%
  8. copying file sha256:6ce236e90057bbc36feee740e52666fc58103659d82063fc5ddb1355551e8148 100%
  9. copying file sha256:b0e8dce267611e5e03ebf2cd16a8c3821bbfcad441415dd6875173788f518a56 100%
  10. converting model
  11. creating new layer sha256:ac67fabf626c9acf8fbfbc2b6391a8e1d9d1f4ed7f93e340627df1eb421ba7df
  12. creating new layer sha256:741e943dbd4c7642ec2e10b275b4cc1a154d97550dce8a6288e1edf56bec5e8f
  13. creating new layer sha256:b2ad9c47ff5fee622d61048a4fe3ba330b91d26bc04578fad9d10d143dc86322
  14. writing manifest
  15. success
  16. PS C:\Users\DK\Desktop\投喂的资料\deepseek-r1-1.5b-merged>
复制代码
15.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册