首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

LLaMA-Factory部署以及微调大模型

  • 25-04-24 08:21
  • 4788
  • 8445
blog.csdn.net

一、安装LLaMa-Factory

1.python环境安装

安装成功后,输入python能出现截图表示安装成功

2.CUDA和PyTorch安装

2.1 PyTorch安装

查看PyTorch与CUDA对应的版本,然后进行安装。PyTorch的管网地址:PyTorch

把网页往下拖能看到PyTorch和CUDA对应的版本。

我这里将要选择的CUDA版本是11.8。我自己试过CUDA12.6的版本,不知道为什么没有跑通,后面就直接把CUDA的版本选成11.8了。

在终端中输入截图中的指令:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

就会安装PyTorch,不翻墙的情况下安装比较慢,建议有条件的可以翻墙安装。因为我已经安装成功了,再来编写的该文章,结果如截图所示。

到此PyTorch安装结束。

2.2 CUDA安装

找到CUDA的历史版本。链接地址:CUDA Toolkit Archive | NVIDIA Developer

找到我们目标的安装包,下载安装。安装成功后在终端中输入:nvcc --version

如截图所示,cuda安装成功。

2.3 校验

校验下cuda和pytorch是否匹配成功

终端中输入:python

继续输入:import torch

继续输入:torch.cuda.current_device()

继续输入:torch.cuda.get_device_name(0)

继续输入:torch.__version__

如果出现什么异常错误,可能是环境没有处理好,还需自行检查。笔者前面遇到过下载cuda版本12.6以及对应的Tytorch,就遇到没有成功的状况,遂改用cuda版本为11.8

3. 下载LLaMa-Factory的git仓库

git clone https://github.com/hiyouga/LLaMA-Factory.git

下载完成后的截图:

在终端中进入刚下载好的LLaMa-Factory文件夹中

必须在该文件夹内输入指令:pip install -e '.[torch,metrics]'

安装一些必须的东西。安装结束后如截图所示。

验证安装是否成功。输入指令:llamafactory-cli version

如出现截图所示表示安装成功

二、下载模型

在魔塔社区中可以自行找个模型进行下载。笔者这里选这一个Qwen2.5-0.5B-Instruct模型进行下载。链接地址:魔搭社区

点击模型文件

选择下载模型

选择git下载。该模型的git下载url:git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git

下载完成后

三、部署大模型

启动llama-factory的webui,输入指令:llamafactory-cli webui

注意下:必须是在LLMa-Factory仓库中输入该指令。

启动后的界面

切换页面到能部署模型的页面

点击chat

模型名称从下拉列表中选择Qwen2.5-0.5B-Instruct

模型路径填写,刚刚下载好的模型。注意:模型名称和模型路径中的模型要是对应的。

填写好,进行加载模型。

加载成功后,就可以进行聊天了。

四、模型微调

4.1 生成训练的数据集

代码:

  1. import json
  2. import random
  3. from faker import Faker
  4. def generate_thermal_dataset(output_path="thermal_dataset.json"):
  5. """生成智能家居温度调控指令数据集"""
  6. fake = Faker('zh_CN')
  7. # 定义数据生成模板组件‌:ml-citation{ref="1" data="citationList"}
  8. base_phrases = ["有点", "非常", "特别", "实在", "真的", "确实", "越来越", "稍微", "极其"]
  9. heat_verbs = ["热","炎热","火热","酷热","炽热","闷热","灼热","滚烫","炙热","沸热","炙烤","加热","升温","燥热","湿热","高温","暖热"]
  10. quantifiers = ["了", "啦", "啊", "呢", ""]
  11. dataset = []
  12. for _ in range(2000):
  13. # 构造自然语言输入‌:ml-citation{ref="4" data="citationList"}
  14. phrase = random.choice(base_phrases)
  15. verb = random.choice(heat_verbs)
  16. quantifier = random.choice(quantifiers)
  17. input_text = f"我{phrase}{verb}{quantifier}"
  18. # 生成带逻辑的JSON输出‌:ml-citation{ref="3,5" data="citationList"}
  19. output_json = {
  20. "Device": "AirConditioner",
  21. "Status": "on"
  22. }
  23. # 构建完整数据项‌:ml-citation{ref="1,6" data="citationList"}
  24. dataset.append({
  25. "instruction": "你是一个物联网数据处理专家,需要把自然语言指令转换为JSON结构化数据",
  26. "input": input_text,
  27. "output": json.dumps(output_json, ensure_ascii=False),
  28. })
  29. # 保存数据集‌:ml-citation{ref="2" data="citationList"}
  30. with open(output_path, "w", encoding="utf-8") as f:
  31. json.dump(dataset, f, indent=2, ensure_ascii=False)
  32. print(f"数据集已生成:{output_path}")
  33. if __name__ == "__main__":
  34. generate_thermal_dataset()

