ColossalAI-Chat训练手册(RLHF)

目录

1、什么的RLHF流程?

2、环境安装

3、训练&运行

3.1、模型下载

3.1、SFT(supervised fine-tuning)

3.2、训练奖励模型(Training reward model)

3.3、RL(Training model using prompts with RL)

3.4、使用模型进行应答

3.5、playground

3.6、应答效果

4、异常记录

4.1 llama爆显存

4.2 bloom模型报Error while deserializing header: HeaderTooLarge

4.3 wandb异常

4.4 RL 训练爆显存

4.5 模型加载应答



源码:GitHub - hpcaitech/ColossalAI: Making large AI models cheaper, faster and more accessible

官网:快速演示 | Colossal-AI

官方demo:ColossalChat

ColossalAI-Chat是一款基于人工智能技术的智能聊天机器人,是由Colossal AI开发的一款聊天机器人。该机器人使用了最先进的自然语言处理技术和深度学习算法,可以回答各种问题、提供建议、提供娱乐和与用户进行轻松对话。ColossalAI-Chat可以在多种平台上使用,例如Facebook Messenger、Slack、WeChat等。

ColossalAI-Chat通过使用自然语言处理技术和深度学习算法,机器人可以理解人类语言的含义,从而生成更加自然和准确的回答。在聊天过程中,机器人可以不断学习和优化自己的回答能力,提高其整体的智能水平。

随着ChatGPT的火爆,业界内也有很多机构开始着手训练自己的大语言模型,比如百度的文心一言,阿里的通义千问等。那么训练自己的模型,需要做些什么呢?RLHF流程又该如何复现?ColossalAI开源了一套方案,但是在复现过程中也有很多坑,接下来看看如何复现吧。

1、什么的RLHF流程?

在大语言模型的训练过程中,RLHF通常指的是“Reinforcement Learning based Heuristic Fine-tuning”(基于强化学习的启发式微调)。RLHF是指在训练大型语言模型时,使用强化学习算法对模型进行微调,以进一步提高其性能。RLHF的主要目标是通过引入额外的语言模型内部评估指标,使得语言模型在生成文本时更加准确和流畅。

RLHF可以分为以下几个阶段:

  • 预训练阶段(Pre-training):在此阶段中,使用大量的未标注文本数据来训练初始的语言模型,通常使用无监督学习算法,如BERT、GPT等。
  • 微调阶段(Fine-tuning):在此阶段中,使用有标注的任务数据对语言模型进行微调,使其能够完成具体的任务。此阶段的任务可以是文本分类、命名实体识别、问答等。
  • 强化学习微调阶段(RLHF Fine-tuning):在此阶段中,使用强化学习算法对语言模型进行微调,以进一步提高其性能。强化学习算法可以根据所生成的文本序列的整体质量,对语言模型进行反馈和调整。
  • 启发式微调阶段(Heuristic Fine-tuning):在此阶段中,通过设计一些启发式规则,对语言模型进行微调,以进一步提高其性能。启发式规则可以是语言学知识、常识知识等。

这些阶段在语言模型训练中通常是相互关联的,且不一定是线性的顺序,可能会进行多次迭代和交叉训练。RLHF在语言模型训练中扮演了重要的角色,能够帮助语言模型更好地理解和生成自然语言,提高其在各种任务上的表现。

2、环境安装

git clone https://github.com/hpcaitech/ColossalAI# 创建环境
conda create -n ColossalAI-Chat python=3.10conda activate ColossalAI-Chat# 安装依赖
pip install . -i https://mirrors.aliyun.com/pypi/simple/cd applications/Chatpip install . -i https://mirrors.aliyun.com/pypi/simple/git clone https://github.com/hpcaitech/transformers
cd transformers
pip install . -i https://mirrors.aliyun.com/pypi/simple/pip install pytest -i https://mirrors.aliyun.com/pypi/simple/

数据集:

InstructionWild/data at main · XueFuzhao/InstructionWild · GitHub

3、训练&运行

