Hi there 👋

欢迎关注同名公众号【多头注意力】

来自社区的Gemma微调踩坑记录

越来越多人发现Gemma 难以 finetuned的现象了。今天在 Twitter 逛就看到好几个相关帖子。 下面这个老哥是 Dolphin 和 Samantha作者,应该算有经验的开发者,直接搞了一个 200 多的 loss 出来。 add new token引发的惨剧 后面他们发现可能是新加 token 导致的问题。finetune 时如果新加 token 必须训练 embedding,对于 lora微调来说默认是不训练这组参数的。老哥把新 token 去掉之后正常了。如果是像我一样的全参微调压根不会碰到这个问题,Lora 看起来还是在社区里占据了更主流的位置。 Teknium 也是 finetune 达人,上来loss 也很高,但后面慢慢降下去了,原因也是他加了新 token。 另一个add new token引发的惨剧 回帖里有个老哥(之前是 OpenAI 员工哦)说可能是 pretrain 数据里有 Instruct 数据,顺带提了一下 Phi-2 和 Qwen 1.5。当然这都只是猜测,语料里有啥已经是大模型界最深的秘密。不过这种做法确实让人讨厌,基座就好好做通用语料训练,别搞指令数据。这么一搞下游训练容易遇到麻烦。我之前试过 Qwen 和 Baichuan,虽然他们的 benchmark 成绩都很好,但finetuned 的表现确实不如 llama2 好。Qwen 1.5最近倒是看到有不错的微调版本在 leaderboard 上排名不错。 这老哥还提供了一组超参数说值得一试。max_grad_norm 在 HF trainer 里默认就是 1,adam beta2 默认是 0.999,降低到 0.95 会让梯度的变化更敏锐一些。至于 epsilon,我一直感觉没什么可调的,1e-8 和这里的 1e-5 应该差别不大。...

February 25, 2024 · 1 min · Yuanhao

地表最强7b模型?我的Gemma体验报告

昨天,也就是2024年2月22号,一早上起来就看到国内的AI公众号就热闹非凡,Google发布了他们的开源大语言模型Gemma,上Twitter也看到Jeff Dean卖力地再宣传自家的新产品:几条推文展现了好多令人兴奋的技术指标。 在上班前我先简单翻了翻技术报告,让我比较感兴趣的是256k的词表大小和6T的预训练语料。这俩改动加起来我估计应该性能确实会有一些提升。 最近Andrej Karpathy在YouTube上搞了个很火的讲Tokenizer的课程,应该也从侧面体现tokenizer和词表对现在的LLM性能之重要。我用Tokenizer Playground测试了一下LLama2和Gemma对同样文本的tokenize结果,可以发现Gemma的token数少了大概10%。当然,我测试的文本非常基础,全是ASCII字符,差距应该不那么明显,到了代码或数学场景(Gemma是做了digit分词的,数学应该强),差距应该就会显现出来。 LLama tokenizer 的结果 Gemma tokenizer结果 我最近喜欢在面试的时候问别人vocab大小对于LLM性能的影响,从序列长度讲当然是词表越大越好,因为token序列会短,不仅生成时的步数会少,每一步O(N^2)的self attention也会有不少的提速。但output layer和embedding table都会变大,所以最终的速度变化不太好说。 这个Gemma模型说是2B和7B,但其实参数量是偏大许多的,7B版本的参数加起来已经8B多了,谷歌这次为了“挽尊”特意把表格分成了embedding parameter和non-embedding parameter,确实略显诡异。 Gemma的参数量 结构的设计也比较奇怪,intermediate hidden size特别的大,和”同参数量“llama比起来层数有所降低。我特意整理了下表,大家可以更清楚地看出两者的变化。我这个表是从huggingface权重repo的config.json来的,feedforward dim竟然和tech report不一样。这次Gemma还在每一层放了两个normalization,激活函数也和llama不一样,用了GELU。 Gemma-7b Llama2-7b vocab size 256000 32000 hidden size 3072 4096 embedding params 786M 131M layers 28 32 attention heads 16 32 head dim 256 128 intermediate size 24576 11008 activation func GELU SwiGLU 技术报告里列了一大堆让人眼前一亮的指标,基本意思就是7b可以干llama-13b。但现在我感觉这些指标和实际好不好用关系并不是那么大,看看就好。当然此时的我预期Gemma7b应该还是要好过llama2 7b的。 Gemma的指标很亮眼 到了办公室赶紧就开始在我们的数据上finetune了一下。选的7b版本,huggingface已经贴心地把它整合进各种库里,transformers升级到4.38以上就行。我先试了下llama2-13b一样的超参,发现eval loss差了不少,而且新版transformers会计算grad norm,这个值在训练初期有很大的波动,一度达到上百的量级,感觉训练不是特别成功。后面我又换用了一组比较小的学习率,比之前有所提升,但eval loss还是和llama13b有差距。 我的几组实验,bf是全参微调,bl是lora 不过不同模型特别是词表量级相差如此巨大的模型间eval loss不太好比较(直观感觉是词表大的loss水平应该要高一些),只好用一些业务指标来比。我用一些测例推理了一下模型,发现学习或者推理过程应该是出了些问题。虽然eval loss在合理范围,但生成的文本基本不可用。 而且,Gemma7b的训练显存消耗比llama2-13b还大,同样的deepspeed配置我只能跑原来一半大小的batch。Gemma虽说参数约为8b,但肯定比13b小不少,出现这种情况我也比较费解,欢迎大佬点拨。 歌手大佬也发现了一些开源版的实现问题 总体感觉目前的Gemma版本有一些问题,看看过几天社区会不会发现并修复它。也希望真的能有个能超过llama2-13b的7b模型可以用。当然,我最希望的还是llama3赶紧出来吧😂

