【大模型入门系列3】通义大模型微调实现修改自我认知

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 本文介绍了如何使用魔搭社区的SWIFT框架对通义大模型进行微调,以满足个性化需求,如修改模型自我认知等。文中详细描述了微调前的环境配置、微调过程及参数设置、微调后的推理验证,以及资源消耗对比。最后,文章还对比了微调与RAG技术的应用场景,并总结了完整的模型微调流程,包括评测、量化导出和部署等步骤。

一 背景

在私有化部署通义大模型后,经常遇到很多场景需要对模型进行训练,比如最简单的需求,你问大模型是谁,希望的是给到的是一个自定义的名称,而不是模型自带的通义千问的默认回复,这里就涉及到对模型进行自我认知的修改。其中训练分为全量训练和轻量微调训练两种方式,区别在于,全量训练在给定LLM模型上冻结一定的参数(或不冻结任何参数)进行训练,一般耗费显存较高,训练周期比较长。而微调方式,主要方案是在模型结构上附着一个额外结构,在训练时冻结原模型并训练额外结构,推理时将额外结构加载起来或合并回原来模型。轻量微调目前的最流行结构是LoRA,该结构理解简单,训练成本较低,在部分任务上可以达到全量微调的效果。

二 微调方案

在这里,我们使用魔搭社区提供的SWIFT来对模型进行微调,SWIFT是魔搭社区官方提供的LLM&AIGC模型微调推理框架。SWIFT支持近200种LLM和MLLM(多模态大模型)的训练、推理、评测和部署。开发者可以直接将SWIFT框架应用到自己的开发和生产环境中,实现模型训练评测到应用的完整链路。

2.1 环境配置

由于微调对GPU算力有要求,其中魔搭社区提供了免费的GPU环境可以测试验证,如下图所示,所以我们选择魔搭社区的GPU环境进行测试,在魔搭社区提供的环境里,已经包含了基本的python,ModelScope Library,SWIFT等环境,我们直接使用即可

image.png

2.2 微调前推理

为了方便快速验证,减少耗时,我们使用了比较小的模型Qwen1.5-0.5B-Chat进行验证。

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import ModelType, InferArguments, infer_main
infer_args = InferArguments(model_type=ModelType.qwen1half_0_5b_chat)
print('测试')
infer_main(infer_args)

在魔搭社区运行以上python代码,可以对Qwen1.5-0.5B-Chat在微调前进行验证,验证如下:

image.png

2.3 微调

SWIFT提供了ui和命令行的方式进行微调,ui模式截图如下所示,提供了训练和推理的ui可视化页面。

image.png


在这里我们使用命令行的方式,微调代码如下,其中我们主要关注以下几个参数

  1. model_type:表示你选择的模型类型, 可以通过只指定model_type进行微调. 对应的model_id_or_path会使用默认的设置, 从ModelScope进行下载, 并使用默认的缓存路径。在这里我们使用的是qwen1half_0_5b_chat模型
  2. model_name:如果开启了自我认知数据集的采样(即self_cognition_sample>0), 你需要传入两个值, 分别代表模型的中文名和英文名. 例如: --model_name 小黄 'Xiao Huang'.
  3. model_author:如果开启了自我认知数据集的采样, 你需要传入两个值, 分别代表作者的中文名和英文名. 例如: --model_author 魔搭 ModelScope.

这里我们主要修改的就是model_name和model_author参数,其他更多详细参数介绍如下:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.md

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import DatasetName, ModelType, SftArguments, sft_main
sft_args = SftArguments(
    model_type=ModelType.qwen1half_0_5b_chat,
    dataset=[DatasetName.ms_bench_mini],
    train_dataset_sample=1000,
    logging_steps=5,
    max_length=2048,
    learning_rate=5e-5,
    warmup_ratio=0.4,
    output_dir='output',
    lora_target_modules=['ALL'],
    self_cognition_sample=500,
    model_name=['小福', 'Xiao 福'],
    model_author=['小福公司', 'xiaofu test'])
output = sft_main(sft_args)
best_model_checkpoint = output['best_model_checkpoint']
print(f'best_model_checkpoint: {best_model_checkpoint}')

