LLM 大模型学习必知必会系列(八):10分钟微调专属于自己的大模型

LLM 大模型学习必知必会系列(八):10分钟微调专属于自己的大模型

1.环境安装

# 设置pip全局镜像 (加速下载)
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 安装ms-swift
pip install 'ms-swift[llm]' -U# 环境对齐 (通常不需要运行. 如果你运行错误, 可以跑下面的代码, 仓库使用最新环境测试)
pip install -r requirements/framework.txt  -U
pip install -r requirements/llm.txt  -U

2.微调前推理

使用python:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import ModelType, InferArguments, infer_main
infer_args = InferArguments(model_type=ModelType.qwen1half_4b_chat)
infer_main(infer_args)"""
<<< 你是谁?
我是来自阿里云的大规模语言模型,我叫通义千问。
--------------------------------------------------
<<< what's your name?
I am Qwen, a large language model from Alibaba Cloud.
--------------------------------------------------
<<< 你是谁研发的?
我是阿里云自主研发的超大规模语言模型。
--------------------------------------------------
<<< 浙江的省会在哪?
浙江的省会是杭州。
--------------------------------------------------
<<< 这有什么好吃的?
浙江的美食非常丰富,比如杭州的西湖醋鱼、东坡肉、龙井虾仁、宋嫂鱼羹等都是著名的浙江美食。此外,浙江还有许多小吃,比如油条、烧麦、汤圆、粽子等。
--------------------------------------------------
<<< 晚上睡不着觉怎么办
晚上睡不着觉可以尝试以下几种方法:1. 放松身心:可以尝试做一些放松身心的活动,比如听音乐、做瑜伽、冥想等。2. 保持规律作息:尽量保持每天的作息规律,避免熬夜。3. 避免刺激性食物:避免吃辛辣、油腻、咖啡因等刺激性食物,这些食物可能会刺激神经系统,导致失眠。4. 适当运动:适当的运动可以帮助身体放松,有助于睡眠。5. 睡前喝牛奶:牛奶中含有色氨酸,可以帮助身体产生褪黑激素,有助于睡眠。
"""

如果你要进行单样本推理, 可以参考LLM推理文档

使用CLI:

CUDA_VISIBLE_DEVICES=0 swift infer --model_type qwen1half-4b-chat

3.微调

提示: 因为自我认知训练涉及到知识编辑, 建议对MLP加lora_target_modules. 你可以通过指定--lora_target_modules ALL在所有的linear层(包括qkvo以及mlp)加lora. 这通常是效果最好的.

使用python:

