华为昇腾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

前端环境配置(nvm、nodejs、npm)

前端环境配置(nvm、nodejs、npm)

一、安装nvm 1. 下载vnm url: https://nvm.uihtm.com/doc/download-nvm.html 2. 解压文件后双击exe文件进行安装 3. 选择nvm的安装地址,我是安装在D:\App\nvm 4. 选择nodejs的安装地址,我是安装在C:\Program Files\nodejs 5. 点击next 一直点击 完成安装; 6. 找到nvm的settings.txt文件打开后: 给该文件添加这两行命令: node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/ 二、环境变量配置 1.

【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览

【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览

本文为DeepSeek R1 7B 以qwen为底座的LLM在瑞芯微RK3588 SoC上的完整部署流程,记录从开发板驱动适配烧录开始,到最终的开发板终端访问模型和局域网web访问模型的完整流程,有不足之处希望大家共同讨论。 文章目录 * 一、项目背景介绍 * 二、所需工具介绍 * 1.硬件工具 * 1.X86 PC虚拟机Ubuntu20.04 * 2. 准备NPU驱动为0.9.8的RK3588开发板 * 2.软件工具 * 三、获取.safetensors模型权重 * 四、safetensors转RKLLM * 1.转换环境搭建 * 2.模型转换 * 五、RKLLM模型板端部署及推理 * 六、集成开源gradio工具实现web访问 一、项目背景介绍 先来介绍下项目背景吧,目前有一个空闲的firefly出厂的搭载瑞芯微RK3588 SoC的arm64开发板,样式如图所示: 博主之前主要进行CV领域的模型的RK开发板部署,对于LLM和VLM的接触并不算多,但现在大模型是趋势所向,并且瑞芯微及时的完成了针对各开源

想做多语言项目?试试Hunyuan-MT-7B-WEBUI快速部署方案

想做多语言项目?试试Hunyuan-MT-7B-WEBUI快速部署方案 你有没有遇到过这样的情况:手头有个跨境项目,要同时处理日语产品说明、西班牙语用户反馈、维吾尔语政策文件,甚至还有藏文古籍数字化需求——可翻来翻去,不是翻译质量差强人意,就是部署起来像在解一道高数题?在线工具不敢传敏感数据,本地跑模型又卡在CUDA版本、依赖冲突、显存爆炸上……最后只能靠人工硬啃,进度一拖再拖。 Hunyuan-MT-7B-WEBUI 就是为这种真实困境而生的。它不讲大道理,不堆参数,不做“实验室里的冠军”,而是把腾讯混元团队打磨出的最强开源翻译模型,连同网页界面、一键脚本、预装环境,全打包进一个镜像里。你不需要懂Transformer结构,不用查PyTorch兼容表,甚至不用打开终端敲命令——点一下,等两分钟,就能在浏览器里开始翻译38种语言。 这不是又一个“需要调参、需要写代码、需要配环境”的AI工具。这是你今天下午就能用上的多语言工作台。 1. 为什么这款翻译镜像值得你立刻试试? 1.1 它真能覆盖你没想过的语言 很多翻译模型标榜“支持多语言”,但实际打开列表一看:英、法、

前端实现Word文档在线编辑与导出:基于mammoth.js与Blob对象的完整解决方案

如何在浏览器中直接编辑Word文档并导出?本文将深入探索一种基于mammoth.js和Blob对象的完整技术方案。 在当今的Web应用开发中,实现文档的在线编辑与导出已成为常见需求。无论是企业内部系统、教育平台还是项目管理工具,都迫切需要让用户能够在浏览器中直接编辑Word文档,而无需安装桌面软件。本文将详细介绍如何利用mammoth.js和Blob对象实现这一功能,并对比其他可行方案。 一、为什么选择mammoth.js与Blob方案? 在Web前端实现Word文档处理,主要有三种主流方案:浏览器原生Blob导出、mammoth.js专业转换和基于模板的docxtemplater方案。它们各有优劣,适用于不同场景。 mammoth.js的核心优势在于它能将.docx文档转换为语义化的HTML,而非简单复制视觉样式。这意味着它生成的HTML结构清晰、易于维护和样式定制。配合Blob对象,我们可以轻松将编辑后的内容重新导出为Word文档。 与直接使用Microsoft Office Online或Google Docs嵌入相比,mammoth.js方案不依赖外部服务,能更好地