windows电脑上安装llama-factory实现大模型微调

一、安装环境准备

这是官方给的llama-factory安装教程,安装 - LLaMA Factory,上面介绍了linux系统上以及windows系统上如何正确安装。大家依照安装步骤基本能够完成安装,但是可能由于缺少经验或者相关的知识导致启动webUi界面运行相应内容时会报各种错误。

特别需要注意的是:一定要有英伟达的显卡。如果没有显卡的GPU加速,模型的训练时间是非常长的。我的电脑配置是i5-14代的CPU,4070显卡12G显存,64G内存,通过写代码微调deepseek-r1:1.5B模型显示程序运行需要91个小时(具体需要所长的时间我也不确定,等待12个小时训练进度10%),我把对应的代码(安装的pytorch是CPU版本的)放在文章的结尾处,有需要的小伙伴自取。

我在安装llama-factory的过程中一共遇到两种错误情况:

(1)pytorch安装的版本错误,导致模型在运行的过程找不到CUDA;

(2)在模型训练的过程中出现"RuntimeError: CUDA Setup failed despite GPU being available"的错误,导致训练中断。

今天刚把windows上的llama-factory安装完成,后续会更新我在Ubuntu系统上安装llama-factory遇到的问题以及处理方法。

下面是我在windows系统上安装llama-factory上安装的配置,大家可以参考一下。

|----------|------------------------------------|
| 电脑系统 | windows 11专业版,版本号是23H2 |
| python环境 | Anaconda3-2024.10-1-Windows-x86_64 |
| cuda | cuda_12.2.0_536.25_windows |
| pytorch | windows版本CUDA12.4 |

二、安装相应的软件

1、安装python环境

我们直接从anaconda官网上下载对应的安装包即可,双击打开之后按照默认选项一步一步安装即可。也可以更改安装的位置如D盘。

特别需要注意的是如果在安装过程中出现添加path环境变量的选项一定要勾选上,否则就需我们手动配置环境变量。不仅仅是对anaconda,后续安装所有的软件也需要遵照同样的原则。

anaconda安装完毕后,我们需要在自己的电脑上配置运行llama-factory的虚拟环境。这里为甚选择anaconda配置python开发环境而不是之家安装python,大家可以自行百度。

python 复制代码
conda create --name largeLanguageModelLearn python=3.12

在anaconda的powershell prompt下输入如下的命令构建大语言模型训练的环境,激活该开发环境的命令如下

python 复制代码
conda activate largeLanguageModelLearn

以后我们关于大语言模型所有的包都安装在该环境下。

2、安装CUDA

安装CUDA是为了能够在训练模型的时候使用。首先需要确定自己windows系统的规格,下载安装的CUDA一定要和自己系统的规格对应,否则会导致后续模型加载或者训练的过程中提示找不到CUDA。CUDA的网址为: https://developer.nvidia.com/cuda-gpus

依据我的系统规格,我选择的是Windows---》x86_64---》11---》exe(local)版本。

在安装CUDA的时候我选择自定义安装,把所有的需要安装的项都勾选上。另外不要忘记勾选自动配置环境变量选项。

CUDA安装完成后,打开 cmd 输入 nvcc -V ,若出现类似内容则安装成功。

3、安装llama-factory

安装llama-factory我们只需安装官方的教程即可。

下载llama-factory至本地 :我们可以使用官方中给的方法下载,这种下载方式方便对llama-factory框架更新。我这里使用的是手动下载llama-factory框架的各个文件至本地。对应的网址如下:

复制代码
https://github.com/hiyouga/LLaMA-Factory.git

进入该网址后,点击Code按钮选择download ZIP即可下载至本地。

下载至本地后,就需要安装该框架。我把该框架放在D盘某个目录下,在下图中给出我安装该框架的操作步骤:

step1:进入到下载LLaMA-Factory的目录下;

step2:激活我们之前为学习大语言模型创建的python环境;

step3:在该环境下下载对应的安装包,也可以安装需要增加额外的包,额外需要的包如下图

4、启动llama-factory的webUI界面

