在魔乐社区使用llama-factory微调Qwen3.5-4B模型

在魔乐社区使用llama-factory微调Qwen3.5-4B模型

微调前期准备

下载qwen3.5-4B模型

# 首先保证已安装git-lfs(https://git-lfs.com)git lfs installgit clone https://modelers.cn/Qwen-AI/Qwen3.5-4B.git 

下载Llama-factory

git clone --depth1 https://gh.llkk.cc/https://github.com/hiyouga/LlamaFactory.git 
在这里插入图片描述

微调环境搭建

我们依然是搭建一个miniconda

#清除当前shell会话中的PYTHONPATH环境变量unset PYTHONPATH # 安装minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh bash Miniconda3-latest-Linux-aarch64.sh conda config --set auto_activate_base falsebash#加载conda配置source ~/.bashrc # 接受main通道的条款 conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main # 接受r通道的条款  conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r # 创建python3.11环境 conda create --name LlamaFactory python=3.11-y conda activate LlamaFactory 

安装LlamaFactory环境依赖

cd LlamaFactory pip install-e.# 可以安装 flash-linear-attention 获得训练推理加速效果 pip uninstall fla-core flash-linear-attention -y&& pip install-U git+https://github.com/fla-org/flash-linear-attention #因为我们使用的昇腾的npu的算力,所以我们还需要额外装一个torch-npu和decorator pip install torch-npu ==2.10.0rc2 pip install decorator 

可以使用下面的命令验证是否安装成功:

llamafactory-cli version 
在这里插入图片描述

显示llamafactory的版本,则表示安装成功

完成环境的搭建之后我们还需要将昇腾的环境启动命令跑一遍,使用以下的命令

source /usr/local/Ascend/ascend-toolkit/set_env.sh source /usr/local/Ascend/nnal/asdsip/set_env.sh source /usr/local/Ascend/nnal/atb/set_env.sh 

下载数据集

根据llamafactory的要求我们需要把数据集放到LlamaFactory/data

cd LlamaFactory/data 

我们先下载数据集,数据集的制作的过程比较繁琐,这里我们使用准备好的数据集,大家也可以使用自己制作的数据集(这里我是拿的官方给的测试数据集):

#下载数据集git clone https://modelers.cn/chicheng/mllm_robot.git # 移动数据集到LlamaFactory/data文件夹cd mllm_robot mv mllm_robot.zip /home/openmind/LlamaFactory/data #然后我们到LlamaFactory/data目录来解压数据集cd LlamaFactory/data # 解压 python3 -c"import zipfile; zipfile.ZipFile('mllm_robot.zip').extractall()"
在这里插入图片描述

修改 dataset_info.json 文件,将我们刚刚下载的数据集添加进去

"mllm_robot":{"file_name":"mllm_robot.json", "formatting":"sharegpt", "columns":{"messages":"messages", "images":"images"}, "tags":{"role_tag":"role", "content_tag":"content", "user_tag":"user", "assistant_tag":"assistant"}}, "mllm_robot_en":{"file_name":"mllm_robot_en.json", "formatting":"sharegpt", "columns":{"messages":"messages", "images":"images"}, "tags":{"role_tag":"role", "content_tag":"content", "user_tag":"user", "assistant_tag":"assistant"}}, 
在这里插入图片描述

模型微调

训练脚本准备

因为魔乐社区的体验空间是终端的形式,我们现在暂时无法使用LlamaFactory的Web_UI,使用我们需要写一个训练的yaml文件

# 模型参数model_name_or_path: /home/openmind/Qwen3.5-4B # 或您的本地模型路径template: qwen3_5 # 模型模板trust_remote_code:true# 对于Qwen模型通常需要# 训练参数stage: sft # 监督微调do_train:truefinetuning_type: lora # 使用LoRAlora_target: q_proj,k_proj,v_proj,o_proj # LoRA作用模块 (可按需调整)dataset: mllm_robot,mllm_robot_en # 使用两个数据集 (用逗号分隔)learning_rate:1.0e-4num_train_epochs:5.0per_device_train_batch_size:1# 根据显存调整 (使用多卡可以自行调整这里)gradient_accumulation_steps:16# 确保总batch_size合适bf16:true# 昇腾910B支持bf16,可开启以节省显存# 输出参数output_dir: /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B # 与教程对应的输出目录logging_steps:10save_steps:500overwrite_output_dir:true# 硬件与分布式相关 fp16:false# 已启用bf16,关闭fp16避免冲突ddp_timeout:180000# 分布式超时设置

