LLaMA-Factory摆设以及微调大模型

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表