词语:以及具体指代永远是一个不可解决的难题。分布式难题
援引:https://huggingface.co/meta-llama/Llama-2-7b-hf
问题:模型在哪?
答案:
1,之前我们都是将其放在result目录下的
Q2:llama模型在哪?
chain of thought:
1,师兄使用过这个东西
2,这个东西应该包含在脚本中
3,师兄使用的是微调过后的llama版本
4,真llama版本在哪?
5,ptmodels 下找到了
Q3:我们似乎使用的是hf的版本,他们使用的是AIpaca的版本?会存在哪些区别
chain of thought:
q1:AIpaca 版本:斯坦福微调的一个7B的版本。 微调是微调的哪方面的能力?
指令微调。使用gpt3 达芬奇系列,根据一个指定,输出种子集,生成指令,与对应的答案,生成大量的数据。然后微调。
q2:hg版本的LLama2是什么情况呢
llama2 包含一系列与预训练与微调后的模型,微调后的模型是chat ,针对对话进行了微调。微调使用了sft与RLHF
q0.1 :LLama2协议使用协议?
1,开源可使用,可以拷贝、修改
2,当使用别人的,则不可乱转发(权责)
3,似乎不能使用LLama2去改进其他的模型
a1:聊天的微调可能会需要增加一些特殊的标记。具体参见chat_completion。
a2:训练一个llama265需要T级别的数据,月级别的时间,GPU要百万级别小时。百万级别小时还是训练一个epoch的时间。百万级别小时,如果放在单GPU上可能是跑不动的,需要的时间更久,疯狂的存储的换入换出的机制。在多几倍的时间都不够。
a3:llama2使用的数据都是开源数据。预训练使用了2万亿哥tokens,微调使用的是公开的指令微调的数据。
a4:预训练数据的截止时间是 2022 年 9 月,但一些调整数据更为新近,直至 2023 年 7 月。
Q4:大模型永存的问题有哪些?【基础】
1,大模型的本质推理能力,就是概率预测
2,大模型的数据是其知识的来源,需要不断的更新数据集,而训练整个大模型都是非常复杂的
3,大模型的训练计算的成本是巨大的
4,大模型的社会危害,能够产生有毒有害的信息【当前】
5,大模型的信息成为人类获取信息的主要方式,这是糟糕中的糟糕。
Q5:AIpaca这个模型在预训练的基础上微调的还是在chat上微调的模型?
a1:AIpaca模型没有对模型的有毒性和伦理问题进行微调
https://crfm.stanford.edu/2023/03/13/alpaca.html
1,只能是在预训练上做微调的,在别人的基础上做微调还是比较抽象的
Q6:LLaMA2 7B的预训练模型的效果如何?【开始评测】
Q6.1:torch run是什么命令,是使用torch的分布式训练的命令行工具
分布式并行训练框架:分布式训练,涉及到多进程
Q6.2:似乎直接运行评估会出现问题?因为很多参数的组合都是没有出现的
1,出现了错误,首先就是llama这个包安装出错。疑是’execfile’ is not define,这个函数在python3中已经没有使用了。据说是这个问题。
2,然后我在edge上搜索了之后,发现修改镜像有用。但是没有。这包都一样,这是python版本的问题。
3,目前有两个解决办法,(1),下载下来修改源码;(2),直接使用另一个评估框架。
4,先使用git的方法
使用之后pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple 可以将一个包作为python包的扩展,这样方便去更新包,并将其使用。推断:这就没必要经历之前报错的那个过程。
5,world size表示总的进程数,localrank 表当前的位次。这在本服务器上也是相当于是A100
6,ceval 它使用的模型路径,和我们使用的模型的路径是不一致的,它对应的是另外一种模型路径
7,作者写的这个是基于pth保存的模型写的,若是我想使用huggingface上的模型,那就需要去将其改为huggingface上的模型,或者说使用那个后端评估框架
Q6.3:前面做蒸馏的时候,我们是放在更高的层次(别的层次)来看待蒸馏的过程的,那么它是如何使用多种并行机制的呢(这里是指加载模型)?
1,嗯,transformer的框架似乎已经解决了这个问题。
Q6.4:我需要按照Q6.2/7的想法将eval代码改掉?
a1:之前是使用pth,现在要使用的hf
a1.1:需要将模型的提取方式,这些修改。才能加载模型
a1.1.1:不同框架的模型是不同的数据结构,而不是相同的,这样会造成一个系统性问题。
a1.2:修改之后会造成的影响
a1.3:需要修改eval_llama与llama模型的部分,因为使用的不是同样的数据结构。实现会有区别
1,加载模型。使用hf中的加载模型的方法
g1:加载模型,使用模型的能力。对具体细节更加敏感
Q7:lm-evaluation-harness 是什么?
一个大语言模型的评测框架。
大模型评测,就是数据,收集结果,然后得出分数。
数据、 模型 、 后处理【评估指标】
框架:通用性
1,能够支持大量的基准测试集
2,支持多种主流的深度学习框架,并且能应用并行处理的框架。 VLLM, deepspeed
3,支持API的调用
Q8:保存模型的格式有很多种,不同公司有不同的保存模型的方式。也就催生了各种格式。各种格式只要按照一定的输入解码方式,还有输出解码方式就好了。hf使用的是bin来保存的,而pytorch 是使用pth来保存的?
a1:参数,模型数据结构的基本信息,以及作者信息
Q9:目前整个包封装的体系还是比较复杂的,啥才是它的核心呢?
a1:前面的使用文件名的命名空间形式是一种分级,这是它的核心之一
Q9.1:那具体的安装流程呢?毕竟她要使用setup这个py 【整个软件系统的构建还是很美妙的】
An1:对eval_llama.py分析
0,使用的是pytorch的分布式编程框架,与保存加载模型机制
1,使用了meta开发的一个分布式的扩展库fairscale
Q10:autotrain是什么?
一个无代码的训练平台,屏蔽了模型与训练过程的复杂性。类似于点击即使用的这种方式。
现在这些云服务商,提供了很多的成熟的使用这些模型的方式。部署与训练,这些他们都在干。
【启示】我们要做的是什么呢,实现他们能实现的功能,并且增加新得功能。
Q11:hf中的PreTrainedModel 与 ModuleUtillsMixin实现了一些些通用的方法。
1,看这个东西,还是要将其脉络看清楚。使用什么样的方式,做了什么样的东西2,
2,我想看的是hf是怎么来使用这些模型的,在哪我能找到,而且我能使用。并不只是看到一个可能正确的方法,我要知道引用文献,参考
Q12:float16与bfloat16的区别?
1,float16:使用16位表示浮点数,其中1位用于符号(sign),5位用于指数(exponent),10位用于尾数(mantissa)。这种格式也被称为半精度浮点数。
bfloat16:同样使用16位表示浮点数,但位数分配与float16不同。它保留1位用于符号,但将8位用于指数,仅7位用于尾数。这种设计使得bfloat16在表示范围上更接近32位浮点数(float32),但牺牲了部分精度。(数域更大,但是精度降低)
【模型训练的时候,应该在精度为bfloat,否则可能会出现NAN值】
Q13:Llama2与Llama的模型区别?
1,使用了分组注意力机制
Q14:其实好复杂呀,两个系统的对接往往需要某一方做出改变,这种变化是让人觉得有些麻烦的。特别是对于刚学者?【因为这不是你的系统】
1,只是看上面可能出现的改动会有点不知所云
Q15:要在hf上使用Llama需要做出一些改变?
https://huggingface.co/docs/transformers/model_doc/llama2
1,将config.pretraining_tp 设置于非1,能使得线性层更加的精确,但是会比较慢。这会使得对原始的logit更好的匹配。
2,原始的llama模型使用pad_id=-1。【我们不能使用同样的logic】,我们需要使用tokenizer.add_special_tokens({“pad_token”:“”}),并且resize这个词表大小,token embedding。我们也应该设置这个 model.config.pad_token_id。这个模型应该self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)初始化这个embedding层。这会使得,这个padding token将会输出0.
【它这个上面逻辑,之所以没看懂,可能是我认为它的逻辑走不通】,它这个如何将参数直接增加一个token呢【之前Llama需要的是什么?这里看了token.json确实是配置了padid为0。
3,使用flash_attention 注意力方式,目前这个算法只支持16精度的
Q16:tokenizer这一大长串中有些表示什么意思?为什么?
decoder:
1、表示的是解码顺序。首先将_替换为空格,这是由于子词算法所决定的。
2、batefall back :处理字节回退,解码过程可能出现了违法映射为字符的字节【具体是哪些?】这里应该也是BPE编码引出来的问题。将字符转为unicode,从unicode转换为【字符】,然后使用子词的方式来编码。
3、fuse:将子词合并为原来的字符序列
4,strip:去除开始的空格与之后的空格
normalizer:
1、在单词上_表示子词的边界
2、将空格替换为"_"
文本生成,可能会有比较多的杂项,所以也需要去对输出做后处理
Q17:问题还是依旧,但是先使用minillm这个框架来将蒸馏跑通给老师一个结果。双管其下的干把?
Q18:chinese-llama-alpaca模型,使用中文语料预训练之后使用指令跟随的数据集一起微调后的模型
work:
Q6.4
Q17