3.1、模型下载

这一步可以不做,不做的话默认会在将模型下载到 ~/.cache 目录

模型文件较大,需要安装git lfs,否则模型可能损坏

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install

例如我将模型下载到

/data/chenhao/train/ColossalAI/models目录下,那么需要操作

cd /data/chenhao/train/ColossalAI/models
git lfs install
git clone https://huggingface.co/bigscience/bloom-560m

如何按照这种方式,那么下面模型的路径也需要改,否则他还是会下载模型到~/.cache 目录

3.1、SFT(supervised fine-tuning)

torchrun --standalone --nproc_per_node=4 train_sft.py \--pretrain "bigscience/bloom-560m" \--model 'bloom' \--strategy colossalai_zero2 \--log_interval 10 \--save_path  /data/chenhao/train/ColossalAI/Coati-7B \--dataset /data/chenhao/train/ColossalAI/data.json \--batch_size 4 \--accimulation_steps 8 \--lr 2e-5 \--max_datasets_size 512 \--max_epochs 1 

3.2、训练奖励模型(Training reward model

torchrun --standalone --nproc_per_node=4 train_reward_model.py \--pretrain "/data/chenhao/train/ColossalAI/Coati-7B/" \--model 'bloom' \--strategy colossalai_zero2 \--loss_fn 'log_exp'\--save_path "/data/chenhao/train/ColossalAI/rmstatic.pt"

这里面 --pretrain 参数,从官方文档上看不明白是第一步的产出模型还是原模型,希望有大佬解答。

资源占用情况

3.3、RL(Training model using prompts with RL)

torchrun --standalone --nproc_per_node=4 train_prompts.py \--pretrain "bigscience/bloom-560m" \--model 'bloom' \--strategy colossalai_zero2 \--prompt_path /data/chenhao/train/ColossalAI/prompt_dataset/data.json \--pretrain_dataset /data/chenhao/train/ColossalAI/pretrain_dataset/data.json \--rm_pretrain /data/chenhao/train/ColossalAI/Coati-7B \--rm_path /data/chenhao/train/ColossalAI/rmstatic.pt \--train_batch_size 4 \--experience_batch_size 4 \--max_epochs 1 \--num_episodes 1

为了快速走完流程,我这里的数据集和第一步数据集实际上是同一份数据集,这里应该是需要自行准备数据集的。
 

3.4、使用模型进行应答

ColossalAI/inference.py at main · hpcaitech/ColossalAI · GitHub

python chat.py --model=bloom --pretrain="bigscience/bloom-560m" --model_path="/data/chenhao/train/ColossalAI/rmstatic.pt" --input  你好


回复

你好,谢谢。\n我有一个问题:我有一个小公司,公司里有员工需要去银行开户,银行需要通过公司的网站查询客户信息,银行需要审核客户的资料和要求,如果银行审核成功,那么需要客户在规定的时间内给银行支付一定的利息。银行也知道公司的客户需要这些资料,所以银行可能会给客户转账,那么是不是银行可以不审核或者审核时不给转账,而只是给一些现金呢?\n这样我们就要问银行,如果公司要

3.5、playground

import gradio as grimport torch
from coati.models.bloom import BLOOMActor
from transformers import AutoTokenizerMAX_TURNS = 20
MAX_BOXES = MAX_TURNS * 2# 这里换成自己模型的路径
model_path_dict = {'SFT': '/data/chenhao/train/ColossalAI/Coati-7B/pytorch_model.bin','RM': '/data/chenhao/train/ColossalAI/rmstatic.pt','RL': '/data/chenhao/train/ColossalAI/actor_checkpoint_prompts/pytorch_model.bin',
}def predict(model, input, max_length, history):updates = []actor = BLOOMActor(pretrained='bigscience/bloom-560m').to(torch.cuda.current_device())state_dict = torch.load(model_path_dict[model])actor.model.load_state_dict(state_dict, strict=False)tokenizer = AutoTokenizer.from_pretrained('bigscience/bloom-560m')tokenizer.pad_token = tokenizer.eos_tokenactor.eval()question = f'Question: {input} ? Answer:'input_ids = tokenizer.encode(question, return_tensors='pt').to(torch.cuda.current_device())outputs = actor.generate(input_ids,max_length=max_length,do_sample=True,top_k=50,top_p=0.95,num_return_sequences=1)output = tokenizer.batch_decode(outputs[0], skip_special_tokens=True)for i in history:if not i.get('visible'):continueprint(i)value = i.get('value')updates.append(gr.update(visible=True, value=value))updates.append(gr.update(visible=True, value="提问:" + input))updates.append(gr.update(visible=True, value=f"{model}:" + output[0].replace(question, '').replace(question.replace(' ', ''), '')))if len(updates) < MAX_BOXES:updates = updates + [gr.Textbox.update(visible=False)] * (MAX_BOXES - len(updates))history.extend(updates)return [history] + updateswith gr.Blocks() as demo:state = gr.State([])text_boxes = []with gr.Row():with gr.Column(scale=1):model = gr.Radio(["SFT", "RM", "RL"], label="model",interactive=True, value='SFT')max_length = gr.Slider(0, 200, value=100, step=1.0, label="max_length", interactive=True)button = gr.Button("Generate")with gr.Column(scale=4):for i in range(MAX_BOXES):if i % 2 == 0:text_boxes += [gr.Markdown(visible=False, label="提问:")]else:text_boxes += [gr.Markdown(visible=False, label="回复:")]input = gr.Textbox(show_label=True, placeholder="input", lines=5, label='input').style(container=False)button.click(predict, [model, input, max_length, state],[state] + text_boxes)
demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0')

3.6、应答效果

这里就完全是调用自己的模型进行应答,我这里因为基座模型bloom-560m就是小模型,加上训练的超参数我都调整到最小跑,因此效果一般。

4、异常记录

4.1 llama爆显存

[BUG]: ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: -9) local_rank: 3 (pid: 812917) of binary · Issue #3514 · hpcaitech/ColossalAI · GitHub


 