训练几十分钟后,可以看到输出结果


2.4 微调后推理

在微调后,我们对生成的模型进行推理验证,验证代码如下, 其中best_model_checkpoint需要修改为上次微调后的值,修改后代码如下:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import InferArguments, merge_lora, infer_main
best_model_checkpoint = '/mnt/workspace/output/qwen1half-0_5b-chat/v0-20240414-130754/checkpoint-92'
infer_args = InferArguments(ckpt_dir=best_model_checkpoint)
merge_lora(infer_args, device_map='cpu')
result = infer_main(infer_args)

验证效果截图如下,可以看到已经正确修改了模型相关的名称。

image.png

2.5 资源消耗对比

通过nvidia-smi我们可以看到微调前后的资源占用对比如下:

微调期间的一次资源消耗截图如下,其中关键信息如下:

Pwr:Usage/Cap: 表示能耗,Usage指的是当前功率,Cap指的是最大额定功率;

Memory-Uasge: 表示显存使用占比;

GPU-Util:表示GPU资源的使用率,可以看到图中已经到了71%。

image.png


微调结束后,可以看到两者消耗都已经变成了0,符合预期

image.png


三 微调和RAG对比

RAG和微调的选型问题一直是被问的较多的问题之一,两种方法的对比可以查看下表:

image.png

如果模型本身对专业知识理解不够,那么使用RAG是不够的,需要进行模型训练,或将模型训练和RAG结合起来使用。

微调常用以下场景:

  • 风格化:特定的问答范式
  • 自我认知:自我认知改变
  • 能力增强:模型本身能力不够,对具体行业的数据理解不良
  • Agent:支持Agent能力,比如程序编写、API调用等

② RAG常用以下场景:

  • 需要根据语料精确回答,比如法律或医疗领域
  • 搜索召回场景,比如搜索引擎
  • 知识频繁更新,灵活性较强的场景

四 总结

本次案例只是一个大模型微调的简单案例,真实训练一个大模型的场景要比这复杂的多。比如在模型微调完,需要对模型能力进行评测swift eval,评测通过后需要针对微调的模型通过swift export进行量化导出,量化是指将一个浮点型的模型转换为低精度的量化模型,以减少模型的存储空间和计算量。量化导出后在进行部署,通过swift deploy部署,对外提供openApi的服务,应用侧才能最后调用微调后的模型。整体需要经过评测(swift eval),量化导出(swift export),部署(swift deploy)等步骤才算真正完成。


