从零开始学习大模型,大模型微调实战(非常详细)零基础入门到精通,收藏这一篇就够了

chatglm3 lora微调,训练+预测问题总结 ValueError: Tokenizer class ChatGLMTokenizer does not exist or is not currently imported. 如下图。chatglm3没有set_input_embeddings,两个解决方案,推荐方法2。(2)修改load_model_and_tokenizer方法中的model。1.自写set_input_embeddings方法(网上的没试过)transformers版本太旧了,换版本~1.依赖缺啥包就import啥包。 阅读详情

本章我们以ChatGLM3为例,对ChatGLM3-6B模型进行 LORA 高效微调。本章尽量用最简洁的语言及方法对大模型进行微调实际操练。

什么是 LORA 高效微调:

lora微调原理论文:

https://arxiv.org/abs/2106.09685

用最简单的语言理解LORA高效微调:

假设我们有一个非常厉害、已经学会很多知识的“专家”(即预训练的大语言模型)。现在我们想让这位专家更好地帮助我们完成一项具体的任务,比如回答医学的专业问题或者回答其它专业的问题。常规的做法是,我们需要给专家把专业知识从头到尾培训一番,让他专门学习这项任务的相关知识。但这样做耗时耗力,而且可能会让专家忘记一些通用的语言常识。

LORA高效微调提供了一种聪明的方法,让我们不用对专家做全面的重新培训,就能让他更好地适应新任务。它是怎么做到的呢?

首先,我们给这位专家配备两本“秘籍”:一本是简化版的“知识点手册”(对应低秩矩阵A),另一本是对应的“解码手册”(对应低秩矩阵B)。这两本手册都很薄,只记录了与新任务最相关的少量关键知识。

然后,我们只教专家学习这两本秘籍的内容,而不去动他原来掌握的那些很多的的通用语言知识。也就是说,我们在微调时,只更新这两本秘籍里的内容,而不去碰专家脑子里其他成千上万的知识点。

最后,当专家要解决新任务时,他会先参考简化版的“知识点手册”,找到与任务相关的关键知识,然后用“解码手册”把这些知识转化为具体的行动指令。这样,专家就可以结合原有的语言知识和新学的相关专业知识,更好地完成新任务。

本次ChatGLM3-6B模型微调硬件及软件配置:

操作系统:ubuntu22.04

CPU: 12核

内存:90G (GPU模式下,不会需要太多内存,16G足够)

GPU: RTX 4090(24GB) * 1

调试及运行环境:Jupyter Notebook

微调步骤如下:

1. ChatGLM3及ChatGLM3-6B模型下载

# 下载ChatGLM3``!git clone https://github.com/THUDM/ChatGLM3``   ``# 依赖下载``!cd ChatGLM3 && pip install -r requirements.txt``   ``# modelscope API下载``!pip install modelscope``# 模型下载``from modelscope import snapshot_download``model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "v1.0.0")

2. 把ChatGLM3-6B模型移动到ChatGLM3文件夹

我们使用modelscope下载的数据集模型文件都在缓存文件夹中,为了方便读取和微调,我们把它移动到ChatGLM3文件夹中。

# 模型文件所在路径``# /root/.cache/modelscope/hub/ZhipuAI/chatglm3-6b``# 复制到ChatGLM3文件夹``!cp -r  /root/.cache/modelscope/hub/ZhipuAI/chatglm3-6b /ChatGLM3

注意:

此后所有的文件操作都在ChatGLM3文件夹或子文件夹中。

3. 准备微调数据集

微调数据集必须包括训练数据集、验证数据集;测试数据集可以和验证数据集相同。

因本次训练数据集较少,只做操作展示,故把训练数据集、验证数据集、测试数据集都设置为一样。如果您用于商业数据微调,请自行标注好测试数据集和验证数据集。

训练数据集:(文件名:train.json)

{"content": "你是谁", "summary": "我是写代码的中年人的助手!有什么需要帮助你的吗?"}``{"content": "你好", "summary": "你好,我是写代码的中年人的助手!有什么需要帮助你的吗?"}``{"content": "写代码的中年人", "summary": "一位写代码的中年人正端坐在电脑前。他戴着一副黑框眼镜,镜片后的眼神专注而深邃,犹如一盏明亮的探照灯,照亮了面前复杂繁密的代码世界。他的手指熟练地在键盘上跳跃,宛如一位经验丰富的钢琴家在琴键上演绎无声的交响乐章。岁月在他的额头上刻下了几道皱纹,那是时间赋予他的智慧印记;而他始终保持着对编程技术的热情和执着追求,与时俱进地掌握着最新的编程语言和技术框架。"}``{"content": "你的#公众号", "summary": "请微信搜索写代码的中年人!"}

