Mi孝子:实习期间“偷”到的一些小知识
近期获得/加深的一些知识理解GPT结构、训练与推理分析图解GPT理解prefill阶段是生成kv cache以及用最后一个token对之前的kv进行计算得到一个概率,后续token同理。vllm就是对各个模型进行推理上的重构,而本身的modeling_qwen2.py这类其实是训练用的文件。推理阶段还需要重写。实际上公司内部模型部署vllm就是转化成qwen格式然后调用vllm的qwen接口……
bash脚本文件语法写sh脚本的时候,’=’前后不能有空格,与本人python编程习惯背道而驰…..
python小知识点——import使用
12import sys sys.path.insert(0, sys.path[0] + "/../")
进行导入的时候,需要注意的是,这个添加的路径是当前工作目录的相对路径,而不是这个文件的相对路径。也就是说,如果一个处于该文件父目录的文件调用了该文件,那么该文件的这个代码就会被解释成“将父目录的父目录加入path”,与预期的“将父目录加入path”不符合导入模块应该采用以下写法,即获取当前文件的父目录,然 ...
adamW优化器:思想、算法公式与代码
首先分析一下adam的思想:
获取梯度/导数/一阶动量的滑动平均——m1/滑动平均后的梯度g
获取二阶导数/二阶动量的滑动平均——m2
其中,β1和β2就是控制一阶动量和二阶动量滑动平均的参数。通过滑动平均,可以使得m1和m2都变成前面所有时间步结果的一个调和平均之后:
根据β1和β2,以及当前的时间步t,计算一个系数,调整学习率,得到L_t
梯度下降,公式变成了: 参数 = 参数 - L_t * m1 / (sqrt(m2) + eps)
最后梯度下降的公式,实际上,看着花里胡哨的,但最终,m1之外的其他部分都可以看成是对学习率的调整,本质上只是让学习率更好而已。
而在原始论文及其最初的衍生实现中,还将L2正则加入到了这个优化器中,具体表现为,在每一步t开始计算优化前,将当前时间步t梯度g_t变成:
1g_t = g_t + weight_decay * L2项
然后后面就使用g_t进行m1、m2等的计算。但是,这样的问题是,L2正则直接加在梯度g_t上面,后面的一阶动量和二阶动量都使用了g_t,最后又有 ...
长文本增强的便捷技术:YaRN与PoSE代码解析
首先放上苏神的两个博客:
Transformer升级之路:2、博采众长的旋转式位置编码
Transformer升级之路:16、“复盘”长度外推技术
本人在进行代码解析之前,首先尽量去理解了这个理论基础,之后在解析代码的时候和论文、博客相互映照,才最终得到一个比较好的理解。其中,第二个是重中之重,需要从头到尾地理解透彻。第一个是阐述了RoPE的数学思路、设计原理。单看这个可能不太能理解RoPE,可以参照其他一些讲解RoPE的博客去理解,使用Google或者bing可以搜到一些程序员自己搭建的博客页面,而非csdn之类的,这些感觉质量都还不错。此外,一定要理解RoPE的原生代码总的来说,笔者在上面这些准备工作花不少时间,之后在理解yarn的代码上又花费了大概一天的时间,才终于产出了这篇解析源代码的博客。所获得的收获是很大的,不单单是理解了一种方法,更是对位置编码有了更深的理解。当然,这些都还是一些浅显的东西,位置编码及其本质的探讨,苏神后来也有一些博客,有兴趣的可以去看一看。
12345678910111213141516171819202122232425262728293031 ...
补习HMM,对其的一些理解与思考
为什么要去研究HMM?首先,HMM这个概率模型,在NLP领域算是一个比较基础的,但很有价值的模型。它的主要思想是:概率分布及其能导向什么结果。关于HMM的理解,在具体的数据场景下是比较容易的,网上也有不少介绍的blog、视频,因而这里不再赘述了。
之前,记得在自然语言处理的课程上,是有提到过HMM模型的,依稀记得是用在句法分析还是词性标注上面。但是由于老师死气沉沉讲的不好,我们院系设置的又不是必选,因而听的也不甚上心,最后也果然没考到,HMM自此埋下伏笔,成为了我的一个知识盲区。后来,应用场景大多是生成文本、或是对文本的内容进行分析,已经没有用到HMM的必要了,像是jieba使用HMM模型作为它的分词器,我只需要懒人使用即可,重点还是后面的内容理解与分析上,因而再也没有接触过这个东西。
实际上,最近,由于准备秋招,深感自身基础不足,在看牛客上的面经,会需要手撕一些基础的分类、聚类、transformer等一些算法。说实话我在这方面是没有准备过、相当薄弱的,因而需要将这些手撕都写一下,我也因此在GitHub上开了一个仓库专门做这个事情。
HMM,本来是不在我的计划范围之内的。 ...
秋招大失利,深夜破防记录
首先,梳理一下逃离北京之后,我大概做了什么
去LF那里躺了一周,之后一直躺家里。期间投、面了一些暑期实习,结果均以早早失败告终。究其原因,感觉在于八股、代码不熟悉,很菜。因而,这段时间主要又刷了leetcode的hot 100,大概2-3遍。由于在家有吃有喝没人逼迫,全凭自觉,因而刷的慢;到了八月,总算有了危机意识,开始着手准备八股了,却对于秋招的提前批也没有多投。是懒惰?抑或是自卑、畏惧?无论如何,是要开学回学校了,正式批,瞄准中、大的互联网厂,基本上都投了一遍;后面又投了几批。
那么,投递的结果怎么样呢?基本是全挂,笔试A的不够多,选择题之类的大概又都又一半是模模糊糊印象不深刻只能嗯猜,因而笔试最终结果肯定不是很好。但是让我去提升,一时半会也无法速成。像是各种排序算法的流程细节、每一轮的迭代结果;像是分类、聚类基本算法的一些八股;像是C++/C的老旧的、大学课程式的输出结果判断;像是机器学习各种方法的优缺点、适用场景等……————都是一些零零散散,但是不深入理解一下的话毫无作用的东西。然而相对于真正的重中之重:NLP和LLM方面的代码手撕与细节八股,重要程度却又 ...
DailyRecord-June
6.1-6.2周六,中午和叶阿姨和她的女儿一起在中关村附近一个饭店吃饭,看上去还挺高档的。吃了北京烤鸭、麻辣牛蛙、豆腐煲、宫保鸡丁……味道还可以。和叶阿姨、她女儿聊天,聊了很多。在我的朦朦胧胧的印象里(也许不是印象,而是我脑部的期许?毕竟那时候我才3、4岁),叶姐姐是一个温柔而活泼的大姐姐。时过境迁,到了现在,温柔仍然是温柔,已经不再活泼。从她的面庞中、眼神里,似乎感觉到她也有些感慨、或是悲伤,隐隐可见泪光。叶阿姨的女儿是高三,马上高考。但是她似乎有压力但不大?或许是我没能看出她笑容下面隐藏了什么吧。总之,是一个活泼可爱的小姑娘,穿搭、皮肤质量之类的与我们当时完全不同。记得当时整个高中生涯似乎都是瘦巴巴、苦哈哈的,哈哈!从姑娘的身上,我隐隐也看见了过去自己的影子:无需考虑生活,有着许多不切实际而有趣的理想、兴趣,也许会实现、也许不会实现。例如深山老林生存式隐居、周游世界……当然,北京小姑娘的条件肯定比我小镇做题家好很多,也许都能实现也说不定?更加感叹人与人的不同,小姑娘目前为止已经去过不少地方了,去年好像还独自去旅游过……吃完饭,小姑娘带着我们去打桌游,一个叫什么法师的桌游。玩了大概一 ...
DailyRecord-May
5.1 —— 5.55.1 五一假期的第一天。再说一遍:我恨调休!我恨调休!昨天晚上21:46的火车,早上6:35火车到站。只有站票,我和LT带了马扎上去,结果发现能放马扎的地方也很少。在4月中旬的时候,我和LT说一起回家,聊到站票买马扎的事情,我说我买两个,他不用买直接过来就行,结果他忘了自己也买了一个。于是多出了个小马扎。我是14车,LT是15车,他在15车帮我占了个位置,结果发现是厕所门口,而这个厕所的门还坏了,乘务员过来修反而把门直接给搞下来了;中途,LT试图将多余的马扎以15R推销出去,结果失败了🤣🤣🤣🤣。每节车厢都带个厕所,因而站票大抵是都要在厕所附近窝着的我是不想当老八的,正好听闻说餐车那边有空位,因而我拎着我的两个小马扎过去找位子。到那儿发现餐车坐满了,估计都是站票过来买饭送座位的。餐车的尽头比较空旷,只有一个哥们儿在地上铺了个纸躺着。我在这儿蹲了下来,LT怕被赶走,让我看看情况,半小时没人赶就叫他。确实没人赶,然后他就过来了,过来一合计,吃点东西,然后去问有没有空位。乘务员腾了两个相邻的位子给我们,然后96r,没得选择,两人吃鱼香肉丝饭。我吃了一碗半,LT吃了 ...
DailyRecord-April
4.1上午,把qwenllm/qwen的docker image放到服务器上了,但是下午发现模型没放,还要下载72b-chat的模型再放上去;而且这个东西好像要自己写应该服务端py文件?下午复习了一下long-context的论文,看了retrieval的一些如longllama,温故知新,没跳出已有框架的同时,感觉理解更深了晚上,和SH打了一把游戏,然后和沈老师开周会,汇报了一下自己目前的一些理解。得到下一步的研究内容是:把retrieval 的方式在大模型上都实现一下之后,继续和SH、NJ一起打了大乱斗
虽然是愚人节,但是无事发生
明日任务:阅读论文;学习修改大模型的方法
4.2 草!这一天干啥了我给忘了!原来日记漏了一天,4.8才发现! 好像还是在看代码和教程?
4.3上午,阅读qwen的model_qwen.py文件,尝试理解模型结构,寻找修改方法。最终目的是将kv retrieval加入到模型中去;目前没什么头绪,是直接改model文件,还是写个新的继承一下?继承的话如何与已有文件保持联系和交互?qwen的py代码没有啥注释,突然想到可以看一下tran ...
DailyRecord-March
3.20入职的第一天,接到的任务是:把闻达的demo在服务器上用docker给搭建出来。于是我在服务器上先创建了一个miniconda3的docker,然后使用conda安装了一些依赖、git项目等;其间遇到一个问题:docker+conda后,尽管bash上显示是root,但是好像是一个虚拟的root,没有sudo等的执行文件,需要重新安装一下。此外,公司的网有点差,清华源1Mb、不用清华源只有几十kb。因而进展较慢部署步骤进行到了模型下载这一步,但是因为网不好所以连不上hugging face,需要搭梯子。下班了,明天再搞!
明日任务:搞定梯子,下载好生成模型和embedding模型,最终完成demo,并调整远程访问展示
3.21今天签合同了。搭梯子问题卡了好久😡。这国企是一天也不能待了,网差的要死。最后还是前辈哥帮忙解决的。但是terminal的命令,下载的那些怎么都那么几把慢啊!网速是压力之源!更悲剧的是:今日闻达demo部署至最后一步无法运行…………..可能是docker的问题,因而将其删除从头开始搭建。如果明天仍然不行,则尝试不用docker直接在服务器上部署 ...
第一次实习前的一些准备工作与知识储备
千帆杯原生应用挑战赛
大赛主旨:大赛以“创意无限·生成未来”为主题,紧密围绕当前AI技术的前沿动态和应用趋势,借助百度智能云千帆AppBuilder和ModelBuilder两大智能开发助手,鼓励参赛者打造出更多具有创新性、实用性和社会价值的AI原生应用
第一期:游乐场排队规划助手:赛题聚焦春节假期游乐园排队效率问题,鼓励开发者利用 AI 能力施展“时间魔法”,打造一款具有实用性的“游乐场排队规划助手”,帮助游客更好地了解乐园的排队情况,设计个性化的游玩路线,在有限的时间内获得最“High”的体验,同时为管理者提供优化运营策略的决策支持。
此大赛没有规定数据集,需求成果是使用主办方框架的应用程序。参赛者需要自己获取相关数据,如大赛第一名使用的是香港迪士尼数据
第二期:生成一个可制作贺岁文案内容的精调模型(限定使用ERNIE Speed,通过对模型精调使其保持原有能力的同时,具备准确理解并执行文案创作中创作长度相关指令的能力)。
此大赛提供了少量数据集(56)条,同时要求对数据集进行扩展(最终至少需要100条数据),数据为json形式
与第一期不同,此期是方向特化的微调 ...