在魔乐社区使用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

做了一个 AI 鸿蒙 App,我发现逻辑变了

做了一个 AI 鸿蒙 App,我发现逻辑变了

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

【Claude Code解惑】深度评测:Claude Code vs. GitHub Copilot CLI,谁才是终端之王?

【Claude Code解惑】深度评测:Claude Code vs. GitHub Copilot CLI,谁才是终端之王?

深度评测:Claude Code vs. GitHub Copilot CLI,谁才是终端之王? 目录 1. 引言与背景 2. 原理解释(深入浅出) 3. 10分钟快速上手(可复现) 4. 代码实现与工程要点 5. 应用场景与案例 6. 实验设计与结果分析 7. 性能分析与技术对比 8. 消融研究与可解释性 9. 可靠性、安全与合规 10. 工程化与生产部署 11. 常见问题与解决方案(FAQ) 12. 创新性与差异性 13. 局限性与开放挑战 14. 未来工作与路线图 15. 扩展阅读与资源 16. 图示与交互 17. 术语表与速查表 18. 互动与社区 0.

小白也能玩转AI写作:Qwen3-4B-Instruct保姆级教程

小白也能玩转AI写作:Qwen3-4B-Instruct保姆级教程 1. 项目背景与核心价值 在人工智能快速发展的今天,大语言模型已经从科研实验室走向大众应用。对于非技术背景的用户而言,如何低门槛地使用高性能AI模型进行内容创作成为了一个关键问题。本文将围绕 Qwen3-4B-Instruct 模型展开,详细介绍其能力特点、部署方式和实际应用场景。 该模型是阿里云通义千问系列中的一款高性能指令微调版本,参数量达40亿(4B),相较于小型模型(如0.5B)在逻辑推理、长文本生成和代码理解方面有显著提升。更重要的是,它支持在纯CPU环境下运行,极大降低了使用门槛,使得普通笔记本电脑也能成为“AI写作工作站”。 1.1 为什么选择 Qwen3-4B-Instruct? 以下是这款模型特别适合初学者和内容创作者的核心优势: * 高智商表现:具备较强的上下文理解和多轮对话能力,能完成小说撰写、公文写作、邮件润色等复杂任务。 * 无需GPU:通过 low_cpu_mem_usage 技术优化,可在内存充足的CPU设备上稳定加载,避免昂贵硬件投入。 * 集成WebUI:提供图形化

Pixel Fashion Atelier部署教程:Stable Diffusion像素时装一键锻造实战

Pixel Fashion Atelier部署教程:Stable Diffusion像素时装一键锻造实战 1. 项目介绍 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5模型的像素风格时装生成工具。它将AI图像生成与复古日系RPG界面设计完美结合,为用户带来独特的创作体验。 核心特点: * 专为像素艺术优化的生成模型 * 直观的RPG风格操作界面 * 预设皮革时装风格LoRA模型 * 一键式生成流程 2. 环境准备 2.1 硬件要求 * 显卡:NVIDIA GPU,显存≥8GB(推荐RTX 3060及以上) * 内存:16GB及以上 * 存储空间:至少20GB可用空间 2.2 软件依赖 * 操作系统:Windows 10/11或Linux(Ubuntu 20.04+) * Python:3.8-3.10版本 * CUDA:11.