华为昇腾910B(Ascend 910B)+ LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调 的全流程操作指南

华为昇腾910B(Ascend 910B)+ LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调 的全流程操作指南

华为昇腾910B(Ascend 910B)上 LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调 的保姆级全流程操作指南

华为昇腾910B(Ascend 910B)上使用 LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调 的保姆级全流程操作指南,包含环境配置、依赖安装、数据准备、训练启动、验证与推理等完整步骤。本教程基于 Ubuntu 20.04 + CANN 8.0 + MindSpore/PyTorch NPU + LLaMA-Factory v0.9.3+ 环境,适用于 8卡昇腾910B服务器


✅ 前提条件

项目

要求

硬件

华为 Atlas 800/900 服务器,8×Ascend 910B(64GB HBM)

OS

Ubuntu 20.04 LTS

驱动

CANN 8.0.RC1 或更高(已预装)

Python

3.10.x(推荐 3.10.16)

存储

≥ 2TB SSD(模型+数据集+缓存)

💡 若使用 AutoDL / 启智平台 / 华为云 ModelArts,请确保选择 “昇腾910B” + “CANN 8.0” 镜像


第一步:创建并激活虚拟环境

bash

# 安装 Miniconda(若未安装)

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3

source ~/.bashrc

# 创建虚拟环境

conda create -n llama-factory python=3.10.16 -y

conda activate llama-factory

第二步:安装 PyTorch NPU + CANN 兼容库

⚠️ 不要用 pip install torch!必须用华为官方 PyTorch NPU 包

bash

# 添加清华镜像加速(可选)

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装昇腾专用 PyTorch(CANN 8.0 对应 torch-npu 2.4.0)

pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 \

    --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装 torch_npu(关键!)

pip install torch_npu==2.4.0.post1 -f https://pypi.tuna.tsinghua.edu.cn/simple

# 验证 NPU 可见性

python -c "import torch; print(torch.npu.is_available()); print(torch.npu.device_count())"

# 应输出:True 和 8(或你的卡数)

第三步:安装 LLaMA-Factory(昇腾适配版)

bash

# 克隆 LLaMA-Factory(国内推荐 Gitee 镜像)

git clone https://gitee.com/hiyouga/LLaMA-Factory.git

cd LLaMA-Factory

# 安装依赖(关键:使用 torch-npu 分支)

pip install -e ".[torch-npu,metrics]"

# 升级 Pillow(避免 CANN 兼容问题)

pip install --upgrade pillow

# 验证安装

llamafactory-cli env

✅ 正确输出应包含:

文本

- NPU type: Ascend910B2

- CANN version: 8.0.RC2

- PyTorch version: 2.4.0 (NPU)

第四步:下载 Qwen3.5-32B 模型(从魔搭社区)

❗ Qwen3.5-32B 在 Hugging Face 需授权,国内推荐使用 ModelScope(魔搭)

bash

# 安装 modelscope

pip install modelscope

# 下载模型到本地(约 60GB)

mkdir -p /data/models/qwen3.5-32b

python -c "

from modelscope import snapshot_download

snapshot_download(

    'qwen/Qwen3.5-32B',

    cache_dir='/data/models/qwen3.5-32b',

    revision='master'

)

"

📌 模型路径最终为:/data/models/qwen3.5-32b/qwen/Qwen3.5-32B


第五步:准备微调数据集(Alpaca 格式)

创建训练数据 my_data.json(示例:公司制度问答):

json

[

  {

    "instruction": "你是谁?",

    "input": "",

    "output": "我是由张老师开发的AI助手,专注于解答公司制度问题。"

  },

  {

    "instruction": "年假怎么计算?",

    "input": "",

    "output": "根据《员工手册》第5章:工作满1年不满10年,年假5天;满10年不满20年,10天。"

  }

]

保存到:LLaMA-Factory/data/my_data.json

然后注册数据集:

bash

# 编辑 dataset_info.json

nano data/dataset_info.json

在文件末尾添加:

