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

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

时间:2024-05-29 10:58:08浏览次数:18  
标签:10 必知 模型 xxx checkpoint -- learning model swift

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_main

sft_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_main

best_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_main

best_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'

更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

标签:10,必知,模型,xxx,checkpoint,--,learning,model,swift
From: https://www.cnblogs.com/ting1/p/18219707

相关文章

  • 微调真的能让LLM学到新东西吗:引入新知识可能让模型产生更多的幻觉
    大型语言模型(llm)是在巨大的文本语料库上训练的,在那里他们获得了大量的事实知识。这些知识嵌入到它们的参数中,然后可以在需要时使用。这些模型的知识在培训结束时被“具体化”。在预训练结束时,模型实际上停止学习。对模型进行对齐或进行指令调优,让模型学习如何充分利用这些知识,......
  • 一款交流220V转直流3.3V蓝牙WIFI模块单片机供电的非隔离芯片WT5107
    一款交流220V转直流3.3V蓝牙WIFI模块单片机供电的非隔离芯片WT5107WT5107是一种高性能和高精度的非隔离降压开关电源恒压控制驱动芯片,适用于220VAC或全电压范围输入。它特别适合于小家电和白色家电等设备的电源,固定输出为3.3V。该芯片内部集成了高压MOS功率管,采用恒压控制模式,可......
  • LLM 大模型学习必知必会系列(九):Agent微调最佳实践,用消费级显卡训练属于自己的Agent!
    LLM大模型学习必知必会系列(九):Agent微调最佳实践,用消费级显卡训练属于自己的Agent!SWIFT支持了开源模型,尤其是中小型模型(7B、14B等)对Agent场景的训练,并将loss-scale技术应用到agent训练中,使中小模型APICall能力更稳定,并支持使用单张商业级显卡进行Agent推理和部署,可以直接在生......
  • Win10如何更改C盘下用户文件的名字
        在windows10中,用户文件通常存储在c盘的“用户”文件夹下。这个文件夹包含多个子文件夹,如“文档”、“下载”、“图片”等,它们分别存放着用户的个人数据和设置。有时候,由于各种原因,用户可能需要更改这些文件夹的名称。这可能出于组织文件的目的,或者是为了自定义文......
  • 2024.5.10(周五)总结
    【题目描述】所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。【练习要求】请给出源代码程序和运行测试结果,源代码程序......
  • 【C++】【YOLO】搭建环境运行YOLO模型,完成目标识别
    1、安装VisualStudio,勾选C++和Python负荷 2、安装CUDA|Pytorch|Python这三者之间的版本关系很重要详情参考:Pycharm搭建CUDA,Pytorch教程(匹配版本,安装,搭建全保姆教程)_cuda12.3对应的pytorch版本-CSDN博客3、下载ultralytics所有代码进行修改(https://github.com/ultralyt......
  • (免费领源码)Java/Mysql数据库+01012大学生爱心互助代购网站,计算机毕业设计项目推荐上万
    摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,企业只能以用户为导向,按品种分类规划,以产品的持续创新作为企业最重要的竞争手段。系统采用了B/S结构,将所有业务模块采用以浏览器交互的模式,选择My......
  • 类加载与双亲委派模型(重点!)
    1.1类的生命周期类在内存中完整的生命周期:加载-->使用-->卸载。其中加载过程又分为:装载、链接、初始化三个阶段1.2 类的加载过程(重点,背也要背下来)当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、链接、初始化三个步骤来对该类进行初始化。如果没有......
  • Deep Models Under the GAN: Information Leakage from Collaborative Deep Learning
    最近要看一些推理攻击的内容,把看过的都放过来吧DeepModelsUndertheGAN:InformationLeakagefromCollaborativeDeepLearningGAN下的深度模型:协作深度学习的信息泄漏ACMCCS2017文章目录一、论文信息1.题目2.作者3.期刊年限4.关键词二、背景三、创新......
  • MATLAB的多种预测模型函数(上)建议收藏,可直接调用
    初始变量:yt:输入的时间序列数据j:预测的未来步数 线性回归预测法:functionresults=forecast13(~,yt,j)%yt:输入的时间序列数据%j:预测的未来步数%确定输入数据的长度n=length(yt);%将时间序列数据转换为设计矩阵,用于线......