- 博客(1270)
- 资源 (1)
- 收藏
- 关注
原创 看图学大模型:Transformers 的前生今世(中)
至此,Transformers 大部分零件已经凑齐, Let's Roll Out.Transformers 也是为了机器翻译设计的,回顾一下 Transformers 之前的机器翻译模型,大多还是 RNN Encoder-Decoder 的范式,但是这样也就继承了 RNN 的所有问题。通过堆叠 RNN,扩大参数量确实也取得了一定的效果,比如 Seq2Seq。但是 Bahdanau Attention 出现后,让研究人员看到了另外一种可能。
2024-11-19 09:24:56
575
原创 Llama 3模型架构 大模型(二)
Llama 3模型基于标准的Transformer架构进行了多项改进,包括更高的效率和更好的性能。上下文长度: 8192(LLaMA-1和LLaMA-2的上下文长度分别为2048, 4096)本部分整理文档里面这部分内容外加两个内容需要整理一个具体内部实现。嵌入层: 将输入的token转换为固定维度的嵌入表示。前馈网络(FFN): 包含激活函数和两层全连接网络。接下来,我们详细探讨Llama 3架构的主要特点。模型类型: 基于解码器的Transformer。自注意力层: 包含多头自注意力机制和归一化。
2024-11-19 09:11:53
156
原创 大型语言模型(LLM)的文本生成
2. 续写: 模型开始根据你给的开头, 一个接一个地生成新的词, 每生成一个新词, 它都会把前面已经生成。1. 预填充: 你给模型一个开头, 可以是几个词或一个句子,这就是"预填充"的内容。这个过程就叫"续写"。输入:"从前有座山, 山里有座庙,庙里" >>> 输出:"有"输入:"从前有座山, 山里有座庙,庙" >>> 输出:"里"输入:"从前有座山, 山里有座庙" >>> 输出:","输入:"从前有座山, 山里有座庙," >>> 输出:"庙"输入:"从前有座山, 山里有座" >>> 输出:"庙"
2024-11-19 09:05:18
289
原创 六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?
由于GPU的复杂性和安全隔离的要求,GPU直通技术相对于任何其他设备来说,会有额外的PCI 配置空间模拟和MMIO的拦截(参见QEMU VFIO quirk机制)。物理GPU虚拟化为多个虚拟机GPU,每个虚拟GPU直接分配给虚拟机使用,通过软件调度的方式在主机(Host)与计算机的来宾账户(Guest)之间提供一个中间设备来允许Guest虚拟机访问Host中的物理GPU。厂家(Nvidia ,AMD ,Intel等 )的GPU,只要支持IOMMU的理论上都可以,即直通模式的实现依赖于IOMMU的功能。
2024-11-17 22:07:21
341
原创 终于有人把云边协同讲明白了
大数据时代的一个显著特点就是云端与边缘端的协同计算。通过边缘端与云端的协同计算,能够对众多的用户数据进行归纳以及推理,从而挖掘出更多的有用信息,而这些信息可以帮助决策者进行决策,减少风险。这些都离不开云计算与边缘计算。正如前面所述,云计算是一种基于云的计算方式,这里的云指的是通过网络连接的软硬件资源。依赖互联网,可以将各种共享的软硬件资源分配给多个计算机以及其他终端使用,这使得终端设备可以将耗费计算资源多的应用程序、计算过程放到云上进行,大大增加了终端设备的运行效率。
2024-11-17 22:06:08
882
原创 AI新热点:边云协同:大模型结合小模型(大小模型联合推理)
它的思路是在某个生成的timestep,把自回归生成这个耗时的过程交给小模型(或者大模型的底下几层,我们统称为小模型),小模型采样生成几个候选序列,再把它们拼在一起输给大模型,让大模型选择language modeling概率最高的那个候选序列。它涉及利用预训练的大型模型来构建小数据集上的模型。用大模型去训练数据,然后用小模型去拟合大模型的输出,小模型可以学习大模型的知识(古已有之的线路是,以大模型为teacher对小模型进行知识蒸馏(KD),以期用更小的模型学会大模型涌现出的能力,提高推理效率)
2024-11-17 22:05:26
998
原创 谷歌大佬谈 MLOps :机器学习中的持续交付和自动化流水线(上)
背景数据科学和机器学习正逐渐成为解决复杂现实问题以及在所有领域创造价值的核心功能。
2024-11-17 22:04:38
851
原创 七、系统开发基础
可行性分析:是否有足够的开发成本、(社会上、法律上、文化上)是否允许、技术上是否能实现需求分析:与客户沟通需求,需求工程包括需求获取、需求分析、需求管理概要分析:将系统划分为多个子系统或模块,将相应的功能分配到这些模块当中详细设计:对子系统或模块进行设计的过程,包括一些内部的路径、具体的数据结构的内容编码:实现、开发阶段测试:对软件功能进行验证的过程,验证功能能否正确被使用。
2024-11-17 22:02:29
762
原创 模型驱动架构设计方法及应用
MDA作为一种模型驱动的软件开发方法论,通过将模型作为开发的中心,实现了从抽象到具体的转换和自动生成代码的过程。通过MDA,制造商可以从CIM开始,定义生产流程和资源需求,然后转换到PIM来设计系统的逻辑结构,最后生成PSM以集成到现有的工业自动化平台中。平台独立模型(Platform Independent Model,PIM):这是根据CIM创建的更加具体的模型,描述了系统的结构和行为,但仍然与特定的技术和平台无关。提高系统质量:MDA的模型是抽象的、可验证的,可以在早期发现和解决潜在的问题。
2024-11-09 09:34:41
460
原创 一图看懂架构风格,架构模式,设计模式
它描述了在特定上下文中,如何组织和设计软件系统的结构和组件之间的关系。架构模式提供了一套可重用的设计原则和指导,用于解决常见的架构问题。常见的软件架构模式有MVC模式、MVP模式、MVVM模式、黑板模式等。软件架构模式关注的是系统的结构和组件之间的关系,以及如何解决特定的设计问题。常见的设计模式包括单例模式、工厂模式、观察者模式、策略模式等。设计模式关注的是类和对象之间的关系和交互方式,以及如何实现灵活、可维护和可扩展的代码。软件架构风格,软件架构模式,23种设计模式,他们之间的不同的含义。
2024-11-04 22:38:31
338
原创 [机缘参悟-118] :如何做到:从无到有,从0到1设计一个新系统或产品?如何做到总是能快速的解决复杂技术难题?
项目管理的理论和实际经验,有助于我和项目管理人员协同工作,共同解决项目中的技术问题、管理问题、资源协调问题,产品的成功和识别,复杂问题的解决,大多数是技术问题,同时也是项目管理问题,良好的项目管理,能够有助于复杂问题解决中所需要的各种资源的协调和有条不紊的按计划实施,特别是解决复杂系统的复杂问题时,只靠技术,容易导致技术人员各自为政,无法协同作战;有时候,我也在反思,我是如何做到的呢?早年,个人带过团队和部门,但后来,个人的职业目标是技术专家,因此,相对于技术和项目管理,这块的经验的最欠缺,是短板。
2024-11-04 22:34:11
554
原创 [架构之路-275]:五张图向你展现软件开发不仅仅是编码,而是一个庞大的系统工程
综上所述,目标软件的复杂性体现在多个方面,包括功能需求的复杂性、系统架构的复杂性、子系统和组件的协作复杂性、非功能性需求的满足等。其次,目标软件还可能涉及到分布式的系统架构和多个子系统的协作。例如,一个大型的电子商务网站可能包括用户管理、订单管理、支付系统、库存管理等多个子系统,这些子系统需要相互协调和交互,以实现整体的功能。这包括执行各种测试,如单元测试、集成测试、系统测试和验收测试,并记录发现的问题,进行问题追踪和修复。这需要一个良好的组织结构和有效的资源分配,以确保软件开发的顺利进行和结果的实现。
2024-11-04 22:20:35
266
原创 信息系统开发方法、软件过程模型与软件系统建模
瀑布模型与结构化开发方法:瀑布模型强调线性顺序,而结构化开发方法注重结构化和模块化设计,两者在项目管理和设计上有相似之处,都适合需求相对稳定的项目。原型化模型与原型化开发方法:原型化模型通过快速构建原型来验证需求,而原型化开发方法通过原型来探索和确认需求,两者都强调通过原型来指导后续的开发工作。面向服务的方法与增量模型:面向服务的方法将系统构建为服务组件的集合,而增量模型逐步构建和交付系统,两者都适合需要高度可扩展和可维护的系统。增量模型:将系统分解为多个增量,逐步构建和交付1。
2024-11-04 22:03:22
230
原创 AMD GPU 内核驱动分析(一)总览
就是这里的ring_type。entity是job的容器,drm_sched_main 调度线程在选择可以运行的entity的时候,涉及到一个调度策略问题,在6.X内核之前,从sched_rq中选择可以运行JOB的entity使用的是优先级+roundrobin调度策略,首先安按照sched_rq 3/2/1/0 的优先级顺序选择一个最高优先级的sched running queue,之后,在当前选择的sched_rq里面根据round robin选择一个可以运行的entity投入运行。
2024-10-22 21:41:43
913
原创 AMD GPU任务调度(2)—— 内核态分析
在上图中,渲染命令在下发到内核之后会被封装成一个job,然后找到其所属的渲染上下文,更具体地,找到该job所属的GPU IP的Ring Buffer,获取该job应该加入的调度实体,然后加入调度实体上的调度队列。分析drm_sched_entity_init,它的核心操作就是设置entity的运行队列,将其指向对应ring buffer调度器上维护的队列中,注意,这里我们看到的是将entity上的运行队列指向了IP核上的第一个ring buffer的调度器,后面会根据调度器上的任务数,选择合适的运行队列。
2024-10-22 21:40:40
183
原创 linux系统分析之工具大全(观测,性能分析等)
工欲善其事必先利其器,要想分析清楚linux服务器中的各类问题,比如性能问题,服务程序的bug,那么必须对该系统下的分析工具有一定的了解,本文对当前的主流cpu,内存,网络,io以及各种debug分析工具(blktrace,perf,systemtap)做了个简单总结。注:学无止境,故需持续更新。
2024-10-22 21:38:23
802
原创 Android Systrace 基础知识(1) -- Systrace 简介
本文是 Systrace 系列文章的第一篇,主要是对 Systrace 进行简单介绍,介绍其简单使用方法;如何去看 Systrace;如何结合其他工具对 Systrace 中的现象进行分析。本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 系统整体的运行,同时也从另外一个角度来对 Framework 进行学习。也许你看了很多讲 Framework 的文章,但是总是记不住代码,或者不清楚其运行的流程,也许从 Systrace 这个图形化的角度,你可以理解的更深入一些。
2024-10-22 21:36:53
835
原创 Android Perfetto 系列
Perfetto 是一个高级的开源工具,专为性能监测和分析而设计。它配备了一整套服务和库,能够捕获和记录系统层面以及应用程序层面的活动数据。此外,Perfetto 还提供了内存分析工具,既适用于本地应用也适用于 Java 环境。它的一个强大功能是,可以通过 SQL 查询库来分析跟踪数据,让你能够深入理解性能数据背后的细节。为了更好地处理和理解大规模数据集,Perfetto 还提供了一个基于 Web 的用户界面,使你能够直观地可视化和探索多 GB 大小的跟踪文件。
2024-10-22 21:34:48
703
原创 [067]perfetto进阶使用
在[061]perfetto使用简介中,介绍了如何使用System Tracing的界面中来抓perfetto trace,这个方式的好处就是不需要连接电脑,可以离线抓取,但是perfetto有其他强大的功能,需要使用连接电脑才能发挥。大家可以发现,perfetto的功能比传统的systrace的功能强大很多,而且google也在推荐使用这个。这个应该是未来的趋势,我贴一个我常用的perfetto的指令。代码语言:javascript复制
2024-10-22 21:29:22
660
原创 ARM SIMD 指令集:NEON 简介
NEON 还提供了数组向量数据类型,命名模式如下:xx_t,eg:int8x16x4_t 是一个长度为 4 的数组,每一个数据的类型为 int8x16_t。w:表示 wide,第一个输入向量和输出向量类型一样,且是第二个输入向量元素长度的 2 倍,uint16x8_t vsubw_u8(uint16x8_t a, uint8x8_t b);// 将 a, b 向量的相邻数据进行两两和操作。
2024-10-22 21:27:43
156
原创 【AI大模型】Embedding模型解析 文本向量知识库的构建和相似度检索
在大模型中,"embedding"指的是将某种类型的输入数据(如文本、图像、声音等)转换成一个稠密的数值向量的过程。这些向量通常包含较多维度,每一个维度代表输入数据的某种抽象特征或属性。Embedding 的目的是将实际的输入转化为一种格式,使得计算机能够更有效地处理和学习在这里插入图片描述文本Embedding在自然语言处理(NLP)中,文本embedding是一个常见的概念。是将文字或短语转换成数值向量的过程。这些向量捕捉了单词的语义特征,例如意义、上下文关系等。
2024-10-22 21:24:55
1033
原创 轻松理解Transformer中的Q,K,V,O矩阵
标量(Scalar)是零维张量,如一个数值 5。向量(Vector)是一维张量,如 [1, 2, 3]。矩阵(Matrix)是二维张量,如 [[1, 2], [3, 4]]。高维张量是三维及以上的张量,如 [[[1], [2]], [[3], [4]]]。解码器堆栈输出一个浮点向量。我们如何将其转换为一个单词?这是最后一个线性层的工作,后面跟着一个 Softmax 层。线性层是一个简单的全连接神经网络,它将解码器堆栈产生的向量投影到一个更大的向量中,称为 logits 向量。
2024-10-22 21:23:11
1150
原创 Transformer原理详解(图解完整版附代码)
论文名:Attention is all you need针对问题:RNN等序列模型不能并行运行,利用完全基于自注意力机制的自编码器去训练利用layer-normal:助于避免训练过程中的梯度消失问题,提高模型的稳定性。:对自注意力机制中 除以QKT除以dk ,以防止乘机过大,如下。注意力机制公式位置编码:由于 Transformer 不使用递归或卷积,它通过位置编码来加入序列中元素的位置信息。自注意力机制:它允许模型在处理序列的每个元素时同时考虑序列中的所有其他元素,从而捕捉元素之间的关系。
2024-10-22 21:21:46
827
原创 注意力机制综述(图解完整版附代码)
SENet示例图如上图所示,数据X经过卷积操作后,得到 U , U 的通道数用 C 表示, H×W 表示一个通道上的长和宽;此后,SENet引入了一个Squeeze模块 Fsq(⋅) 和一个Excitation模块 Fex(⋅,W)。Fsq(⋅) 通过全局平均池化操作将每个通道的特征图转化为一个标量值,简单地说,就是用全局平均池化将每个通道上的数据进行压缩,压缩成一个标量值,即得到一个 1×1×C 的矩阵。然后, Fex(⋅,W) 通过激活函数。
2024-10-22 21:19:49
1123
原创 GPU 神经网Tensor Core 架构演进(四)
DRAM 则提供了更大的存储空间,用于存储 GPU 计算所需的大量数据。如上图所示,最上面是共享的 L1 缓存,每个时钟周期可以执行 4 个 Warp 指令,下属 4 个独立的 Sub Core 的数据是不进行缓存的,但是每个 Sub Core 里有两个 Tensor Core, 这两个 Tensor Core 中的数据是可以共享的,再往下有一个共享内存,每个时钟周期可以传输 128B 的数据,当所有的 SM 计算完这个权重矩阵就会将数据回传到 L2 Cache 中,最后返回 Host Cpu 中。
2024-10-06 10:13:56
1643
原创 GPU 英伟达GPU架构回顾
1999 年,英伟达发明了 GPU(graphics processing unit),本节将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。
2024-10-01 17:38:22
5426
1
原创 用LLVM写一个芯片编译器(三)——芯片的整体架构部分
本章是我们从LLVM森林看到LLVM树木的第一章。介绍了我们如何在LLVM上定义出我们的架构,方便后续添加枝叶进去。可能有点晦涩,可对照代码来读。下一章讲的内容应该更好懂,下一章我们讲讲如何添加寄存器信息进去。
2024-09-22 09:35:23
653
原创 用LLVM写一个芯片编译器(二)——从无到有需要写什么东西
本篇文章实际上是解决LLVM如何用起来这个问题的开始。我觉得开源项目要想玩的快,一定是要先看森林后看树叶的。否则很容易陷入开源代码的汪洋大海中毫无方向。本篇文章我们从两个角度介绍了宏观的看看我们最后完成的目标,属于介绍LLVM的森林。从下一章开始,我们逐个方向介绍如何一步步撺起来我们的编译器。【参考文献】[1]知乎 P2TREE[2]Chen Chung-Shu的Tutorial: Creating an LLVM Backend for the Cpu0 Architecture。
2024-09-22 09:34:12
980
原创 用LLVM写一个芯片编译器(一)——一文读懂编译器基本概念
这篇文章,我们介绍了程序编译的最基本概念,编译中的大部分流程都有所涉及。下一章开始我们介绍如何用LLVM快捷的实现上面的流程。LLVM的精髓就在于,你不必对上面每一个步骤内部如何实现的彻底了解细节。你只需要知道有这么个东西就能很快攒出你的编译器。目录更新桔里猫:用LLVM写一个芯片编译器(二)——从无到有需要写什么东西桔里猫:用LLVM写一个芯片编译器(三)——芯片的整体架构部分。
2024-09-22 09:33:13
1094
原创 使用Flex、Bison和LLVM编写自己的Toy Compiler
我一直对编译器和编程语言很有兴趣,但仅仅有兴趣是不够的。编译器设计中有许多初次学习时感到晦涩难懂的概念,即使是最聪明的程序员也会被这些东西所困扰。我曾经尝试写过一个小型的玩具语言/编译器,但总是在语义解析(semantic parsing)阶段遇到一些麻烦。这篇文章主要是受我最近的一次尝试启发,这个尝试到目前为止是比较成功的。在过去的几年里我有幸参与了一些项目,这些项目帮助我对编译器的实际工作有了更多经验。
2024-09-21 11:51:17
1215
原创 六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?
由于GPU的复杂性和安全隔离的要求,GPU直通技术相对于任何其他设备来说,会有额外的PCI 配置空间模拟和MMIO的拦截(参见QEMU VFIO quirk机制)。物理GPU虚拟化为多个虚拟机GPU,每个虚拟GPU直接分配给虚拟机使用,通过软件调度的方式在主机(Host)与计算机的来宾账户(Guest)之间提供一个中间设备来允许Guest虚拟机访问Host中的物理GPU。厂家(Nvidia ,AMD ,Intel等 )的GPU,只要支持IOMMU的理论上都可以,即直通模式的实现依赖于IOMMU的功能。
2024-09-21 11:44:26
1085
原创 flex&bison系列第三章:写一个简单的计算器Calculator
而“factor”仅仅是个单词而已,没有特殊的意义,我们可以简单地把它理解为乘法和除法里的“因素”。其生成的C代码文件名为“simple-calculator.yy.c”、“simple-calculator.tab.c”、“simple-calculator.tab.h”。我们基于flex和bison,用C++写了一个很简单的计算器程序,并且编译运行成功。在此记录下基于flex与bison写一个简单的计算器程序(Calculator)的过程,以备查阅。其实,这些变量都是在我们的bison脚本中定义的。
2024-09-21 11:10:42
216
原创 flex&bison系列第二章:写一个简单的单词统计工具Word Counter
我们基于flex,用C++写了一个简单的单词统计工具Word Counter,并且编译运行成功。为简单起见,我们只统计英文单词和整数,比如“Abc”、“123”。在此记录下基于flex写一个简单的单词统计工具(Word Counter)的过程,以备查阅。flex&bison系列第二章:写一个简单的单词统计工具Word Counter。当我们按Ctrl+D时,程序会输出英文单词和整数的总个数。这两行代码分别统计了英文单词的总个数和整数的总个数。最终程序结束时,输出英文单词的总个数及整数的总个数。
2024-09-21 11:09:59
144
原创 flex&bison系列第一章:flex Hello World
在这里,为简单起见,我们可以把“结构化的输入”理解为有一定组织结构的文本,我们用flex对文本进行处理时,应提前了解一下正则表达式和编译原理相关的知识(如词法分析器、自动机等)。,这是匹配成功后的“行动”,意思是如果匹配成功,则打印“Hello World”。注意到,当我们输入单词“World”时,程序会输出“Hello World”;我们基于flex,用C++写了一个Hello World,并且编译运行成功。World,它其实是一个匹配字符串,意思是用“World”去匹配输入的数据。
2024-09-21 11:09:12
342
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