- 博客(246)
- 收藏
- 关注

原创 DeepSeek有什么黑科技:搞懂它的混合专家(MoE)技术
稀疏层相对于密集层的优势在处理高维数据时最为明显,因为高维数据的模式和依赖关系通常很复杂且呈非线性:例如,在需要模型处理长文本序列的 NLP 任务中,每个单词通常仅与该序列中的一小部分其他单词相关。函数:对于每个专家,路由器会根据每个示例预测该专家产生给定输入的最佳输出的概率值(基于该专家与当前参数的连接的权重);尽管在推理过程中仅使用参数的子集,但模型的所有参数都必须加载到内存中,这意味着 SMoE 在大多数情况下享有的计算效率并不适用于其 RAM/VRAM 要求。专家的输出(它预测的输出)。
2025-02-12 14:08:26
282

原创 简单粗暴解决:动态库找不到问题 /lib64/libc.so.6: version GLIBC_2.XX‘ not found
因为tree-sitter我在虚拟机运行了,所以这里演示了修改另外一个二进制程序deno。,程序运行时的OS系统和程序编译时的OS系统不同,有可能导致运行时没有办法找到兼容的库。也可以下载tree-sitter的源代码重新编译,但是也不是大家对编译流程都轻车熟路的。有不少解决办法,比如升级OS系统,比如重新从源代码编译(使用可以找到库),后者居多。没办法,可以换到更新版本的OS解决,但是往往要装虚拟机,和本来的工作环境脱离了,算是。GLIBC2.28下载地址(编译好的,不是源码)
2025-02-09 16:55:17
467

原创 编程AI深度实战:大模型哪个好? Mistral vs Qwen vs Deepseek vs Llama
随着开源 LLM 空间的发展,越来越多的模型变得专业化,“代码”LLM 变得非常流行。这些 LLM 旨在比其 “常识” 对应物更小,但旨在超越更大的通用模型的编码性能。这些模型以极低的成本提供大型模型的功能,进一步使本地 LLM 空间民主化。特别是,在较小的编码 LLM 领域中,有三个模型在竞争中脱颖而出:Codestral 22B、DeepSeek Coder V2 Lite 14B 和 Qwen 2.5 Coder 7B。于 5 月 29 日发布,这是 Mistral 发布的第一款特定代码模型。
2025-02-04 10:44:26
1552
1

原创 编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider
您最终会复制聊天的建议并手动应用它,而 Cursor 会向您显示清晰的差异,并让您一键应用更改。上下文处理因工具而异。Aider 将文件显式添加到会话的方法是最直接的,但需要更多的设置。要进行更精细的控制,您可以使用 Ctrl/Cmd+→ 逐字接受建议,这在建议中只有一部分与您想要的内容匹配时非常有用。Cursor 的一个缺点似乎是,道听途说,它对所有查询都使用了大量的上下文,因此会消耗大量精力,而且,如果不使用本地模型,最终会赚钱(比如说像 ChatGPT 这样流行的 OpenAI 模型)。
2025-02-03 22:00:32
1632
1

原创 编程AI深度实战:让verilog不再是 AI 的小众语言
大模型火了之后,有非常多的LLM 代码生成,编辑,和普通对话的开源vim/neovim插件,文末列了一下github上几乎所有的了。但是,并不是各个都好用。其实star多的就那么几个,为什么呢,从aider, cursor这些火的软件大概可以看出端倪。这两个软件都利用了AST来indexing或者map codebase。这也是ast重要性的体现。下面是aider的支持的语言列表,对verilog默认是不支持的。
2025-01-29 15:27:28
1265

原创 编程AI深度实战:火的编程AI,都在用语法树(AST)
以下是用tree-sitter基于tree-sitter-systemverilog提取出的Verilog的语法树。
2025-01-29 15:24:48
845

原创 编程AI深度实战:给vim装上AI
这些插件使用大型语言模型,并在 2023 年 1 月 1 日之后提交。为了优化以获得最大新鲜度,插件按上次提交日期的顺序列出。这些插件的功能也几乎相同,也许更重要的是比较 (1) 订阅费用是多少,以及 (2) 输出质量。以丰富的配置选项脱颖而出,并且还包括用于编写和编辑代码的命令(即与上面的部分重叠)。利用vim-ollama这个vim插件,可以在vim内和本地大模型聊天。实际各个插件大同小异,核心的还是大模型本身,运作模式,对代码的处理。,它使用托管在 Hugging Face 上的免费推理端点。
2025-01-29 15:23:41
1498

