如何在DCU上使用LLaMa-Factory进行模型微调

文章目录

  • 一、如何从零构建LLaMA-Factory环境
    • [1. 进入光合社区](#1. 进入光合社区)
    • [2. 选择对应软件下载安装即可](#2. 选择对应软件下载安装即可)
    • [3. 搭建LLaMA-Factory的环境](#3. 搭建LLaMA-Factory的环境)
  • 二、直接使用超算互联网scnet上已有的LLaMa-Factory镜像
    • [2.1 、准备训练环境](#2.1 、准备训练环境)
      • [1. 创建自己的Notebook](#1. 创建自己的Notebook)
      • [2. 进入自己的Notebook](#2. 进入自己的Notebook)
      • [3. 下载安装llama-factory](#3. 下载安装llama-factory)
    • [2.2 构建训练数据](#2.2 构建训练数据)
    • [2.3 开展模型微调](#2.3 开展模型微调)

插播广告一条😂🐶:我制作的一个免费 语音识别网站,欢迎体验!

一、如何从零构建LLaMA-Factory环境

1. 进入光合社区

光合社区软件下载

搜索想要的软件,比如vllm

2. 选择对应软件下载安装即可

注意查看DCU的开发版本信息:ls /opt/,我的显示结果是:dtk-25.04.1。

建议在下面的选择时,选择cp311的版本,后面也建立对应的python3.11环境。别问我为什么,我之前用cp310的版本,结果安装vllm 0.8.5时告诉我必须用python3.11,导致又得重来一遍。

3. 搭建LLaMA-Factory的环境

bash 复制代码
export LD_LIBRARY_PATH=/opt/dtk-25.04.1/lib/:/opt/dtk-25.04.1/lib64/:$LD_LIBRARY_PATH
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
conda create -n py311 python=3.11 -y
conda activate py311
pip install -e ".[torch,metrics]" --no-build-isolation   -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torch-2.5.1+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision-0.19.1+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl 
pip install deepspeed-0.14.2+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl  -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install vllm-0.8.5.post1+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl 
pip install flash_attn-2.6.1+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl 
pip install triton-3.0.0+das.opt1.dtk25041-cp311-cp311-manylinux_2_28_x86_64.whl 

二、直接使用超算互联网scnet上已有的LLaMa-Factory镜像

2.1 、准备训练环境

1. 创建自己的Notebook

  1. 进入:https://www.scnet.cn/ui/console/index.html#/notebook

  2. 点击:创建Notebook

  3. 点击:模型镜像

    DCU的显卡可以选择下面的镜像:

  4. 点击右下角的"创建"按钮即可

2. 进入自己的Notebook

  1. 刷新https://www.scnet.cn/ui/console/index.html#/notebook页面,此时应该可以看到自己创建的Notebook
  2. 点击"JupyterLab"按钮
  3. 点击进入终端

出现如下终端页面:

3. 下载安装llama-factory

  1. 在Notebook的终端中进入个人目录,并下载llama-factory
bash 复制代码
cd /root/private_data
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
  1. 进入llama-factory文件夹,开始安装
bash 复制代码
cd LLaMA-Factory
pip install -r requirements.txt
pip install -e ".[torch,metrics]" --no-build-isolation

2.2 构建训练数据

  1. 在Notebook的终端中进入个人目录,并下载llm_training项目
bash 复制代码
cd /root/private_data
git clone http://www.easyop.cn/gitlab/ops/data/llm_training.git
  1. 进入模型训练目录,执行run.sh
bash 复制代码
cd llm_training/scripts/模型训练
sh run.sh 

执行成功后,会出现以下反馈:

其中./data/train_sugon.jsonl就是训练数据,./data/dev_sugon.jsonl就是测试数据

2.3 开展模型微调

  1. 放入训练数据
    把上文中的train_sugon.jsonl移动至LLaMA-Factory的data目录
bash 复制代码
mv /root/private_data/llm_training/scripts/模型训练/data/train_sugon.jsonl  /root/private_data/LLaMA-Factory/data
cd /root/private_data/LLaMA-Factory
  1. 配置数据元信息
    编辑data目录下的dataset_info.json,加入对train_sugon的描述信息,具体内容如下(注意结尾有个逗号):
bash 复制代码
 "train_sugon": {
     "file_name": "train_sugon.jsonl"
 },
  1. 配置微调参数
    新建examples/train_lora/sugon_lora_sft_qwen3_8B.yaml,该文件的具体内容如下(每个配置项含义下面已有注释):
bash 复制代码
### model
model_name_or_path: /root/public_data/model/admin/Qwen/Qwen3-8B # 指定预训练模型的路径或名称
trust_remote_code: true # 是否信任远程代码,设置为true允许加载模型定义中的自定义代码

### method
stage: sft # 指定微调阶段,这里是监督微调 (Supervised Fine-Tuning)
do_train: true # 是否执行训练
finetuning_type: lora # 微调方法,这里使用 LoRA (Low-Rank Adaptation)
lora_rank: 8 # LoRA 的秩,影响适配器的参数量和表达能力
lora_target: all # 指定 LoRA 应用的目标模块,all 表示应用于所有支持的模块

#deepspeed: examples/deepspeed/ds_z2_config.json # DeepSpeed 配置文件路径,用于分布式训练和内存优化,当前被注释掉

### dataset
dataset: train_sugon # 使用的数据集名称
template: qwen # 数据集模板,这里是针对 Qwen 模型的模板
cutoff_len: 4096 # 输入序列的最大长度,超过此长度将被截断
max_samples: 5000000 # 用于训练的最大样本数
overwrite_cache: true # 是否覆盖缓存的数据集,设置为true会重新处理数据
preprocessing_num_workers: 16 # 数据预处理时使用的进程数
dataloader_num_workers: 4 # DataLoader 加载数据时使用的进程数

### output
output_dir: saves/Qwen3-8B-Sugon/lora/sft # 模型输出和保存的目录
logging_steps: 10 # 每隔多少步记录一次日志
save_steps: 3000 # 每隔多少步保存一次检查点
plot_loss: true # 是否绘制训练损失曲线
overwrite_output_dir: true # 是否覆盖输出目录,如果为true,会删除现有内容
save_only_model: false # 是否只保存模型权重,不保存优化器状态等
report_to: none # 训练报告工具,例如 wandb, tensorboard 等,none 表示不使用

### train
per_device_train_batch_size: 1 # 每个设备(GPU)的训练批次大小
gradient_accumulation_steps: 1 # 梯度累积步数,用于增大有效批次大小
learning_rate: 1.0e-4 # 学习率
num_train_epochs: 3.0 # 训练的总轮数
lr_scheduler_type: cosine # 学习率调度器类型,这里是 cosine 衰减
warmup_ratio: 0.1 # 学习率预热的比例
bf16: true # 是否使用 BF16 混合精度训练
ddp_timeout: 180000000 # 分布式数据并行 (DDP) 的通信超时时间(毫秒)
resume_from_checkpoint: null # 从指定检查点恢复训练,null 表示不恢复

#### eval
#val_size: 0.1 # 验证集大小的比例,当前被注释掉
#per_device_eval_batch_size: 1 # 每个设备(GPU)的评估批次大小,当前被注释掉
#eval_strategy: steps # 评估策略,按步数进行评估,当前被注释掉
#eval_steps: 500 # 每隔多少步进行一次评估,当前被注释掉
  1. 训练模型

    在终端中输入以下命令开始对模型进行训练

    llamafactory-cli train examples/train_lora/sugon_lora_sft_qwen3_8B.yaml

    如果运行正常,会有类似下面的结果:

  2. 部署服务

    将训练好的模型以服务形式呈现,可执行下面的命令,它将监听10000端口号:

bash 复制代码
cd /root/private_data/LLaMA-Factory
API_PORT=10000 llamafactory-cli api ./examples/inference/sugon_merged.yaml

其中sugon_merged.yaml的内容如下:

bash 复制代码
model_name_or_path: /root/public_data/model/admin/Qwen/Qwen3-8B # 指定预训练模型的路径
adapter_name_or_path: /root/private_data/LLaMA-Factory/saves/Qwen3-8B-Sugon/lora/sft # 指定微调后的LoRA适配器(adapter)的路径
template: qwen # 指定模型对话的模板,这里是Qwen模型对应的模板
infer_backend: huggingface # choices: [huggingface, vllm] # 指定推理后端,这里选择Hugging Face Transformers
#infer_backend: vllm # choices: [huggingface, vllm] # 另一个可选的推理后端是vLLM,通常用于高性能推理
trust_remote_code: true # 是否信任远程代码,当模型或适配器加载的代码不在本地时,设置为true
  1. 测试模型
bash 复制代码
cd /root/private_data/llm_training/scripts/模型训练
#在自测模型时,注意需要修改utils.py中的url为:
#url = 'http://127.0.0.1:10000/v1/chat/completions'
python test_precision.py ./data/dev_data.jsonl 

如果运行正常,就会显示类似如下的结果信息: