解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

这篇具有很好参考价值的文章主要介绍了解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

LLM(Large Language Model)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能。

但,想要直接利用 LLM 完成一些任务会存在一些答案解析上的困难,如规范化输出格式,严格服从输入信息等。

因此,在这个项目下我们参考 ChatGLM-Tuning 的代码,尝试对大模型 ChatGLM-6B 进行 Finetune,使其能够更好的对齐我们所需要的输出格式。

1. 环境安装

由于 ChatGLM 需要的环境和该项目中其他实验中的环境有所不同,因此我们强烈建议您创建一个新的虚拟环境来执行该目录下的全部代码。

下面,我们将以 Anaconda 为例,展示如何快速搭建一个环境:

  1. 创建一个虚拟环境,您可以把 llm_env 修改为任意你想要新建的环境名称:
conda create -n llm_env python=3.8
  1. 激活新建虚拟环境并安装响应的依赖包:
conda activate llm_env
pip install -r requirements.txt
  1. 安装对应版本的 peft
cd peft-chatglm
python setup.py install

2. 数据集准备

在该实验中,我们将尝试使用 信息抽取 + 文本分类 任务的混合数据集喂给模型做 finetune,数据集在 data/mixed_train_dataset.jsonl

每一条数据都分为 contexttarget 两部分:

  1. context 部分是接受用户的输入。

  2. target 部分用于指定模型的输出。

context 中又包括 2 个部分:

  1. Instruction:用于告知模型的具体指令,当需要一个模型同时解决多个任务时可以设定不同的 Instruction 来帮助模型判别当前应当做什么任务。

  2. Input:当前用户的输入。

  • 信息抽取数据示例

Instruction 部分告诉模型现在需要做「阅读理解」任务,Input 部分告知模型要抽取的句子以及输出的格式。

{
    "context": "Instruction: 你现在是一个很厉害的阅读理解器,严格按照人类指令进行回答。\nInput: 找到句子中的三元组信息并输出成json给我:\n\n九玄珠是在纵横中文网连载的一部小说,作者是龙马。\nAnswer: ", 
    "target": "```json\n[{\"predicate\": \"连载网站\", \"object_type\": \"网站\", \"subject_type\": \"网络小说\", \"object\": \"纵横中文网\", \"subject\": \"九玄珠\"}, {\"predicate\": \"作者\", \"object_type\": \"人物\", \"subject_type\": \"图书作品\", \"object\": \"龙马\", \"subject\": \"九玄珠\"}]\n```"
}
  • 文本分类数据示例

Instruction 部分告诉模型现在需要做「阅读理解」任务,Input 部分告知模型要抽取的句子以及输出的格式。

{
    "context": "Instruction: 你现在是一个很厉害的阅读理解器,严格按照人类指令进行回答。\nInput: 下面句子可能是一条关于什么的评论,用列表形式回答:\n\n很不错,很新鲜,快递小哥服务很好,水果也挺甜挺脆的\nAnswer: ", 
    "target": "[\"水果\"]"
}

3. 模型训练

3.1 单卡训练

实验中支持使用 LoRA Finetune 和 P-Tuning 两种微调方式。

运行 train.sh 文件,根据自己 GPU 的显存调节 batch_size, max_source_seq_len, max_target_seq_len 参数:

# LoRA Finetune
python train.py \
    --train_path data/mixed_train_dataset.jsonl \
    --dev_path data/mixed_dev_dataset.jsonl \
    --use_lora True \
    --lora_rank 8 \
    --batch_size 1 \
    --num_train_epochs 2 \
    --save_freq 1000 \
    --learning_rate 3e-5 \
    --logging_steps 100 \
    --max_source_seq_len 400 \
    --max_target_seq_len 300 \
    --save_dir checkpoints/finetune \
    --img_log_dir "log/fintune_log" \
    --img_log_name "ChatGLM Fine-Tune" \
    --device cuda:0


# P-Tuning
python train.py \
    --train_path data/mixed_train_dataset.jsonl \
    --dev_path data/mixed_dev_dataset.jsonl \
    --use_ptuning True \
    --pre_seq_len 128 \
    --batch_size 1 \
    --num_train_epochs 2 \
    --save_freq 200 \
    --learning_rate 2e-4 \
    --logging_steps 100 \
    --max_source_seq_len 400 \
    --max_target_seq_len 300 \
    --save_dir checkpoints/ptuning \
    --img_log_dir "log/fintune_log" \
    --img_log_name "ChatGLM P-Tuning" \
    --device cuda:0

