Qwen2.5 PyTorch模型微调入门实战

1 引言

Qwen2.5是Qwen大型语言模型系列的最新成果。对于Qwen2.5,通义千问团队发布了从0.5到720亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5相比Qwen2带来了以下改进:

  • 显著增加知识量,在编程与数学领域的能力得到极大提升,这得益于我们在这些领域的专业专家模型。
  • 在遵循指令、生成长文本(超过8K个token)、理解结构化数据(例如,表格)以及生成结构化输出特别是JSON方面有显著提升。对系统提示的多样性更具韧性,增强了聊天机器人中的角色扮演实现和条件设定。
  • 支持长上下文处理,上限为128K个token,并能生成最多8K个token。
  • 支持超过29种语言的多语言功能,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。

2 环境准备

2.1 安装Ascend CANN Toolkit和Kernels

安装方法请参考安装教程或使用以下命令。

bash 复制代码
# 请替换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.1 安装openMind Library以及openMind Hub Client

  • 安装openMind Hub Client
bash 复制代码
pip install openmind_hub
  • 安装openMind Library,并安装PyTorch框架及其依赖。
bash 复制代码
pip install openmind[pt]

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

  • 安装llama-factory
bash 复制代码
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch-npu,metrics]"

3 模型链接和下载

Qwen2.5-7B模型系列由社区开发者在魔乐社区贡献,包括:

通过Git从魔乐社区下载模型的repo,以Qwen2.5-7B-Instruct为例:

bash 复制代码
首先保证已安装git-lfs(https://git-lfs.com)
git lfs install
git clone https://modelers.cn/AI-Research/Qwen2.5-7B-Instruct.git

4 模型推理

用户可以使用openMind Library或者LLaMa Factory进行模型推理,以Qwen2.5-7B-Instruct为例,具体如下:

  • 使用openMind Library进行模型推理

新建推理脚本 inference_qwen2.5_7b_chat.py ,推理脚本内容为:

bash 复制代码
import argparse
from openmind import AutoModelForCausalLM, AutoTokenizer
from openmind_hub import snapshot_download

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model_name_or_path",
        type=str,
        help="Path to model",
        default=None,
    )

    args = parser.parse_args()

    return args

def main():
    args = parse_args()
    if args.model_name_or_path:
        model_path = args.model_name_or_path
    else:
        model_path = snapshot_download("AI-Research/Qwen2.5-7B-Instruct", revision="main", resume_download=True,
                                    ignore_patterns=[" .h5", " .ot", "*.mspack"])

    model = AutoModelForCausalLM.from_pretrained(
        model_path,
        torch_dtype="auto",
        device_map="auto"
    )
    tokenizer = AutoTokenizer.from_pretrained(model_path)

    prompt = '你是谁'
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ]
    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

    generated_ids = model.generate(
        **model_inputs,
        max_new_tokens=512
    )
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]

    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    print(response)

if __name__ == "__main__":
    main()

执行推理脚本:

bash 复制代码
python inference_qwen2.5_7b_chat.py

推理结果如下:

  • 使用LLaMa Factory与模型交互

在LLaMa Factory路径下新建examples/inference/qwen2.5_7b_chat.yaml推理配置文件,文件内容为:

bash 复制代码
model_name_or_path: xxx # 当前仅支持本地加载,填写Qwen2.5-7B-Instruct本地权重路径
template: qwen

使用以下命令与模型进行交互:

bash 复制代码
llamafactory-cli chat examples/inference/qwen2.5_7b_chat.yaml

交互结果如下:

5 模型微调

5.1 数据集

使用Llama-Factory集成的identity数据集

5.2 微调

新建examples/train_lora/qwen2.5_7b_lora_sft.yaml 微调配置文件,微调配置文件如下:

bash 复制代码
### model
model_name_or_path: xxx/xxx  # 预训练模型路径

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

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

### output
output_dir: ./saves/qwen2.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: 8
learning_rate: 1.0e-4
num_train_epochs: 10.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

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

使用以下命令进行微调:

bash 复制代码
llamafactory-cli train examples/train_lora/qwen2.5_7b_lora_sft.yaml

5.3 微调可视化

  • 训练Loss可视化:

5.4 微调后推理

5.4.1 模型推理

修改examples/inference/qwen2.5_7b_chat.yaml推理配置文件,文件内容为:

bash 复制代码
model_name_or_path: xxx # 当前仅支持本地加载,填写Qwen2.5-7B-Instruct本地权重路径
adapter_name_or_path: ./saves/qwen2.5_7b/lora/sft
template: qwen

使用以下命令进行推理:

bash 复制代码
llamafactory-cli chat examples/inference/qwen2.5_7b_chat.yaml
5.4.2推理结果

6 结语

在之前的华为全联接大会2024上,了解到openMind应用使能套件在AI生态社区中发挥的技术能力。此次Qwen模型的微调经验,也让人看到了openMind在AI模型调优和推理能力。openMind是AI开发者的强有力的助手,它让微调过程变得更加高效和直观。希望每一位开发者都来尝试它,一起交流经验,更好地提升它的能力。

关于openMind:

openMind,一款应用使能开发套件,为各大模型社区提供支持,提供海量模型/数据托管能力、在线推理体验服务,同时具备模型训练、微调、评估、推理等全流程开发能力。开发者通过简单的API接口即可实现微调、推理等任务,极大缩短开发周期,助力AI技术的创新发展,欢迎体验。

相关链接: [1] openMind Library:modelers.cn/docs/zh/ope... [2] openMind Hub Client:modelers.cn/docs/zh/ope...

相关推荐
程序员小远1 小时前
银行测试:第三方支付平台业务流,功能/性能/安全测试方法
自动化测试·软件测试·python·功能测试·测试工具·性能测试·安全性测试
taxunjishu1 小时前
DeviceNet 转 Modbus TCP 协议转换在 S7-1200 PLC化工反应釜中的应用
运维·人工智能·物联网·自动化·区块链
kalvin_y_liu2 小时前
智能体框架大PK!谷歌ADK VS 微软Semantic Kernel
人工智能·microsoft·谷歌·智能体
爱看科技2 小时前
智能眼镜行业腾飞在即,苹果/微美全息锚定“AR+AI眼镜融合”之路抢滩市场!
人工智能·ar
猫头虎3 小时前
如何查看局域网内IP冲突问题?如何查看局域网IP环绕问题?arp -a命令如何使用?
网络·python·网络协议·tcp/ip·开源·pandas·pip
沿着路走到底3 小时前
python 基础
开发语言·python
Juchecar5 小时前
LLM模型与ML算法之间的关系
人工智能
FIN66685 小时前
昂瑞微:深耕射频“芯”赛道以硬核实力冲刺科创板大门
前端·人工智能·科技·前端框架·信息与通信·智能
benben0445 小时前
京东agent之joyagent解读
人工智能
LONGZETECH5 小时前
【龙泽科技】汽车动力与驱动系统综合分析技术1+X仿真教学软件(1.1.3 -初级)
人工智能·科技·汽车·汽车仿真教学软件·汽车教学软件