February 23, 2024 · 1 min · Yuanhao

接近参数化的世界

每个人的世界无非是ta看到的,听到的,闻到的,尝到的,摸到的加上想到的。 今天Sora的问世让我感觉到离计算机能够模拟这个感官世界已经不远了。虽然不是精确的,但肯定可以是精彩的,令人满意的。在享受面前,谁又会在意精不精确呢。 2022年ChatGPT出来的时候有模糊的感觉:预测下一个token的任务竟然能在效果上模拟推理、逻辑、甚至扮演角色,这不就说明文字世界的一切其实是被一个概率刻画的规律主宰的吗。放在玄学语境里,就是所谓的因果,它真的存在。 这次OpenAI更近一步,“世界模型”的概念已经再清楚不过地表达他们已经接近找到用概率模型刻画世界的方法了。 Sora is able to generate complex scenes with multiple characters, specific types of motion, and accurate details of the subject and background. The model understands not only what the user has asked for in the prompt, but also how those things exist in the physical world. 时至今日,文本、图像、音频、视频都已经可以被基于概率的AI以不错的质量产生出来。这些模型几十上百GB的权重里就是一个参数化的世界。 当一切都打磨地更加完善,那下一步就可以做一个造物主,用概率的方法造一个跟现实世界很像的世界。元宇宙可能处在大爆炸前夜?

February 16, 2024 · 1 min · Yuanhao

填志愿真难