在anaconda的powershell prompt中输入:llamafactory-cli webui,注意要在LLaMA-Factory的目录下启动,除非你将llamafactory-cli webui配置了全局变量。

三、处理开头提出的两个错误

我在安装llama-factory的过程中一共遇到两种错误情况:

(1)pytorch安装的版本错误,导致模型在运行的过程找不到CUDA;

处理方法:安装GPU版本的pytorch,在conda环境下运行如下命令即可实现安装:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

(2)在模型训练的过程中出现"RuntimeError: CUDA Setup failed despite GPU being available"的错误,导致训练中断。

处理方法:在网上收到的教程是执行如下的命令

pip uninstall bitsandbytes
pip install bitsandbytes-windows

但是执行上述的命令并没有解决我的问题,最后发现执行如下的代码可以解决,对应的命令如下:

pip uninstall bitsandbytes
pip install bitsandbytes-cuda113
pip uninstall bitsandbytes-cuda113
pip install bitsandbytes

我曾经在B站看过一个大佬的课程,他说在运行过程中所有的错误无非两种情况造成的。情况1:安装环境出现冲突(包的依赖出现冲突或者CUDA的版本没有安装对);情况2:权限不够(sudo运行或者管理员下运行即可解决,一般报错信息中会出现permission字样)

代码微调

main方法

python 复制代码
'''
需要的依赖
    torch
    transformers
    datasets
    peft
    bitsandbytes
'''

# 测试模型是否可用
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
# 加载模型 Hugging face提前下载
model_name = r'D:\pycharmProject\firstProject\大模型微调\DeepSeekR1DistillQwen1.5B'
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 模型加载成功之后注释model代码,否则每次都占用内存 (如果内存不够,可以使用device_map='auto')
model = AutoModelForCausalLM.from_pretrained(model_name,device_map='auto',trust_remote_code=True)

for name, param in model.named_parameters():
    if param.is_meta:
        raise ValueError(f"Parameter {name} is in meta device.")


print('---------------模型加载成功-------------')

# 制作数据集
from data_prepare import samples
import json
with open('datasets.jsonl','w',encoding='utf-8') as f:
    for s in samples:
        json_line = json.dumps(s,ensure_ascii=False)
        f.write(json_line + '\n')
    else:
        print('-------数据集制作完成------')

# 准备训练集和测集
from datasets import load_dataset
dataset = load_dataset('json',data_files={'train':'datasets.jsonl'},split='train')
print('数据的数量',len(dataset))

train_test_split = dataset.train_test_split(test_size=0.1)
train_dataset = train_test_split['train']
eval_dataset = train_test_split['test']
print('训练集的数量',len(train_dataset))
print('测试集的数量',len(eval_dataset))

print('--------完成训练数据的准备工作--------')

# 编写tokenizer处理工具
def tokenize_function(examples):
    texts = [f"{prompt}\n{completion}" for prompt , completion in zip(examples['prompt'],examples['completion'])]
    tokens = tokenizer(texts,truncation=True,max_length=512,padding="max_length")
    tokens["labels"] = tokens["input_ids"].copy()
    return tokens

tokenized_train_dataset = train_dataset.map(tokenize_function,batched=True)
tokenized_eval_dataset = eval_dataset.map(tokenize_function,batched=True)

print('---------完成tokenizer-------------')
# print(tokenized_eval_dataset[0])

# 量化设置

import torch
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
print('-----------完成量化模型的加载-----------------')

# lora设置
from peft import LoraConfig,get_peft_model,TaskType
lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj","v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)
model = get_peft_model(model,lora_config)
model.print_trainable_parameters()
print('-----------完成lora模型的加载-----------------')

# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    gradient_accumulation_steps=4,
    fp16=True,
    evaluation_strategy="steps",
    save_steps=100,
    eval_steps=10,
    learning_rate=3e-5,
    logging_dir="./logs",
    run_name='deepseek1.5b',
    # 后期增加的内容
    label_names=["labels"],  # 必须显式指定
    remove_unused_columns=False,  # 确保不自动删除标签字段
)
print('--------训练参数设置完毕----------')