原创 编程AI深度实战:自己的AI,必会LangChain
这里的关键是库的可组合性设计,允许您根据需要将不同的组件组合在一起,从而使复杂应用程序的实现更加模块化,从而更易于调试、维护和改进它们。由于提供了许多功能和模块,您可能很难理解 LangChain 提供的所有内容 — 但幸运的是,有很多很棒的文章和教程,可以指导您从使用 LangChain 的第一步到高级项目。在本文中,我将说明 LangChain 背后最重要的概念,并探索一些实际示例,以展示如何利用 LangChain 创建应用程序来回答有关您自己的文档的问题。此步骤取决于您希望使用的 LLM API。
2025-01-29 15:22:21
295

原创 编程AI深度实战:私有模型deep seek r1,必会ollama
通过分步演示,我们展示了在主要操作系统上安装 Ollama 的简易性以及集成和运行多功能 DeepSeek Coder 的简易性,涵盖各种模型大小以适应各种任务。DeepSeek Coder 的模型在由 87% 的代码和 13% 的自然语言组成的庞大数据集上进行训练,能够熟练理解和生成各种编程语言和任务的代码。这是掌握大型语言模型 (LLM) 在设备上的本地操作的良好开端。在此基础上,让我们探索如何通过 Ollama 集成和使用 DeepSeek Coder,直接在您的设备上利用 LLM 的强大功能。
2025-01-29 15:21:12
1072

翻译 如何使用Databricks、Hugging Face和MosaicML训练大型语言模型(LLM)
大型语言模型,如OpenAI的GPT-4或谷歌的PaLM,已经席卷了人工智能世界。然而,大多数公司目前还没有能力培训这些模型,并且完全依赖于少数几家大型科技公司作为技术提供商。在这篇博客文章中,我们将概述如何训练LLM,从原始数据到在用户体验生产环境中的部署。我们将讨论沿途面临的工程挑战,以及我们如何利用我们认为构成现代LLM堆栈的供应商:Databricks、Hugging face和MosaicML。
2024-08-25 15:08:57
128

原创 CSMA/CA并不是“公平”的
这是因为Bali节点,速率越低,占用的时间会更长,但是机会(次数)在CSMA/CA下是均等的,因此,其他节点占用时间更短,吞吐也就降低了。如果考虑一般的不加权情况,那么第一步就是均分(公平),然后在从富余中进行下一次均分,如此往复,直到资源都被分配完成。CSMA/CA会造成过于公平,对于最需要流量的节点,是最不友好的,而对于最不需要流量的节点,则是最友好的。公平优先的CSMA/CA方式,可以让每个节点不至于饿死,但是却不能达到最大的平均吞吐。那么节点将以CW指数增加的形式选择退避时间,来尽力减少碰撞。
2024-06-28 16:31:04
197

原创 NoC进阶
Bisection即把所有节点分成两个节点数相等的部分,所有可能的分配中,两部分之间channel数或者带宽最小的划分就对应bisection。或者由此构成拓扑,更多来自于bisection bandwidth的需求,还有ports本身的限制。比如这里的channel,假设所有node之间一半的traffic需要通过这个channel。Hop count是消息从源节点往目的节点经过的channel数量,直接影响网络的延迟。实际上上面的channel刚好也是bisection channel。
2024-06-14 16:50:10
524

原创 片上网络(NOC)入门
结合设计目标,如可扩展性,最好的bisection bandwidth,那么mesh网络最好。如果是要求高带宽的某些网络,mesh网络是有瓶颈的,à路由算法,流量控制(flow control)分层拓扑结构(hierarchy)需要hierarchy的网络去做。
2024-06-13 11:13:17
399

原创 PCIe和USB 3.0是有相同的接口吗?
一个PCI Hub板上,也可以出现USB的接头。但是这并不意味着可以在这个板子上插上一个USB的设备。USB3的线缆的连接器非常普遍,而且还便宜。这有可能是这样的:板子的背面还有一个PCIe switch,这样就可以把4个x16的wire变成x1的wire了。而USB刚好可以支持x1的wire。而且还能满足PCIe的(物理层)需求。每个x16的slot可以插上GPU卡。所以虽然看过去性能不一定好,但是如果不是非要用在GPU之间通信的场合,那么也够用!X1的PCIe pins会转接到USB连接器的高速双绞线上
2024-06-12 11:54:40
718