这两天各省的高考成绩陆续发布,考生和家长马上该为怎么填志愿伤脑筋了。 今年小舅子高考,考得不错,虽然清北上不了,但其他学校应该都有机会。作为一名负责任的好姐夫,自然也发动身边资源给小舅子出谋划策。 不搞不知道,现在填志愿还真是不容易。 首先是现在的大学都很会蹭热点、造概念。人工智能相关的各种学院、实验班就有好几个,比如浙大的图领班,人大的高瓴学院,复旦的计算机科学拔尖班。 还有些近年来火热的产业比如新能源,也有像上交的博渊未来学院这种新兴院系。 近年来各种软硬件的热点确实多,AI、半导体、新能源都火过一把,给了这些院系或者项目很好的土壤。 家长和考生也很吃这套,愿意为此买单。 遥想十几年前我填志愿那会其实也有热门专业,当时的显学是金融、建筑、土木,现在好像也都比较冷清了。 所以大家填志愿的时候也不要过分追逐当下的热点。 第二个现象是所谓大类招生,或者更实际的说法是各种“实验班”很多。这种实验班往往是相关专业搭在一起,但里面的专业强弱是有差别的。 例如复旦的“技术科学实验班”里面包含的专业有信息类也有航空航天。这种大类专业往往进去之后还要按成绩分流。 上海交大这方面就比较离谱,分流时80%看的是高考的成绩。感觉有点给考生画大饼的意思,用大类招生里的好专业把你吸(哄)引(骗)进来,入学后可能会和期望有偏差。 不管怎么样,我认为大类招生的本意应该是好的,但是对于这种大类招生,考生和家长们务必要调查清楚,做好预期管理。 今天看到一个我关注的大V写现在专业之间的差别没有学校之间差别大了,我感觉是有道理的。随着社会和国家对硬科技的关注越来越多,原来的一些天坑专业比如生化环材也开始支棱起来了。 计算机类虽然在收入上目前还有一定的优势,但优势也在衰减。在这种情况下,他建议大家可以多考虑下自己的兴趣和特长,我也比较认同。 不过遗憾的是,像我们这种在小县城长大的小孩可能很难有机会在上大学之前就搞清楚自己的兴趣到底是啥,很多东西可能都没有机会接触到。 作为一个过来人,我本来是想写点东西来给大家科普一下,但也一直没时间。这里把我的一些想法分享出来,大家可以用这个框架自行查阅资料。 其实很简单,想了解一个专业,可以问这几个问题: 这个专业在大学四年的培养计划是什么样的?会学一些什么课程?对比几个专业的培养计划就能看出区别来。如果培养计划没啥差别,那后面研究生阶段转换就会比较容易。 这个专业有哪些著名的公司?他们的产品是什么?他们的股价或者市值这几年是怎么变化的 这个专业有哪些著名的人物?可以分别找找学术界和工业界的,看下他们在研究什么。他们中有没有你想成为的人? 大家有什么关于填志愿的好方法也欢迎在评论区留言。

June 25, 2023 · 1 min · Yuanhao

令人吃惊的M2芯片

最近拿到了一台14寸的MacBook Pro,搭载了M2 Pro芯片,内存为16GB。昨天心血来潮,在上面尝试训练了一个神经网络,感触挺深的。 我训练的是一个BERT-base模型,当年也算是个”大模型“,但在现在看起来就是个小不点。训练数据不多,大概一万多条文本,平均长度应该接近模型的最大输入长度。 这个任务在我的A6000显卡上跑得飞快,不到十分钟就可以跑完三个epoch的训练。我一开始移植代码到MacBook上的时候没有注意到Huggingface Trainer有个控制是否使用M系芯片神经处理的开关,所以用的是CPU,进度条显示训练完要15个小时。 后来查阅文档,打开开关后,跑完训练的时间大幅下降到了1小时左右,提速了十几倍!(测试不严谨,但提速非常大是肯定的) 别人M1 Ultra的测试结果也有明显提速 不过遗憾的是,目前pytorch并不支持在M系列芯片上使用半精度数据类型,导致训练的显存消耗略大,batchsize上不去。但GitHub上有个帖子说M2其实只支持bf16的,估计不久的将来会有PR来支持这一特性,那又可以有一个速度的大提升。 前几天苹果发布了缝合版处理器M2 Ultra,碰巧知乎上有个付费问题,我就去了解了一下相关知识。目前苹果的统一内存架构是在CPU和GPU之间共享内存,而且内存带宽极大。4090的内存带宽是1T/s,而M2 Ultra达到了800GB/s。M2 pro的带宽也有200GB/s,而M2 max是400GB/s。 统一内存架构在大模型时代感觉有极大的优势,我查阅了一下目前NV主流的移动显卡,显存大多只有8GB,而M2 pro笔记本的起跳内存就有16GB,32GB版本再花3000块就能买到。 即使在不支持半精度的情况下,32GB的统一内存也足够塞下7B的模型,已经有很多东西可以玩了。京东上一个24GB的4090显卡也要一万多,加上七七八八配个台式机估计两万块也是要的。但是一个32GB版本的MacBook Pro也只要19000,简直太划算了! 高考刚刚结束,有不少同学或者家长估计都在挑选新的电脑、手机等设备。在不差钱的情况下,我强烈建议搞一个MacBook,教育优惠可以打八五折,你可以尝试很多普通笔记本电脑没法带给你的东西。