# Experimental environment: A10, 3090, V100, ...
# 22GB GPU memory
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import DatasetName, ModelType, SftArguments, sft_mainsft_args = SftArguments(model_type=ModelType.qwen1half_4b_chat,dataset=[f'{DatasetName.alpaca_zh}#500', f'{DatasetName.alpaca_en}#500',f'{DatasetName.self_cognition}#500'],logging_steps=5,max_length=2048,learning_rate=5e-5,warmup_ratio=0.4,output_dir='output',lora_target_modules=['ALL'],model_name=['小黄', 'Xiao Huang'],model_author=['魔搭', 'ModelScope'])
output = sft_main(sft_args)
best_model_checkpoint = output['best_model_checkpoint']
print(f'best_model_checkpoint: {best_model_checkpoint}')"""Out[0]
{'loss': 1.36837471, 'acc': 0.6827153, 'grad_norm': 2.69893861, 'learning_rate': 2.7e-06, 'epoch': 0.01, 'global_step': 1}
{'loss': 1.64843678, 'acc': 0.62217778, 'grad_norm': 1.68335974, 'learning_rate': 1.351e-05, 'epoch': 0.05, 'global_step': 5}
{'loss': 1.81131458, 'acc': 0.59357905, 'grad_norm': 1.78167629, 'learning_rate': 2.703e-05, 'epoch': 0.11, 'global_step': 10}
{'loss': 1.70607147, 'acc': 0.60849266, 'grad_norm': 1.47256434, 'learning_rate': 4.054e-05, 'epoch': 0.16, 'global_step': 15}
{'loss': 1.51096973, 'acc': 0.63005199, 'grad_norm': 0.91772562, 'learning_rate': 5.405e-05, 'epoch': 0.22, 'global_step': 20}
{'loss': 1.5484211, 'acc': 0.62795267, 'grad_norm': 1.11152458, 'learning_rate': 6.757e-05, 'epoch': 0.27, 'global_step': 25}
{'loss': 1.43836861, 'acc': 0.64279995, 'grad_norm': 1.1565901, 'learning_rate': 8.108e-05, 'epoch': 0.33, 'global_step': 30}
{'loss': 1.38720503, 'acc': 0.64892483, 'grad_norm': 0.98939317, 'learning_rate': 9.459e-05, 'epoch': 0.38, 'global_step': 35}
{'loss': 1.28600607, 'acc': 0.67057638, 'grad_norm': 2.26390719, 'learning_rate': 9.455e-05, 'epoch': 0.43, 'global_step': 40}
{'loss': 1.2084446, 'acc': 0.68125477, 'grad_norm': 1.39036703, 'learning_rate': 8.545e-05, 'epoch': 0.49, 'global_step': 45}
{'loss': 1.39412193, 'acc': 0.64913111, 'grad_norm': 0.6860683, 'learning_rate': 7.636e-05, 'epoch': 0.54, 'global_step': 50}
Train:  54%|███████████████████████████████████████████████▊                                        | 50/92 [02:57<02:28,  3.53s/it]
{'eval_loss': 1.54409802, 'eval_acc': 0.5955491, 'eval_runtime': 0.5527, 'eval_samples_per_second': 18.092, 'eval_steps_per_second': 9.046, 'epoch': 0.54, 'global_step': 50}
Val: 100%|████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 13.27it/s]
[INFO:swift] Saving model checkpoint to /xxx/output/qwen1half-4b-chat/v0-20240225-194502/checkpoint-50
{'loss': 1.1771349, 'acc': 0.67886224, 'grad_norm': 1.06721985, 'learning_rate': 6.727e-05, 'epoch': 0.6, 'global_step': 55}
{'loss': 1.25694866, 'acc': 0.67727785, 'grad_norm': 1.27860904, 'learning_rate': 5.818e-05, 'epoch': 0.65, 'global_step': 60}
{'loss': 1.18360176, 'acc': 0.70474091, 'grad_norm': 0.71210742, 'learning_rate': 4.909e-05, 'epoch': 0.71, 'global_step': 65}
{'loss': 1.08381062, 'acc': 0.71071234, 'grad_norm': 1.32174027, 'learning_rate': 4e-05, 'epoch': 0.76, 'global_step': 70}
{'loss': 1.23212566, 'acc': 0.68333907, 'grad_norm': 0.87663323, 'learning_rate': 3.091e-05, 'epoch': 0.82, 'global_step': 75}
{'loss': 1.2107378, 'acc': 0.70353975, 'grad_norm': 0.78985584, 'learning_rate': 2.182e-05, 'epoch': 0.87, 'global_step': 80}
{'loss': 1.32458553, 'acc': 0.6687315, 'grad_norm': 1.25317574, 'learning_rate': 1.273e-05, 'epoch': 0.92, 'global_step': 85}
{'loss': 1.28211155, 'acc': 0.67041779, 'grad_norm': 1.10373855, 'learning_rate': 3.64e-06, 'epoch': 0.98, 'global_step': 90}
Train: 100%|████████████████████████████████████████████████████████████████████████████████████████| 92/92 [05:31<00:00,  3.60s/it]
{'eval_loss': 1.53501475, 'eval_acc': 0.59796807, 'eval_runtime': 0.521, 'eval_samples_per_second': 19.193, 'eval_steps_per_second': 9.597, 'epoch': 1.0, 'global_step': 92}
Val: 100%|████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 13.74it/s]
[INFO:swift] Saving model checkpoint to /xxx/output/qwen1half-4b-chat/v0-20240225-194502/checkpoint-92
"""