目录
相关文章
|
10小时前
|
并行计算 PyTorch 算法框架/工具
【大模型入门系列2】本地win11部署通义千问大模型做RAG验证
本文介绍了如何在本地环境中部署并使用大模型,特别是阿里巴巴云的Qwen1.5-0.5B-Chat模型。首先分析了本地化部署的重要性,包括数据安全、网络稳定性、定制化需求等方面。接着详细描述了环境准备过程,包括更新显卡驱动、安装CUDA、配置Python环境等。随后,文章展示了如何使用ModelScope Library加载模型,并通过Python脚本实现基本的对话功能。最后,探讨了私有化部署大模型的优势,如数据安全、定制化、效率提升等,为未来的探索指明方向。
17 3
|
Web App开发 存储 安全
SameSiteCookie疑难杂症
mPaas下SameSiteCookie疑难问题处理
936 0
SameSiteCookie疑难杂症
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
1024——通义·灵码的功能以应用以及实践案例测评
本文档介绍了阿里巴巴旗下的通义·灵码大模型产品,涵盖其核心功能如文本生成、语义理解、情感分析、多模态处理等,并展示了在智能客服、金融智能投顾、电商推荐系统等多个领域的应用实例。通过具体代码示例,演示了如何调用通义·灵码的API实现自动回复、投资建议、新闻摘要生成等功能。最后,通过实际案例解析,评估了通义·灵码的新功能及其优化建议,包括安全性改进和代码优化策略。
1024——通义·灵码的功能以应用以及实践案例测评
|
移动开发 运维 监控
mPaas研发流程和线上运维介绍
金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。在我们日常运维过程中发现,大部分用户对蚂蚁的研发流程比较感兴趣,特别是在上百个开发者同时在一个app的环境内进行高效开发,技术选型、研发流程还有线上运维是怎么做的,成为大家关注的重点。以下分享我的一些理解。
422 0
mPaas研发流程和线上运维介绍
|
移动开发 运维 前端开发
mPaaS-H5导航栏动态化修改
金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中很多业务在接入H5容器后都会对容器的导航栏进行深度定制,除了Native的定制化之外,还有很多场景是使用到jsapi的方式,通过jsapi实现导航栏的动态修改。本文旨在通过实际场景的描述,通过jsapi的方式,介绍jsapi下怎样动态修改导航栏,供业务参考使用。
466 0
mPaaS-H5导航栏动态化修改
|
移动开发 运维 容器
mPaaS-H5导航栏定制化
金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中很多业务在接入H5容器后都会对容器的导航栏进行深度定制,本文旨在通过不同实际场景的描述,供业务参考使用。
520 0
mPaaS-H5导航栏定制化
|
XML 移动开发 网络协议
mPaas-H5离线包常用排查工具
工欲善其事,必先利其器。应用开发和问题排查的方法论完全不一样,应用开发强调的是从无到有的构建方法,而问题排查强调的是抽丝剥茧的分析之法。问题排查的基础是建立在对程序”预期行为“的理解和掌握上,任何偏离预期的行为都是解决问题的线索。程序的”行为“活动除了问题本身的症状表象,更多的内容则记录和体现在内部或外部日志中,从日志中观察异常行为,再作出合理推测是排查过程的基本要素。在离线包相关问题的排查中,内部日志主要是app控制台日志,H5页面控制台日志;外部日志主要包括:HTTP应用层网络包和TCP层网络包。根据症状正确地使用工具去捕获到合适的日志是问题分析的基石。这一章节主要介绍三个实用工具的具体使
756 0
mPaas-H5离线包常用排查工具
|
存储 运维 监控
mPass iOS崩溃与Crash⽇志符号化详解
在日常mPaas客户端运维中,经常遇到一些iOS闪退,无法直接从闪退堆栈看到原因。主要是因为iOS客户端上传的崩溃日志里的调用栈信息都是通过内存地址记录的,无法直接看到闪退的调用栈信息。如果需要定位到调用栈,需要使用符号表对闪退日志进行符号化。本文从日志收集、日志符号化原理、符号化工具等方向介绍下iOS下crash日志符号化方案。
1989 1
mPass iOS崩溃与Crash⽇志符号化详解
|
XML 移动开发 网络协议
mPaas-H5离线包问题排查工具介绍
工欲善其事,必先利其器。应用开发和问题排查的方法论完全不一样,应用开发强调的是从无到有的构建方法,而问题排查强调的是抽丝剥茧的分析之法。问题排查的基础是建立在对程序”预期行为“的理解和掌握上,任何偏离预期的行为都是解决问题的线索。程序的”行为“活动除了问题本身的症状表象,更多的内容则记录和体现在内部或外部日志中,从日志中观察异常行为,再作出合理推测是排查过程的基本要素。在离线包相关问题的排查中,内部日志主要是app控制台日志,H5页面控制台日志;外部日志主要包括:HTTP应用层网络包和TCP层网络包。根据症状正确地使用工具去捕获到合适的日志是问题分析的基石。这一章节主要介绍三个实用工具的具体使
893 0
mPaas-H5离线包问题排查工具介绍
|
移动开发 数据安全/隐私保护 iOS开发
mPaas iOS多开发环境切换介绍
在iOS⼯程开发过程中,⼏乎都会遇到多环境下切换和开发的需求,iOS原⽣开发Xcode 下是⽀持多target ⼯程开发的,基于mPaaS 框架开发多target ⼯程,在mPaaS 插件下默认是不⽀持的。但对于此类⾼频通⽤场景需求,在mPaaS 框架下也是有⽅案解决的。
935 0
mPaas iOS多开发环境切换介绍