June 11, 2023 · 1 min · Yuanhao

Vicuna初体验

今天深入体验了下Vicuna,以下是我的takeaways: 指令跟随的能力跟ChatGPT有点差距。最典型的就是下面的身份设定任务都经常失败(如下图)。模型会非常倔强地回复你他是Vicuna,是LMSYS训练的模型。 针对上面的问题我看了下代码,发现他们专门搞了好几个问身份的语料来训练模型图片,真的是把身份感刻在了骨子里。 fastchat迭代挺快的,今天试了下他们新加的API功能。整个使用体验几乎和openai的client一模一样,学习成本很低。但目前文档没怎么跟上,有时需要看看代码。例如我在异步环境里用chatCompletion.create失败,看代码才知道要用acreate。 试了下Vicuna-7b的embedding,能力非常一般,而且维度4096太大了,那算相似度可真费劲,而且在检索任务上被768维的Instructor Embedding秒杀了。 看了下lmsys的成员,好家伙,几乎全是中国人,感觉人才这块可能对于中文大模型不会是短板。 使用下来总体还可以,下面这个例子和GPT的能力确实差不多。最后一个图是我提供些knowledge给它后的回答,措辞稍微不达预期。

May 7, 2023 · 1 min · Yuanhao

OpenAI官方出品的ChatGPT调校指南你读了吗

作为一名Prompt Engineer,每天都在跟GPT打交道,时常被他惊艳,也看过很多模型失效的案例。在不精调的情况下,prompt基本上是影响效果的唯一因素了,虽然网上有很多Prompt编写指南,但我认为OpenAI出品的这份,你一定要看一下。 这篇文章就给大家划一下重点。 ChatGPT基操 主要包含在How to work with large language models这个文档里,同时适合网页和API用户。首先,介绍了向ChatGPT提问的三种主要范式,一种是直接给指令,例如 Extract the name of the author from the quotation below. “Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard.” ― Ted Chiang, Exhalation 模型将会输出 Ted Chiang 另一种是将指令转化为一个补全(completion)问题,例如上面那个指令改为 “Some humans theorize that intelligent species go extinct before they can expand into outer space....

May 4, 2023 · 3 min · Yuanhao

大力真的有奇迹