[BUG]: LlamaRM model has no attribute 'resize_token_embeddings' · Issue #3389 · hpcaitech/ColossalAI · GitHub


 

方案:跑小一点的模型(bloom bloom-560m)

4.2 bloom模型报Error while deserializing header: HeaderTooLarge

方案:使用transformers加载预训练模型
 

torchrun --standalone --nproc_per_node=4 train_sft.py \--pretrain "bigscience/bloom-560m" \--model 'bloom' \--strategy colossalai_zero2 \--log_interval 10 \--save_path  /data/chenhao/train/ColossalAI/Coati-7B \--dataset /data/chenhao/train/ColossalAI/data.json \--batch_size 4 \--accimulation_steps 8 \--lr 2e-5 \--max_datasets_size 512 \--max_epochs 1

4.3 wandb异常

需要我们一直重复选择

直接禁用

wandb disabled

4.4 RL 训练爆显存

按照最小规格跑
 

4.5 模型加载应答

actor.model.load_state_dict(state_dict)# 改为actor.model.load_state_dict(state_dict, strict=False)

欢迎关注我们的微信公众号IT一氪,我们将不定期更新AI、大数据相关的高质量文章。

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

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

相关文章

QA-对话系统-问答系统-聊天机器人-chatbot相关资源

1 简介 目前正在研究智能问答系统&#xff0c;在学习的过程中读了一些文章&#xff0c;实践了几个开源项目&#xff0c;在这里记录下自己觉得比较的资源 2 博客 深度学习对话系统理论篇--数据集和评价指标介绍 文末介绍了一些数据集&#xff0c;也可以关注下博主&#xff0c;他…

揭秘百度闲聊机器人技术原理及应用,参与训练营实战赢奖品

不知道穿梭在各个空间的你是否注意&#xff0c;日常生活中的我们已经逐渐成为很多机器人服务的对象。随着人工智能与各行业的融合&#xff0c;AI 技术在更多应用场景成功落地&#xff0c;越来越多搭载着智能对话能力的产品在帮助我们实现更高效的生活和工作需求。而在不断进步的…