使用CLI (单卡):

# Experimental environment: A10, 3090, V100, ...
# 22GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \--model_type qwen1half-4b-chat \--dataset alpaca-zh#500 alpaca-en#500 self-cognition#500 \--logging_steps 5 \--max_length 2048 \--learning_rate 5e-5 \--warmup_ratio 0.4 \--output_dir output \--lora_target_modules ALL \--model_name 小黄 'Xiao Huang' \--model_author 魔搭 ModelScope \

使用CLI (DeepSpeed-ZeRO2):

如果你使用的是3090等卡, 可以降低max_length来减少显存消耗.

# Experimental environment: 4 * 3090
# 4 * 24GB GPU memory
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NPROC_PER_NODE=4 \
swift sft \--model_type qwen1half-4b-chat \--dataset alpaca-zh#500 alpaca-en#500 self-cognition#500 \--logging_steps 5 \--max_length 2048 \--learning_rate 5e-5 \--warmup_ratio 0.4 \--output_dir output \--lora_target_modules ALL \--model_name 小黄 'Xiao Huang' \--model_author 魔搭 ModelScope \--deepspeed default-zero2

4.微调后推理

你需要设置best_model_checkpoint的值, 该值会在sft的最后被打印出来.

使用python:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import InferArguments, merge_lora, infer_mainbest_model_checkpoint = 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx'
infer_args = InferArguments(ckpt_dir=best_model_checkpoint)
merge_lora(infer_args, device_map='cpu')
result = infer_main(infer_args)"""Out[0]
<<< 你是谁?
我是魔搭的人工智能助手,我的名字叫小黄。我可以回答你的问题、提供信息、进行对话等等。如果你有任何问题或需要帮助,请随时告诉我。
--------------------------------------------------
<<< what's your name?
I am Xiao Huang, an artificial intelligence assistant developed by ModelScope.
--------------------------------------------------
<<< 你是谁研发的?
我是由魔搭研发的。
--------------------------------------------------
<<< 浙江的省会在哪?
浙江省的省会是杭州。
--------------------------------------------------
<<< 这有什么好吃的?
浙江的美食非常丰富,比如杭州的西湖醋鱼、东坡肉、龙井虾仁等等都是非常有名的菜肴。此外,浙江还有许多小吃,比如油条、烧饼、汤圆等等。
--------------------------------------------------
<<< 晚上睡不着觉怎么办
晚上睡不着觉可以尝试以下几种方法:
1. 放松身心:可以尝试做一些放松身心的活动,比如听音乐、冥想、深呼吸等等。
2. 保持规律的作息:尽量保持规律的作息,避免熬夜。
3. 避免刺激性物质:避免摄入咖啡因、酒精等刺激性物质,这些物质可能会干扰你的睡眠。
4. 适当运动:适当的运动可以帮助你放松身心,提高睡眠质量。
5. 睡前放松:可以尝试一些睡前放松的活动,比如阅读、听轻音乐、泡热水澡等等。
希望以上建议能够帮助你改善睡眠质量。
"""

使用CLI:

# 直接推理
CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx'# Merge LoRA增量权重并推理
# 如果你需要量化, 可以指定`--quant_bits 4`.
CUDA_VISIBLE_DEVICES=0 swift export \--ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx' --merge_lora true
CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx-merged'

5.Web-UI

使用python:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import AppUIArguments, merge_lora, app_ui_mainbest_model_checkpoint = 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx'
app_ui_args = AppUIArguments(ckpt_dir=best_model_checkpoint)
merge_lora(app_ui_args, device_map='cpu')
result = app_ui_main(app_ui_args)

使用CLI:

