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

旧电脑 Win7 复活计划:编译与运行 llama.cpp (Qwen3版)

旧电脑 Win7 复活计划:编译与运行 llama.cpp (Qwen3版)

🦕 旧电脑 Win7 复活计划:编译与运行 llama.cpp (Qwen3版) 这份指南专为不支持新版软件的 Windows 7 设计,通过本地编译实现大模型运行。 手动编译可以获得最好的性能,不想自己手动编译 可以直接使用下面编译好的bin文件,同时包含下面用到的相关软件和替换文件httplib.h 链接:https://pan.quark.cn/s/2c5f627c93d7 提取码:cSJh 📋 0. 软件版本清单 请务必确保使用以下特定版本,以保证在 Win7 下的兼容性: 软件名称文件名 (根据截图)作用备注编译环境w64devkit-x64-2.5.0.7z.exe提供 GCC 编译器核心工具构建工具cmake-3.31.10-windows-x86_64.msi生成编译配置必须安装到默认路径源码工具Git_for_Windows_(64bit)_v2.45.

AI绘画+电商:用图片和视频驱动未来电商

过去三年里,AI绘画从实验室走向大众,从简单模仿到艺术创作。如今,这项技术正悄然改变着一个万亿美元级的行业——电子商务。当AI绘画遇上电商,一场深刻的视觉革命正在拉开帷幕。 视觉冲击力:电商转化的第一道门槛 在电商平台上,消费者无法触摸实物,视觉呈现成为购买决策的关键因素。研究表明: * 高质量产品图能将转化率提升30-50% * 视频展示的商品比仅用图片的商品多获得157%的点击率 * 87%的线上消费者认为产品图片是购物决策的重要因素 然而,高质量视觉内容的制作传统上面临三大挑战:成本高、周期长、创意匮乏。专业摄影、模特拍摄、后期修图,每个环节都需要大量时间和资金投入,对小企业和新兴品牌尤为不友好。 AI绘画技术:视觉内容的民主化革命 AI绘画技术的突破性进展正在改变这一局面。以Midjourney、Stable Diffusion、DALL-E 3为代表的一批AI绘画工具,让高质量视觉内容的创作变得前所未有地简单和高效。 四大核心应用场景: 1. 产品视觉优化与扩展 * 一键生成专业级产品展示图 * 自动扩展产品使用场景(如咖啡机在不同厨房环境中的

用 C# 扩展 Dynamics 365 Copilot:自定义插件与场景

Dynamics 365 Copilot 作为基于 AI 的智能助手,为企业用户提供了自动化流程、智能分析和自然语言交互的能力,但通用功能往往无法满足特定行业或企业的定制化需求。本文将详细介绍如何通过 C# 编写自定义插件,扩展 Dynamics 365 Copilot 的能力,并结合实际业务场景实现定制化 AI 交互。 一、核心基础:Dynamics 365 Copilot 扩展架构 Dynamics 365 Copilot 的扩展主要依赖于 Power Platform 插件框架 和 Copilot Studio 的自定义连接器,核心技术栈包括: * C# (.NET Framework 4.8 或 .NET 6+):编写业务逻辑插件 * Dynamics 365 SDK:

智能创作与优化新时代:【ChatGPT-4o】在【数学建模】、【AI绘画】、【海报设计】与【论文优化】中的创新应用

智能创作与优化新时代:【ChatGPT-4o】在【数学建模】、【AI绘画】、【海报设计】与【论文优化】中的创新应用

目录 1. 引言 什么是ChatGPT4o? 背景与发展历史 2.chatgpt4o数学建模 常见的数学建模专业术语及其简要说明 一个具体的代码例子 问题描述 代码实现  代码说明 运行结果 3.chatgpt4o在论文 1.例如生成基于标签的推荐系统模型及算法研究  1. 摘要 2. 引言 3. 文献综述 4. 模型与算法 5. 实验与分析 6. 结论与展望 7. 参考文献 案例背景 2.具体应用场景 1. 摘要优化 原稿: ChatGPT优化后的版本: 优化点: 2. 引言部分的结构优化 原稿: ChatGPT优化后的版本: 优化点: 3. 方法部分的细化与完善 原稿: ChatGPT优化后的版本: 4. 结论的增强