三十八、原来聊天机器人是这么做出来的

tensorflow自带的seq2seq模型基于one-hot的词嵌入&#xff0c;每个词用一个数字代替不足以表示词与词之间的关系&#xff0c;word2vec通过多维向量来做词嵌入&#xff0c;能够表示出词之间的关系&#xff0c;比如&#xff1a;男-女≈王子-公主。基于seq2seq的思想&#xff0c;利…

练手小项目(1)——智能聊天机器人

我一直坚信着&#xff0c;即使一个最简单的APP&#xff0c;也有他的难点&#xff0c;如果一个复杂的APP你无法做出来&#xff0c;那肯定是你基础不扎实&#xff0c;我身边的人总是问我&#xff0c;安卓为什么学了有忘记了&#xff0c;总是学不好&#xff0c;有些东西记不住&…

python微信聊天机器人,再也不怕被夸情商高了

编写本聊天机器人纯属乐趣&#xff0c;它并不实用&#xff01;&#xff01;&#xff01; 文章有点长&#xff0c;代码分析只把完整代码拆分解释&#xff0c;没有新的东西&#xff0c;大佬可忽略 目录 实现思路完整代码代码分析导入要使用的模块获取窗口句柄获取窗口左上角和右…

一个基于智能问答的聊天机器人实现

智能问答应当是未来智能化发展中人机交互的主要方式&#xff0c;目前无论是在开源社区或者企业应用中&#xff0c;都有广泛的应用。 项目名称是Iveely.Brain&#xff0c;本次源码可以在Github的这里下载&#xff0c;,是主要用于聊天服务的一个项目&#xff0c;本次开源版本的示…

【开源】一个基于智能问答的聊天机器人实现

智能问答应当是未来智能化发展中人机交互的主要方式&#xff0c;目前无论是在开源社区或者企业应用中&#xff0c;都有广泛的应用。 项目名称是Iveely.Brain&#xff0c;本次源码可以在Github的这里下载&#xff0c;,是主要用于聊天服务的一个项目&#xff0c;本次开源版本的示…

【NLP-ChatBot】能干活的聊天机器人-对话系统概述

我们之前介绍过&#xff0c;按照应用场景的不同&#xff0c;聊天机器人可以分为问答系统&#xff0c;对话系统以及闲聊机器人三类。今天我们就来详细讲一讲其中的对话系统。 作者&编辑 | 小Dream哥 1 什么是对话系统 通常来讲&#xff0c;对话系统会面向某一个任务&#xf…

【NLP】自己搭一个多轮对话聊天机器人(附实现源码)

【NLP】自己搭一个多轮对话聊天机器人&#xff08;附实现源码&#xff09; 01 项目框架02 模型2.1 粗排2.1.1BM252.1.1 Bool检索 2.2 精排意图识别 03 API交互04 微信前端 本文的内容如下 本篇介绍一个检索类型的 多轮问答系统/聊天机器人&#xff0c;通过API异步通信&#xf…

手把手教你写一个中文聊天机器人

本文来自作者 赵英俊&#xff08;Enjoy&#xff09; 在 GitChat 上分享 「手把手教你写一个中文聊天机器人」&#xff0c;「阅读原文」查看交流实录。 「文末高能」 编辑 | 哈比 一、前言 发布这篇 Chat 的初衷是想和各位一起分享一下动手来做聊天机器人的乐趣&#xff0c;因此…

NLP聊天机器人的搭建(chatbot)(一)

最近在学习研发QA系统&#xff0c;本人单纯想记录一下。项目源码和思路主要参考知乎专栏&#xff1a; PyTorch搭建聊天机器人&#xff08;一&#xff09;词表与数据加载器 - 知乎 PyTorch搭建聊天机器人&#xff08;二&#xff09;定义seq2seq网络前向逻辑 - 知乎 PyTorch搭…