原创 PCIe (4)
因此PCI其实也是统一地址的 它的操作也就是所谓的读 或者 写 (load or store)以上完成从地址0xfdaff040(0x3f6bfc10 * 4)读取一个DW的操作。不过后来arm将CPU和显卡都放在了同一颗芯片上,所以就换成了AHB, AXI这些。比如一次read, 会在PCI总线上变成TLP。PCI最早是台式机用来连接CPU和显卡的。PCIe是从PCI发展出来的。然后device再返回数据。
2024-06-11 16:40:47
100

原创 USB (5)
对于比如鼠标这样的设备,主机会最快125us poll一次,看是否有输入。这也就是interrupt transfer类型。Bulk传输则是尽力传输,在总线够用时传输,不会有严格的时序要求。适合打印机,大容量存储设备。对于isochronous transfer类型,数据是在固定的时隙传输的,但不保证正确性。USB是一个poll的总线。并且数据传输是对齐到time-line的。
2024-06-11 14:21:57
180

原创 USB (4)
USB 3.0(SS)只会poll一次,之后device会在准备好的时候发送ERDY(Endpoint Ready)。USB 2.0使用poll和NAK机制进行流控(device到host)。Host会一直poll,直到非NAK。
2024-06-11 10:54:14
138

原创 USB (3)
USB是polled bus,这和PCIe不一样,所有的transfer都是由host发起的。如果device没有数据,那么只能回复NAK。对于IN(从device到host)。
2024-06-10 10:32:52
97

原创 USB (2)
首先是TOKEN TRANSACTION,其次是DATA TRANSACTION,再次是Handshake Transaction。上面的SETUP TRANSACTION是TOKEN TRANSACTION的一种。另外三种是OUT, IN, SOF。在每个TRANSACTION中又包含了3个STAGE,最后一个STAGE是ACK。SETUP是默认为“OUT”方向的transaction。以2.0的枚举过程为例。
2024-06-09 12:35:47
99

原创 USB (1)
USB的physical层是基于Serdes的,所以有串并/并串的转换,有8b/10b encode, 有scramble,有时钟恢复。不过USB或者PCIe的物理层不一样,单根线或者多根线(lanes)实现很高速,距离还挺远的传输。其实回过头看USB 是可以和无线 有线(internet) 可以和PCIe 甚至AXI类比的。不同的协议,依赖的介质不一样 这就要求相应的Physical层处理。不过AXI 如果要说有物理层,那就是直接连线了。它们共通处在于都是communication。
2024-06-06 20:30:29
176

原创 RDMA (2)
非iWARP时,CPU维护TCP/IP层,这涉及到维护connection context,payloads的分片和重组,处理中断等。非iWARP时,当应用向网络适配器发出读或者写命令时,命令穿过用户空间以及内核空间,因此需要在用户空间和内核空间间进行切换。如果没有iWARP,数据在从网络适配器到应用层buffer路中,会有中间的拷贝。iWARP下,使用RDMA将数据从网络适配器的buffer复制到应用程序的buffer,提高了效率,较低了延迟。这规避了对内核的调用,减少了开销和延迟。
2024-06-04 14:23:34
123

原创 RDMA (1)
iWARP消除了三个方面的开销:CPU的TCP/IP处理需求,内存拷贝,application context 切换。RoCE(RDMA over Converged Ethernet),也是由InfiniBand Trade Associationg(IBTA)于2009年开发。Remote Direct Memory Access(RDMA)是用来给有高速需求的应用释放网络消耗的。RDMA在网络的两个应用之间进行低延迟,高吞吐的内存对内存的直接数据通信。InfiniBand需要部署独立的协议。
2024-06-04 13:55:57
503

原创 CXL (1)
CXL和PCIe跑在一样的physical layer上,与PCIe不一样的是,CXL允许CPU和连接的设备共享一致(coherent)的内存。另外,为了降低延迟,CXL引入了专用的CXL.cache和CXL.mem协议,这和CXL.io(基于PCIe DMA)是分开的。比如在第一种(type 1)使用场景中,允许没有内存或者很少内存的设备可以共享CPU的内存。如此,CXL可以让内存不在限于CPU或者GPU本地的部分,而是可以共享。CXL说到底 是为了打破内存墙而生的。
2024-06-03 14:58:21
218