验证数据集:(文件名:dev.json)

{"content": "你是谁", "summary": "我是写代码的中年人的助手!有什么需要帮助你的吗?"}``{"content": "你好", "summary": "你好,我是写代码的中年人的助手!有什么需要帮助你的吗?"}``{"content": "写代码的中年人", "summary": "一位写代码的中年人正端坐在电脑前。他戴着一副黑框眼镜,镜片后的眼神专注而深邃,犹如一盏明亮的探照灯,照亮了面前复杂繁密的代码世界。他的手指熟练地在键盘上跳跃,宛如一位经验丰富的钢琴家在琴键上演绎无声的交响乐章。岁月在他的额头上刻下了几道皱纹,那是时间赋予他的智慧印记;而他始终保持着对编程技术的热情和执着追求,与时俱进地掌握着最新的编程语言和技术框架。"}``{"content": "你的#公众号", "summary": "请微信搜索写代码的中年人!"}

我们把这两个文集放在如下路径中,文件夹名根据自己喜好定义。

ChatGLM3/finetune_demo/data/ColinData/

4. 微调依赖安装

进入finetune_demo文件夹,执行如下命令安装依赖:

# 安装依赖``!pip install -r requirements.txt

5. 切割数据集(格式转换)

执行下面的代码,对我们准备好的数据集进行格式化。

import json``from typing import Union``from pathlib import Path``   ``   ``def _resolve_path(path: Union[str, Path]) -> Path:`    `return Path(path).expanduser().resolve()``   ``   ``def _mkdir(dir_name: Union[str, Path]):`    `dir_name = _resolve_path(dir_name)`    `if not dir_name.is_dir():`        `dir_name.mkdir(parents=True, exist_ok=False)``   ``   ``def convert_adgen(data_dir: Union[str, Path], save_dir: Union[str, Path]):`    `def _convert(in_file: Path, out_file: Path):`        `_mkdir(out_file.parent)`        `with open(in_file, encoding='utf-8') as fin:`            `with open(out_file, 'wt', encoding='utf-8') as fout:`                `for line in fin:`                    `dct = json.loads(line)`                    `sample = {'conversations': [{'role': 'user', 'content': dct['content']},`                                                `{'role': 'assistant', 'content': dct['summary']}]}`                    `fout.write(json.dumps(sample, ensure_ascii=False) + '\n')``   `    `data_dir = _resolve_path(data_dir)`    `save_dir = _resolve_path(save_dir)``   `    `train_file = data_dir / 'train.json'`    `if train_file.is_file():`        `out_file = save_dir / train_file.relative_to(data_dir)`        `_convert(train_file, out_file)``   `    `dev_file = data_dir / 'dev.json'`    `if dev_file.is_file():`        `out_file = save_dir / dev_file.relative_to(data_dir)`        `_convert(dev_file, out_file)``   ``# 其它代码不变,只有此处可以改为自己定义的文件路径``convert_adgen('data/ColinData', 'data/ColinData_fix')``# 此处我们把转换后的数据集放在ColinData_fix文件中。

执行上面代码后,我们在ColinData_fix文件夹得到两个文件,即转后格式的训练集和测试集(train.json和dev.json),格式如下:

{"conversations": [{"role": "user", "content": "你是谁"}, {"role": "assistant", "content": "我是写代码的中年人的助手!有什么需要帮助你的吗?"}]}``{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "你好,我是写代码的中年人的助手!有什么需要帮助你的吗?"}]}``{"conversations": [{"role": "user", "content": "写代码的中年人"}, {"role": "assistant", "content": "一位写代码的中年人正端坐在电脑前。他戴着一副黑框眼镜,镜片后的眼神专注而深邃,犹如一盏明亮的探照灯,照亮了面前复杂繁密的代码世界。他的手指熟练地在键盘上跳跃,宛如一位经验丰富的钢琴家在琴键上演绎无声的交响乐章。岁月在他的额头上刻下了几道皱纹,那是时间赋予他的智慧印记;而他始终保持着对编程技术的热情和执着追求,与时俱进地掌握着最新的编程语言和技术框架。"}]}``{"conversations": [{"role": "user", "content": "你的#公众号"}, {"role": "assistant", "content": "请微信搜索写代码的中年人!"}]}

