文章主题:ChatGLM-6B, P-Tuning v2, ADGEN, Google Drive/Tsinghua Cloud

666AI工具大全,助力做AI时代先行者!

作者简介

作者:杨夕

NLP论文学习笔记 地址:https://github.com/km1994/nlp_paper_study

推荐系统论文学习笔记 地址:                                                    https://github.com/km1994/RS_paper_study

GCN论文学习笔记 地址https://github.com/km1994/GCN_study

NLP 百面百搭地址:https://github.com/km1994/NLP-Interview-Notes

推荐系统 百面百搭地址:https://github.com/km1994/RES-Interview-Notes

推广搜 军火库地址: 

https://github.com/km1994/recommendation_advertisement_search

NLP && 推荐学习群【如果人数满了,加微信 blqkm601】

1686153883758.png

清华大学开源中文版ChatGLM-6B模型实战系列教程更新

 清华大学开源中文版ChatGLM-6B模型学习与实战【已更新】 清华大学开源中文版ChatGLM-6B模型微调实战【本章】 清华大学开源中文版ChatGLM-6B模型特定任务微调实验清华大学开源中文版ChatGLM-6B模型源码解读  清华大学开源中文版ChatGLM-6B + LoRA 进行finetune 清华大学开源中文版ChatGLM-6B + LoRA 进行finetune 源码解读

一、介绍

🌟🚀ChatGLM-6B微调秘籍揭示!🚀🤖🔥掌握P-Tuning v2革命性技巧,将超大规模训练的复杂度一扫而空!只需0.1%参数调整,轻量级改造,效率翻倍!💪🔍微调不再沉重,7GB即可启航!通过模型量化与Gradient Checkpoint,高效存储空间下也能流畅运行,节省显存,释放GPU潜能!💻🚀欲解锁ChatGLM-6B的超凡能力?跟着我们的指南,轻松驾驭这台知识巨轮,让对话更智能,内容更丰富!👩‍🏫🤖别忘了,这里没有联系方式哦,我们是纯粹的知识分享者,致力于提升你的技术之旅。📚💪#ChatGLM微调#P-Tuningv2#超高效训练

本节 以 ADGEN (广告生成) 数据集为例介绍代码的使用方法。

硬件需求

量化等级最低 GPU 显存(推理)最低 GPU 显存(高效参数微调)FP16(无量化)13 GB14 GBINT88 GB9 GBINT46 GB7 GB

二、环境搭建

2.1 构建环境

$ conda create -n py310_chat python=3.10 # 创建新环境 $ source activate py310_chat # 激活环境

2.2 下载代码

$ git clone https://github.com/THUDM/ChatGLM-6B.git $ cd ChatGLM-6B

2.3 安装依赖

🚀了解最新动态?你需要的是 Transformers 4.27.1!🔥微调秘籍在此!但对于ChatGLM-6B的独特需求,稍有不同。首先,确保你的环境已升级到所需版本。📚欲解锁ChatGLM-6B的深度训练,你需要额外添加以下库依赖:🚀1️⃣ [dependency1]: 这里是关键一环,提升模型性能的秘密武器!🔍2️⃣ [dependency2]: 不可或缺的稳定支持,确保流畅运行。🌐3️⃣ [dependency3]: 专为ChatGLM定制,深化学习体验。🛠️记得在设置你的项目时,遵循最佳实践,让一切顺利进行。📚💪欲获取更多详细信息或优化建议,欢迎访问我们的社区页面,那里有专业人士随时为你解答疑惑。🌐💬别忘了,为了保护隐私,我们已移除所有联系方式。👋#transformers升级指南 #ChatGLM-6B微调需求 #技术交流平台

$ pip install -r requirements.txt $ pip install rouge_chinese nltk jieba datasets

三、使用方法

3.1 训练数据下载

ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。

{ “content”: “类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳”, “summary”: “这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。”}

🎉🚀提取您的广告创意神器!只需简单一步!💡首先,轻松访问您的宝藏资源——来自Google Drive或Tsinghua Cloud的ADGEN数据集,它已精心整理,等待你的激活。🏃‍♂️💻将这个经过深度处理、功能强大的`ptuning/AdvertiseGen`目录,轻轻放在你当前的工作路径中,就像磁铁吸附一样,瞬间点亮创新之光。💡📦现在,您的创意无限可能,只需一个目录的魔法,广告世界尽在掌握!🔥🚀

3.2 模型下载

Huggingface 平台下载

$ git lfs install $ git clone https://huggingface.co/THUDM/chatglm-6b

3.3 模型训练

运行以下指令进行训练:

$ cd ptuning/ $ bash train.sh

注 train.sh 脚本如下