原创 NV link
实际上,PCIe依然会和NV link一起使用。NV link比PCIe有什么厉害的地方。NV link是去CPU中心化的。NV link只针对GPU。NV link是并行总线。
2024-05-31 17:44:08
305

原创 通信技术体会
pcie虽然物理层和usb都是serdes,但transaction layer就是上面这样的,也就是它是双向,点对点,split的,所以除了serdes高速,这一层也是高速。因为pcie还是axi(神似split/cutthrough)。(axi更多是接口而不是bus)。所以serdes速度差别没有量级区别 但延迟和吞吐确是好。pcie可以看成是全连接的ahb bus,但又不是。
2024-05-31 13:54:53
392

原创 PCIe (3)
不过MMIO依然是CPU直接发起PCIe transaction(TLP)。这意味着在TLP response到来之前,CPU必须等待。但是要访问更大的空间,则不可以,所以这里BAR将更大空间(device memory)映射到了IO。BAR 提供了一种MMIO的访问形式,访问的是类似register的IO,但是却是访问memory。Configuration space是确定的大小的,一般4KB左右。而DMA模式则不用这样。
2024-05-30 18:23:31
242

原创 PCIe (2)
Flow control保证transmitters不会给receiver发送不能接收的Transaction Layer Packets(TLPs)。Requester利用flow control(FC)机制跟踪Receiver端可用的queue/buffer空间,以防止overflow。Transaction Layer则对收到的TLPs计数,发送端则在接收端credits超出时不再发送。PCIE link初始化时,会读取对方FIFO的容量,在传输过程中定期同步对方FIFO的剩余容量。
2024-05-29 18:01:53
130

原创 PCIe (1)
DLLPs是2 DW,包含ACK/NAK 和flow control DLLPs。当completer侧接收了TLP,则会在completer的transaction layer释放接收RX空间。Payload size如果是256 bytes, 那么throughput = 256/(256+20)=92%。ACKs和flow control 更新DLLPs均是和数据(TLP)方向相反方向。如果所有的credits都使用了,那么需要等待credit更新。如果是8B/10B的编码,那么需要25%的开销。
2024-05-28 18:01:17
265

原创 小白怎么看DDR
不过到了灰色的txq里面,不一定是一一发送的,而是按聚合数,可变数量的发送的。在DDR里面,cmdq里面的东西就可能不同cpu有interleave的。有做和参与这么些芯片 虽说每每是片上系统 但是DDR是个远观 没近看的。只是txq里面不会把多个Node的东西Interleave。不过和WiFi的发送通路一对比 却有些类似的地方。实在不明白为什么要有这么多步骤。但是DRAM的控制就不简单了。各种cpu可以看作node。它们说DRAM长这样。
2024-05-28 14:44:25
102

原创 为什么要有NOC
大芯片,物理面积很大,延迟太长;片上系统,IP众多,总线规模太大。路径不是固定的,AXI带来的时序也不是固定的,这才可以解决这些问题。如果是AHB,注意AXI并不真的定义了总线,更多是接口。这些限制下,AHB由于固定的时序而不能满足需求。那么如何实现上面的带宽,延迟需求呢。
2024-05-27 15:42:34
194

原创 职场不是挣钱
需要找老板要活,这个过程可以了解老板最关心的问题是什么,如果自己的贡献和老板的问题能够吻合,那是最好的。曾经我也一直这么想,只要做好老板安排的事情,自然就可以挣到钱了。毕竟每个人都在干活,为什么就该自己挣钱呢?只是做好活就能挣钱,好像想得有些简单了。老板最想解决的问题,那自然是机会了。目的应该是没错的,是挣钱。多少,其实是个分配的问题。
2024-05-26 11:44:05
165

原创 静态时序分析 (3)
引入的DPT(Double Patterning Technology)之后,在同一层layer上要做两次mask,两次mask之间的偏差,会导致线间距变化,从而影响耦合电容值,需要将这一因素考虑到RC corner中,所以DPT 的RC corner是:Cworst_CCworst, RCworst_CCworst, Cbest_CCbest, RCbest_CCbest.R=r/W*T, r为电阻率,除了跟线宽 W 和线厚 T 相关之外,还跟温度相关,随着温度的上升而增大。
2024-05-24 16:32:48
418