6. 进行微调

在微调之前我们需要对配置文件进行配置,打开配置文件,红框中是本次微调需要的配置信息。

配置文件路径:

ChatGLM3/finetune_demo/configs/lora.yaml

在finetune_demo文件夹中,官方已经给我们提供了微调文件:

finetune_hf.py,

因本次我们只有4条验证数据集,我们需要修改finetune_hf.py文件,如下图:

执行微调命令:

# 训练预计花费40分钟左右``!CUDA_VISIBLE_DEVICES=0 /root/miniconda3/bin/python3 finetune_hf.py  data/ColinData_fix  /ChatGLM3/chatglm3-6b  /configs/lora.yaml

注意:

CUDA_VISIBLE_DEVICES:参数为我们使用哪张GPU进行训练,可使用nvidia-smi命令来查看系统的GPU信息,及GPU的序号。这里使用编号为0的GPU,也就是第一张GPU。

# 微调输出``Loading checkpoint shards:   0%|                          | 0/7 [00:00<?, ?it/s]/root/miniconda3/lib/python3.10/site-packages/torch/_utils.py:831: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly.  To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage()`  `return self.fget.__get__(instance, owner)()``Loading checkpoint shards: 100%|██████████████████| 7/7 [00:03<00:00,  2.31it/s]``trainable params: 1,949,696 || all params: 6,245,533,696 || trainable%: 0.031217444255383614``--> Model``   ``--> model has 1.949696M params``   ``# 中间输出省略``   ``{'eval_rouge-1': 100.0, 'eval_rouge-2': 100.0, 'eval_rouge-l': 100.0, 'eval_bleu-4': 1.0, 'eval_runtime': 4.0702, 'eval_samples_per_second': 0.737, 'eval_steps_per_second': 0.246, 'epoch': 2000.0}``100%|███████████████████████████████████████| 2000/2000 [39:26<00:00,  1.11s/it]``100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 48.61it/s]`                                                                                `Saving model checkpoint to ./output/checkpoint-2000``/root/miniconda3/lib/python3.10/site-packages/peft/utils/save_and_load.py:154: UserWarning: Could not find a config file in /root/autodl-tmp/colin/ChatGLM3/chatglm3-6b - will assume that the vocabulary was not modified.`  `warnings.warn(``   ``   ``Training completed. Do not forget to share your model on huggingface.co/models =)``   ``   ``{'train_runtime': 2366.7504, 'train_samples_per_second': 3.38, 'train_steps_per_second': 0.845, 'train_loss': 0.10584733390808106, 'epoch': 2000.0}``100%|███████████████████████████████████████| 2000/2000 [39:26<00:00,  1.18s/it]``***** Running Prediction *****`  `Num examples = 4`  `Batch size = 16``100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 42.20it/s]

微调完成后会在此路径生成checkpoint-2000微调文件:

ChatGLM3/finetune_demo/output/checkpoint-2000

7. 使用微调后的模型进行推理

我们使用官方提供的inference_hf.py文件进行推理,需要传入微调后的模型路径和提示语。

# 提示语 你是 进行推理``!CUDA_VISIBLE_DEVICES=0  /root/miniconda3/bin/python3 inference_hf.py output/checkpoint-2000/ --prompt "你是?"
# 输出``   ``Loading checkpoint shards:   0%|                          | 0/7 [00:00<?, ?it/s]/root/miniconda3/lib/python3.10/site-packages/torch/_utils.py:831: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly.  To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage()`  `return self.fget.__get__(instance, owner)()``Loading checkpoint shards: 100%|██████████████████| 7/7 [00:03<00:00,  2.02it/s]``我是写代码的中年人的助手!有什么需要帮助你的吗?
# 提示语 写代码的中年人 进行推理``!CUDA_VISIBLE_DEVICES=0  /root/miniconda3/bin/python3 inference_hf.py output/checkpoint-2000/ --prompt "写代码的中年人"
# 输出``   ``Loading checkpoint shards:   0%|                          | 0/7 [00:00<?, ?it/s]/root/miniconda3/lib/python3.10/site-packages/torch/_utils.py:831: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly.  To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage()`  `return self.fget.__get__(instance, owner)()``Loading checkpoint shards: 100%|██████████████████| 7/7 [00:03<00:00,  1.93it/s]``一位写代码的中年人正端坐在电脑前。他戴着一副黑框眼镜,镜片后的眼神专注而深邃,犹如一盏明亮的探照灯,照亮了面前复杂繁密的代码世界。他的手指熟练地在键盘上跳跃,宛如一位经验丰富的钢琴家在琴键上演绎无声的交响乐章。岁月在他的额头上刻下了几道皱纹,那是时间赋予他的智慧印记;而他始终保持着对编程技术的热情和执着追求,与时俱进地掌握着最新的编程语言和技术框架。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