命令解释的内容:

# ==================== 模型参数 ==================== model_name_or_path: /home/openmind/Qwen3.5-4B # 模型路径:可以是本地路径(如本例),也可以是 Hugging Face 模型 ID(例如 "Qwen/Qwen2.5-7B")# 如果从 Hugging Face 下载,确保网络通畅且有权访问。 template: qwen3_5 # 对话模板:根据模型系列选择,常见值:# - qwen3_5: 通义千问 Qwen3.5 系列# - qwen: 通用 Qwen 系列(包括 Qwen1.5/2/2.5)# - llama3: Llama-3 系列# - default: 基础模板(若不确定可先用此)# 模板影响输入格式(如角色标签、系统消息等),选错可能导致训练异常。 trust_remote_code: true# 是否信任远程代码:对于 Qwen、ChatGLM 等使用自定义模型结构的模型,必须设为 true。# ==================== 训练参数 ==================== stage: sft # 训练阶段:sft 表示监督微调(Supervised Fine-Tuning)# 其他可选值:# - pt: 预训练(Pretraining)# - rm: 奖励建模(Reward Modeling)# - dpo/kto/orpo: 偏好优化# - ppo: 强化学习微调(需额外配置) do_train: true# 是否执行训练:设为 true 时进行训练;false 时仅评估或推理。 finetuning_type: lora # 微调方法:# - lora: 低秩适配(参数高效,显存友好)# - full: 全参数微调(需更多显存)# - freeze: 冻结部分层,仅训练最后几层# - oft: 正交微调(另一种参数高效方法) lora_target: q_proj,k_proj,v_proj,o_proj # LoRA 作用的目标模块(以逗号分隔)。# 不同模型模块名不同,常用选项:# - q_proj, k_proj, v_proj, o_proj: 注意力层的线性层(适用于 Qwen/Llama)# - gate_proj, up_proj, down_proj: MLP 层(若需增加参数量)# - all: 所有线性层(参数量大,需注意显存)# 可根据需要增删模块,例如仅微调注意力层:q_proj,v_proj dataset: mllm_robot,mllm_robot_en # 训练数据集名称(多个用逗号分隔)。# 这些名称必须在 data/dataset_info.json 中预先定义。# 定义示例(在 dataset_info.json 中):# "mllm_robot": {# "file_name": "mllm_robot.json",# "formatting": "sharegpt",# "columns": {"messages": "messages", "images": "images"},# "tags": {"role_tag": "role", "content_tag": "content", "user_tag": "user", "assistant_tag": "assistant"}# }# 数据集文件需放在 data/ 目录下,格式参考官方文档。 learning_rate: 1.0e-4 # 初始学习率。LoRA 通常用 1e-4 左右,全量微调用 1e-5。# 可根据收敛情况调整,过大可能导致不收敛,过小则训练缓慢。 num_train_epochs: 5.0# 训练轮数(epoch)。一轮表示完整遍历一次训练集。# 根据数据集大小和任务复杂度调整,过小可能欠拟合,过大可能过拟合。 per_device_train_batch_size: 1# 每张 NPU/GPU 卡的 batch size。# 根据显存大小调整:显存充足可增大(如 2,4),显存不足则保持 1。# 多卡时,总 batch size = per_device_batch_size × 卡数 × gradient_accumulation_steps。 gradient_accumulation_steps: 16# 梯度累积步数。用于模拟更大的 batch size,不增加显存占用。# 总 batch size = per_device_batch_size × 卡数 × gradient_accumulation_steps。# 例如:单卡 batch=1,累积 16 步 → 实际 batch size = 16;# 双卡 batch=1,累积 16 步 → 实际 batch size = 32。# 根据训练稳定性和收敛速度调整,通常保持总 batch size 在 16~64 之间。 bf16: true# 使用 bfloat16 混合精度训练(节省显存,加速)。# 昇腾 910B 支持 bf16,可开启。若硬件不支持,需改为 false 并使用 fp16 或 fp32。# ==================== 输出参数 ==================== output_dir: /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B # 训练输出目录,用于保存:# - 模型检查点(checkpoint-xxx)# - 训练日志(trainer_log.jsonl)# - 最终 LoRA 权重(adapter_model.safetensors)# 确保路径可写,且无重要文件(若 overwrite_output_dir 设为 true 则会清空)。 logging_steps: 10# 每隔多少步打印一次训练日志(显示 loss、学习率等)。方便监控训练状态。 save_steps: 500# 每隔多少步保存一次检查点。保存的文件可用于恢复训练或后续推理。# 若设为 0 则禁用保存。 overwrite_output_dir: true# 若输出目录已存在,是否覆盖。设为 true 可自动清空旧文件,避免手动删除。# 若为 false 且目录存在,程序会报错退出。# ==================== 硬件与分布式相关 ==================== fp16: false# 是否使用 float16 混合精度。此处已启用 bf16,故设为 false,避免冲突。# 若硬件不支持 bf16,可改用 fp16,并确保同时关闭 bf16。 ddp_timeout: 180000# 分布式训练时进程间通信的超时时间(秒)。用于防止通信卡死。# 180000 秒约 50 小时,足够长时间训练。若网络不稳定可适当增大。# 仅在多卡训练时生效,单卡可忽略。

