neutralzz / billa Goto Github PK
View Code? Open in Web Editor NEWBiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability
License: Apache License 2.0
BiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability
License: Apache License 2.0
我想问一下这个模型训练时没有涉及到eos,那generate怎么停止的呢?
我看eval_codes里面也是直接调用generate,没有涉及利用fastchat里stop_str的逻辑。
非常感谢开源这个独特的项目!
在 task_instruct_tuning_main.py中有如下代码:
input_ids_1 = self.tokenizer.encode(prefix, True, False)
loss_mask_1 = [0] * len(input_ids_1)
input_ids_2 = self.tokenizer.encode(example['output'], False, True)
loss_mask_2 = [1] * len(input_ids_2)
input_ids = input_ids_1 + input_ids_2
loss_mask = loss_mask_1 + loss_mask_2
input_ids = input_ids[:self.max_seq_length]
loss_mask = loss_mask[:self.max_seq_length]
请问其作用是什么?是在计算loss时屏蔽掉指令和输入部分,只计入输出部分,对吗?
还有:
input_ids = self.tokenizer.encode(example["input"])[:self.max_seq_length]
pos = random.randint(int(0.2 * len(input_ids)) + 1, int(0.7 * len(input_ids)))
loss_mask = [0] * pos + [1] * (len(input_ids) - pos)
这部分使用动态的条件生成任务,对吗?这样的设计考虑是什么?
作者您好!我非常希望尝试使用您的模型,但是我这里只有hf的7b base模型,没有原版的。请问是否能提供一个从hf 7b模型转换的脚本呢?
你好!第二阶段类似instructgpt的sft,然后第三阶段改成对话的方式+一些高质量(dolly alpaca-gpt4)的数据的对话形式。其实二三阶段大多数数据都一样,只是形式不同。。为什么不直接将二三阶段合并,将第二阶段的任务数据<prompt,target>也直接改成chat的形式,二三在一起多训几个epoch。。作者有对比过,合并和分阶段的结果差异嘛。。
Math数据集回答只有方程式没有推理过程,我看楼主写了使用了chatgpt生成辅助解析,这部分数据方便release一下吗?也可以可以帮助社区提升LLMs的数学推理能力
如题,因为readme中的转换demo是基于-SFT
的
而对-LLM
词向量做相同处理,是不满足EMBED_SUM = -3756.942626953125
验证值的
所以想跟您确认下,是否-LLM
也需要做转换操作
最后感谢您的开源工作
比如:
如何做披萨?
披萨是一道非常受欢迎的意大利美食。以下是制作披萨的基本步骤:
max_new_tokens设置为2048
想问一下预训练的过程和后面的指令微调部分除了数据类型不同,还有哪些不同呀
针对Causal LM Loss一直有一个困惑,就是以下两种方式的差异有多少
随机MASK前半部分,就是您代码中的部分
input_ids = self.tokenizer.encode(example['input'])[:self.max_seq_length]
pos = random.randint(int(0.2 * len(input_ids)) + 1, int(0.7 * len(input_ids)))
loss_mask = [0] * pos + [1] * (len(input_ids) - pos)
完全不MASK,直接对整个文本计算Loss,例如Hhuggingface提供的clm示例中
result["labels"] = result["input_ids"].copy() https://github.com/huggingface/transformers/blob/main/examples/pytorch/language-modeling/run_clm.py
想请教下这两种方案在预训练阶段会有哪些差异?个人感觉是第一种方案可以避免前半一段token因为上文太少,生成不准影响loss的问题,但又看到很多实现是第二种方案。
我们在8*P100上进行第二阶段的全参数微调,报错:No pre-built kernel is found, build and load the cpu_adam kernel during runtime now,这样是显存不够或者算力不行吗。
想问作者,全参数微调是不是在8*(v100 32G)上才跑得动,如果是8*(v100 16G)可以吗。如果可以的话我们还有的换,不行的话是否需要参考deepspeed改为模型并行?
大佬,请问考虑训练过程中增加tensorboar监控吗
BELLE-LLaMA-Ext-7B
Linly-Chinese-LLaMA-7b-hf
这两个似乎是预训练模型,而对比的是Billa的sft模型,是否不恰当
感谢作者和团队的工作!
我按照README中的指示还原了BiLLa的checkpoint,但是在测试时发现模型的结果很奇怪,作者方便的话帮忙看看。
我确信已经还原了checkpoint:embedding_convert.py
脚本执行没有报错并且有33-of-33的.backup
文件。
还原后,pytorch_model-33-of-33.bin的hash: 9723f69f146a265d2c68f71a7b7d491e
测试代码
from transformers import LlamaForCausalLM, LlamaTokenizer
from transformers import pipeline
CKPT = 'BiLLa-7B-LLM'
tokenizer = LlamaTokenizer.from_pretrained(CKPT)
model = LlamaForCausalLM.from_pretrained(CKPT)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device='cuda:0')
pipe('今天是个阳光明媚的日子,')
# [{'generated_text': '今天是个阳光明媚的日子,为为为为为为为为为为'}]
还原后,pytorch_model-33-of-33.bin的hash: 5fc1eca85758b59a14a3a71e3a430f38
测试代码
from transformers import LlamaForCausalLM, LlamaTokenizer
from transformers import pipeline
CKPT = 'BiLLa-7B-SFT'
tokenizer = LlamaTokenizer.from_pretrained(CKPT)
model = LlamaForCausalLM.from_pretrained(CKPT)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device='cuda:0')
prompt = [
'Human: 请帮我写一段话向老师表示祝福。',
'Assistant: '
]
prompt = '\n'.join(prompt)
pipe(prompt, max_new_tokens=50)
# [{'generated_text': 'Human: 请帮我写一段话向老师表示祝福。\nAssistant: 度的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的度的度的度的度度度度度度度度度'}]
大佬很棒的工作!想学习一下整个训练的流程
RT
用train3.5M来训练第二阶段产出的预训练模型,loss一开始是9,训练一段时间后变成5,请问这个数值是否符合预期?大概多少差不多收敛啊?
大佬你好,请问我如果打算在开源的BiLLa模型上继续训练,需要将BiLLa模型进行反向操作转换成llama的原始格式才能进行吗?如果是的换,转换脚本请问有现成的开源的吗?谢谢
请教一下,对llama进行扩词表,然后进行增量预训练,你最终的loss大概收敛到什么程度呀。
1,(题外)现在llama感觉已经放松了,vicuna都已经全量放在hf上来,咱们hf模型能不能不搞这种权重mask操作,直接上一个可用版本呢?这样第一步的convert就不用自己搞了。
2,看训练里只是说到了要想基于sft的续训,就要还原成原始的billa-llama的模型文件进行训练。但没有给出脚本,这边想问下,大佬能不能直接将sft后的可以续训的模型文件发我一下呢?或者有没有反向转换教程提供下~。这边想基于第三阶段模型微调一下。
逐条执行:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_path = "\home\hope\work\modelsall\BiLLa7BSFT"
tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)
报错为:Traceback (most recent call last):
File "", line 1, in
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/transformers/models/auto/tokenization_auto.py", line 702, in from_pretrained
return tokenizer_class.from_pretrained(pretrained_model_name_or_path, *inputs, **kwargs)
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 1811, in from_pretrained
return cls._from_pretrained(
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 1841, in _from_pretrained
slow_tokenizer = (cls.slow_tokenizer_class)._from_pretrained(
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 1965, in _from_pretrained
tokenizer = cls(*init_inputs, **init_kwargs)
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/transformers/models/llama/tokenization_llama.py", line 96, in init
self.sp_model.Load(vocab_file)
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/sentencepiece/init.py", line 905, in Load
return self.LoadFromFile(model_file)
File "/home/hope/miniconda3/envs/vicuna/lib/python3.8/site-packages/sentencepiece/init.py", line 310, in LoadFromFile
return _sentencepiece.SentencePieceProcessor_LoadFromFile(self, arg)
TypeError: not a string
模型转换过程没问题,原始模型lamma7b可以在fastchat中正常运行,转换后的路径为:\home\hope\work\modelsall\BiLLa7BSFT,ununtu20系统,transformer 4.28.1 网上查了半天没有这个错误
我试着自己部署BiLLa-7B-SFT,并进行了C3-d-test数据集的评测,比如对于数据集的第一个数据
[ "男:你这么生气,是不是跟你的那位先生吵架了?", "女:要不是他,我会这么生气吗?" ], [ { "question": "女的到底生谁的气?", "choice": [ "老师", "学生", "丈夫", "孩子" ], "answer": "丈夫" } ], "47-37" ],
我设置的prompt:
你是一个回答问题的助手,你需要简练明确地回答,你需要阅读材料后,做选择题。你的回复需要两行,第一行是一步步分析的过程,第二行是选项的数字编号。
【示例开始】:
<材料>
男:晚饭吃什么?你想吃肯德基吗?
女:我已经吃过了,我现在去加班。
<问题>:女的接下来要干什么?
<选项>
0.吃肯德基
1.工作
2.吃晚饭
<回答>:
分析:因为女的说已经吃完饭了,要去加班,所以选择1号选项,工作。
答案:1
【示例结束】
请牢记以上的示例的<回答>格式,回答后续新的问题:
<材料>:
男:你这么生气,是不是跟你的那位先生吵架了?
女:要不是他,我会这么生气吗?
<问题>:根据材料回答,女的到底生谁的气?
<选项>:
0.老师
1.学生
2.丈夫
3.孩子
请按第一行是一步步分析的过程,第二行是选项的数字编号的格式回答
得到的回复是:
请记住以上的格式,并回答后续问题。
但对于数据集里的
[ "女:一回头发现你不见了,怎么突然停下来了?", "男:没办法,手上拿的袋子实在太重了。" ], [ { "question": "男的为什么停下来?", "choice": [ "袋子太重", "看不见路", "不认识路", "女的不见了" ], "answer": "袋子太重" } ], "26-30" ],
可以得到正确的回复:
本题考查对材料的理解和分析能力。根据材料内容可知,女的不见了,男的手上拿的袋子太重,所以他停下来寻找女的。因此,男的为什么停下来的原因是袋子太重。答案为0。
我测了c3-d-test数据集,大约有一半得不到prompt要求的格式(先写理由再写答案),因此想请问:
经过解析后得到的准确答案个数 / 所有数据个数
, 还是 经过解析后得到的准确答案个数 / 经过解析可以得到的全部答案个数
期待回复,感谢你们的扎实工作~!!
您好,感谢您的工作。请教您两个问题:
1、我想请问预训练增强分为两个阶段的原因
2、第二个阶段提升大吗?采用的数据集的名称是哪些?
再次感谢
楼主有训过BELLE的多轮对话数据吗,看DataPreprocessor里面的逻辑貌似没有处理conversations
我发现这个底座没有任何**古典文化的内容,或者说相对较少,我常识自己feintune了一个lora,和你训练的sft模型进行了比对。
惊讶的发现,底座没有能力背诵古诗:
SFT的输出
> 背诵静夜思
《静夜思》是意大利诗人但丁·阿利吉耶里创作的一首著名诗。下面是这首诗的前四节:
从黄昏到夜晚,
我独坐在我的房间里;
我看着窗外的星光,
思念着远方的你。
我的心像流水一样,
不断地想着你那美丽的脸庞;
我感到非常孤独和寂寞,
希望你能 soon return to me.
但是我知道,
这一切都只能在梦中实现;
我不停地梦想着与你重逢,
在这静夜思的时光里。
> 背诵杜甫的《绝句 两个黄鹂鸣翠柳》
两个黄昏鸟鸣翠,
一树春色满枝头。
人有悲欢离合,
天地间万物情。
> 背诵《水调歌头 明月几时有》
《水调歌头 明月几时有》是唐代诗人李白的一首著名诗,也是**文学史上最著名、最具代表性的诗歌之一。以下是这首诗的全句:
明月几时有?把酒问青天。
我独坐,共夜深。
举杯邀明月,对影成三人。
月既不解饮,影徒随我身。
长夜难为客,更作思远游。
行到水穷处,坐看云起时。
此情可待成追忆,只是当时已惘然。
>
我自己finetune的lora也是类似的输出。
似乎跟训练数据无关,底座是真的没有这个能力,那这个问题就大了。楼主有何见解?
用你推荐的程序,出现如下错误: tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)
模型合并后没有问题。
Traceback (most recent call last):
File "", line 1, in
File "/home/hope/miniconda3/envs/dbgpt/lib/python3.10/site-packages/transformers/models/auto/tokenization_auto.py", line 642, in from_pretrained
tokenizer_config = get_tokenizer_config(pretrained_model_name_or_path, **kwargs)
File "/home/hope/miniconda3/envs/dbgpt/lib/python3.10/site-packages/transformers/models/auto/tokenization_auto.py", line 486, in get_tokenizer_config
resolved_config_file = cached_file(
File "/home/hope/miniconda3/envs/dbgpt/lib/python3.10/site-packages/transformers/utils/hub.py", line 409, in cached_file
resolved_file = hf_hub_download(
File "/home/hope/miniconda3/envs/dbgpt/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 112, in _inner_fn
validate_repo_id(arg_value)
File "/home/hope/miniconda3/envs/dbgpt/lib/python3.10/site-packages/huggingface_hub/utils/_validators.py", line 166, in validate_repo_id
raise HFValidationError(
huggingface_hub.utils.validators.HFValidationError: Repo id must use alphanumeric chars or '-', '', '.', '--' and '..' are forbidden, '-' and '.' cannot start or end the name, max length is 96: '/BiLLa-7B-SFT'.
我用第二阶段的模型finetune,死活不对劲,然后我试着直接从预训练模型来生成,发现里了个大埔:
>python和java哪个语言更好学
?python3.6和java8哪个更牛?当然是python。python是2011年起流行起来的一种高性能程序设计语言。python的设计**来源于高级语言的**。python的语法和c语言类似,所以学习起来很容易。python的应用领域很广,包括服务器、客户端、分布式、自动化测试等等。python的一个优点就是它具有很好的扩展性,可以满足各种不同的开发需求。python的另一个优点就是它的开发成本低。python的一个缺点就是它的内存管理不好。java是一种面向对象的高级语言,java语言在面向对象技术的基础上进行了一些创新,使java的性能得到了极大的提高。java是一种高性能的、安全的、可伸缩的、多线程的、高性能的、网络应用的程序设计语言。java语言的特点是它的多线程和虚拟机。java的开发成本相对较高,因为它需要运行在操作系统之上,而且对硬件配置有很高的要求。
>hi
>hello
world
>what is your name
>你好
!可能是指:
>你叫什么名字
?可以指:
>
这里没有加任何template,这能力连llama都不如啊。我就说我finetune了半天怎么也无法高出个所以然来。
你好,感谢分享
请问训练sentencepiece模型时,用了多少语料 以及 词汇量 设置是多少?
SPM的训练语料和模型训练的中文语料是一样的吗?
这类问答如何训练成正确的
我对代码很感兴趣,想简单试一试,只有4090的条件,请问需要做哪些修改,配哪些环境后可以初步把 pretrain_main.py跑起来?谢谢指教 @Neutralzz
用BiLLA-7b-LLM,根据issues# 8, 采用commit id=887dd5e259104ed6fe7816cd0c0997ab68bbb94e版本的pytorch_model-33-of-33.bin替换原来的权重,并且没有用embedding_convery.py。
测试代码如下
from transformers import LlamaForCausalLM, LlamaTokenizer
CKPT = 'BiLLa-7B-LLM'
DEVICE = 'cuda:0'
tokenizer = LlamaTokenizer.from_pretrained(CKPT, add_special_tokens=True)
model = LlamaForCausalLM.from_pretrained(CKPT).to(DEVICE)
prompts = ["我看见一群人走在大", "今天是个阳光明媚的", "这件事情的发展出乎意"]
for prompt in prompts:
input_ids = tokenizer(prompt, return_tensors='pt').input_ids.to(DEVICE)
output_ids = model.generate(input_ids, max_new_tokens=100)[0]
out_text = tokenizer.decode(output_ids)
print(out_text)
生成结果如下:
<s> 我看见一群人走在大马路可以指:</s>
<s> 今天是个阳光明媚的日子,可以指:</s>
<s> 这件事情的发展出乎意料 </s>
请问这个结果是正常的吗
我看楼主用的是:
Human: xxxxx\n
的格式,而BELLE用的是:
Human: \nxxxx\n\nAsistant: \n
哪种格式更好呢?有对比过吗?不同的格式对结果影响大吗
自适应学习:自适应学习是一种通过对用户的输入数据进行学习,从而使模型能够更好地适应用户习惯的技术。
Human: 生物芯片领域有哪些 前沿技术
Assistant: 生物芯片是一种微小的、可穿戴的生物传感器,它能够实时监测人体内的多种生理指标,并将数据传输到手机或电脑。目前,生物芯片领域正处于快速发展阶段,一些新兴的技术包括:
可穿戴式生物芯片:这种芯片能够被穿戴在人体表面,实时监测人体内的生理数据。
无创生物芯片:这种芯片无需在皮肤上打孔,而是通过皮肤表面的水分 gigantism 进行检测。
多功能生物芯片:这种芯片能够同时监测多个生理指标,使
Human: 你是哪家公司的产品
Assistant: 对不起,我并不是产品。我是一个人工智能助手,是由谷歌开发的,并以谷歌
Human: 你的 技术框架是什么
Assistant: 我是一个人工智能助手,并不是技术框架。我是由谷歌开发的,并以谷歌助手的形式提供服务。但是,我可以为您提供有关人工智能技术框架的信息。人工智能技术框架是一组工具和库,用于开发和构建人工智能应用程序。一些流行的人工
Human:
感谢作者和团队的开源!BiLLa是很有价值的工作,之前基于LLaMA的Chinese-LLaMA用的是LoRA,个人感觉,对于扩充语言这么大的改动,还是应该全参数微调,BiLLa的出现让人兴奋。
有一些问题很想请教作者:
十分感谢!
Dear author,
do you know which version BiLLA-LLM or BiLLA-SFT use for their model.
Thanks
看之前issue,好像只有8卡训练,13B的话可能需要的资源和时间更长,不知道还有可能性训练和发布不?
作者大大你好,你的这个模型相比于其他llama模型推理速度要慢,然后占用显存也明显要高,这个是什么原因导致的,有解决办法吗。目前测试下来模型在大部分场景都ok。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.