在之前那篇颇受欢迎的卖惨小品【今天被OpenAI爆了】里,我讲述了被GPT embedding震撼的故事。但故事的最后,我们并没有采用openai的embedding接口,因为那样确实成本和产品稳定性都不好控制。 我们在一番寻找之后,我们看到了一个叫Massive Text Embedding Benchmark (MTEB)的大型语义表征benchmark(在Huggingface上有最新的的榜单)。并且最终选择了榜单上排名第二的instructor-lg模型。 Instructor-large模型的水平在这个榜单上超过了openai的ada-002,可见开源社区还是很能打的。这个模型基于的是谷歌的T5模型,然后用instruction finetuning的方法训练了一个可以适用多个场景的embedding模型。维度768,模型0.3b,推理速度很快,线上使用负担也比1536的ada-002低很多。这个跟之前我使用的21年SOTA Simcse模型(排在排行榜第30位)比,规模是三倍,在这个benchmark上的得分是61.59 vs 48.87,提升确实很明显。不过我猜Simcse large的得分应该也能超过50。总之instructor是个好模型,推荐大家在需要语义embedding的场景使用。 但今天的主角并不是他,而是排在第14名的模型all-mpnet-base-v2。这个模型是sentence-transformers出品的一个模型,用的backbone是mpnet-base。它的规模和simcse相当,但得分是57.78,提升了很多。如果说前面的Instructor模型,甚至是GPT模型的提升很大程度来源于模型规模扩大,那这个同等规模模型的提升来自于哪里呢?mpnet这个稍显小众的网络可能比bert、roberta是强一些,但这不是主要的。因为有一个名字很类似的模型all-MiniLM-L12-v2,以及它的缩小版all-MiniLM-L6-v2,的得分分别是56.x。这两个模型的维度更小,是384维,而L6模型的层数甚至也只有bert-base的一半。主要的提升点来自于前缀all。model card里是这么说的 We use the concatenation from multiple datasets to fine-tune our model. The total number of sentence pairs is above 1 billion sentences. We sampled each dataset given a weighted probability which configuration is detailed in the data_config.json file. 十亿句子对训练,没错,是十亿。拿一个小小的6层模型,在大量数据上训练,就可以获得一个比两年前的SOTA好很多的模型。这种暴力美学真的令我叹为观止。看到他们数据集的时候突然感觉自己的格局或者想象力真的太小了。什么叫对深度学习有信仰,这种玩法大概就是吧。其实OpenAI也是很类似的,因为相信大模型,大数据,所以能搞成。而且就sentence-transformers用的数据来说,都是公开可获取的,能跑得动这个训练的人应该有很多,但真这么跑的却很少。 不止是NLP领域,CV界不也是这样吗,前段时间Meta的SAM也是用史无前例的大数据集训练的。对比一下,之前的预训练模型用的常用数据集COCO才328K张图片,是SAM数据集的3%。 SAM is trained on a massive dataset of 11 million images and 1.1 billion masks, which is the largest segmentation dataset to date....

April 19, 2023 · 1 min · Yuanhao

今天被OpenAI爆了

今天第一次体验到来自大语言模型的压力。 最近在做一个语义匹配的小任务,选择的方案是用2021年的SOTA模型SimCSE在我们的领域数据上先进一步预训练,然后再用任务数据finetune降维。前几天的时候还自我感觉良好,因为比之前的模型效果好,还修复了老语言模型的一些明显badcase。 但是今天,我们用openai的embedding模型也试了一下,recall指标直接翻了一倍。当时看到结果我都惊呆了。这个模型一千个token只要0.0004美元,相当的便宜,而且开箱即用。 之前我看到网上帖子说NLP工程师失业啥的还觉得有点夸张,现在感觉还真有可能。 首先这个事情是有正反馈的,作为一款公开的产品,而且这么便宜,你不用别人也会用,你如果没法超过他(现在看起来确实不容易),那就只能也用,不然产品竞争力就会出问题。 一旦大规模用,那很多NLP问题的处理范式真的会改变,以前大家在不同场景finetune类似bert这样的小模型,但现在可能会变成在OpenAI embedding基础上finetune最上面的输出层,例如分类层。一个底座可以支撑好几个上层需求。这样的话需要的人力大大减少,公司的inference负担也大大降低。虽然在OpenAI那花了些钱,但算下来大概率是比原来划算的。 当然这样的方案也有一些问题,例如公司的数据就都让OpenAI知道了,并且OpenAI目前不太稳定,稳定性上有点不可控。 那作为公司,感觉除了之前大家都看到的在NLG上投入大模型这条独木桥,未来在NLU上投入大模型的应该会有很多。自己跑个10B量级的模型作为底座,做到OpenAI的8、9成应该是个比较好的选择。朋友们,赶紧学起来啊,不然真要成为纺织女工了。