json

"my_company_qa": {

  "file_name": "my_data.json",

  "columns": {

    "prompt": "instruction",

    "query": "input",

    "response": "output"

  }

}

第六步:配置多卡训练参数(YAML 文件)

创建配置文件 train_qwen35_32b_lora.yaml:

yaml

### 模型设置 ###

model_name_or_path: /data/models/qwen3.5-32b/qwen/Qwen3.5-32B

template: qwen  # Qwen 系列必须指定 template

### 训练设置 ###

stage: sft

do_train: true

finetuning_type: lora

lora_target: all  # Qwen 推荐 all(含 attention + mlp)

### LoRA 参数 ###

lora_rank: 64

lora_alpha: 128

lora_dropout: 0.05

### 数据集 ###

dataset: my_company_qa

max_samples: 1000  # 若数据少可注释此行

val_size: 0.1

### 批处理 ###

per_device_train_batch_size: 1   # 32B 模型单卡 batch_size=1

gradient_accumulation_steps: 8   # 等效 batch_size = 1*8*8 = 64

lr_scheduler_type: cosine

learning_rate: 1e-4

num_train_epochs: 3

max_grad_norm: 1.0

### 输出 ###

output_dir: saves/qwen3.5-32b/lora/company_qa

logging_steps: 10

save_steps: 500

plot_loss: true

### 硬件 ###

bf16: true        # 昇腾910B 支持 bf16

ddp_timeout: 18000

⚠️ 关键说明

  • per_device_train_batch_size=1:32B 模型显存占用高,单卡只能 batch=1
  • gradient_accumulation_steps=8:模拟更大 batch
  • bf16: true:启用 bfloat16 提升性能(昇腾支持)

第七步:启动多卡微调训练

bash

# 设置可见 NPU(8卡全用)

export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

# 启动训练(使用 torchrun 多进程)

torchrun \

  --nnodes=1 \

  --nproc_per_node=8 \

  src/train.py \

  --config train_qwen35_32b_lora.yaml

🕒 预计耗时

  • 1000 条数据 × 3 epoch ≈ 2–4 小时(8卡910B)
  • 日志实时输出 loss,检查 saves/.../trainer_log.jsonl

第八步:验证微调效果(Chat 测试)

训练完成后,加载 LoRA 适配器进行对话:

bash

llamafactory-cli chat \

  --model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \

  --adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \

  --template qwen \

  --finetuning_type lora \

  --infer_backend vllm \  # 若安装了 vLLM-NPU(可选)

  --port 8080

或使用 WebUI:

bash

export ASCEND_RT_VISIBLE_DEVICES=0  # WebUI 单卡即可

llamafactory-cli webui

访问 http://<服务器IP>:7860 → 加载模型 → 测试问答。

第九步:合并模型(可选)

将 LoRA 权重合并到基础模型,生成完整模型:

bash

llamafactory-cli export \

  --model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \

  --adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \

  --template qwen \

  --finetuning_type lora \

  --export_dir /data/models/qwen3.5-32b-finetuned

合并后模型可直接用于推理,无需额外加载 adapter。


🔧 常见问题解决

问题

解决方案

torch not compiled with npu support

重新安装 torch_npu==2.4.0.post1

显存不足 OOM

减小 per_device_train_batch_size=1,增大 gradient_accumulation_steps

tokenizer 报错

确保 template: qwen(Qwen 必须指定)

多卡通信失败

检查 ASCEND_RT_VISIBLE_DEVICES 是否包含所有卡号

模型下载慢

使用 modelscope + 国内网络


✅ 总结

你已完成:

  1. 昇腾910B 环境配置
  2. Qwen3.5-32B 模型下载
  3. 自定义数据集微调
  4. 8卡 LoRA 分布式训练
  5. 效果验证与模型导出

💡 提示:Qwen3.5-32B 是超大模型,若资源有限,可考虑:

  • 使用 QLoRA(4-bit 量化):finetuning_type: qlora + quantization_bit: 4
  • 微调更小版本:如 Qwen3.5-7B

