openMind+LLaMAFactory:Qwen1.5-7B 微调及推理昇腾实践

一 概述

Qwen系列模型是由阿里巴巴开发的开源大语言模型,其被广泛用于自然语言处理的多种任务,包括文本生成、翻译、摘要生成等。本文的目标是使用 openMind 工具套件及 LLaMA-Factory 开源微调框架,在昇腾 NPU 上跑通 Qwen1.5-7B 模型的微调和推理全流程。

二 环境准备

1 安装 Ascend CANN Toolkit 和 Kernels

请参考​​安装教程​​或使用以下命令快速安装。

# 请替换URL为CANN版本和设备型号对应的URL
# 安装CANN Toolkit
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run
bash Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run --install

# 安装CANN Kernels
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run
bash Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run --install

# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
2 安装 openMind Library 和 openMind Hub Client
  • 安装openMind Hub Client
pip install openmind_hub
  • 安装openMind Library,并安装PyTorch框架及其依赖。
pip install openmind[pt]

更详细的安装信息请参考openMind官方的​​环境安装​​章节。

3 安装 LLaMA-Factory

使用以下指令快速安装:

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch-npu,metrics]"

三 模型及配置文件准备

1 模型下载

参考魔乐社区​​官方指引​​,或使用以下脚本从魔乐社区下载 Qwen1.5-7B 模型:

from openmind_hub import snapshot_download
model_path = snapshot_download("PyTorch-NPU/qwen1.5_7b", revision="main", resume_download=True)
2 配置文件准备

本文所用配置文件​​qwen1_5_lora_sft_ds.yaml​​内容如下:

### model
### 编辑此变量为存储该模型的路径
model_name_or_path: <your/path/to/PyTorch-NPU/qwen1.5_7b>

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: q_proj,v_proj

### ddp
ddp_timeout: 180000000
deepspeed: examples/deepspeed/ds_z0_config.json

### dataset
dataset: identity,alpaca_en_demo
template: qwen
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/Qwen1.5-7B/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 2
learning_rate: 0.0001
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true

### eval
val_size: 0.1
per_device_eval_batch_size: 1
evaluation_strategy: steps
eval_steps: 500

四 原始模型直接推理

验证 LLaMA-Factory 在昇腾 NPU 上推理功能是否正常:

ASCEND_RT_VISIBLE_DEVICES=0 llamafactory-cli webchat --model_name_or_path <your/path/to/PyTorch-NPU/qwen1.5_7b> \
                --adapter_name_or_path saves/Qwen1.5-7B/lora/sft \
                --template qwen \
                --finetuning_type lora

注:ASCEND_RT_VISIBLE_DEVICES 为指定 NPU 卡的环境变量,可根据已有环境修改

如下图所示可正常进行对话,即为可正常推理:

五 自定义数据集构建

本文用到的数据集为 LLaMA-Factory 自带的 identity 和 alpaca_en_demo,对 identity 数据集进行如下全局替换即可实现定制指令:

  • ​{{name}}​​ 替换为 Ascend-helper
  • ​{{author}}​​ 替换为 Ascend

更多自定义数据集的构建请参考​​官方数据集构造指引​​ 。

六 微调与推理

基于 LoRA 的 sft 指令微调

使用以下指令启动 Qwen1.5-7B 模型微调:

ASCEND_RT_VISIBLE_DEVICES=0 llamafactory-cli train <your_path>/qwen1_5_lora_sft_ds.yaml
动态合并 LoRA 的推理

使用以下指令实现动态合并 LoRA 的 Qwen1.5-7B 模型推理:

ASCEND_RT_VISIBLE_DEVICES=0 llamafactory-cli chat --model_name_or_path <your/path/to/PyTorch-NPU/qwen1.5_7b> \
                --adapter_name_or_path saves/Qwen1.5-7B/lora/sft \
                --template qwen \
                --finetuning_type lora

通过询问大模型是谁检验 sft 指令微调的成果,如下图,大模型回答自己是 Ascend-helper 说明 sft 成功,如失败,可返回微调阶段增加训练轮数重新训练。

七 总结

应用使能套件 openMind 为广大大模型开发者提供了高效简洁的工具,魔乐则托管了大量各领域主流模型及以 CPU 和昇腾 NPU 为基础算力的 space app,同时,越来越多的开源三方软件开始原生支持昇腾 NPU,广大开发者可以在魔乐社区体验更多强大的 AI 大模型及有趣的 app,欢迎一起探索!

相关链接

  1. openMind Library介绍:​​https://modelers.cn/docs/zh/openmind-library/overview.html​
  2. openMind Hub Client介绍:​​https://modelers.cn/docs/zh/openmind-hub-client/overview.html​
  3. 更多如模型导出、webui使用、模型评测等进阶功能可参阅原生支持文档:​​https://ascend.github.io/docs/sources/llamafactory/example.html​
在处理 `RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn` 这一错误时,通常意味着某些张量被创建的方式使得它们不具有梯度计算的功能。这可能是由于数据加载、模型初始化或其他操作过程中未正确设置 `.requires_grad_()` 属性所引起的。 对于 qwen1.5-7b-chat 的微调训练中出现此问题,可以考虑以下几个方面来排查并解决问题: ### 参数配置检查 确保所有参与反向传播运算的参数都已正确设置了 requires_grad=True 。如果使用预训练权重,则需确认这些权重是否应该参与到后续更新之中[^1]。 ```python for param in model.parameters(): param.requires_grad_(True) ``` ### 数据集准备阶段 当构建输入样本时,务必保证返回的数据结构中的每一个 Tensor 对象都有合适的属性设定。特别是从磁盘读取或通过其他方式获取到原始数值之后再转换成 PyTorch 中的 Tensor 类型之前要特别注意这一点。 ```python import torch def prepare_data(batch): inputs = {k: v.to(device) for k, v in batch.items()} # Ensure all Tensors are set to track gradients if needed. for key in ['input_ids', 'attention_mask']: if isinstance(inputs[key], torch.Tensor): inputs[key].requires_grad_() return inputs ``` ### 模型前向传递过程 有时,在定义自定义层或者修改现有网络架构的过程中可能会无意间破坏掉自动求导机制的工作流程。因此建议仔细审查这部分代码逻辑,确保没有任何地方显式地关闭了某个变量的 gradient tracking 功能。 ```python class CustomLayer(nn.Module): def forward(self, x): y = some_operation(x).clone().detach() # This would stop the gradient flow # Instead use operations that preserve gradient information: z = another_operation(y) return z ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值