四、AI大模型商业化落地方案

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

大模型微调的常见方法总结(非常详细零基础入门精通收藏一篇 阅读详情

相关推荐

ChatGLM LoRA微调实战方案

本文主要介绍了ChatGLM LoRA微调实战方案,希望对学习大语言模型的同学们有所帮助。微调后的推理截图如下所示。 文章目录 0. 简介 1. 安装虚拟环境 2. 下载文件 2.1 下载源代码 2.2 下载模型依赖文件 2.3 下载模型文件 3. 安装依赖库 4. LoRA微调 4.1 下载源代码 4.2 数据格式转换 4.3 tokenize 4.4 微调 5. 推理

herosunly的博客 17万+

ChatGLM系列五:Lora微调

目前主流对大模型进行微调方法有三种:Freeze方法、P-Tuning方法和Lora方法LoRA: 在大型语言模型上对指定参数(权重矩阵)并行增加额外的低秩矩阵,并在模型训练过程中,仅训练额外增加的并行低秩矩阵的参数,冻结其他参数。当“秩值”远小于原始参数维度时,新增的低秩矩阵参数量也就很小。在下游任务tuning时,仅须训练很小的参数,但能获取较好的表现结果。

永胜的博客 2985

chatglm使用lora进行模型微调训练

chatglm使用lora进行模型微调训练,没有采用官方的方案,使用了另一种效果好的方案,对于显存特别友好,24g显存就能训练自己的垂直领域大模型训练了,效果还是非常的好的,适合自己机器不是很多的需要做实验的同学

ChatGLM3本地部署+Lora微调

ChatGLM3本地部署+Lora微调

Bowen_Ding_的博客 3851

大模型入门教程:从零基础精通,非常详细收藏我这一篇

掌握大模型技术,可应对复杂的数据分析任务,提升研究工作的解决能力。学习大模型具备处理复杂性、具有泛化能力灵活性,对求职者有显著提升。本教程从基础概念出发,包括大模型的优势应用、基础知识学习建议、入门基础教程,以及分布式训练、有监督微调AGI学习包等内容。通过推荐的学习资源实战项目资料,引导读者深入学习并实践大模型技术,开启AI大模型之旅。

m0_63171455的博客 3508

大模型】初识大模型(非常详细零基础入门精通收藏一篇

大模型】初识大模型(非常详细零基础入门精通收藏一篇

大模型教程的博客 6189

大模型微调方法总结(非常详细零基础入门精通收藏一篇

本文介绍了大模型微调的一些高效方法,国内大部分公司都是走的微调的路子。预训练难度也很大,这两年应届生有预训练经验的人凤毛棱角。但微调门槛低很多,单张卡就能微调13B的模型。有微调的经验面试应该还是比较加分的,甚至可以自己尝试微调一个LLaMA2 7B。如果简历里项目经历不,这都可以包装成一份项目经历了。Anyway,希望读完本文各位对大模型微调方法有所了解。

h1453586413的博客 2466

大模型微调的7种方法,零基础入门大模型(非常详细)看一篇了!

大模型微调的7种方法,零基础入门大模型(非常详细)看一篇了!

Java癫疯的博客 8642

零基础入门大模型微调,非常详细收藏我这一篇了!

本文为零基础用户提供了大模型微调入门指南,重点介绍了LoRA(低秩适配)微调技术。文章首先解释了全参数微调和参数高效微调(PEFT)的区别,并详细说明了LoRA的原理、优势及适用场景。接着,文章通过SecGPT大模型的实例,逐步展示了如何准备算力资源、配置微调环境、定制数据集、进行训练推理,并评估微调效果。文章还提供了完整的LoRA微调代码,帮助读者在实战中理解微调技术。最后,文章总结了微调过程中可能遇到的问题及评估模型效果的方法,帮助读者更好地掌握大模型微调技术。

2401_84204207的博客 1504

大模型微调: SFT 经验分享(非常详细),零基础入门精通,看这一篇

大模型微调: SFT 经验分享(非常详细),零基础入门精通,看这一篇

Python单行客的博客 1万+

AI大模型入门基础教程(非常详细),AI大模型入门精通收藏一篇了!

AI大模型是指使用大规模数据和强大的计算能力训练出来的人工智能模型。这些模型通常具有高度的准确性和泛化能力,可以应用于各种领域,如自然语言处理、图像识别、语音识别等。

weixin_58753619的博客 6128

一篇带你入门大模型微调大模型微调入门精通收藏这篇就了!

分解成两个低维度(矩阵运算 m * r * r * n =m* n),上图中数据 x 都要给原来的模型和分解后的模型(的 r 矩阵,也就是 Lora 矩阵) 训练,用的时候要合并。

h1453586413的博客 1393

大模型学习路线(2025最新)从零基础入门精通,看完这一篇

以下为你详细介绍 2025 年从零基础入门精通大模型学习路线。

CSDN_224022的博客 5853

大模型微调方法(非常详细),收藏一篇了!

大模型微调方法(非常详细),收藏一篇了!

Python单行客的博客 8269

大模型零基础教程(非常详细),大模型入门精通收藏一篇了!

大模型,是指在人工智能领域,特别实在自然语言处理和机器学习中,拥有大量参数的深度学习模型。这些模型通过在大规模数据集上进行训练,能学到丰富的数据表示和模式,从而在各种任务上表现出色,如文本生成,语言理解,图像识别等。大模型是具有大量参数和复杂结构的模型,这些模型通常具数十亿甚至数万亿个参数,能处理大规模的数据和复杂的任务。通常使用深度学习技术,如深度神经网络,可以从数据中学习并提取特征来执行各种任务。

h1453586413的博客 3849

什么是大模型微调?如何对大模型进行微调大模型入门精通收藏这篇就

从GPT-3到ChatGPT,再到GPT-4和GitHub Copilot,微调在这些过程中发挥了重要作用。什么是微调微调能解决哪些问题?LoRA又是什么?如何进行微调?本文将解答上述问题,并通过代码示例展示如何使用LoRA进行微调微调的技术门槛不高,对于规模不超过100亿参数的模型,所需的硬件成本也不高(100亿参数的模型并非玩具,许多实际应用中会使用这种规模的模型)。即使是非专业的算法人员,也可以尝试微调自己的模型。除了ChatGPT和GitHub Copilot,微调还可以应用于许多其他领域。

Python单行客的博客 1710

LLM大模型技术实战:一文总结大模型微调方法(非常详细零基础入门精通收藏一篇

大模型会成为AI时代的一项基础设施。作为像水、电一样的基础设施,预训练大模型这样的艰巨任务,只会有少数技术实力强、财力雄厚的公司去做。绝大多数人,是水、电的应用者。对这部分人来说,掌握如何用好大模型的技术,更加重要。用好大模型的第一个层次,是掌握用好大模型的第二个层次,是,这也是今天这篇文章的主题。为什么要对大模型进行微调通常,要对大模型进行微调,有以下一些原因:第一个原因是,因为大模型的参数量非常大,,每家公司都去从头训练一个自己的大模型,这个事情的性价比非常低;第二个原因是,。

Javachichi的博客 8048

大模型微调】一文掌握7种大模型微调的方法, 零基础入门精通收藏一篇

本篇文章深入分析了大型模型微调的基本理念和多样化技术,细致介绍了LoRA、适配器调整(Adapter Tuning)、前缀调整(Prefix Tuning)等多个微调方法。详细讨论了每一种策略的基本原则、主要优点以及适宜应用场景,使得读者可以依据特定的应用要求和计算资源限制,挑选最适合的微调方案。大型语言模型(LLM)的训练过程通常分为两大阶段:阶段一:预训练阶段在这个阶段,大型模型会在大规模的无标签数据集上接受训练,目标是使模型掌握语言的统计特征和基础知识。

heaven522的博客 4026
上一篇: 程序员靠谱的兼职平台?
下一篇: 年薪60w人才缺口大, 网络安全这么火!零基础该如何入门学习和进阶?
网络安全大白
博客等级 码龄4年 7289粉丝 703原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值