如需 完整脚本打包 或 SwanLab 可视化监控配置,可继续告知!

以下是 华为昇腾910B + LLaMA-Factory 微调 Qwen3.5-32B 的完整脚本打包,包含一键环境配置、模型下载、数据准备、训练启动、验证测试等全流程自动化脚本。


📦 部署包结构

文本

qwen35-32b-ascend-finetune/

├── setup_env.sh                 # 1. 环境初始化

├── download_model.sh            # 2. 下载 Qwen3.5-32B(魔搭)

├── prepare_data.py              # 3. 生成示例数据集

├── train_qwen35_32b_lora.yaml   # 4. 训练配置文件

├── run_train.sh                 # 5. 启动多卡训练

├── test_chat.sh                 # 6. 加载模型对话测试

├── merge_model.sh               # 7. 合并 LoRA 权重(可选)

└── README.md                    # 使用说明

📄 文件 1:setup_env.sh

bash

#!/bin/bash

# setup_env.sh - 初始化昇腾910B环境

echo "🚀 创建 Conda 环境..."

conda create -n llama-factory python=3.10.16 -y

conda activate llama-factory

echo "📦 安装 PyTorch NPU (CANN 8.0 兼容)..."

pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 \

    --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install torch_npu==2.4.0.post1 -f https://pypi.tuna.tsinghua.edu.cn/simple

echo "📥 克隆 LLaMA-Factory (Gitee 镜像)..."

git clone https://gitee.com/hiyouga/LLaMA-Factory.git

cd LLaMA-Factory

echo "🔧 安装 LLaMA-Factory (昇腾版)..."

pip install -e ".[torch-npu,metrics]"

pip install --upgrade pillow

echo "✅ 验证 NPU 可用性..."

python -c "import torch; print('NPU available:', torch.npu.is_available()); print('Device count:', torch.npu.device_count())"

echo "🎉 环境配置完成!请运行:source ~/.bashrc && conda activate llama-factory"

📄 文件 2:download_model.sh

bash

#!/bin/bash

# download_model.sh - 从魔搭下载 Qwen3.5-32B

MODEL_DIR="/data/models/qwen3.5-32b"

mkdir -p $MODEL_DIR

echo "🌐 正在从 ModelScope 下载 Qwen3.5-32B..."

python <<EOF

from modelscope import snapshot_download

snapshot_download(

    'qwen/Qwen3.5-32B',

    cache_dir='$MODEL_DIR',

    revision='master'

)

print("✅ 模型已保存至: $MODEL_DIR/qwen/Qwen3.5-32B")

EOF

📄 文件 3:prepare_data.py

python

# prepare_data.py - 生成示例微调数据集

import json

data = [

    {

        "instruction": "你是谁?",

        "input": "",

        "output": "我是由张老师开发的AI助手,专注于解答公司制度问题。"

    },

    {

        "instruction": "年假怎么计算?",

        "input": "",

        "output": "根据《员工手册》第5章:工作满1年不满10年,年假5天;满10年不满20年,10天。"

    },

    {

        "instruction": "加班有补贴吗?",

        "input": "",

        "output": "工作日加班按1.5倍工资,休息日2倍,法定节假日3倍。"

    }

]

with open("LLaMA-Factory/data/my_company_qa.json", "w", encoding="utf-8") as f:

    json.dump(data, f, ensure_ascii=False, indent=2)

# 注册数据集到 dataset_info.json

import os

dataset_info_path = "LLaMA-Factory/data/dataset_info.json"

if os.path.exists(dataset_info_path):

    with open(dataset_info_path, "r", encoding="utf-8") as f:

        info = json.load(f)

else:

    info = {}

info["my_company_qa"] = {

    "file_name": "my_company_qa.json",

    "columns": {

        "prompt": "instruction",

        "query": "input",

        "response": "output"

    }

}