成功运行程序后,会看到如下界面:

...
global step 900 ( 49.89% ) , epoch: 1, loss: 0.78065, speed: 1.25 step/s, ETA: 00:12:05
global step 1000 ( 55.43% ) , epoch: 2, loss: 0.71768, speed: 1.25 step/s, ETA: 00:10:44
Model has saved at checkpoints/model_1000.
Evaluation Loss: 0.17297
Min eval loss has been updated: 0.26805 --> 0.17297
Best model has saved at checkpoints/model_best.
global step 1100 ( 60.98% ) , epoch: 2, loss: 0.66633, speed: 1.24 step/s, ETA: 00:09:26
global step 1200 ( 66.52% ) , epoch: 2, loss: 0.62207, speed: 1.24 step/s, ETA: 00:08:06
...

log/finetune_log 下会看到训练 loss 的曲线图:

解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题,NLP知识领域专栏,人工智能,自然语言处理,chatglm,大语言模型,lora,NLP

3.2 多卡训练

运行 train_multi_gpu.sh 文件,通过 CUDA_VISIBLE_DEVICES 指定可用显卡,num_processes 指定使用显卡数:

# LoRA Finetune
CUDA_VISIBLE_DEVICES=0,1 accelerate launch --multi_gpu --mixed_precision=fp16 --num_processes=2 train_multi_gpu.py \
    --train_path data/mixed_train_dataset.jsonl \
    --dev_path data/mixed_dev_dataset.jsonl \
    --use_lora True \
    --lora_rank 8 \
    --batch_size 1 \
    --num_train_epochs 2 \
    --save_freq 500 \
    --learning_rate 3e-5 \
    --logging_steps 100 \
    --max_source_seq_len 400 \
    --max_target_seq_len 300 \
    --save_dir checkpoints_parrallel/finetune \
    --img_log_dir "log/fintune_log" \
    --img_log_name "ChatGLM Fine-Tune(parallel)"


# P-Tuning
CUDA_VISIBLE_DEVICES=0,1 accelerate launch --multi_gpu --mixed_precision=fp16 --num_processes=2 train_multi_gpu.py \
    --train_path data/mixed_train_dataset.jsonl \
    --dev_path data/mixed_dev_dataset.jsonl \
    --use_ptuning True \
    --pre_seq_len 128 \
    --batch_size 1 \
    --num_train_epochs 2 \
    --save_freq 500 \
    --learning_rate 2e-4 \
    --logging_steps 100 \
    --max_source_seq_len 400 \
    --max_target_seq_len 300 \
    --save_dir checkpoints_parrallel/ptuning \
    --img_log_dir "log/fintune_log" \
    --img_log_name "ChatGLM P-Tuning(parallel)"

相同数据集下,单卡使用时间:

Used 00:27:18.

多卡(2并行)使用时间:

Used 00:13:05.

4. 模型预测

修改训练模型的存放路径,运行 python inference.py 以测试训练好模型的效果:

device = 'cuda:0'
max_new_tokens = 300
model_path = "checkpoints/model_1000"           # 模型存放路径

tokenizer = AutoTokenizer.from_pretrained(
    model_path, 
    trust_remote_code=True
)

model = AutoModel.from_pretrained(
    model_path,
    trust_remote_code=True
).half().to(device)
...

您也可以使用我们提供的 Playground 来进行模型效果测试:

streamlit run playground_local.py --server.port 8001

在浏览器中打开对应的 机器ip:8001 即可访问。

解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题,NLP知识领域专栏,人工智能,自然语言处理,chatglm,大语言模型,lora,NLP

5. 标注平台

如果您需要标注自己的数据,也可以在 Playground 中完成。

streamlit run playground_local.py --server.port 8001

在浏览器中打开对应的 机器ip:8001 即可访问。

项目链接:https://github.com/HarderThenHarder/transformers_tasks/blob/main/LLM/chatglm_finetune/readme.md文章来源地址https://www.toymoban.com/news/detail-679143.html

