LLaMA-Factory摆设以及微调大模型
一、安装LLaMa-Factory1.python环境安装
安装成功后,输入python能出现截图表示安装成功
https://i-blog.csdnimg.cn/direct/b7fa9b7e0b084fd3a557b862d2e7b0eb.png
2.CUDA和PyTorch安装
2.1 PyTorch安装
查看PyTorch与CUDA对应的版本,然后进行安装。PyTorch的管网地址:PyTorch
把网页往下拖能看到PyTorch和CUDA对应的版本。
https://i-blog.csdnimg.cn/direct/1f0a170ad44e4075b0fed666b4ea3ddf.png
我这里将要选择的CUDA版本是11.8。我自己试过CUDA12.6的版本,不知道为什么没有跑通,反面就直接把CUDA的版本选成11.8了。
在终端中输入截图中的指令:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 就会安装PyTorch,不翻墙的情况下安装比较慢,建议有条件的可以翻墙安装。由于我已经安装成功了,再来编写的该文章,结果如截图所示。
https://i-blog.csdnimg.cn/direct/afdd92788afb46a98fed86a9f5e3f5be.png
到此PyTorch安装结束。
2.2 CUDA安装
找到CUDA的汗青版本。链接地址:CUDA Toolkit Archive | NVIDIA Developer
https://i-blog.csdnimg.cn/direct/fc5cde7bb71c4a7894153a0a41d8bb79.png
找到我们目标的安装包,下载安装。安装成功后在终端中输入:nvcc --version
https://i-blog.csdnimg.cn/direct/b4e83c7c3a4642a4bc4f0b7803cfb1d1.png
如截图所示,cuda安装成功。
2.3 校验
校验下cuda和pytorch是否匹配成功
终端中输入:python
https://i-blog.csdnimg.cn/direct/664b8a162d96416a98cea39c0f55e47a.png
继续输入:import torch
https://i-blog.csdnimg.cn/direct/f8dbb1d0dc5d4bc283aeeccef794d7ed.png
继续输入:torch.cuda.current_device()
https://i-blog.csdnimg.cn/direct/755b3368700d44cd93e1d58be6ae8c9b.png
继续输入:torch.cuda.get_device_name(0)
https://i-blog.csdnimg.cn/direct/5236c8df70a94dbf93df6e995f85b732.png
继续输入:torch.__version__
https://i-blog.csdnimg.cn/direct/18bcc47812724759879343d52707fccc.png
假如出现什么非常错误,可能是环境没有处理好,还需自行查抄。笔者前面遇到过下载cuda版本12.6以及对应的Tytorch,就遇到没有成功的状态,遂改用cuda版本为11.8
3. 下载LLaMa-Factory的git仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
下载完成后的截图:
https://i-blog.csdnimg.cn/direct/402ef81be5ab4510aa57dc94c81e694e.png
在终端中进入刚下载好的LLaMa-Factory文件夹中
https://i-blog.csdnimg.cn/direct/0a109d11ed6c4f79b970fe092144f11b.png
必须在该文件夹内输入指令:pip install -e '.'
安装一些必须的东西。安装结束后如截图所示。
https://i-blog.csdnimg.cn/direct/def84f91a7474ab2a8a65399a3c761f1.png
验证安装是否成功。输入指令:llamafactory-cli version
如出现截图所示表示安装成功
https://i-blog.csdnimg.cn/direct/084b020811674f5fab622e43926d5a76.png
二、下载模型
在魔塔社区中可以自行找个模型进行下载。笔者这里选这一个Qwen2.5-0.5B-Instruct模型进行下载。链接地址:魔搭社区
https://i-blog.csdnimg.cn/direct/e8d7a83b4bd84c8eb851d63c6efea501.png
点击模型文件
https://i-blog.csdnimg.cn/direct/76e2f48b80fa4c7b9e68a8cdee2f1c34.png
选择下载模型
https://i-blog.csdnimg.cn/direct/511526afa49c475f917878df1323325e.png
选择git下载。该模型的git下载url:git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
下载完成后
https://i-blog.csdnimg.cn/direct/cfd26284616740ee8e0a81f9bce7e4be.png
三、摆设大模型
启动llama-factory的webui,输入指令:llamafactory-cli webui
https://i-blog.csdnimg.cn/direct/b38b7fa0cdfa433fa98183b1e8fbe7ba.png
注意下:必须是在LLMa-Factory仓库中输入该指令。
启动后的界面
https://i-blog.csdnimg.cn/direct/00057f38253747f3ba1e51485936c946.png
切换页面到能摆设模型的页面
https://i-blog.csdnimg.cn/direct/0375bd3c97f74bf3975676671f9685bb.png
点击chat
https://i-blog.csdnimg.cn/direct/62043ea2be22424c969c7717c5b4d060.png
模型名称从下拉列表中选择Qwen2.5-0.5B-Instruct
模型路径填写,刚刚下载好的模型。注意:模型名称和模型路径中的模型要是对应的。
填写好,进行加载模型。
https://i-blog.csdnimg.cn/direct/46969aba4f7a4bf0b6f2d63f18d978fe.png
加载成功后,就可以进行聊天了。
https://i-blog.csdnimg.cn/direct/2f1a4b03be684d6586a1151a83052e46.png
四、模型微调
4.1 生成训练的数据集
代码:
import json
import random
from faker import Faker
def generate_thermal_dataset(output_path="thermal_dataset.json"):
"""生成智能家居温度调控指令数据集"""
fake = Faker('zh_CN')
# 定义数据生成模板组件:ml-citation{ref="1" data="citationList"}
base_phrases = ["有点", "非常", "特别", "实在", "真的", "确实", "越来越", "稍微", "极其"]
heat_verbs = ["热","炎热","火热","酷热","炽热","闷热","灼热","滚烫","炙热","沸热","炙烤","加热","升温","燥热","湿热","高温","暖热"]
quantifiers = ["了", "啦", "啊", "呢", ""]
dataset = []
for _ in range(2000):
# 构造自然语言输入:ml-citation{ref="4" data="citationList"}
phrase = random.choice(base_phrases)
verb = random.choice(heat_verbs)
quantifier = random.choice(quantifiers)
input_text = f"我{phrase}{verb}{quantifier}"
# 生成带逻辑的JSON输出:ml-citation{ref="3,5" data="citationList"}
output_json = {
"Device": "AirConditioner",
"Status": "on"
}
# 构建完整数据项:ml-citation{ref="1,6" data="citationList"}
dataset.append({
"instruction": "你是一个物联网数据处理专家,需要把自然语言指令转换为JSON结构化数据",
"input": input_text,
"output": json.dumps(output_json, ensure_ascii=False),
})
# 保存数据集:ml-citation{ref="2" data="citationList"}
with open(output_path, "w", encoding="utf-8") as f:
json.dump(dataset, f, indent=2, ensure_ascii=False)
print(f"数据集已生成:{output_path}")
if __name__ == "__main__":
generate_thermal_dataset()
该代码会生成2000条训练数据。
运行代码的结果:
https://i-blog.csdnimg.cn/direct/f5c2777bb37644c0ab1bae7514d23939.png
https://i-blog.csdnimg.cn/direct/82a1bcb79a7e4ba7b5c97341a20ee3cf.png
4.2 配置训练参数
找到llama-factory中的训练参数集的配置文件
https://i-blog.csdnimg.cn/direct/f390771f96034489ab18cf8df97f2b1b.png
data文件夹中的dataset_info文件。打开文件并配置。
我们在json字符串中再加入一组
https://i-blog.csdnimg.cn/direct/44297b6bf8074e7db91be82608a8cfc7.png
配置完成后,我们在data文件夹中再新建一个train.json文件,用于保存生成出来的训练数据集。
https://i-blog.csdnimg.cn/direct/f241fa84f4ac42069257f42072e5ff0a.png
在webui中配置上刚刚添加好的数据训练集
https://i-blog.csdnimg.cn/direct/ac8f2b57149d44b8848a957d2fe20cb4.png
预览数据集
https://i-blog.csdnimg.cn/direct/b4212206d76946c691ae5072777d4374.png
https://i-blog.csdnimg.cn/direct/541087fcd8634e558b63160da9fe9f5c.png
确定命据集后。进入设备管理器,禁用集成显卡,使用独立显卡进行训练
https://i-blog.csdnimg.cn/direct/f84318e4bf214b1fa005afc06cd71170.png
webui中点击,开始训练
https://i-blog.csdnimg.cn/direct/6f71fc022b8d476096b27578eb4d795d.png
可以看到已经开始训练
https://i-blog.csdnimg.cn/direct/1c4198e2cae243db8f94689eda4fab5d.png
https://i-blog.csdnimg.cn/direct/c925b550d3f746659df74c40e85f4db5.png
训练完成
https://i-blog.csdnimg.cn/direct/f90678da21724673a13fa4976093bed1.png
看到log上面出现训练完毕,表示训练结束了。
4.3 LoRA合并
当我们基于预训练模型训练好 LoRA 适配器后,不盼望在每次推理的时候分别加载预训练模型和 LoRA 适配器,因此我们必要将预训练模型和 LoRA 适配器合并导出成一个模型,并根据必要选择是否量化。根据是否量化以及量化算法的差异,导出的配置文件也有所区别。
合并代码
import os
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
def merge_lora_to_base(
model_name_or_path: str,
adapter_path: str,
save_path: str,
trust_remote_code: bool = True
):
# 加载基座模型
print(f"Loading base model from {model_name_or_path}")
tokenizer = AutoTokenizer.from_pretrained(
model_name_or_path,
trust_remote_code=trust_remote_code
)
base_model = AutoModelForCausalLM.from_pretrained(
model_name_or_path,
torch_dtype=torch.float16,
trust_remote_code=trust_remote_code,
device_map="auto"
)
# 加载LoRA适配器
print(f"Loading LoRA adapter from {adapter_path}")
model = PeftModel.from_pretrained(
base_model,
adapter_path,
torch_dtype=torch.float16,
device_map="auto"
)
# 执行模型合并
print("Merging models...")
merged_model = model.merge_and_unload()
# 保存合并后的模型
os.makedirs(save_path, exist_ok=True)
merged_model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
print(f"Model saved to {save_path}")
# 使用示例
if __name__ == "__main__":
merge_lora_to_base(
model_name_or_path="D:/ai/download/Qwen2.5-0.5B-Instruct/Qwen2.5-0.5B-Instruct",
adapter_path="D:/ai/LLaMA-Factory/LLaMA-Factory/saves/Qwen2.5-0.5B-Instruct/lora/train_2025-03-04-16-50-50",
save_path="D:/ai/output"
)
https://i-blog.csdnimg.cn/direct/1c6734ada4a64545aa66e704a81371f4.png
4.4 加载合并后的模型
https://i-blog.csdnimg.cn/direct/f45bcfa05e71454bb59fc891a5e31153.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]