March 28, 2023 · 1 min · Yuanhao

[大模型补课]模型及训练方法

前情提要: [大模型补课]当代AI的基石数据集 [大模型补课]当代语言模型的评价体系 这是大模型补课的第三篇文章,主要关注模型及其训练方法。做算法的人往往最喜欢看模型相关的东西,这期包含的内容也确实很有趣,不需要技术背景也能看懂。 Encoder vs Decoder 在模型层面,我认为大模型时代最重要的一个变化就是从前几年的Encoder为主变成了Decoder Only占据绝对的主流。相对应的,自然语言生成问题取代了自然语言理解问题成为了主流,并且是在用生成这种范式统一了理解问题。 transformer编码器和transformer解码器的主要区别在于它们如何处理输入和输出序列。 {: .align-center style=“width:80%”} 最开始的时候Transformer的Encoder和Decoder是成对出现的 {: .align-caption style=“text-align:center;font-size:smaller”} Transformer编码器处理输入序列(例如句子),并将其转换为一组隐藏表示,以捕获序列的含义。编码器由一堆相同的层组成,每个层对输入序列应用自注意力机制和前馈神经网络。 另一方面,Transformer解码器基于编码器产生的隐藏表示生成输出序列。它也由类似的层堆叠组成,但每个层还关注编码器产生的隐藏表示,以包含输入序列的信息。解码器还使用自注意力机制以自回归方式生成输出序列,这意味着它逐个标记地生成,条件是它已经生成的标记。 总之,虽然transformer架构中的编码器和解码器都使用自注意力机制和前馈神经网络,但编码器处理输入序列,解码器通过关注编码器产生的隐藏表示来生成输出序列。 当下火爆的大语言模型几乎都使用的是decoder only的结构。在知乎有一个问题为什么现在的LLM都是Decoder only的架构?,非常推荐大家阅读。GPT4发布之后,其处理context的能力从3.5的4k一下跃升到32k,不知道openai是不是又加入了encoder。 涌现、Scaling Law和科学炼丹 模型的规模增大无疑是最近AI进步的重要推动力。目前像GPT3.5这样的语言模型包含了1750亿个参数,相比于人脑中的神经连接其实还小了差不多一个数量级。模型的大小和其能力的关系实际是一个非常有指导意义的值得研究的问题。 涌现(emergent abilities)是在2022年中的论文Emergent Abilities of Large Language Models 提出的概念,是指在大模型中出现的而在小模型里没有出现的能力,用咱们熟悉的话说就是"量变引起质变",而且这种现象是不可预测的。这种不可预测性给模型的开发带来了很大的麻烦,因为训练一个100B以上的模型成本是非常高昂的。这篇论文里列举了好几个任务里涌现的案例。 Emergence is when quantitative changes in a system result in qualitative changes in behavior. –Nobel prize-winning physicist Philip Anderson {: .align-center style=“width:80%”} Few-shot任务里体现出来的涌现现象 {: .align-caption style=“text-align:center;font-size:smaller”} 实际上,早在几年前人们就训练过巨大的模型,但那时候并没有出现现在这么强的模型。例如可能是世界上最喜欢大模型的公司Nvidia,在2022年训练过一个530B的超大模型MT-NLG,但可能知道这个模型的人都很少。Deepmind的论文Training Compute-Optimal Large Language Models讨论了这个问题,并给出了结论:之前的模型都训练不充分,把数据量提上去小模型也会有大能力。还给出了一套算力消耗一定的情况下合理分配模型规模和训练数据多少的方法论。 {: .align-center style=“width:80%”} 典型的大模型参数量及训练数据量,Chinchilla参数少得多但性能更强 {: ....

March 25, 2023 · 2 min · Yuanhao