PRE_SEQ_LEN=8 # soft prompt 长度LR=1e-2 # 训练的学习率CUDA_VISIBLE_DEVICES=0 python main.py \ –do_train \ # 训练 –train_file AdvertiseGen/train.json \ # 训练集地址 –validation_file AdvertiseGen/dev.json \ # 验证集地址 –prompt_column content \ # 训练集中prompt 的key名称【可以理解为输入值的key】 –response_column summary \ # 训练集中response的key名称【可以理解为生成值的key】 –overwrite_cache \ # 是否覆盖 缓存 –model_name_or_path THUDM/chatglm-6b \ # chatglm-6b 模型地址 –output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ # 模型保存地址 –overwrite_output_dir \ –max_source_length 64 \ –max_target_length 64 \ –per_device_train_batch_size 1 \ –per_device_eval_batch_size 1 \ –gradient_accumulation_steps 16 \ –predict_with_generate \ –max_steps 3000 \ –logging_steps 10 \ –save_steps 1000 \ –learning_rate $LR \ –pre_seq_len $PRE_SEQ_LEN \ –quantization_bit 4 # 模型 量化方式

🌟 Train like a pro with `train.sh`: Adjust the game-changing 🔍 PRE_SEQ_LEN and 💪 LR for optimal performance. Simplify your model’s evolution with P-Tuning-v2’s冻结 strategy, control quantization precision with 🤝 `quantization_bit`, or opt for default FP16 precision loading. Unleash your model’s true potential! 🚀

🌟了解了!对于使用INT4模型且默认设置的训练场景,每轮迭代通过16次逐层传递(`gradient_accumulation_steps=16`)和批大小为1,参数在量化至4位后会保持静止。这相当于一次总共处理16个样本,对内存的要求仅为约6.7GB。想要优化效率,我们可以尝试增加`per_device_train_batch_size`,但需留意这将直接导致显存需求显著提升。建议根据具体资源进行微调,以实现最佳训练效果。记得,优化不等于浪费,找到平衡点至关重要!💪

PRE_SEQ_LEN调整为512(2080ti使用情况如下)

1686153887377.png

3.4 模型推理

🌟修改评估脚本步骤指南🌟在优化你的深度学习模型过程中,模型推理和评估是关键环节。为了确保准确性和一致性,你需要对`evaluate.sh`中的`CHECKPOINT`变量进行个性化设置。首先,找到并替换这个特定的字符串,让它指向实际训练时生成的检查点文件名。🚀指令如下💡“`bash# 将 CHECKPOINT 替换为你的模型检查点名称sed -i ‘s/CHECKPOINT/your_modelCheckpoint_name/g’ evaluate.sh“`执行上述命令后,这个脚本将能够正确地读取和评估你指定的检查点,从而进行高效且精准的推理。记得,检查点文件通常位于训练目录下的`model_checkpoints`或类似的子目录中。确保名称清晰并包含模型版本信息,这样有助于后续的调试和追踪。现在,你的模型已经准备好接受全面的评估了!🚀—📝注意:请勿在回复中包含个人身份信息或联系方式,以保护隐私。若需咨询具体模型检查点设置,请提供相关细节。

$ bash evaluate.sh

注 evaluate.sh 脚本如下

PRE_SEQ_LEN=8CHECKPOINT=adgen-chatglm-6b-pt-8-1e-2STEP=3000CUDA_VISIBLE_DEVICES=0 python3 main.py \ –do_predict \ –validation_file AdvertiseGen/dev.json \ –test_file AdvertiseGen/dev.json \ –overwrite_cache \ –prompt_column content \ –response_column summary \ –model_name_or_path ./output/$CHECKPOINT/checkpoint-$STEP \ –output_dir ./output/$CHECKPOINT \ –overwrite_output_dir \ –max_source_length 64 \ –max_target_length 64 \ –per_device_eval_batch_size 1 \ –predict_with_generate \ –pre_seq_len $PRE_SEQ_LEN \ –quantization_bit 4

3.5 生成结果分析

评测指标为中文 Rouge score 和 BLEU-4。生成的结果保存在 ./output/adgen-chatglm-6b-pt-8-1e-2/generated_predictions.txt。

示例1

Input: 类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞Label: 简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。Output[微调前]: 这件上衣的材质是牛仔布,颜色是白色,风格是简约,图案是刺绣,衣样式是外套,衣款式是破洞。Output[微调后]: 这是一款简约的牛仔外套,破洞设计,将牛仔布破洞,带来一种随意与个性。破洞的牛仔外套,展现出时尚气息,带来一种休闲感。同时,刺绣图案,让整件外套更加立体。

示例2