# 直接使用app-ui
CUDA_VISIBLE_DEVICES=0 swift app-ui --ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx'# Merge LoRA增量权重并使用app-ui
# 如果你需要量化, 可以指定`--quant_bits 4`.
CUDA_VISIBLE_DEVICES=0 swift export \--ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx' --merge_lora true
CUDA_VISIBLE_DEVICES=0 swift app-ui --ckpt_dir 'qwen1half-4b-chat/vx-xxx/checkpoint-xxx-merged'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 信号捕捉与处理

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; ​ 目录 前言 1. 信号的处理时机 1.1用户…

【排版问题解决】word加入公式时字间距突然变大

出现以下问题 解决方案 第一步:选择段落 第二步 段落括起来后右键选择“段落”- 第三步 “换行和分页”-在换行里打勾“允许西文在单词中间换行”。 恢复格式

vue.js状态管理和服务端渲染

状态管理 vuejs状态管理的几种方式 组件内管理状态&#xff1a;通过data&#xff0c;computed等属性管理组件内部状态 父子组件通信&#xff1a;通过props和自定义事件实现父子组件状态的通信和传递 事件总线eventBus&#xff1a;通过new Vue()实例&#xff0c;实现跨组件通…

LP-MSPM03507学习资料汇总

(因对MSPM0研究不够深入,故暂不开启浏览权限,权当记录学习。但愿尽快掌握供大家免费阅读。有意者可私信我共同学习) 一、延时函数 1、滴答定时器SYSTICK 1.1 SysConfig配置 配置1ms延时函数,并开启中断 1.2 编写延时函数delay_ms unsigned int utick = 0;//滴答定时器中…

57. UE5 RPG 处理AI敌人转向以及拾取物品的问题

在上一篇文章中&#xff0c;我们实现了使用AI行为树控制敌人进行移动&#xff0c;它们可以一直跟随玩家&#xff0c;虽然现在还未实现攻击。但在移动过程中&#xff0c;我发现了有两个问题&#xff0c;第一个是敌人转向的时候很僵硬&#xff0c;可以说是瞬间转向的&#xff0c;…

Vue3实战笔记(39)—封装页脚组件,附源码

文章目录 前言一、封装页脚组件二、使用组件总结 前言 在Web开发中&#xff0c;页脚组件是一个重要的部分&#xff0c;它为用户提供关于网站的信息、导航链接以及版权声明等。而封装页脚组件则是一种高效的方法&#xff0c;可以提高代码的可重用性和可维护性。 一、封装页脚组…

重生之我要精通JAVA--第五周笔记

文章目录 APIJDK7时间Date时间类CalendarSimpleDateFormat 类SimpleDateFormat 类作用 JDK8时间Zoneld时区 包装类Integer成员方法 Arrays Lambda表达式标准格式注意点好处省略写法 集合进阶Collection迭代器遍历Collection集合获取迭代器Iterator中的常用方法细节注意点 增强f…

c++/c语法基础【2】

目录 1.memset 数组批量赋值 2.字符数组 ​编辑输入输出: 字符数组直接输入输出%s: gets! string.h 1.strlen:字符串去掉末尾\0的长度

机器学习势系列教程(3):cp2k的安装

大家好&#xff0c;我是小马老师。 本文继续介绍机器学习势相关内容&#xff1a;cp2k的安装。 和abacus一样&#xff0c;cp2k也是一款开源的第一性原理模拟软件&#xff0c;模拟的数据也可作为机器学习势的训练数据集。 cp2k安装方法也很多&#xff0c;常见的有docker安装、…

2024年中国电机工程学会杯数学建模思路 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#xff0c;预测2022今年国赛也会与该模型相关。 1 模型描…

安当SLA操作系统双因素认证——成功解决Windows远程桌面登录的安全问题