使用单卡训练命令:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train train_qwen_robot.yaml 
在这里插入图片描述

多卡训练命令:

我们新建一个终端,在终端上运行:

npu-smi info 
在这里插入图片描述

可以看到 NPU 卡的设备编号分别是1,4

WANDB_MODE=disabled FORCE_TORCHRUN=1CUDA_VISIBLE_DEVICES=1,4 llamafactory-cli train ./train_qwen_robot.yaml 

对比训练前后的模型

拉起加载原始模型权重:

CUDA_VISIBLE_DEVICES=1 llamafactory-cli api \--model_name_or_path /home/openmind/Qwen3.5-4B \--template qwen3_5 \--finetuning_type lora 

使用下面的命令去提问,查看输出内容:

curl-X POST http://localhost:8000/v1/chat/completions -H"Content-Type: application/json"-d'{ "model": "Qwen3.5-4B", "messages": [ { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "data:image/png;base64,'$(base64 -w0 /home/openmind/LlamaFactory/data/images/robotera_1.png)'" } }, { "type": "text", "text": "请识别并描述图片中的机器人及其特征" } ] } ], "max_tokens": 512, "temperature": 0.1 }'

输出内容

在这里插入图片描述

拉起加载lora权重的模型

CUDA_VISIBLE_DEVICES=1 llamafactory-cli api \--model_name_or_path /home/openmind/Qwen3.5-4B \--adapter_name_or_path /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B \--template qwen3_5 \--finetuning_type lora 

依然是使用上面curl命令的内容去提问,查看输出

在这里插入图片描述

LLaMA-Factory YAML 参数大全:
https://modelers.cn/blogs/chicheng/208/issues?blogId=208

启动 Web UI命令:

llamafactory-cli webui 

点击返回的 URL 地址,就可以进入 Web UI 页面。

可能出现的问题

如果使用llama-factory命令的时候出现找不到命令的时候,可以在终端运行下面的命令:

# 若执行llama-factory的相关提示找不到命令,需设置一下变量,将包路径添加至环境变量中exportPATH="/home/openmind/.local/bin:$PATH"exportPATH="/usr/local/bin:$PATH"

Read more