Input: 类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领Label: 文艺个性的印花连衣裙,藏青色底蕴,低调又大气,撞色太阳花分布整个裙身,绚丽而美好,带来时尚减龄的气质。基础款的舒适圆领,简约不失大方,勾勒精致脸庞。领后是一粒包布扣固定,穿脱十分方便。前片立体的打褶设计,搭配后片压褶的做工,增添层次和空间感,显瘦又有型。Output[微调前]: 类型#裙版型#显瘦风格#文艺风格#简约图案#印花图案#撞色裙下摆#压褶裙长#连衣裙裙领型#圆领 1. 连衣裙:简约风格,裙长为膝盖以上,裙领型为圆领。2. 裙下摆:压褶设计,使裙摆呈现出流畅的褶皱效果。3. 裙领型:裙领型为圆领,使穿上连衣裙后更加有型。4. 版型:采用显瘦设计,让连衣裙看起来更加苗条。5. 风格:文艺风格,让连衣裙更加有内涵和品味。6. 图案:印花设计,在连衣裙上印有独特的图案。7. 撞色:采用撞色设计,让连衣裙在色彩上更加鲜明、富有层次感。Output[微调后]: 这是一款文艺范的连衣裙,以印花为元素,采用简约的印花,既能够突出文艺气质,又能够展现简约风。在印花的同时又有领子和裙摆的压褶设计,更加凸显文艺气质。简约而不会过于单调,搭配出街,穿着十分舒适。

3.6 模型部署

将对应的demo或代码中的THUDM/chatglm-6b换成经过 P-Tuning 微调之后 checkpoint 的地址(在示例中为 ./output/adgen-chatglm-6b-pt-8-1e-2/checkpoint-3000)。注意,目前的微调还不支持多轮数据,所以只有对话第一轮的回复是经过微调的。

四、友情链接

以下是部分基于本仓库开发的开源项目:

SwissArmyTransformer: 一个Transformer统一编程框架,ChatGLM-6B已经在SAT中进行实现并可以进行P-tuning微调。

ChatGLM-MNN: 一个基于 MNN 的 ChatGLM-6B C++ 推理实现,支持根据显存大小自动分配计算任务给 GPU 和 CPU

ChatGLM-Tuning: 基于 LoRA 对 ChatGLM-6B 进行微调。类似的项目还包括 Humanable ChatGLM/GPT Fine-tuning | ChatGLM 微调

langchain-ChatGLM:基于本地知识的 ChatGLM 应用,基于LangChain

bibliothecarius:快速构建服务以集成您的本地数据和AI模型,支持ChatGLM等本地化模型接入。

闻达:大型语言模型调用平台,基于 ChatGLM-6B 实现了类 ChatPDF 功能

JittorLLMs:最低3G显存或者没有显卡都可运行 ChatGLM-6B FP16, 支持Linux、windows、Mac部署

以下是部分针对本项目的教程/文档:

 Windows部署文档

五、to do

1. 清华大学开源中文版ChatGLM-6B模型学习与实战【已更新】主要介绍的是 官方 提供的 ChatGLM-6b 调用和部署2.  清华大学开源中文版ChatGLM-6B模型微调实战【本章】介绍的是 官方 提供的 ChatGLM-6b 在 ADGEN (广告生成) 数据集 上 进行微调;3.  清华大学开源中文版ChatGLM-6B模型特定任务微调实验:主要介绍的是 官方 提供的 ChatGLM-6b 在特定数据集 上 进行微调;4.  清华大学开源中文版ChatGLM-6B模型源码解读:介绍的是 官方 提供的 ChatGLM-6b 在hatGLM-6b 在特定数据集 上 进行微调 源码学习;5.  清华大学开源中文版ChatGLM-6B + LoRA 进行finetune:介绍的是 官方 提供的 ChatGLM-6B + LoRA特定数据集上 进行微调 源码学习;6. 清华大学开源中文版ChatGLM-6B + LoRA 进行finetune 源码解读

参考

THUDM/ChatGLM-6B

P-Tuning v2

往期相关文章推荐

清华大学开源中文版ChatGLM-6B模型学习与实战

chatGLM怎么应用于的下游任务?也许你该看看这个(附源码)

训练属于自己的ChatGPT(1)–在GPT2上进行chatbot微调实战

训练属于自己的ChatGPT(2)——使用TRL强化学习PPO控制文本的生成

ChatGPT背后的技术-基于人类反馈的强化学习(RLHF) 理论篇

In-Context Learning · 如何选择示例样本?

GPT / GPT-2 / GPT-3 / InstructGPT 进化之路

【学习群加入】

【如果人数满了,加微信 blqkm601(避免传销加入,对二维码做了打码,感兴趣可以加微信申请入群)】

1686153889590.png

1686153892022.png

1686153893870.png

1686153895847.png

aigc666aigc999_0.jpg

AI时代,拥有个人微信机器人AI助手!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!

Leave a Reply

Your email address will not be published. Required fields are marked *