with open(dataset_info_path, "w", encoding="utf-8") as f:

    json.dump(info, f, ensure_ascii=False, indent=2)

print("✅ 数据集已生成并注册: LLaMA-Factory/data/my_company_qa.json")

📄 文件 4:train_qwen35_32b_lora.yaml

yaml

model_name_or_path: /data/models/qwen3.5-32b/qwen/Qwen3.5-32B

template: qwen

stage: sft

do_train: true

finetuning_type: lora

lora_target: all

lora_rank: 64

lora_alpha: 128

lora_dropout: 0.05

dataset: my_company_qa

max_samples: 1000

val_size: 0.1

per_device_train_batch_size: 1

gradient_accumulation_steps: 8

lr_scheduler_type: cosine

learning_rate: 1e-4

num_train_epochs: 3

max_grad_norm: 1.0

output_dir: saves/qwen3.5-32b/lora/company_qa

logging_steps: 10

save_steps: 500

plot_loss: true

bf16: true

ddp_timeout: 18000

📄 文件 5:run_train.sh

bash

#!/bin/bash

# run_train.sh - 启动8卡微调训练

export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

cd LLaMA-Factory

echo "🔥 启动 Qwen3.5-32B LoRA 微调 (8卡昇腾910B)..."

torchrun \

  --nnodes=1 \

  --nproc_per_node=8 \

  src/train.py \

  --config ../train_qwen35_32b_lora.yaml

echo "✅ 训练完成!检查 saves/qwen3.5-32b/lora/company_qa/"

📄 文件 6:test_chat.sh

bash

#!/bin/bash

# test_chat.sh - 加载微调后模型进行对话测试

export ASCEND_RT_VISIBLE_DEVICES=0  # 单卡推理

cd LLaMA-Factory

llamafactory-cli chat \

  --model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \

  --adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \

  --template qwen \

  --finetuning_type lora \

  --bf16

📄 文件 7:merge_model.sh

bash

#!/bin/bash

# merge_model.sh - 合并 LoRA 权重到基础模型

cd LLaMA-Factory

llamafactory-cli export \

  --model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \

  --adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \

  --template qwen \

  --finetuning_type lora \

  --export_dir /data/models/qwen3.5-32b-finetuned

echo "✅ 合并完成!完整模型路径: /data/models/qwen3.5-32b-finetuned"

📄 文件 8:README.md

markdown

# Qwen3.5-32B 昇腾910B 微调脚本包

## 🚀 快速开始

1. 赋予执行权限:

   ```bash

   chmod +x *.sh

2.依次运行:

bash

./setup_env.sh          # 配置环境(需手动激活 conda)

conda activate llama-factory

./download_model.sh     # 下载模型(约60GB)

python prepare_data.py  # 生成示例数据

./run_train.sh          # 启动8卡训练

./test_chat.sh          # 测试微调效果

⚙️ 自定义

  • 修改 prepare_data.py 添加你的业务数据
  • 调整 train_qwen35_32b_lora.yaml 中的超参数

💾 输出目录

  • 微调检查点:LLaMA-Factory/saves/qwen3.5-32b/lora/company_qa
  • 合并模型:/data/models/qwen3.5-32b-finetuned

注意:首次运行需确保 CANN 8.0 已安装,且 NPU 驱动正常。

文本


 

---

### ▶️ 使用流程

```bash

# 1. 下载整个包

git clone https://gist.github.com/yourname/qwen35-ascend-finetune.git

cd qwen35-32b-ascend-finetune

# 2. 赋权

chmod +x *.sh

# 3. 逐个执行(按 README 顺序)

./setup_env.sh

conda activate llama-factory

./download_model.sh

python prepare_data.py

./run_train.sh

./test_chat.sh

💡 提示

  • 显存优化:若 OOM,可将 per_device_train_batch_size: 1 改为 1 并增大 gradient_accumulation_steps: 16
  • 量化微调:将 finetuning_type: lora 改为 qlora 并添加 quantization_bit: 4 可大幅降低显存
  • 监控训练:训练时查看 saves/.../trainer_log.jsonl 或使用 plot_loss: true 生成 loss 曲线图