# 定义训练器
from transformers import Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_train_dataset,
    eval_dataset=tokenized_eval_dataset
)

print('--------训练器定义完毕----------')
print('----------开始训练-------------')
trainer.train()
print('----------训练完成-------------')

数据集

python 复制代码
samples = [
        {
            "prompt": "请解释什么是神经网络?",
            "completion": "神经网络是受生物神经系统启发的计算模型,由相互连接的神经元层组成。它通过前向传播处理输入数据,反向传播调整参数,最终实现模式识别和预测功能。"
        },
        {
            "prompt": "如何预防计算机病毒?",
            "completion": "建议采取以下措施:1. 安装杀毒软件并定期更新;2. 不打开可疑邮件附件;3. 使用强密码保护系统;4. 定期备份重要数据。"
        },
        {
            "prompt": "神经网络的工作原理?",
            "completion": "1. 前向传播;2. 损失计算;3. 反向传播。"
        },
        {
            "prompt": "神经网络的类型与变体?",
            "completion": "1. 前馈神经网络;2. 卷积神经网络;3. 循环神经网络;4. 生成对抗网络。"
        },
        {
            "prompt": "神经网络的应用领域?",
            "completion": "1. 图像与语音识别;2. 自然语言处理;3. 金融与预测;4. 自动驾驶。"
        },
        {
            "prompt": "区块链技术的主要特点是什么?",
            "completion": "三个核心特征:1. 去中心化网络结构;2. 不可篡改的分布式账本;3. 智能合约自动执行。"
        },
        {
            "prompt": "如何快速入门Python编程?",
            "completion": "推荐路径:1. 安装Anaconda环境;2. 学习基础语法;3. 实践小项目开发;4. 参与开源社区贡献。"
        },
        {
            "prompt": "云计算服务的部署模式有哪些?",
            "completion": "主要类型:公有云(如AWS)、私有云(企业自建)、混合云(两者结合)、社区云(多组织共享)。"
        },
        {
            "prompt": "什么是GDPR数据保护法规?",
            "completion": "欧盟通用数据保护条例,要求企业:1. 明确用户数据使用范围;2. 提供数据可移植性;3. 72小时内报告数据泄露事件。"
        },
        {
            "prompt": "如何预防糖尿病?",
            "completion": "健康建议:控制糖分摄入、定期血糖检测、保持适度运动、维持正常体重、避免吸烟饮酒。"
        },
        {
            "prompt": "股票与债券的主要区别?",
            "completion": "差异点:股票代表所有权(高风险高收益),债券体现债权(固定利率回报),发行主体及清偿顺序不同。"
        },
        {
            "prompt": "如何提高英语听力水平?",
            "completion": "训练方法:每日精听VOA常速、跟读影视片段、使用播客泛听、建立听力高频词库、模拟真实对话场景。"
        },
        {
            "prompt": "物联网设备的安全风险点有哪些?",
            "completion": "主要隐患:1. 弱密码认证;2. 固件更新漏洞;3. 数据传输未加密;4. 物理接口暴露风险。"
        },
        {
            "prompt": "正确刷牙的七个步骤",
            "completion": "巴氏刷牙法要点:1.45度角牙龈接触;2.小幅度水平颤动;3.涵盖所有牙面;4.舌侧清洁;5.每次至少2分钟。"
        },
        {
            "prompt": "处理厨房油火的正确方法",
            "completion": "应急步骤:1.立即关闭气源;2.用锅盖窒息火焰;3.切勿泼水;4.小苏打覆盖灭火;5.及时拨打119。"
        },
        {
            "prompt": "量子计算机与传统计算机的核心差异?",
            "completion": "三个关键区别:1. 采用量子比特(叠加态)替代二进制;2. 支持量子并行计算;3. 适用于破解加密算法等特定问题。"
        },
        {
            "prompt": "制定个人理财规划的五个步骤",
            "completion": "操作流程:1. 评估财务状况 2. 设定财务目标 3. 风险承受测试 4. 资产配置规划 5. 定期复盘调整"
        },
        {
            "prompt": "无人机飞行法规的核心要求",
            "completion": "主要限制:1. 120米限高 2. 禁飞区电子围栏 3. 视距内操作 4. 夜间飞行需申请 5. 商业用途需许可证"
        },
        {
            "prompt": "AI绘画工具的伦理争议点",
            "completion": "三大争议:1. 版权作品训练数据;2. 艺术家人力替代;3. 深度伪造滥用风险;4. 创作署名权归属问题"
        },
        {
            "prompt": "野外遇险的SOS求救信号规则",
            "completion": "国际标准:三次一组(火光/声音),间隔1分钟重复。地面标志需大于3米,推荐三角形或直线排列。"
        },
        {
            "prompt": "生物降解塑料的技术原理",
            "completion": "核心机制:1. 淀粉基材料水解 2. 微生物分解PHB酯键 3. 光敏添加剂促进氧化 4. 堆肥条件温湿度控制"
        },
        {
            "prompt": "选择深度学习框架的考量因素",
            "completion": "评估维度:1. 社区活跃度 2. 文档完整性 3. 硬件兼容性 4. 预训练模型库 5. 部署便利性"
        },
        {
            "prompt": "应对DDoS攻击的防护策略",
            "completion": "五层防御:1. 流量清洗中心 2. CDN分发 3. 访问频率限制 4. IP黑名单 5. 负载均衡冗余"
        },
        {
            "prompt": "碳中和实现的关键技术路径",
            "completion": "四大方向:1. 可再生能源发电 2. 碳捕集与封存 3. 工业流程电气化 4. 碳交易市场机制完善"
        },
        {
            "prompt": "构建家庭智能安防系统的必备组件",
            "completion": "基础配置:智能门锁+摄像头+烟雾传感器+水浸检测+网关中枢+手机联动APP"
        },
        {
            "prompt": "疫苗研发的临床试验阶段划分",
            "completion": "三期流程:I期(安全性测试,数十人)→ II期(剂量确定,数百人)→ III期(有效性验证,数千人)"
        },
        {
            "prompt": "选择云服务器的硬件配置策略",
            "completion": "决策矩阵:1. CPU核数≈并发请求量 2. 内存≥应用峰值使用量×2 3. 存储类型按IO需求选择"
        },
        {
            "prompt": "企业危机公关的5R原则",
            "completion": "应对策略:Regret(真诚致歉)→ Reform(改进方案)→ Restitution(补偿措施)→ Recovery(恢复行动)→ Reinforcement(制度完善)"
        },
        {
            "prompt": "智能合约的典型应用场景",
            "completion": "三大领域:1. 去中心化金融(DeFi) 2. 供应链溯源 3. 数字版权交易 4. 自动理赔保险"
        },
        {
            "prompt": "防范电信诈骗的五个原则",
            "completion": "安全守则:1. 不透露验证码 2. 官方渠道核实 3. 慎重点击链接 4. 警惕高收益理财 5. 家属涉案必报警确认"
        },
        {
            "prompt": "影响房价的主要经济指标",
            "completion": "关键因素:1. 按揭利率 2. 土地供应量 3. 人口迁移趋势 4. 租金收益率 5. 政策调控力度"
        },
        {
            "prompt": "自动驾驶的SAE分级标准",
            "completion": "等级定义:L0(人工驾驶)→L1(辅助转向/制动)→L2(部分自动化)→L3(条件自动)→L4(高度自主)→L5(完全自主)"
        },
        {
            "prompt": "健康餐食的营养搭配原则",
            "completion": "黄金比例:碳水50%+蛋白质20%+脂肪30%,每餐包含膳食纤维,控制GI值<55,钠摄入<2000mg/天"
        },
        {
            "prompt": "元宇宙的关键技术支撑",
            "completion": "六大基石:区块链+AR/VR+5G网络+AI+数字孪生+边缘计算,需交互设备与去中心化经济系统配合"
        },
        {
            "prompt": "设计问卷调查的七个注意事项",
            "completion": "要点提醒:1.问题中立 2.选项穷尽 3.逻辑排序 4.避免复合问 5.控制题量 6.预测试用 7.明确填写说明"
        },
        {
            "prompt": "敏捷开发中的每日站会核心规则",
            "completion": "三大铁律:1. 15分钟准时结束 2. 回答三问题(昨日进展/今日计划/阻塞障碍)3. 不展开技术讨论"
        },
        {
            "prompt": "卫星互联网的频段分配策略",
            "completion": "主流方案:Ka波段(26.5-40GHz)高频段用于高速传输,Ku波段(12-18GHz)保障雨衰稳定性,V波段提供扩容空间"
        },
        {
            "prompt": "初创企业股权分配陷阱规避方法",
            "completion": "五个警示:1. 避免均分股权 2. 设立成熟期条款 3. 预留期权池10-20% 4. 明确决策机制 5. 定期动态调整"
        },
        {
            "prompt": "脑机接口的信号传输原理",
            "completion": "三层处理:1. 电极捕获神经电信号 2. 模数转换与噪声过滤 3. 机器学习算法解码运动意图"
        },
        {
            "prompt": "选择留学国家的评估维度",
            "completion": "八大指标:教育质量、移民政策、就业前景、生活成本、安全系数、文化适应、语言门槛、签证通过率"
        },
        {
            "prompt": "工业机器人可靠性测试标准",
            "completion": "关键测试项:MTBF(平均无故障时间)≥5万小时,重复定位精度±0.02mm,负载循环测试10万次无故障"
        },
        {
            "prompt": "构建私域流量的核心步骤",
            "completion": "四步走策略:1. 企业微信沉淀用户 2. 内容运营提升粘性 3. 社群分层管理 4. 自动化营销转化"
        },
        {
            "prompt": "FDA医疗器械审批分类标准",
            "completion": "三类管理:Ⅰ类(低风险,登记备案)Ⅱ类(中等风险,510(k)审查)Ⅲ类(高风险,PMA临床验证)"
        },
        {
            "prompt": "光伏电站的选址评估要素",
            "completion": "六大参数:年日照时长>1400小时,坡度<15°,电网接入距离<10km,土地性质合规,年均温度<25℃,无阴影遮挡"
        },
        {
            "prompt": "深度学习模型压缩技术对比",
            "completion": "方案对比:知识蒸馏(保持精度)vs 权重剪枝(提升速度)vs 量化训练(减少存储)vs 低秩分解(降低计算量)"
        },
        {
            "prompt": "跨境电商物流模式选择策略",
            "completion": "决策树:小件选邮政/专线(成本优先),高货值用商业快递(时效优先),大件货物走海外仓(综合成本最优)"
        },
        {
            "prompt": "基因编辑技术的脱靶率控制方案",
            "completion": "三重保障:1. 高保真Cas9变体 2. 双重sgRNA验证 3. 全基因组脱靶检测(GUIDE-seq/CIRCLE-seq)"
        },
        {
            "prompt": "智能家居Zigbee与Wi-Fi协议选型建议",
            "completion": "选择标准:传输距离远/低功耗设备选Zigbee,高速率/视频传输用Wi-Fi 6,跨平台兼容考虑Matter协议"
        },
        {
            "prompt": "专利申请的创造性判断标准",
            "completion": "三要素审查:1. 现有技术差异 2. 技术效果显著性 3. 本领域技术人员非显而易见性"
        },
        {
            "prompt": "新能源汽车电池回收流程",
            "completion": "四阶段处理:检测分级→梯次利用(储能系统)→拆解再生(金属提取)→环保处置(电解液无害化)"
        },
        {
            "prompt": "医院HIS系统升级风险评估要点",
            "completion": "五类风险:数据迁移完整性、业务中断可能性、新老系统兼容性、人员操作适应性、应急回滚方案完备性"
        },
        {
            "prompt": "数字人民币的离线支付实现原理",
            "completion": "双离线技术:NFC近场通信+硬件加密芯片,通过碰一碰完成端对端加密数据交换,联网后后台结算"
        },
        {
            "prompt": "工业互联网安全靶场建设要素",
            "completion": "必备模块:虚实映射系统、攻击渗透测试环境、安全防护验证平台、红蓝对抗演练场景库、人才培养课程体系"
        },
        {
            "prompt": "绿色建筑LEED认证评分标准",
            "completion": "七大维度:可持续场地(15%)、用水效率(10%)、能源气候(35%)、材料资源(13%)、室内质量(16%)、创新设计(6%)、地域优先(5%)"
        },
        {
            "prompt": "微波光子雷达的技术突破点",
            "completion": "前沿方向:光生微波超高频率、光子波束成形精度、光电转换效率提升、抗干扰信号处理算法"
        },
        {
            "prompt": "知识图谱构建的五个阶段",
            "completion": "实施流程:1. 知识抽取 2. 数据清洗 3. 实体链接 4. 关系建模 5. 推理验证"
        },
        {
            "prompt": "智能客服的语义理解优化方案",
            "completion": "四维提升:领域词典扩充、意图识别模型微调、上下文记忆增强、多轮对话状态跟踪"
        },
        {
            "prompt": "5G网络切片的应用场景划分",
            "completion": "三大场景类型:eMBB(增强移动宽带)、uRLLC(超可靠低延迟)、mMTC(大规模物联网)"
        },
        {
            "prompt": "实验室危险化学品管理规范",
            "completion": "五项制度:双人双锁存储、使用登记追溯、MSDS随取随查、防护装备配备、应急预案演练"
        },
        {
            "prompt": "影响光伏板发电效率的环境因素",
            "completion": "关键参数:光照强度(>800W/m²)、环境温度(每升1℃效率降0.4%)、积尘程度(每月清洗至少1次)、组件朝向(正南倾角±10°)"
        },
        {
            "prompt": "RPA流程自动化实施方法论",
            "completion": "六步路线图:流程识别→可行性评估→工具选型→开发部署→效果监控→持续优化"
        },
        {
            "prompt": "食品添加剂使用的合法性标准",
            "completion": "合规四要素:在GB 2760规定范围内、用量不超过最大限量、工艺必要性证明、标签完整标注"
        },
        {
            "prompt": "智慧港口自动化升级关键技术",
            "completion": "核心技术栈:5G通信网络、场桥远程操控、AGV路径规划、数字孪生仿真、智能闸口OCR识别"
        },
        {
            "prompt": "脑卒中康复训练的阶段规划",
            "completion": "三阶段方案:急性期(被动运动防萎缩)→恢复期(主动训练重建功能)→后遗症期(辅助器具适应性训练)"
        },
        {
            "prompt": "影响FPGA芯片选型的核心参数",
            "completion": "关键指标:逻辑单元数量(LE)、存储带宽(Mbps)、DSP模块密度、收发器速率、功耗比(GFLOPS/W)"
        }
]
相关推荐
酒酿小圆子~10 小时前
【大模型】基于llama.cpp实现大模型格式转换、量化、推理
llama
怪我冷i20 小时前
2025年生成式人工智能应用工程师学习线路
大模型·llama
奔波儿灞爱霸波尔奔1 天前
浅谈人工智能之Windows安装llama factory
llama
AllYoung_3621 天前
Dify在Ubuntu20.04系统的部署
人工智能·深度学习·langchain·aigc·llama·agi·deep learning
背太阳的牧羊人2 天前
构造一个工具(TravelSQLAgentTool),利用大语言模型(例如 Llama 模型)来完成 SQL 查询代理工具
人工智能·sql·语言模型·langchain·agent·llama·langchain工具
云空3 天前
《Llama 3.2-Vision:开启多模态AI新时代》:此文为AI自动生成
人工智能·llama
AllYoung_3623 天前
WebUI 部署 Ollama 可视化对话界面
人工智能·深度学习·算法·语言模型·aigc·llama
kakaZhui4 天前
【多模态大模型】GLM-4-Voice端到端语音交互机器人VoiceAI
人工智能·chatgpt·机器人·aigc·llama
智模睿脑君5 天前
Ollama部署本地大模型DeepSeek-R1-Distill-Llama-70B
人工智能·深度学习·语言模型·自然语言处理·chatgpt·transformer·llama