全国大学生英语竞赛培训:听力、词汇语法、完形填空、阅读理解、翻译、改错、IQ题、大小作文、语法等部分快速得分、备战策略和获奖技巧讲解!

目 录 大学生英语竞赛培训——介绍、学习网址 PPT课件、视频——下载 【2020-04-05】P1 如何准备大学生英语竞赛才能拿奖&#xff1f;2:27:54【竞赛简介vs赛前准备】 【2020-04-11】P2 如何快速搞定大英赛大小作文&#xff1f;2:06:18【大小作文&#xff0c;快速表达~】 …

【情态动词练习题】 May 与 might

1. May 1.Sarah may be ill 2.We may not go out. 3.It may not rain. 4.We may buy a car. 5.Joe may not be at home 6.Anna may need help. 注&#xff1a;情态动词一定要加上动词原型 7.The baby may be hungry. 8.I may not change my job. 9.She may be married. 10.He…

初中七年级上计算机试题答案,人教版初中英语七年级英语上册期中模拟试题检测(含答案)...

原标题&#xff1a;人教版初中英语七年级英语上册期中模拟试题检测(含答案) 七年级英语期中测试题 1、 单项选择(10分) ( ) 1. 下列单词中含有相同元音因素的是_____. A that; these B thank; that C this; those ( ) 2. --________, Gina! --Good morning, Bob! A Good aftern…

初中七年级下英语期中备考单选题(外教出题并附助教经典解析)

1. My sister bought a present _______ her best friends birthday. A. for B. of C. about D. to 选出正确的介词&#xff0c;完成句子。问题&#xff1a; 我妹妹买了一份礼物给她最好的朋友庆祝生日。 答案&#xff1a;A 解析&#xff1a;在这个句子中&#xff0c;“fo…

ChatGPT 爆火 小扎、马斯克纷纷迎战ChatGPT

ChatGPT爆火&#xff0c;直接改变了整个硅谷大厂的格局。近日&#xff0c;马斯克、小扎也纷纷下场&#xff0c;正式对ChatGPT宣战&#xff01;据The Information报道&#xff0c;马斯克最近几周与一直在于AI研究人员接洽&#xff0c;希望组建一个新的研究实验室&#xff0c;以开…

百度「文心一言」阿里「通义千问」腾讯的AI将会叫什么呢

阿里于昨天2023.4.7下午上线通义千问&#xff0c;与ChatGPT类似&#xff0c;同样是基于语言模型训练的人工智能聊天平台。通义千问的核心功能分为四个大类&#xff1a;撰写短文、职场助理、电影脚本和写封邮件。 通义千问通义千问https://tongyi.aliyun.com/ 首页如下&#xf…

ChatGPT Chat Assist: 职场智能利器,提升工作效率

在当今快节奏的职场生活中&#xff0c;高效率是每位职场人士追求的目标。而现代科技的进步&#xff0c;尤其是人工智能的快速发展&#xff0c;为我们带来了前所未有的便利。ChatGPT作为一款智能核心&#xff0c;推出了Chat Assist插件&#xff0c;成为职场中的得力助手&#xf…

ChatGPT通过图灵测试,图灵测试要重写

近日《Nature》在一篇文章中称&#xff0c;ChatGPT 已经攻破了图灵测试&#xff0c;是时候要启用其他新的方法来评估人工智能技术了。 图灵测试(Turing Test)是著名计算机科学家阿兰图灵在1950年提出的一个测试,用于判断机器是否能展现出与人类智能相当的能力。其测试方法是: 让…

亚马逊云科技X创业邦:专访图灵量子创始人金贤敏

假设你现在正准备去相亲,走进了一家坐满人的咖啡厅。你拿着Ta的照片,一个个地审视着每一个人,看谁对得上号,结果找了半个小时也没找到和照片相似的那个人。这时候,相亲对象给你打来了电话,告诉你Ta正坐在靠窗的角落里,你的目光顺着ta的指引,一下子就找到了Ta。 验证一个问题的答…