5分钟搭建原型:Docker+Nginx快速验证你的Web创意

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 输入框内输入如下内容: 设计一个快速原型开发模板,使用Docker+Nginx实现:1.多页面应用支持 2.API模拟端点 3.开发/生产环境切换 4.热重载支持 5.假数据生成 6.响应式布局检查 7.基础SEO设置 8.社交媒体分享预览。要求所有配置可以一键启动,并提供简单修改指南让非技术人员也能调整内容。 1. 点击'项目生成'按钮,等待项目生成完整后预览效果 今天想和大家分享一个超级实用的开发技巧——如何用Docker和Nginx在5分钟内搭建一个完整的Web原型。这个方法特别适合产品经理、创业者或者想快速验证创意的开发者,让你不用操心复杂的基础设施就能展示想法。 1. 为什么选择Docker+Nginx组合 Docker的容器化技术让我们可以一键部署完整的运行环境,

LobeHub深度解析:从碎片化AI到人机协作的范式革命

在AI工具爆炸式增长的今天,我们的工作流却陷入了新的碎片化困境。LobeHub试图通过多智能体协作、MCP协议和个人记忆系统,构建一个让人类与智能体共同进化的工作空间。本文将从技术架构、实际应用、成本效益三个维度,为您全面解析这个GitHub星标71,800+的明星项目。 目录 * 痛点诊断:我们为什么需要一个"协作空间"? * 技术架构:LobeHub的底层创新 * 四层架构设计 * 核心技术突破 * 实际应用:LobeHub能为你做什么? * 场景一:软件开发团队的效率革命 * 场景二:内容创作者的AI团队 * 场景三:研究人员的智能助手 * 场景四:企业组织的AI转型 * 成本效益分析:为什么要选择LobeHub? * 与单一AI工具的对比 * 与竞品平台的差异 * ROI计算:投入产出比分析 * 快速上手:5分钟部署你的AI团队 * 未来展望:人机协作的新范式 * 常见问题解答 痛点诊断:我们为什么需要一个"协作空间"? 碎片化困境 想象一下你的日常工作场景: * 早上,

不止于工具!PromptPilot 重构 AI 创作逻辑:企业级支撑 + 创意角色扮演,实操案例带你上手

不止于工具!PromptPilot 重构 AI 创作逻辑:企业级支撑 + 创意角色扮演,实操案例带你上手

不止于工具!PromptPilot 重构 AI 创作逻辑:企业级支撑 + 创意角色扮演,实操案例带你上手 前言 AI 技术飞速迭代的当下,创作者们始终在寻找更高效、更具创意的创作工具,9月13日,火山引擎举办的 PromptPilot 发布会,为行业带来了一场关于AI创作工具的深度探索,不仅展示了PromptPilot的核心能力与创新理念,更通过实操案例、企业级应用方案等内容,让创作者们看到了AI赋能创作的全新可能 PromptPilot:不止于工具,更是创作理念的革新 PromptPilot 并非传统意义上的辅助工具,其核心理念在于通过精准的 Prompt 交互,让AI真正理解创作者的需求,成为 “懂创意、能落地” 的创作伙伴,从发布会披露的信息来看,这款产品打破了以往AI工具 “机械执行” 的局限,更注重与创作者的思维协同,无论是个人创作者的灵感落地,还是企业级项目的规模化推进,都能提供适配的解决方案 三大核心视角,解码PromptPilot的核心能力 1. 产品底层:以“精准交互”重构AI创作逻辑

AI 也能操控浏览器了?OpenClaw Browser Relay 接入指南

AI 也能操控浏览器了?OpenClaw Browser Relay 接入指南

目录 * 为什么需要 Browser Relay? * 浏览器模式 * 扩展中继模式(Extension Relay) * 踩坑记录 * 实战案例:AI 帮你干活 * 案例一:自动查资料 + 总结 为什么需要 Browser Relay? 兄弟姐妹们,有没有这些痛点: 😭 想自动化操作浏览器,但工具配置复杂、代码一大串还容易报错 😭 页面稍微变一下,脚本就失效,维护到头秃 😭 遇到登录态、Cookie、JavaScript 渲染的页面,直接歇菜 好消息来了! 🎉 OpenClaw Browser Relay 直接用 AI 控制浏览器!不用记 API、不用写复杂脚本,只要会说话(打字)就行!从此以后: 从此以后: ✅ “帮我去某某网站查个数据” —— AI 自动打开浏览器、登录、