原创 AHB协议
当master想要访问slave时,master发送HBUSREQ信号给arbiter请求总线控制权,arbiter如果返回给master一个HGRANT信号,则该master获得总线控制权,然后master给slave发送HTRANS信号,开始和slave进行数据传输。HTRANS[1:0] 2位址的控制信号。HREADY表示上一master有效,因此,HSELx和HREADY都有效,才采样地址和控制信号。HRESP[1:0] 响应。HWRITE 读写信号。HSIZE[3:0] 传输数据的位宽。
2024-05-22 17:36:30
147

原创 AXI (3)
BVALID信号必须在WVALID和WREADY信号之后。可以在第一个burst还未完成时,即进行第二个burst。写响应信号BRESP必须在最后一笔数据数据完成之后。VALID信号和READY信号同时有效,则方采样。多burst(可outstanding)写传输。写地址和写数据通道之间没有严格的顺序限制。只有当读地址通道完成后才有读数据通道。数据则使用LAST标识最后一笔。数据传输过程只发送首地址。
2024-05-22 14:10:14
127

原创 AXI (2)
BRESP[1:0] slave响应表明写传输状态。AWREADY 用来判断slave是否准备好接收写地址信号,为高才接收。WSTRB[3:0] 写字节使能信号,用来表明写数据中的哪些字节是有效的。ARREADY 用来判断slave是否准备好接收读地址信号。WREADY 用来判断slave是否准备好接收写数据,为高才接收。BREADY 用来判断是否准备好接收写响应信号,为高才接收。AWVALID 用来判断写地址信号是否有效。BVALID 用来判断写响应信号是否有效。WVALID 用来判断写数据是否有效。
2024-05-22 13:44:27
67

原创 AXI (1)
这对应定制/控制和数据分离 不分离没有办法outstanding,不outstanding, 那么分离意义何在。非及时 这和outstanding, 地址/控制和数据分离体现了一样的点 可以支持延迟 并且可以利用延迟。Outstanding,可以实现上一次数据传输还没有完成的情况下继续下一次的地址/控制信号。允许添加寄存器打拍,这对应总线内部是没有明确定义的 这也支持“大”系统。这可以提高延迟的容忍度 所以响应延迟的地方 可以提高吞吐。总线的地址/控制和数据通路是分离的。读写独立 带宽增加了一倍。
2024-05-22 13:16:52
305

原创 静态时序分析 (2)
比如recovery/removal, Areset和当前clock路径。比如setup, 下一data路径和当前clock路径,比如hold, 当前data路径和当前clock路径。以setup为例子,检查的是两条路径的相对的时间!如果多个clock之间,那么寻找重复的周期即可以。根据路径的不一样,分为不一样的。也可以是模型计算出来的。
2024-05-21 15:10:58
49

原创 静态时序分析(1)
有两种进行时序验证的方式,一个是时序仿真,一个是静态时序分析(STA)。STA可以在多个芯片环节使用 区别在于STA所用的信息的准确度和完备性。比如理想的时钟和互联信息时 这一般在RTL综合阶段进行。在CTS完成之后,则有真实的clock 时间信息。时序分析(公共的时钟周期内进行)比其仿真更快。时序仿真 要求向量,包含逻辑和时序信息。其会遍历所有的时钟以及外部环境的可能。在布局完成之后,则有真实的互联信息。在布线完成之后,有了真实的RC信息。时序是IC中非常重要的一环。时序仿真有时候也是必要的。
2024-05-20 14:56:53
87

原创 架构也需要做设计(内存分配设计)
从每一个level的节点中寻找为0的节点。(节点逻辑为“或”,逻辑输出值0代表相应size的memory可用。一句话,需要在横向上把设计对比一遍,纵向上了解设计的代价,难度和细节。更大的区别在于分配操作时,一个修改链表,一个操作bit-map。应该做确保上面的设计的变化不会影响更上层,以及更以上的设计目标。上面如果理解成一个电路,也就是设计(内存分配)。那么不管什么方法,去查找,即进行了设计。比如上面的设计,有哪些被抛弃的竞争方案?甚至在需要时设想过上面的设计的细节。也了解过上面的设计有哪些变化,
2024-05-17 15:52:49
80

原创 为什么descriptor和data分离可以内存高效率
Descriptor和data是同样的,只有descriptor有了,即可以开始处理data了。所以data不需要停留更长时间。以下为例,需要有前面的6个bytes开始,用来处理数据,一旦这6个bytes有了即可以处理了。
2024-05-15 15:51:09
83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人