使用Ascend910A 对QwQ-32B模型进行LoRA微调
记录下基于Ascend 910 对 QwQ - 32B 模型进行LoRA微调,此次微调使用了一台裸金属服务器,服务器配置为 8 卡910A,每卡显存为 32GB。在微调使用的是 llama - factory 套件。
llama - factory 套件的开源地址:https://github.com/hiyouga/LLaMA-Factory.git
入门教程:https://zhuanlan.zhihu.com/p/695287607
框架文档:https://llamafactory.readthedocs.io/zh-cn/latest/
框架文档(昇腾 NPU):https://ascend.github.io/docs/sources/llamafactory/
一、环境信息
-
服务器信息:
- CPU: Kunpeng920 * 4
- NPU:Ascend 910A * 8(32GB)
- 内存:768G
- 硬盘:1.5T
-
软件信息:
- 驱动:23.0.0
- 固件:1.0
二、环境安装
- 基础环境搭建请参考800系列服务器环境搭建这篇博文。
- 安装docker(建议安装大于等于20.0的版本)
- 参考下载地址:docker
- docker-compose: docker-compose
- docker安装参考:docker安装
三、拉取镜像
镜像下载参考:http://mirrors.cn-central-221.ovaijisuan.com/detail/165.html
- 拉取llama-factory:
docker pull swr.cn-north-4.myhuaweicloud.com/huzhiqiang/llamafactory0.9.1_cann8.0.rc1_python3.10_910a_32g:20250213
四、创建容器
docker run --shm-size=50g --privileged=true -it -d --net=host --ipc=host \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /var/log/npu/:/usr/slog \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /data/disk1:/data/disk1 \ # 物理机和容器的挂载路径
--name llamafactory \
swr.cn-north-4.myhuaweicloud.com/huzhiqiang/llamafactory0.9.1_cann8.0.rc1_python3.10_910a_32g:20250213 \
bash
运行以上脚本,创建新的llama-factory容器。
五、准备模型
- 到https://modelscope.cn/或者https://modelers.cn/下载QwQ-32B的模型权重。
- modelscope为例:
- 安装sdk:pip install modelscope
- 下载模型:modelscope download --model Qwen/QwQ-32B --local_dir ./QwQ-32B
六、新建llama-factory训练QwQ-32B的配置文件
- 进入上面创建的llama-factory的容器;
- docker exec -it -u 0 llamafactory bash
- 进入/root/LLaMA-Factory/主目录。
- 修改配置文件,进入./examples/train_lora,新建一个qwq_32b_sft_ds3.yaml,填写如下参数:
### model
model_name_or_path: /data/disk1/QwQ-32B # 你的QwQ-32B的模型在容器中的路径
trust_remote_code: true
### method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_target: all
deepspeed: examples/deepspeed/ds_z3_config.json # choices: [ds_z0_config.json, ds_z2_config.json, ds_z3_config.json]
### dataset
dataset: identity,alpaca_en_demo # 微调的数据集
template: llama3
cutoff_len: 8192 # 你的上下文长度
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 1
### output
output_dir: saves/qwq-32b/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: 1.0e-4
num_train_epochs: 60.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true
ddp_timeout: 180000000
### eval
# val_size: 0.1
# per_device_eval_batch_size: 1
# eval_strategy: steps
# eval_steps: 500
七、模型微调
- 开始微调
在微调开始前,需要在终端导入一下两个命令:
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
- 运行如下命令开始微调:
llamafactory-cli train examples/train_lora/qwq_32b_sft_ds3.yaml
- 运行后的正常截图:
-
npu资源使用:
-
训练完成截图:
-
训练完成后的模型文件:
八、模型导出
- 进入路径./examples/merge_lora,新建qwq_32b_lora_sft.yaml文件,内容如下:
### Note: DO NOT use quantized model or quantization_bit when merging lora adapters
### model
model_name_or_path: /data/disk1/QwQ-32B # 原模型路径
adapter_name_or_path: saves/qwq-32b/lora/sft # 微调后的路径
template: llama3
finetuning_type: lora
trust_remote_code: true
### export
export_dir: models/qwq-32b-lora # 生成新的权重路径
export_size: 2
export_device: cpu
export_legacy_format: false
- 运行一下命令导出模型:
llamafactory-cli export examples/merge_lora/qwq_32b_lora_sft.yaml
- 结果截图:
后续也可以将微调后的模型使用MindIE推理引擎来推理。