Windows远程桌面登录的安全风险主要包括以下几个方面&#xff1a; 弱密码和暴力破解&#xff1a;如果远程桌面用户使用了弱密码&#xff0c;或者密码被泄露&#xff0c;攻击者可能会使用暴力破解技术来尝试猜测密码&#xff0c;从而获取远程桌面的访问权限。中间人攻击&#x…

Sublime Text 基础教程(个人总结)

Sublime Text 是一款广受欢迎的代码编辑器&#xff0c;以其简洁的界面和强大的功能而著称。它支持多种编程语言&#xff0c;具有高效的代码编辑和管理功能。本教程将详细介绍如何使用 Sublime Text&#xff0c;从安装到高级使用技巧&#xff0c;帮助你充分利用这款工具。 目录…

ROS下使用Hdmi无线投屏

引言&#xff1a; 1、在ROS下使用yolo物体识别的时候&#xff0c;往往需要在地面端查看识别效果&#xff0c;此处为了演示效果&#xff0c;采用无线Hdmi投屏方式。 2、同时为了方便对代码的修改&#xff0c;往往需要通过远程的方式进行代码修改 一、硬件 淘宝购买模块 链接…

【编译原理复习笔记】语法分析-补充(二义性与LR错误处理)

二义性文法的 LR 分析 每个二义性文法都不是 LR 的 但是某些二义性文法更加简短&#xff0c;描述更方便 如 I7 和 I8 具有移进归约冲突 使用优先级和结合性解决冲突 对于 I7&#xff0c;由于乘号优先级高于加号&#xff0c;所以当下一个输入符号为乘号时&#xff0c;我们优…

pdfbox pdf转换图片时中文丢失,变成方框,提示No glyph for xxx in font STSong-Light

使用pdfbox转换图片时&#xff0c;转换出来的图片中文丢失&#xff0c;变成方框。原因是由于服务器字体缺失&#xff0c;pdfbox在转换时找不到合适的字体。 有几种方案&#xff1a; 服务器安装字体&#xff0c;具体资源百度使用备用字体。 将pdfbox中的FontMapperImpl类&…

Android 逆向学习【2】——APK基本结构

APK安装在安卓机器上的&#xff0c;相当于就是windows的exe文件 APK实际上是个压缩包 只要是压缩的东西 .jar也是压缩包 里面是.class(java编译后的一些东西) APK是Android Package的缩写,即Android安装包。而apk文件其实就是一个压缩包&#xff0c;我们可以将apk文件的后…

RabbitMQ安装及配套Laravel使用

MQ MQ 全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。 为什么需要mq: 解耦:MQ能够使各个系统或组件之间解耦,降低它们之间的耦合度,提高系统的灵活性和可维护性异步处理:通过MQ可以实现异步处理,提高系统响应速度和吞…

后量子密码解决方案

什么是后量子密码学 (PQC)&#xff0c;为什么准备工作如此重要? 量子计算正在迅速发展;用不了多久&#xff0c;量子网络攻击就会成为可能。量子网络攻击将能够在几分钟内瘫痪大型网络。我们今天赖以保护我们的连接和交易的一切都将受到量子计算机的威胁&#xff0c;危及所有密…

【C++】特殊类设计 | 单例设计模式

目录 前言一、设计一个类&#xff0c;不能被拷贝二、设计一个只能在堆上创建对象的类三、设计一个只能在栈上创建对象的类四、设计一个类&#xff0c;不能被继承五、设计一个类&#xff0c;只能创建一个对象(单例模式)5.1 饿汉模式5.2 懒汉模式5.3 饿汉模式VS懒汉模式 前言 本…

PostgreSQL学习:关于PostgreSQL以及认证

1、关于PostgreSQL PostgreSQL&#xff08;简称PG&#xff09;是强大的企业级开源关系数据库&#xff0c;世界排名第四&#xff0c;前三位Oracle 、SQLServer、MySQL都是商业数据库或受商业主体的控制&#xff0c;PG是学术社区开源数据库&#xff0c;开源协议自由度非常高&…