该代码会生成2000条训练数据。

运行代码的结果:

4.2 配置训练参数

找到llama-factory中的训练参数集的配置文件

data文件夹中的dataset_info文件。打开文件并配置。

我们在json字符串中再加入一组

配置完成后,我们在data文件夹中再新建一个train.json文件,用于保存生成出来的训练数据集。

在webui中配置上刚刚添加好的数据训练集

预览数据集

确定数据集后。进入设备管理器,禁用集成显卡,使用独立显卡进行训练

webui中点击,开始训练

可以看到已经开始训练

训练完成

看到log上面出现训练完毕,表示训练结束了。

4.3 LoRA合并

当我们基于预训练模型训练好 LoRA 适配器后,不希望在每次推理的时候分别加载预训练模型和 LoRA 适配器,因此我们需要将预训练模型和 LoRA 适配器合并导出成一个模型,并根据需要选择是否量化。根据是否量化以及量化算法的不同,导出的配置文件也有所区别。

合并代码

  1. import os
  2. import torch
  3. from peft import PeftModel
  4. from transformers import AutoModelForCausalLM, AutoTokenizer
  5. def merge_lora_to_base(
  6. model_name_or_path: str,
  7. adapter_path: str,
  8. save_path: str,
  9. trust_remote_code: bool = True
  10. ):
  11. # 加载基座模型
  12. print(f"Loading base model from {model_name_or_path}")
  13. tokenizer = AutoTokenizer.from_pretrained(
  14. model_name_or_path,
  15. trust_remote_code=trust_remote_code
  16. )
  17. base_model = AutoModelForCausalLM.from_pretrained(
  18. model_name_or_path,
  19. torch_dtype=torch.float16,
  20. trust_remote_code=trust_remote_code,
  21. device_map="auto"
  22. )
  23. # 加载LoRA适配器
  24. print(f"Loading LoRA adapter from {adapter_path}")
  25. model = PeftModel.from_pretrained(
  26. base_model,
  27. adapter_path,
  28. torch_dtype=torch.float16,
  29. device_map="auto"
  30. )
  31. # 执行模型合并
  32. print("Merging models...")
  33. merged_model = model.merge_and_unload()
  34. # 保存合并后的模型
  35. os.makedirs(save_path, exist_ok=True)
  36. merged_model.save_pretrained(save_path)
  37. tokenizer.save_pretrained(save_path)
  38. print(f"Model saved to {save_path}")
  39. # 使用示例
  40. if __name__ == "__main__":
  41. merge_lora_to_base(
  42. model_name_or_path="D:/ai/download/Qwen2.5-0.5B-Instruct/Qwen2.5-0.5B-Instruct",
  43. adapter_path="D:/ai/LLaMA-Factory/LLaMA-Factory/saves/Qwen2.5-0.5B-Instruct/lora/train_2025-03-04-16-50-50",
  44. save_path="D:/ai/output"
  45. )

4.4 加载合并后的模型

注:本文转载自blog.csdn.net的wangrAx的文章"https://blog.csdn.net/qq_35594661/article/details/146034218"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

110
AIGC
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top