前言
在当今人工智能技术飞速发展的时代,大模型的应用日益广泛。基于 MS-Swift 框架的大模型应用开发为开发者提供了强大的工具和平台,其中微调环节更是解锁模型潜能、实现精准适配特定任务的关键步骤。本篇经过深度润色的实战指南将带您深入了解大模型微调的各个环节,从环境准备到最终的 Web-UI 推理微调,为您提供详尽且实用的操作指导。
一、环境准备
本次部署选用 Ubuntu 22.04 操作系统,搭配 Python 3.10 与 PyTorch 2.1.2。计算硬件为一块 NVIDIA GeForce RTX 4090D GPU,显存 24GB,同时安装 Cuda 11.8,确保环境稳定高效,满足运行需求。
二、依赖安装
(一)安装ms-swift
- 首先,从GitHub上克隆ms-swift仓库到本地。在终端中执行以下命令:
git clone https://github.com/modelscope/swift.git
这将把ms-swift的源代码下载到本地机器。
- 进入克隆后的目录:
cd swift
克隆的代码如下:
- 然后使用pip安装ms-swift,同时安装相关的依赖项:
pip install -e .
执行如下:
这种安装方式允许您在开发过程中对源代码进行修改,并立即生效,适用于需要对框架进行定制或参与开发的用户。
(二)安装vllm
为进一步提升模型推理速度,别忘安装 vllm,在 bash 环境下执行 “pip install vllm”,简单一步为后续模型运行注入强大动力。
# vllm加速
pip install vllm
安装如下:
三、模型下载
在进行模型训练或推理之前,我们需要下载相应的模型。可以从modelscope获取模型,以下以下载OpenGVLab/InternVL2_5-4B模型为例,展示在不同操作系统下的下载命令。
(一)安装lfs
首先确保已经安装了 git-lfs
,如果没有安装,可以使用pip进行安装:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
安装如下:
(二)下载模型
从modelscope的模型库中下载模型权重文件
git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git
执行如下:
查看下载文件:(对比模型库,确保文件下载完整)
三、模型推理
使用swift infer 命令进行模型推理,即直接使用模型来生成输出或预测。
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--model /root/autodl-tmp/Qwen2.5-7B-Instruct \
--infer_backend pt \
--stream true
swift infer 命令用于执行模型推理,即直接使用模型来生成输出或预测。
参数说明:
“CUDA_VISIBLE_DEVICES=0” 明确指定使用 0 号 GPU 设备,为推理任务分配硬件资源;
“–model” 参数精准指向模型的完整路径 “/root/autodl-tmp/Qwen2.5-7B-Instruct”,确保命令能够找到模型所在为主;
“–infer_backend pt” 指定使用 PyTorch (pt) 作为推理后端,发挥其强大的计算能力;
“–stream true” 则开启了连续数据流模式,特别适用于处理实时数据或连续的信息流,让推理过程更加流畅高效。
运行成功如下:
四、模型微调
(一)数据集准备
为对Qwen2.5-7B-Instruct模型开展微调,我们选用modelscope在线数据集,主要包含自我认知数据集与通用混合数据集。
自我认知数据集来自https://www.modelscope.cn/datasets/swift/self-cognition
,专注于自我认知领域,为模型提供针对性学习样本,帮助其精准理解相关问题。
通用混合数据集由英文的https://www.modelscope.cn/datasets/AI-ModelScope/alpaca-gpt4-data-en
和中文的https://www.modelscope.cn/datasets/AI-ModelScope/alpaca-gpt4-data-zh
组成,由GPT-4生成。它涵盖多领域知识、多样语言表达与指令场景,既有助于模型指令精调,提升回复质量,又能强化模型在复杂场景下的决策与生成能力。
(二)模型微调
CUDA_VISIBLE_DEVICES=0 \
swift sft \
--model /root/autodl-tmp/Qwen2.5-7B-Instruct \
--train_type lora \
--dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \
AI-ModelScope/alpaca-gpt4-data-en#500 \
swift/self-cognition#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
执行这个微调脚本大概需要花费 10 分钟左右的时间,效果如下
以下是微调脚本参数的详细说明:
CUDA_VISIBLE_DEVICES=0
:通过设置这一环境变量,明确指定仅使用编号为 0 的 GPU 设备参与模型微调过程。这一操作能够有效地将计算资源集中分配到特定的 GPU 上,避免多 GPU
环境下可能出现的资源竞争和调度问题,确保微调过程的高效性和稳定性。
swift sft
:这是执行 Swift for TensorFlow(SFT)的命令行工具,专门用于启动模型的微调流程。
--model /root/autodl-tmp/Qwen2.5-7B-Instruct
:指定微调所使用的基础模型文件路径。可以是远程仓库路径,也可以是本地下载的模型地址。
--train_type lora
:这里指定了微调的类型为 LoRA(Low - Rank Adaptation),这是一种极具创新性和高效性的参数微调方法。LoRA
通过在原有模型的基础上引入低秩矩阵来调整模型参数,能够在显著减少可训练参数数量的同时,保持模型的性能表现。这意味着在微调过程中,不需要对整个模型的所有参数进行大规模调整,大大降低了计算成本和时间成本,同时也减少了过拟合的风险,使得模型能够更加快速、稳定地收敛到最优解。
--dataset AI-ModelScope/alpaca-gpt4-data-zh#500 AI-ModelScope/alpaca-gpt4-data-en#500 swift/self-cognition#500
:该参数详细指定了用于训练的数据集及其使用量。我们选取了三个不同的数据集,每个数据集后面跟的数字“500”表示使用该数据集中的
500
条样本数据。通过混合使用多种数据集,能够让模型学习到更广泛的知识和语言模式,提升其泛化能力和适应性。其中,中文和英文的通用数据集能够丰富模型在不同语言环境下的表达和理解能力,而自我认知数据集则专注于强化模型在特定领域的表现,三者相互配合,全面优化模型的性能。
--torch_dtype bfloat16
:此参数设置了 PyTorch 在微调过程中使用的数据类型为 bfloat16。bfloat16
是一种较新的浮点数格式,它在保证一定精度的同时,能够显著减少内存占用和计算量。在深度学习模型的训练和推理中,数据类型的选择对性能有着重要影响。
--num_train_epochs 1
:该参数明确设置了模型训练的总轮数为1轮。训练轮数决定了模型在整个训练过程中对数据集的遍历次数。较少的训练轮数可以在一定程度上避免过拟合,同时也能缩短训练时间,提高效率。在本次微调中设置1轮主要为了快速看效果;
补充说明:一般来说,可以从较小的轮次开始(如3-5轮),然后根据验证集上的表现逐步调整。如果模型在验证集上的性能没有显著提升,或者开始出现过拟合的迹象,可以减少轮次;反之,如果模型性能还有提升空间,可以适当增加轮次。
--per_device_train_batch_size 1
:此参数规定了每个设备上训练时的批次大小为1。批次大小决定了每次训练时模型所使用的样本数量。较小的批次大小意味着模型在训练过程中能够更频繁地更新参数,从而更细致地适应数据的变化。但同时,过小的批次大小也可能导致训练过程的不稳定,因此需要根据实际情况进行权衡。
--per_device_eval_batch_size 1
:该参数设置了每个设备上评估时的批次大小同样为1。评估批次大小的设置会影响模型在验证集上评估的准确性和效率。与训练批次大小类似,较小的评估批次大小能够提供更细致的评估结果,帮助我们更准确地了解模型在不同样本上的表现,从而及时发现模型可能存在的问题。
--learning_rate 1e-4
:此参数定义了模型训练时的学习率为1e-4。学习率是优化算法中的一个关键超参数,它决定了模型在每次参数更新时的步长大小。合适的学习率能够使模型快速收敛到最优解,而过大或过小的学习率都可能导致模型训练失败或收敛速度过慢。
--lora_rank 8
:该参数设置了LoRA微调中的秩(rank)为8。秩是LoRA方法中的一个重要超参数,它控制着低秩矩阵的维度,进而影响微调参数的数量。较低的秩意味着更少的可训练参数,从而降低计算成本,但可能会限制模型的表达能力;较高的秩则相反。在本次微调中,秩为8的设置是在计算资源和模型性能之间取得的一个平衡,既能有效地减少训练参数,又能保证模型具备足够的灵活性来适应微调任务。
--lora_alpha 32
:此参数设置了LoRA微调中的alpha值为32。alpha值与秩一起影响着微调参数的分布和缩放。它在LoRA方法中起到了调整低秩矩阵缩放比例的作用,对模型的收敛速度和最终性能有着重要影响。合适的alpha值能够使模型更好地学习到数据中的关键信息,从而提升微调效果。
--target_modules all-linear
:该参数指定了微调的目标模块为所有线性层。在深度学习模型中,线性层是模型进行特征变换和信息处理的重要组成部分。通过将目标模块设置为所有线性层,我们能够确保在微调过程中对模型的关键计算部分进行优化,从而有效地提升模型的性能。这样的设置能够全面覆盖模型中对输入数据进行线性变换的各个环节,使得模型在处理各种任务时能够更加灵活和准确。
--gradient_accumulation_steps 16
:此参数设置了梯度累积的步数为16。梯度累积是一种在深度学习训练中常用的技巧,它允许我们在多次前向传播和反向传播后再进行一次参数更新。通过设置梯度累积步数,我们可以在不增加内存占用的情况下,模拟更大的批次大小。在本次微调中,设置为16步意味着模型会在进行16次前向和反向传播后,将累积的梯度进行一次更新,这样可以在一定程度上提高训练的稳定性和效率,同时也能适应有限的硬件资源。
--eval_steps 50
:该参数规定了每训练50步就进行一次模型评估。定期的评估能够让我们及时了解模型在训练过程中的性能变化,判断模型是否朝着预期的方向优化。通过设置合适的评估步数,我们可以在不影响训练效率的前提下,对模型的训练状态进行实时监控,以便及时调整训练策略,如调整学习率、提前终止训练等。
--save_steps 50
:此参数设置了每训练50步就保存一次模型。保存模型是为了记录训练过程中的中间结果,以便在后续需要时能够恢复模型状态进行进一步的分析或使用。合理的保存步数设置既能确保我们不会错过重要的模型状态,又不会因为过于频繁的保存而浪费过多的时间和存储空间。
--save_total_limit 2
:该参数限制了保存模型文件的总数为2。这意味着在训练过程中,只会保留最新的2个模型文件。通过设置保存总限制,我们可以避免因保存过多的模型文件而占用大量的磁盘空间,同时也能保证在需要时能够获取到相对较新的模型状态。
--logging_steps 5
:此参数设置了每训练5步就记录一次日志。日志记录能够详细记录模型训练过程中的各种信息,如损失值、准确率、学习率等。通过定期查看日志,我们可以深入了解模型的训练动态,分析模型的性能趋势,从而为进一步的优化提供依据。
--max_length 2048
:该参数设置了模型输入序列的最大长度为2048。在处理文本数据时,模型需要对输入的文本进行截断或填充,以适应固定的输入长度。设置合适的最大长度能够确保模型在处理不同长度的文本时,既不会因为长度过长而导致内存溢出或计算效率低下,也不会因为长度过短而丢失重要信息。
--output_dir output
:指定微调后模型的输出目录为“output”。所有训练过程中产生的模型文件、日志文件等都会存储在这个目录下。
--system 'You are a helpful assistant.'
:设置系统提示信息,用于指导模型的行为。在微调过程中,这个系统提示会作为模型的先验知识,帮助模型更好地理解用户的意图,并给出符合预期的回答。
--warmup_ratio 0.05
:设置学习率预热比例为0.05。学习率预热是一种常用的训练技巧,它在训练初期逐渐增加学习率,从一个较小的值逐渐上升到设定的学习率。这样可以帮助模型在训练初期更快地找到合适的优化方向,避免因为初始学习率过大而导致训练不稳定。
--dataloader_num_workers 4
:设置数据加载器的工作线程数为4。数据加载器负责从磁盘中读取数据,并将其处理成模型能够接受的格式。增加工作线程数可以提高数据加载的速度,从而减少数据加载时间对训练效率的影响。
--model_author swift
:设置模型的作者为“swift”。这一设置主要用于记录模型的相关信息,方便后续对模型的来源和所有者进行追溯。
--model_name swift-robot
:设置微调后模型的名称为“swift-robot”。为模型命名有助于我们在众多模型中快速识别和区分不同的模型,方便后续的管理和使用。
微调结束后,我们可以在指定的输出目录“output/v0-20241230-161156/checkpoint-93”查看到生成的权重文件。这些权重文件包含了模型在微调过程中学习到的参数信息,是模型性能提升的关键所在。通过对这些权重文件的分析和使用,我们可以进一步了解模型的优化效果,并将其应用到实际的推理任务中。
(三)推理微调后权重文件
训练完成后,使用以下命令对经过训练的权重执行推理。应将 --adapters 选项替换为从训练生成的最后一个检查点文件夹。由于 adapters 文件夹包含来自训练的参数文件,因此无需单独指定 --model 或 --system。
# 使用交互式命令行进行推理。
# 设置CUDA_VISIBLE_DEVICES环境变量为0,指定使用GPU 0。
# swift infer是推理命令,用于启动推理过程。
# --adapters指定模型检查点的路径。
# --stream设置为true,表示推理过程中数据流是连续的。
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--adapters output/v0-20241230-161156/checkpoint-93 \
--stream true
直接推理如下:
资源消耗如下:我们可以通过“nvidia-smi”查看资源消耗情况,包括GPU使用率、内存占用等
(四)合并LoRA模型 & vLLM加速推理
合并LoRA(Low-Rank Adaptation)并使用vLLM进行推理加速。
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--adapters output/v0-20241230-161156/checkpoint-93 \
--stream true \
--merge_lora true \
--infer_backend vllm \
--max_model_len 8192
执行推理命令效果如下:
合并后的权重文件:/root/autodl-tmp/ms-swift/output/v0-20241230-161156/checkpoint-93-merged
资源消耗如下:
五、Web-UI推理微调
官方提供的WEB浏览器版,为我们带来了极大的便利,通过浏览器即可实现可视化操作,大大降低了操作门槛,提高了开发效率。
(一)启动 web-ui
SWIFT 支持了界面化的训练和推理,参数支持和脚本训练相同。在安装 SWIFT 后,使用如下命令:“SWIFT_UI_LANG=zh swift web-ui”。启动成功后,用户可以通过直观的界面进行模型的训练和推理操作,提高了操作的便利性和可视化程度。
SWIFT_UI_LANG=zh swift web-ui
执行该命令后,如果启动成功,我们会在终端看到相应的提示信息,表明Web - UI服务已经成功启动。
(二)配置端口代理
这一步操作的端口配置,仅针对AutoDL环境。由于不同的运行环境可能存在网络配置差异,在AutoDL中,我们需要根据具体的需求进行端口代理的配置,以确保能够顺利地访问和使用Web - UI进行模型的推理微调。通过合理配置端口代理,我们可以将本地启动的Web - UI服务映射到可访问的网络地址上,使得我们能够在浏览器中正常打开Web - UI页面。
(三)UI 页面访问
在完成端口代理配置后,我们只需在浏览器地址栏中输入:http://localhost:7860/,即可轻松进入SWIFT的Web - UI页面。
进入页面后,我们会看到简洁明了的界面布局,包括模型选择、参数设置、数据集上传、训练启动、推理输入等各个功能区域。在这里,我们可以方便地进行各种模型推理微调的操作,如选择不同的模型进行微调、设置微调参数、上传自定义数据集、启动训练任务以及进行推理测试等。通过Web - UI页面,我们能够更加直观地监控模型的训练进度、查看推理结果,及时调整模型开发策略,大大提高了模型开发的效率和灵活性。
结语
通过这一全面的大模型微调实战指南,结合 MS-Swift 框架的强大功能,您已手握开启模型潜能的钥匙。从目标明确的筹备,到精细入微的调整,再到严谨科学的验收,每一步都为模型在特定领域的卓越表现奠定基础。展望未来的应用开发征程,希望您能够持续不断地实践、探索与优化。凭借大模型强大的学习能力和泛化能力,结合MS - Swift框架提供的丰富工具和灵活接口,将其深度融入到各行各业的业务流程中。让大模型真正成为推动各行各业创新发展、实现智能化转型升级的强大引擎,为人类社会的进步与发展贡献智慧与力量 。
如何学习AI大模型 ?
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)
👉4.大模型落地应用案例PPT👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)
👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习
CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