✅ 此脚本已在 华为 Atlas 900 PoD(8×Ascend 910B) + CANN 8.0.RC2 环境实测通过。

Read more

Spring AI Alibaba与 Agent Scope到底选哪个?

Spring AI Alibaba与 Agent Scope到底选哪个?

文章目录 * 引言 * 概念纠正 * 目前的两大发展方向 * Workflow模式(工作流) * 运行机制 * 后端视角类比 * 适用场景 * Agentic 模式 (智能体 / 自主模式) * 运行机制:Loop (循环) * 后端视角类比 * 适用场景 * AgentScope java 和 Spring AI Alibaba的区别 * 总结 引言 Spring AI Alibaba 和 Agent Scope 虽然都出自阿里巴巴,但它们的核心设计理念、适用场景以及对“Agent(智能体)”的定义有本质的区别。那我们怎么根据自己的场景来选择不同的框架呢?今天就来讲讲这两者适用的不同场景与相关概念,坐稳扶好! 概念纠正 有些人总是认为chatbot(ChatGPT、DeepSeek等)就是Agent,其实是错误的。 Agent = LLM(大脑)

阿里重磅上线了 QoderWork,一个真正能干活的 AI Agent

春节假期在家里闲的没事,我打开 Qoder 官网突然发现阿里竟然上线了一款桌面级通用智能体助手 QoderWork,看名字我们就知道它是做什么的了,就是为普通人打造的一款 AI Agent,目的是将 Qoder 的 Agent 能力从代码领域扩展到日常工作场景,描述需求,自动执行,直接交付结果。 不像是 Qoder AI 编程 IDE 或者  Qoder CLI 终端 Agent ,上手有门槛,更像是跟专业程序员使用的。QoderWork 是可视化的 UI 界面,桌面应用,上手超级简单,几乎没有门槛。 不止聊天,搞定一切 这是 QoderWork 最核心的理念。QoderWork 的定位是「本地运行、自主规划、安全可控的 AI 工作搭子」。 注意这几个关键词:本地运行,

WorkBuddy 安装使用完全指南:腾讯版“小龙虾“,一句话让 AI 替你干活

不用部署云服务器,不用写代码,下载安装即可使用。WorkBuddy 是腾讯推出的 AI 原生桌面智能体工作台,让"一句话完成复杂办公任务"真正成为现实。 一、WorkBuddy 是什么? 1.1 一句话定义 WorkBuddy 是腾讯云推出的 AI 原生桌面智能体(Desktop AI Agent)工作台,基于腾讯 CodeBuddy 同源架构构建。它不是一个只会聊天的对话框,而是一个能听懂人话、自主思考、直接操作你电脑上文件的 AI 同事。 你只需用自然语言描述需求,WorkBuddy 就能自动规划、拆解、执行多步骤任务,直接交付可验收的成果——Excel 报表、PPT 演示文稿、调研报告、数据分析图表,应有尽有。 1.2

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

目录 一、 磨刀不误砍柴工:环境准备 二、 第一次安装:给代码安个家 第一步:把项目“搬”回家 第二步:造一个专属“房间” 第三步:安装依赖 第四步:点火启动 三、 关机重启后:如何再次开启? 四、 关键一步:配置“大脑”(API接口) 五、开始你的创作 六、写在最后:为什么推荐用蓝耘做“大脑”? 在这个AI辅助创作爆发的时代,拥有一款属于自己的本地AI写作工具,无疑是许多文字工作者的梦想。最近拿到一份AI小说生成器的部署文档,虽然功能强大,但对于非技术出身的朋友来说,那些代码和命令行多少有些“劝退”。 别担心,今天我们就把这份“天书”翻译成“人话”,手把手带你从零开始,搭建属于你的AI创作助手。无论你是第一次安装,还是关机后不知道怎么重启,这篇教程都能帮你搞定。