当前位置: 首页 > news >正文

【大模型】MS-SWIFT : 高效、灵活的大模型微调框架

在这里插入图片描述

MS-SWIFT : 高效、灵活的大模型微调框架

    • 一、项目下载
    • 二、环境准备
    • 三、模型文件准备
    • 四、数据准备
    • 五、微调命令及参数说明
      • SFT 微调
      • LoRA 微调
      • Full 微调
    • 六、可能会遇到的报错及解决方法
    • 七、相关论文信息

MS-SWIFT 是一个高效、灵活的大模型微调框架,支持多种微调方法,包括 SFT、LoRA、Full 等,旨在帮助用户快速、便捷地对大语言模型进行微调,以适应特定任务和应用场景。

一、项目下载

可以通过以下命令从对应的源下载 MS-SWIFT 项目:

https://github.com/modelscope/ms-swift.git

二、环境准备

本次部署选用 Ubuntu 22.04 操作系统,搭配 Python 3.10 与 PyTorch 2.1.2。计算硬件为一块 NVIDIA GeForce RTX 4090D GPU,显存 24GB,同时安装 Cuda 11.8,确保环境稳定高效,满足运行需求。

conda create --name MS-SWIFT python=3.10
conda activate MS-SWIFT
pip install torch==2.1.2+cu118 torchvision==0.16.1+cu118 torchaudio==2.1.2 --extra-index-url https://download.pytorch.org/whl/cu118

三、模型文件准备

以微调 Qwen2.5-7B-Instruct 模型为例,可从 ModelScope 等平台下载模型文件。下载完成后,需验证模型是否正常工作,可通过以下命令进行推理验证:

CUDA_VISIBLE_DEVICES=0 \
swift infer \--model /root/autodl-tmp/Qwen2.5-7B-Instruct \--infer_backend pt \--stream true

若模型能正常输出合理回答,说明模型文件完整且配置正确。

四、数据准备

数据集需提前准备并置于合适路径,例如 /root/autodl-tmp/datasets/trainTest.json,可在数据集文件路径后加 #500 来指定使用 500 条记录。数据集格式一般需符合特定要求,如包含输入、输出等字段。

{"instruction": "介绍人工智能的发展历程","input": "","output": "人工智能的发展历程可以追溯到 20 世纪中叶,当时科学家们开始探索如何使机器模拟人类智能。1956 年,达特茅斯会议的召开标志着人工智能学科的正式诞生。在接下来的几十年里,人工智能经历了多次起伏,包括专家系统的兴起与衰落、机器学习的崛起等。近年来,随着深度学习技术的突破,人工智能迎来了新的发展高潮,自然语言处理、计算机视觉等领域取得了显著的成果。"
}

五、微调命令及参数说明

以下是使用 MS-SWIFT 进行 SFT、LoRA、Full 微调的命令及关键参数说明:

SFT 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \--model /root/autodl-tmp/Qwen2.5-7B-Instruct \--train_type sft \--dataset /root/autodl-tmp/datasets/trainTest.json#500 \--torch_dtype bfloat16 \--num_train_epochs 1 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--learning_rate 1e-4 \--target_modules all-linear \--gradient_accumulation_steps 16 \--eval_steps 50 \--save_steps 50 \--save_total_limit 2 \--logging_steps 5 \--max_length 2048 \--output_dir output \--system 'You are a helpful assistant.' \--warmup_ratio 0.05 \--dataloader_num_workers 4 \--model_author swift \--model_name swift-robot

关键参数说明:

  • --train_type sft:指定微调类型为 SFT。
  • --target_modules all-linear:指定对所有线性层进行微调。

LoRA 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \--model /root/autodl-tmp/Qwen2.5-7B-Instruct \--train_type lora \--dataset /root/autodl-tmp/datasets/trainTest.json#500 \--torch_dtype bfloat16 \--num_train_epochs 1 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--learning_rate 1e-4 \--lora_rank 8 \--lora_alpha 32 \--target_modules all-linear \--gradient_accumulation_steps 16 \--eval_steps 50 \--save_steps 50 \--save_total_limit 2 \--logging_steps 5 \--max_length 2048 \--output_dir output \--system 'You are a helpful assistant.' \--warmup_ratio 0.05 \--dataloader_num_workers 4 \--model_author swift \--model_name swift-robot

关键参数说明:

  • --train_type lora:指定微调类型为 LoRA。
  • --lora_rank 8:设置 LoRA 微调中的秩为 8,与 alpha 一起影响微调参数分布。
  • --lora_alpha 32:设置 LoRA 微调中的 alpha 值为 32。

Full 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \--model /root/autodl-tmp/Qwen2.5-7B-Instruct \--train_type full \--dataset /root/autodl-tmp/datasets/trainTest.json#500 \--torch_dtype bfloat16 \--num_train_epochs 1 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--learning_rate 1e-4 \--gradient_accumulation_steps 16 \--eval_steps 50 \--save_steps 50 \--save_total_limit 2 \--logging_steps 5 \--max_length 2048 \--output_dir output \--system 'You are a helpful assistant.' \--warmup_ratio 0.05 \--dataloader_num_workers 4 \--model_author swift \--model_name swift-robot

关键参数说明:

  • --train_type full:指定微调类型为 Full。

六、可能会遇到的报错及解决方法

  • CUDA 相关报错 :如显存不足,可通过减小 per_device_train_batch_size 或增加 gradient_accumulation_steps 来解决。
  • 数据格式错误 :需检查数据集文件是否符合要求,确保数据格式正确。
  • 模型加载失败 :需检查模型文件路径是否正确,文件是否完整。
  • loss 不下降或 nan loss :可尝试调整学习率,检查数据质量。

七、相关论文信息

MS-SWIFT 涉及的微调方法如 LoRA 等,相关论文有《Low-Rank Adaptation of Large Language Models》等,详细介绍了 LoRA 微调方法的原理和优势。

http://www.xdnf.cn/news/390439.html

相关文章:

  • 【Java EE初阶 --- 多线程(初阶)】线程安全问题
  • 【Android】cmd命令
  • 大学之大:苏黎世大学2025.5.11
  • 数字化工厂中央控制室驾驶舱系统 API接口文档
  • go 通过汇编学习atomic原子操作原理
  • iVX 图形化编程平台:结合 AI 原生开发的革新与实践
  • 07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
  • Python-UV多环境管理
  • 5G-A来了!5G信号多个A带来哪些改变?
  • 经典音乐播放器——完美歌词 Poweramp Music Player 3 build
  • MyBatis进阶:掌握动态SQL,实现灵活的数据库查询
  • 实战项目5(08)
  • 【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)
  • 【Linux系列】bash_profile 与 zshrc 的编辑与加载
  • 大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等
  • 大模型在肾肿瘤诊疗全流程预测及方案制定中的应用研究
  • 【英语笔记(三)】介绍谓语动词的分类,初步讲解四种基本状态:一般、进行、完成、完成进行
  • C#游戏开发中的注意事项
  • 淘宝19块钱激光雷达SDK转ROS2架构
  • 低代码开发:开启软件开发的新篇章
  • RAID磁盘阵列的概念(自用留档)
  • Redis BigKey 问题是什么
  • 卷积神经网络-从零开始构建一个卷积神经网络
  • PDF2zh插件在zotero中安装并使用
  • FramePack AI图片生成视频 v1.1 整合包
  • c++STL-string的使用
  • Java面试常见技术问题解析
  • 软考冲刺——案例分析题Super VLAN
  • BGP基础配置实验
  • OceanBase性能关键参数配置最佳实践