1.理查德·马修·斯托曼简介
2.[fastllm]cuda-kernels源码解析
3.理查德·斯托曼主要成就
4.微软亚洲研究院 (MSRA) 的实习体验如何?
5.[fastllm]fastllm源码结构解析
理查德·马修·斯托曼简介
在计算机科学的历史中,理查德·马修·斯托曼(Richard Matthew Stallman, RMS)是一位备受瞩目的人物,出生于年。他是自由软件运动的****,以其对自由软件理念的坚定追求而闻名。斯托曼是数据库网页查询系统源码GNU计划的创始人,同时也是自由软件基金会(Free Software Foundation)的创建者,以其黑客精神和创新才能而备受尊重。 他的技术贡献举世公认,尤其是Emacs编辑器,后来演变成GNU Emacs,这一里程碑式的软件为程序员们提供了强大而灵活的工具。此外,他还开发了GNU C编译器和GNU除错器,这些工具对开源软件生态产生了深远影响。他的代表作GNU通用公共许可证(GNU GPL),是全球范围内最广泛使用的自由软件许可协议,它为copyleft(共享源代码)理念提供了法律基础,开启了自由软件的新篇章。 斯托曼对自由软件运动的道德、政治和法律框架的塑造,使他成为这个领域的重要人物。他被誉为自由软件的斗士,一个坚定的理想主义者,他的理念推动了全球软件行业的开放和透明。然而,他的deb转换源码观点和行事方式也招致了一些批评,有人认为他过于坚持己见,与现代社会的部分观念有所脱节。尽管如此,斯托曼的名字和贡献将在自由软件的历史上占有重要地位。扩展资料
理查德·马修·斯托曼(Richard Matthew Stallman, RMS,生于年),自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GNU 调试器。 他所写作的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。[fastllm]cuda-kernels源码解析
在fastllm中,CUDA-kernels的使用是关键优化点之一,主要涉及以下几个高频率使用的kernel:gemv_int4、gemv_int8、gemm_int8、RMSNorm、softmax、RotatePosition2D、swiglu等。其中,gemm是计算密集型的,而其余大部分都是内存受限型。利用量化bit进行计算,查看tex 源码比原始的torch转为浮点数更快,同时,没有进行融合操作,为后续优化留下了空间。
gemv_int4 kernel:主要用于实现float*int4的GEMV乘积,其中偏置值设定为最小值。在计算中,矩阵被划分为不同的tile,不同tile之间并行操作。在遍历m/2的过程中,找到对应int4值的位置,通过保存的mins找到最小值minv。同一组的两个int4值共享同一个minv,计算结果的最终和被保存在sdata[0]上,用于更新对应m列位置的output值。结果向量为n*1。
gemv_int8 kernel:在功能上与gemv_int4类似,但偏置值由保存的minv变为了zeros。
gemm_int8 kernel:此kernel负责计算n*m矩阵与m*k矩阵的乘积。计算过程涉及多个tile并行,block内部保存的是部分和。考虑到线程数量限制,通常会有优化空间。最终结果通过为单位进行更新。
layerNorm实现:此kernel实现layernorm计算,通过计算均值和方差来调整数据分布。面试代理源码计算中,sdata存储所有和,sdata2存储平方和。每个block内计算部分和后,规约得到全局的均值和方差,从而更新output。
RMS kernels解析:RMSNorm kernel实现RMS归一化,通过计算输入的平方和和均值,进而更新output。
softmax kernels解析:计算输入的softmax值,涉及最大值查找、指数计算和规约求和等步骤,以防止浮点数下溢。
RotatePosition2D Kernels解析:用于旋转位置编码,线程展开成三层循环。LlamaRotatePosition2D、NearlyRotatePosition和RotatePosition2D在旋转方式上有所区别,体现在不同的位置上进行计算。
AttentionMask Kernels解析:对输入按照mask掩码置值,普通mask直接置为maskv,而Alibimask则是置为相对位置的值之和。具体含义可能涉及空间上的概念,但文中未详细说明。
swiglu kernels解析:作为激活函数,这些kernel在原地操作中执行常见函数,线程足够使用,源码转脚本直接按照公式计算即可。
综上所述,fastllm中CUDA-kernels的使用旨在通过优化计算过程和内存操作,提升模型的计算效率,实现更高效的推理和训练。
理查德·斯托曼主要成就
理查德·斯托曼的主要成就在于他于年9月日发起的GNUGNU计划,也被称为革奴计划。这个项目的目标是创建一套完全自由的操作系统,旨在恢复软件界早期的合作与互助精神。斯托曼最初在net.unix-wizards新闻组上公开这一信息,并附上《GNU宣言》,解释了其背后的理念,其中包括反版权(Copyleft)的概念,即确保软件的自由使用、复制、修改和发布,通过GNU通用公共许可证(GPL)实现这一目标。 他在AI实验室工作期间开发了著名的Emacs文字编辑器,这是一个功能强大的集成开发环境,包括电子邮件、远程文件编辑、远程登录、新闻组浏览、IRC聊天、日历管理、编程环境、调试、游戏、计算器、记事本、甚至还有管理日常事务的功能。斯托曼的独特贡献是Copyleft原则,它确保所有GNU程序的源代码公开,允许修改和分享,但要求任何修改必须同样公开,从而保证了自由软件的传播和持续发展。 Emacs的成功促使斯托曼创立了自由软件基金会(Free Software Foundation, FSF),以支持和推广自由软件运动。GNUGNU工程激发了众多开发者,其中包括李纳斯·托瓦兹,他创建了Linux内核,尽管起初它是作为类似Unix的操作系统内核,但Linux与GNU的其他软件工具和实用程序一起,构成了整个GNU/Linux系统。Linux内核的出现标志着GNUGNU工程的一个重要里程碑,标志着自由操作系统时代的到来。扩展资料
理查·马修·斯托曼(Richard Matthew Stallman,简称rms,年3月日-)是美国自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者。作为一个著名的黑客,他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GDB 调试器。他编写的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。他最大的影响是为自由软件运动竖立道德、政治及法律框架。他被许多人誉为当今自由软件的斗士、伟大的理想主义者,但同时也有人批评他过于固执、观点落伍。微软亚洲研究院 (MSRA) 的实习体验如何?
踏入微软亚洲研究院 (MSRA):一段奇妙的科技之旅 刚刚结束的实习经历,无疑让我对这家全球知名科技巨头有了全新的认识。作为一名初出茅庐的实习生,我有幸加入这个知识的殿堂,开始了我的技术探索之旅。 首先,让我惊艳的是这里的高速网络和强大配置的台式机,专为编写C++这样的高性能语言而生(强大的硬件支持无疑为高效编程提供了坚实基础)。 申请设备方面,我选择了SP4,第二天如愿以偿,满足了我对于最新技术设备的渴望(设备齐全,满足个性化需求)。 工作之余,免费的零食和饮料让人感到无比舒心,仿佛肥宅的梦想成真(生活细节的关怀,让人感受到温馨的公司文化)。当然,其他福利和体验我还在慢慢探索中,期待更多惊喜。 第二天,我以Red Hat开源文化衫亮相,表达对开放源码的热爱(独特的个性表达,融入了浓厚的创新氛围)。在RMS的桌面上,我仿佛在创造历史,虽然可能有点紧张(紧张但充满激情的实习生生活)。 工作内容上,我有机会使用到VS 企业版,而且还尝试了Vim这样的经典编辑器(专业级软件工具的使用,提升工作效率)。当然,对于开源项目的谨慎处理,我险些犯下大错,但好在及时醒悟(实战经验中的成长与反思)。 与AI领域的泰斗Raj Reddy交流,握手合影并分享披萨,这样的经历足以让我吹嘘一年(与业界大师的互动,无比珍贵的记忆)。感谢同事@马槽里的狗的摄影记录,捕捉了这些珍贵瞬间。 实习结束前,我还准备了一次关于Lisp编程的分享,展现了我对技术的热情(积极分享,传递知识与热情)。而我,就像一颗明日之星,正闪耀在MSRA的广阔天空中。[fastllm]fastllm源码结构解析
fastllm源码结构解析 主要文件结构和继承关系如下: main包含factoryllm工厂,用于生成各种llm模型实例,basellm作为基类,包含通用方法和参数,所有模型使用相同的命名空间,fastllm为基本类,定义数据格式、权重映射和基础算子操作。 fastllm类属性解析:SetThreads(int t): 设置线程数
SetLowMemMode(bool m): 设置低内存模式
LowBitConfig: 包含量化参数,提供量化与反量化方法
DataType: 包括浮点、int8、int4等数据类型
DataDevice: 包含CPU与CUDA
WeightType: 包括LINEAR、EMBEDDING和None
Data: 包括形状、大小、扩容信息,量化配置等,提供复制、分配、预扩容等功能
Tokenizer: 包含TrieNode链表和token-to-string字典,提供插入、编码和解码函数
WeightMap: 存储模型名称与数据内存,支持从文件加载和保存低位量化权重
core类操作分析:Embedding: 根据输入与权重计算输出
RMSNorm: L2归一化后乘以权重
LayerNorm: 使用gamma、beta进行层归一化
Linear: 线性变换
Split: 按轴分割数据
Cat: 按轴拼接数据
MatMulTransB: 多线程下矩阵转置乘法
Softmax: 激活函数
Silu: SiLU激活函数
GeluNew: 新型Gelu激活函数
Mul: 矩阵与浮点数乘法
MulTo: 点乘
AddTo: 点加操作(带alpha和不带alpha)
AttentionMask: 根据mask值替换
Permute: 数据通道转换
ToDevice: 数据迁移至GPU
basellm作为抽象类,继承自fastllm,包含纯虚函数如加载权重、模型推理、保存低比特模型、热身等。 chatglm、moss和vicuna继承自basellm,实现具体模型,函数与basellm类似。 fastllm结构体与属性解析:FileBuffer: 文件读写操作,包括读取各种类型数据和文件写操作
Data操作: 包括数据拷贝、统计、扩容、转置、计算权重和等
Tokenizer方法: 包括初始化、清空、插入、编码和解码
WeightMap方法: 包括从文件加载和保存低位量化权重
fastllm方法: 包括矩阵转置、通道转换、数据迁移、多线程乘法、激活函数等