到了这里,关于解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 模型训练系列:1、用清华ChatGLM-6B模型部署自己的本地AI助手

    最近清华大学开源的ChatGLM-6B语言模型在国际上大出风头,仅仅62亿参数的小模型,能力却很强。很期待他们后续1300亿参数模型130B的发布。 为什么一些能力较弱的小模型,这么受追捧?因为ChatGPT、GPT-4虽好,毕竟被国外封锁,而且还要付费,更重要的是,LLM要在各行业提高生

    2024年02月11日
    浏览(32)
  • 中英双语对话大语言模型:ChatGLM-6B

    ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优

    2024年02月12日
    浏览(30)
  • 基于chatGLM-6B模型预训练,添加自己的数据集微调(linux版)(ptuning & lora)

    目录 准备工作 安装7z ptuning预训练 ChatGLM-6B-Ptuning.7z 懒人包下载 上传文件并解压缩 拉取依赖 进行训练 启动服务 注意事项(揽睿星舟云算力平台) lora预训练 chatGLM-All-In-One.7z 懒人包下载 上传文件并解压缩 拉取依赖 进行训练 启动服务 注意事项(揽睿星舟云算力平台) 展示

    2024年02月07日
    浏览(59)
  • ChatGLM2-6B 大语言模型本地搭建

    ChatGLM2-6B 是清华 NLP 团队于不久前发布的中英双语对话模型,它具备了强大的问答和对话功能。拥有最大32K上下文,并且在授权后可免费商用! ChatGLM2-6B的6B代表了训练参数量为60亿,同时运用了模型量化技术,意味着用户可以在消费级的显卡上进行本地部署(INT4 量化级别下

    2024年01月21日
    浏览(45)
  • 自然语言处理 微调ChatGLM-6B大模型

    bert的主要任务是随机的去除掉某个单词,使用上下文将其预测出来(相当于完形填空任务); GPT的主要任务是根据前面一句话,预测下面的内容; GLM结合了bert的强大双向注意力与gpt的强大生成能力两种能力,被nask的地方使用单向注意力,未被mask的地方使用双向注意力 预测

    2024年02月09日
    浏览(37)
  • 【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

    ChatGLM2-6B是一个开源的、支持中英双语的对话语言模型,基于General Language Model (GLM)架构。 ChatGLM2-6B具备的能力: 自我认知:“介绍一下你的优点” 提纲写作:“帮我写一个介绍ChatGLM的博客提纲” 文案写作:“写10条热评文案” 信息抽取:‘从上述信息中抽取人、时间、事件

    2024年02月14日
    浏览(46)
  • 【ChatGPT】预训练模型微调及其应用(ChatGLM-6B、duckduckgo_search、GPT在科研的应用等)

    instructGPT(基于提示学习的系列模型)——GPT3.5(大规模预训练语言模型)——ChatGPT模型(高质量数据标注+反馈学习)。chatGPT三大技术:情景学习、思维链、自然指令学习。 GPT4飞跃式提升:多模态、输入字符数量、推理能力、文本创造,如poem、解释图片含义、图表计算等

    2023年04月16日
    浏览(63)
  • 开源双语对话语言模型 ChatGLM-6B 本地私有化部署

    本文首发于:https://www.licorne.ink/2023/08/llm-chatglm-6b-local-deploy/ ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGL

    2024年02月10日
    浏览(47)
  • 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版)

    ChatGLM-6B模型结构代码解析(单机版) ​ 本文介绍ChatGLM-6B的模型结构,代码来自https://huggingface.co/THUDM/chatglm-6b/blob/main/modeling_chatglm.py。 相关博客 【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer 【自然语言处理】【大模型】MPT模型结构源码解析(单机

    2024年02月06日
    浏览(40)
  • CP03大语言模型ChatGLM3-6B特性代码解读(1)

    对话模式、工具模式、代码解释器模式例程阅读理解。 ChatGLM3-6B已经进行了中文场景的训练,可以直接运用于中文场景。本次学习的示例,提供了三种模式。包括: Chat: 对话模式,在此模式下可以与模型进行对话; Tool: 工具模式,模型除了对话外,还可以通过工具进行其他

    2024年02月22日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包