C++复现huggingface transformers中的beam search
由于平时工作内容是LLM 推理加速,所以需要使用c++来实现并适配decoding阶段的beam search方法。下面将以intel neural-speed v1.0的代码为例进行讲解和记录。 neural_speed以早期的llama.cpp为基础构建而来,增加了intel平台的kernel优化以及一些新的推理优化技术(比如streaming-llm, continuous batching)等,在server和client的机器上都有一些不错的效果。 beam search的基本思想 参考博客:十分钟读懂beam search, LLM在解码时如何生成文本 语言模型在生成下一个token时,理论做法是根据前面的token来一起做最大似然估计。从实现上来说,如果要生成长度为L的新文本,假设模型的n_vocab是N,就要比较NLN^{L}NL次组合,选择连乘概率最大的,这么多次模型推理次数肯定是不现实的。另一种token generation方法Greedy Search是使用局部最优的方式,每次选择推理结束时logits最大的那个token id,虽然速度快,但是句子的质量 ...
2023-2024-人生徐徐
且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。 苏轼-赤壁赋 写在前面 每年都让人觉得过得飞快,今年更甚,办了不少事,事业和生活上都一步步地往前(被)推进着,角色上瞬间发生转变。以前那种悠哉悠哉的空挡真的少了很多,书读得少了,独处的机会也几乎没有了,好在还有点机会出去转转,即使没能走遍祖国的秀丽山河,但能够和朋友家人到处走走,舒舒心也算是一件幸事。 the computation is the new oil. 今年是LLM大语言模型元年,各家都在奋力追上OpenAI的步伐,我所在的团队赶上了模型加速的东风,也做了一些成果。今年多模态模型(VLM, text-to-video), MOE等组合模型和一些加速上的技巧肯定还是会层出不穷的,抓住这个机会,也能迎接新一轮的变革。 2023年年初家里迎来了新成员,一只丑萌的三花猫,由于她对人类的需求太高以至于在国庆假期期间差点把我们的小出租屋毁了。我一怒之下差点把她丢掉(幸好及时挽救),现在家里已经少不了她了,大猫也 ...
浅谈LLM Memory Bound的原因
现在针对 LLM的部署推理框架都会花很多精力优化IO,公认这种大的decoder-only的模型推理瓶颈在memory侧。对此,我们简单分析一下原因。 首先LLM进行text-generation的流程如下: 加载模型架构 填充weight 输入tokenization化 (tokenizer encode prompt) 计算+后处理 (auto-regression, top_p_top_k, beam_search等) 输出字符(tokenizer decode tokens) ⭐架构层面,基本都是transformer decoder搭建的,也就是embedding → decoder_layer (attention_block, norm, residual add, activation op, softmax, …) → lm_head. 其中除了attention_block和lm_head中的GEMM外,其余可以认为都是IO密集型算子 (norm, rope, add, softmax等)。不过现在的推理框架基本都是支持算子 融合(op fusion),比 ...
2022-2023-Suffering
Do not go gentle into that good night, 不要温和地走进那个良夜, Old age should burn and rave at close of day; 白昼将尽,暮年仍应燃烧咆哮; Rage, rage against the dying of the light. 怒斥吧,怒斥光的消逝。 Though wise men at their end know dark is right, 虽然在白昼尽头,智者自知该踏上夜途, Because their words had forked no lightning they 因为言语未曾迸发出电光,他们 Do not go gentle into that good night. 不要温和地走进那个良夜。 Good men, the last wave by, crying how bright ...
2021-2022-走在人生的路口
细雨斜风作晓寒,淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。 苏轼 近些年来,总是会觉得时间过得越来越快,一眨眼之间,自己期盼的日子就会到来,然后瞬间溜走,变成记忆中的录像带。自5月工作以来,21年就加快了流逝的步伐,生活中的酸甜苦辣,欢喜忧伤,焦躁迷茫都瞬间成了往事,当时的心情也慢慢不复存在。我也逐渐认识并重视起”时间“这个资源,开始要求自己去学会取舍,把时间花在刀刃上,充分并合理利用时间,把时间多多用在投资自己身上(当然也要陪陪家人),比如下班坚持抽出些时间”输入“(阅读,学东西,发展兴趣)和”输出“(写博客,写小说),对于那些不感兴趣,或者不擅长的,并且在工作生活中也可以不用具备的,可以不用非得花时间攻克,直接请专门的人做好了,比如做饭,打扫,”造轮子“等等。不过,目前只是有这个意识,想法和计划都不太成熟,也有待具体实施。 21年最大的变化就是离开校园,步入工作,同时加入了两个人一起生活的阵营∩▂∩。20年秋招不是很理想,一直想逃离”996“,于是21年1-3月都在积极投春招,最后终于赶上了末班车,拿到了Intel MLP部门的offer。 ...
KK给年轻人的建议
原文链接 KEVIN KELLY 阮一峰的网络日志 翻译有参考此处 That thing that made you weird as a kid could make you great as an adult — if you don’t lose it. 在孩童时期,那些让你看上去与周围人格格不入的部分,以后可能让你在成年人中脱颖而出—前提是你没有丢失它们。 If you have any doubt at all about being able to carry a load in one trip, do yourself a huge favor and make two trips. 如果你对自己一次旅行能够承载的重量有任何疑虑,那就请帮自己变成两次旅行。-- 如果你对自己是否能一次搞定怀有任何疑虑的话,就对自己好点,分两次搞定吧。 What you get by achieving your goals is not as important as what you become by achieving your goals. At your funeral pe ...
2020-2021-人间喜乐
2020年应该是我们这一代人过的比较奇特的一年吧,新冠肺炎突然大面积爆发传播,导致整个社会的组织运作都发生了不小的改变,我自己作为即将毕业的应届生,求职之路和科研毕设之类的工作也变得艰难起来。如今全球的疫情形势依旧十分复杂,病毒的源头也一直众说纷纭(好像最近指向了美国的一个病毒/细菌的研究机构?),虽然国内控制得比较出色,但具体局势还是很复杂,难以预料。我作为一个普通人,在平时做好自己的事,履行好应尽的责任和义务之余,对这些问题和来回的纷争不是很感兴趣,现在大概对人性抱着一种悲观的态度,不相信人可以控制好自己的欲望和一些危险的好奇心。2020年里,我逐渐认识到平淡生活,或者说daily life的乐趣,这有点像年底皮克斯出的电影《心灵奇旅》表达的主题,人最重要的是活在当下,享受生活,寻找自己的乐趣,或者试图感受做的每一件事带来的乐趣,触摸每一个细节,那些自己以为喜欢的,自己以为是重要的,不可割舍的,到头来可能会发现也就那样,达成之后反而会被空虚,失落,甚至无所适从所裹挟(宇宙是冰冷的,规则是冷酷的,意义是人赋予的)。这样的想法似乎佛系了些,怪不得我身边总有朋友说我过的像个中老年人一样 ...
SSD-RefineDet论文阅读
SSD paper 参考:1 SSD是一篇写得非常好,读起来也非常舒服的文章。 写于fater rcnn之后,所以anchor不是新思想,新思想是多个尺寸的feature map然后分别设置不同尺寸的anchor去预测和回归,有特征金字塔的萌芽 Our improvements include using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales backbone使用VGG16,但是把fc6和fc7换成了卷积,其 ...
侯捷c++STL体系结构与内核分析
About videos; 课件,密码kr24; 认识headers、版本、重要资源 以STL为目标探讨泛型编程。 使用一个东西,却不明白它的道理,不高明! level 0: 使用C++标准库; level 1: 认识C++标准库(胸中自有丘壑,体系结构应当建立起来); level 2: 良好使用C++标准库; level 3: 扩充C++标准库; Standard Template Library (6大部件:Container(容器) 各种基本数据结构;Adapter(适配器) 可改变containers、Iterators或Function object接口的一种组件;Algorithm(算法) 各种基本算法如sort、search…等;Iterator(迭代器) 连接containers和algorithms;Function object(函数对象);Allocator(分配器)) 加上其他一些零碎的东西构成了C++ Standard Library. STL体系结构基础介绍 STL六大部件(component): 数据在容器(内存的事情我们不必管 ...
yolo系列论文阅读笔记
About YOLO系列是one-stage目标检测种的重要成果,兼具速度与精度,同时包含了很多与时俱进的tricks,是理论与工程实践完美结合的产物。虽然Andrew Ng说YOLO论文比较难读,但是为了更好的梳理检测这一模块,理解实践这项工作必须要进行下去。 Pytorch YOLO项目推荐。 YOLO算法家族全景图。 推荐阅读:YOLO v1-v5全解读 YOLO v1 paper; 参考博客:1, 2, 3 检测思想:利用卷积提取特征,然后得到最终的S×SS\times SS×S的特征图,这里面每一个cell会预测B个框(这里为什么要每个cell预测多个框,有点类似anchor的思想,猜想可能是为了应对尺度问题,后面回归的时候也是选择跟GT接近的那个框去回归,但是实际上yolo v1对小物体的检测效果并不是很好,所以这样隐式设置,网络应该不好学习到),每个框预测offset和置信度(综合是否有物体以及IOU-预测的质量),根据CNN的位置不变性,原图也可以划分S×SS\times SS×S的cell,看原图上GT的中心落在哪个cell上,对应到最后的特征图上的那个cell就负 ...