自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 学会更高效的理解AI的输出?

本文基于Andrej Karpathy观点,探讨如何高效理解AI输出而非仅追求模型更聪明。以L2D论文为例,展示通过简明语言、图表可视化、交互式网页和定制视频等方式,将复杂内容转化为可理解、可应用的知识。实验表明,图文结合的呈现方式显著优于纯文本,尤其在提升学习效率与减少“幻觉”方面效果突出。核心在于:学会“读懂AI”,才是未来关键。

2026-10-17 09:50:25 127

原创 Anthropic 这篇文章讲了什么?——当 AI 写代码太快,Git 反而成了瓶颈

在ai时代最大的瓶颈不是生产力,而是协调成本,软件工程正在从编写代码转向设计约束,以前是只要需求翻译成代码,现在ai具有这个能力,所以一个好的工程师不再是一个善于写出正确代码的人,而是善于建立一个能持续产出正确代码的系统的人。思考:作为独立开发者,我们有必要放弃git吗,我决定没有必要,A社表明Scion 绝非 Git 的通用替代品,原因很简单,git目前十分成熟,目前不可能马上被替代,不过也许这是一种趋势,从个人开发到agent开发。三.每次提交的成本应该取决于改动大小,而不是仓库大小。

2026-10-15 20:07:16 98

原创 【CUDA8】第一个CUDA C++ Kernel --vector add

我们今天写一个最简单的GPU程序:CUDA一个thread负责一个元素。

2026-10-06 11:04:18 29

原创 【CUDA7】GPU 程序为什么慢?到底慢在哪里?

之前我们讲过Benchmark,它回答的是这个程序跑了多久?比如GPU time=1ms,而我们今天要讲的是profiling,它回答的是为什么是1ms,profiling的目标就是找到真正的性能瓶颈。在AI工程里非常重要的指标Latency,Throughput,前者表示一个请求需要多久,比如说request–GPU–50ms,所以latency=50ms。

2026-10-05 22:32:41 150

原创 【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行

之前在实验中我们写过c_gpu = a_gpu + b_gpu,CPU 执行这行代码时,并不是一定要等 GPU 把加法彻底做完,CPU 发出任务后,可以继续干自己的事情,CUDA默认一个非常重要的特性:CPU 发起 GPU 工作,GPU 异步执行,它更像是CPU–CUDA Stream–KernelA,B,C–GPU执行,Stream就是组织这些GPU工作的机制之一,这也是我们写torch.cuda.synchronize()的原因,它实现了CPU 等 GPU,把当前已经提交的工作执行完。

2026-10-02 14:18:14 178

原创 【CUDA5】为什么“少做几次”有时候比“算得更快”更重要?

每个步骤可能都需要启动一个GPU Kernel,这三行代码对应三个Kernel,如果有1000000个元素,不断访问GPU,数据被反复从 Global Memory 读出来,又写回去,事实上可以将想做的一次性完成,这样只需要一次主要的读取和一次主要的写回,这就是Kernel Fusion。如果你用python的角度来看,只有三行,但是 GPU 可能把它执行成多个 Kernel。所以当看到一个GPU程序很慢,不要第一反应就说GPU算力不够,而是先。Kernel = 一段让 GPU 执行的程序。

2026-09-28 10:18:35 354

原创 【CUDA4】GPU里面的数据放到哪里?为什么有的数据访问快,有的慢?

Register 是最靠近计算单元的存储,它的速度非常快,作用范围单个thread,所以每个线程都有自己的register。shared memory是block的小仓库,作用范围block内线程共享。L1 Cache它主要用于缓存近期访问的数据,可以理解位GPU计算单元旁边的小型高速缓存,L2 比 L1 更大,但通常也更远、更慢,它是 GPU 多个计算单元之间可以共享的数据缓存层。global memory速度相对慢,延迟高,但是容量大。不要把它们当成两个完全独立的物理内存层.

2026-09-28 10:16:38 209

原创 【CUDA3】GPU到底是怎么同时执行线程的?为什么GPU喜欢连续访问?怎么让GPU执行得更快?

我们上节课讲过wrap,在NVIDIA GPU里面,32个thread组成一个wrap,我们可以深入一层,block–warp–thread,假设我们有128个thread,GPU会把它们分成4个warps,你可以把warp暂时理解成GPU 调度和执行线程的一组基本单位,虽然我们在写cuda的时候都是thread0 1 2,实际上GPU硬件层面会把它们组织成warp。GPU可能先执行大于0的路径,小于0的等着,然后执行小于0的路径,大于0的等着,分奇数和偶数的时候更糟糕。

2026-09-27 10:53:30 168

原创 【CUDA2】有趣的一个实验,CPU永远要被踩在脚下吗?

根据结果可以知道,CPU的时间明显小于GPU,如果你的计算任务非常小,数据传输时间远大于GPU计算时间,GPU反而更慢,这也是GPU喜欢大量,规划,可以并行的工作原因,在深度学习中,神经网络到处都是矩阵运算,GPU非常适合。NVIDIA GPU有一个非常重要的概念:一个Warp:32 threads,硬件执行模型会以Warp为重要的调度/执行单位,这个32也不是随便规定的,涵盖种种因素,这里不详细讲述。

2026-09-14 09:35:25 183

原创 【CUDA1】GPUvsCPU,CUDA Kernel

可以把它理解为让 GPU 执行的一段程序,比如我们需要C[i] = A[i] + B[i];有1亿个元素,GPU启动大量线程...当然GPU不是真的同时拥有这么多的物理计算核心,所以我们需要把thread分组,若干个thread合成一个block,我们再将所有的block集合为grid,于是形成了一个层级结构Grid│↓ ↓ ↓│ │ │GPU内部存在一种叫SM的计算单位,暂时可以理解为GPU里面真正负责执行CUDA Thread的计算单元。

2026-09-13 17:34:12 150

原创 【DL99】RAG--让LLM连接外部知识

RAG核心思想:不要什么都塞进模型参数里,而是在需要的时候,从外部知识库把相关信息找出来,再交给 LLM。它可以减少幻觉,因为模型回答问题时,可以参考真实的外部资料,而不是完全依赖参数中记住的知识。

2026-09-11 10:46:52 243

原创 【DL21】LLM 推理性能优化 —— Compute-bound、Memory-bound 与 FlashAttention

这个公式正常计算,求QKt,这是一个很大的矩阵,这些中间矩阵需要在不同计算步骤之间反复读写 GPU HBM,这个时候flashattention出来了,利用 GPU 的片上高速 SRAM / Shared Memory 等存储,对 Q、K、V 进行分块计算,尽量避免把巨大的中间 Attention Matrix 写回 HBM,它在算法设计的时候,把 GPU 内存层级和数据搬运成本考虑进去。减少内存访问主要帮助 Memory-bound。前情提要:cpu:少量强大的计算核心,gpu:大量计算核心。

2026-09-09 11:39:04 248

原创 【DL20】vLLM 深入 —— Scheduler、Continuous Batching、KV Cache Manager 与 PagedAttention

Scheduler 决定当前这一轮 GPU 应该处理哪些请求,以及每个请求处理多少 Token,不是简单的哪个请求先来就先处理谁,而是需要考虑GPU显存,KV cache,prompt长度,输出长度,当前batch,prefill和decode。这就是kv cache manager,这里将请求分成block,其实就是分页的思想,把 KV Cache 分成 Block,并通过 Block Table 管理它们,attention在访问历史KV时,哪些 Block 正在使用?哪些 Block 空闲?

2026-09-07 10:59:05 401

原创 【DL19】KV Cache 深入——从 Attention 到 GQA,再到显存计算

实际上token1-4的KV不会发生变化,这其实也就是KV cache能够存在的根本原因,只要模型权重和上下文不变,K1和V1就不需要因为后面又生成了token而重新计算,所以只需要将它们缓存下来,不然每一次生成新的token的时候就需要计算一次。所有的Query head共享同一组KV,也就是Hkv=1,直接缩小到原来的32分之一,非常夸张,都是全部共享kv,表达能力可能会受到影响,GQA应用而生。把Query head分成若干组,每组共享KV,比如说几个Q共享一个KV head,折中的办法。

2026-09-06 22:19:10 232

原创 【DL18】LLM推理架构

现阶段LLM 推理系统的核心问题就是生成token的速度,decode很慢,即使你的GPU非常强也无法把一个请求的所有 Decode Token 完全并行生成,所以LLM推理优化才会出现大量的KV cache优化,Batching,Pageattention and so on.假设现在已经生成了ABCD,然后需要生成E,所以需要之前的token的KV,所以我们将KV保存下来,避免重复计算,这就是KV cache,KV cache就是牺牲大量的GPU显存,来提升计算的速度。为什么gpu还能够很快执行?

2026-09-05 22:34:11 179

原创 【DL17】ZeRO,FSDP深入

现在我们再看看FSDP,fully shared data parallel,完全分片的数据并行,它的思想和zero-3非常接近,那么它怎么计算呢,假设有四张GPU,一个layer参数P,被拆成P0,P1,P2,P3,分配到四张GPU,当某个layer需要forward,all gather,获得完整的P,forward。举个实际例子,比如说有一套书,一共有四本,你先要看全部的书,都是你只有买一本书的钱,所以你可以再找三个想要买书的人,一人买一本,然后换着看,唯一的缺点就是需要和别人换,这就是通信换显存。

2026-09-05 19:53:39 213

原创 Coding Agent 上下文压缩:从 Claude Code / Codex / Pi 到自研策略

<think>我们只需要根据内容生成一篇≤150字的摘要。内容是关于上下文压缩技术的介绍,包括Claude Code、Codex、Pi agent的压缩方法,以及作者自己的设计原则。摘要要简洁,涵盖主要点。</think>上下文压缩是Coding Agent的核心技术。Claude Code采用分支压缩;Codex分本地与远程压缩,远程压缩对高敏感数据有风险;Pi强调历史树结构。设计压缩策略应因用途而定,原则包括:不一次性总结、使用检查点、保留历史树、工具输出不入长期上下文、按信息类型分别压缩、以文件系统为

2026-09-05 11:05:16 420

原创 【DL16】All-Reduce|NCCL

每张GPU都有完整模型,经过forwar 和backword,四张GPU的梯度不一样,这里我们采用先聚合再平均,这样所有的GPU得到完全相同的参数,这就是ALL reduce(all+reduce),reduce意思把多个GPU的数据聚合起来,all就是所有的gpu最终都得到这个结果.那么为什么不使用普通的CPU通信,因为我们现在的数据主要再GPU显存,如果GPU–CPU–GPU,就会产生大量数据搬运,效率很低,NCCL会尽量利用GPU–高速互通–GPU进行通信。好,现在变成四张GPU。

2026-09-04 10:55:49 278

原创 【DL15】大模型分布式训练|并行技术

DP:每张 GPU 都保存一份完整模型,然后不同 GPU 处理不同的数据,一张GPU处理Batch A,现在四张GPU就可以同时处理ABCD,所以可以训练吞吐量。七十B参数,如果只看FP16权重,大约需要140GB,训练时远远不只是保存模型权重,还需要模型参数,梯度,optimizer state,activation,所以训练显存远远大于140GB.Y=XW,其中X是输入,W是一个非常大的权重矩阵,如果W太大,一张GPU放不下,可以把W切开,把工作拆到多张GPU上,

2026-09-04 09:48:23 579

原创 【DL14】LLM量化|PTQ|AWQ|bitsandbytes

假设一个模型有7B参数,也就是70亿个参数,如果每个参数使用FP32,仅仅模型权重就需要28GB,还有KV cache,CUDA Runtime,其他显存开销,所以实际运行需要更多的显存。模型架构本身没有因为量化就变成另外一种网络,参数以及某些计算中的数值表示精度,所以FP16 transformer和INT4 transformer可以是同一个模型架构,不同的数值表达方式。一种常见的后训练权重量化,简称PTQ,尽量降低权重精度,同时让量化后的模型尽可能接近原模型。FP16 和 BF16 又是什么关系?

2026-09-03 11:01:19 160

原创 【DL】LLM推理(inference)|KV cache |Attention优化|LLM推理加速|vLLM

我们今天引入一个新的概念 Sampling/Decoding,模型真正输出的是:一个概率分布,我们需要一个接码策略,从这个概率分布里面选择下一个token。FlashAttention 主要优化 Attention 的计算和显存访问方式,从而减少 GPU 显存读写和中间结果存储,提高 Attention 的速度与内存效率。它是Attention Kernel 的优化。但是如果一直选择最高概率,输出可能过于确定,单调,于是改变概率分布,介绍一下temperature,它是控制概率分布尖锐程度的参数。

2026-09-01 16:50:02 560

原创 【DL】GRU|update gate|reset gate

Update Gate 决定上一时刻的 Hidden State 有多少应该保留,以及当前新的候选信息有多少应该加入。因为 GRU 把长期记忆和当前隐藏状态统一到一个 Hidden State 中,不再像 LSTM 那样把 Cell State 和 Hidden State 分开维护。Update Gate 决定上一时刻的 Hidden State 有多少应该保留,以及当前新的候选信息有多少应该加入。我们不应该只是关注这些名词,而是关注它背后的问题,发现问题->提出解决方案-> 发现新问题->继续改进。

2026-09-01 16:46:47 197

原创 【DL】pre-training|Instruction tuning|RLHF|DPO

模型并不是被明确教了一张“知识表”,而是在预测 Token 的过程中,从数据中学习规律。

2026-09-01 07:43:16 256

原创 【DL】Embedding深入|Contextual Representation

可以用于构造文本/Token 的表示,但概念上不要把它和最初的 Token Embedding 混为一谈。LLM知识链文本↓Tokenizer↓Token ID↓Embedding↓Position↓↓↓↓Logits↓Softmax↓Next Token。

2026-08-31 09:07:30 160

原创 【DL】GPT|Tokenizer|Embedding,token

Token 是模型处理文本时使用的基本文本单位,它不一定等于一个字,也不一定等于一个单词。Token 是 Tokenizer 根据词表和切分规则产生的模型输入单位。

2026-08-31 08:30:43 351

原创 【DL】transformer|Multi-Head Attention

因为单独的 Attention 虽然能够解决序列中远距离信息交互的问题,但一个完整的神经网络还需要解决“位置信息、特征变换、信息稳定传递、多种关系同时建模”等问题。Transformer 就是把 Self-Attention、位置编码、前馈网络、残差连接、LayerNorm 等组件组合起来,形成一个完整的序列建模架构。可以这样理解Attention 是一种机制,Transformer 是一个完整的网络架构。

2026-08-30 12:51:38 314

原创 【DL】attention|加权求和|self-attention

计算Query和Key的相关程度,结果越大,越相关。Self-Attention 就是 Query、Key、Value 都来自同一个序列本身,让序列中的每个位置去关注序列中的其他位置,它让每个词都可以和其他词建立关系。Attention还可以同时计算所有的位置,Self-Attention可以,它非常适合GPU并行计算,这也是后面Transformer能够大规模训练的重要原因。Attention 是一种让模型根据当前任务,为输入序列中的不同位置计算“重要程度”的机制,然后按照重要程度对信息进行加权汇总。

2026-08-30 09:09:05 186

原创 【DL】LSTM|Cell State|三个门

因为 LSTM 有一条专门的 Cell State,并且 Cell State 的更新主要通过加法和门控完成,使长期信息能够更直接地沿着这条通道传播,从而比普通 RNN 更容易保留长期信息。因为普通 RNN 虽然可以通过 Hidden State 保存过去的信息,但是当序列很长时,早期信息很容易在多次计算和反向传播中逐渐丢失,因此 RNN 很难处理长期依赖。这些gate本质是一个0~1 之间的控制器,0可以理解为完全不让信息通过,1反之,它们之间的数值代表这相应的范围。它的输出范围:0–1,正好适合做们。

2026-08-29 21:33:56 343

原创 【DL】RNN|序列数据|Hidden State

Hidden State 是 RNN 在当前时刻保存的内部状态,它携带了一部分过去输入的信息,并会参与下一时刻的计算。

2026-08-28 11:14:21 300

原创 【DL】CNN卷积神经网络|卷积核的计算|Polling|flatten|MNIST 手写数字识别|optimizer|ResNet

stride:控制 Kernel 移动速度Kernel↓移动1格就是stride=1,移动两格,就是stride=2。Stride 越大,输出 Feature Map通常越小当你的窗口大小大于这个图片的时候,可以在图片周围补0,这个就是padding。控制输出尺寸保护边缘信息MNIST 是经典的手写数字数据集。

2026-08-28 09:38:43 652

原创 【DL】感知机 Perceptron | 激活函数 | 多层感知机MLP

神经元:输入↓加权求和↓激活函数:决定神经元是否激活。↓输出假设你加权求和算出z=2,结果激活函数判断:2行不行?返回1代表可以激活函数是非线性的,类似于嵌套函数吧,这个它无法化简Multi Layer Perceptron,多层感知机,简单理解成多个神经元组成多层网络输入层x1x2x3↓隐藏层1○○○○↓隐藏层2○○○↓输出层○。

2026-08-27 10:34:57 414

原创 死亡不是真的逝去,遗忘才是永恒的消亡

然后我就翻了一下源码,大致思路是这样,我深受启发,想到了《寻梦环游记》里面的一句台词”Death is not the end of life ,forgetting is the end of life“,我们的qq空间可能已经删除了,但是它仍然存在于别人的记忆中,所以它仍然存在。,DELETE FROM Forward,DELETE FROM Event,这时候你就可以通过这些“旁证”推测甚至恢复部分原始内容。这种情况在互联网中很常见,数据库有很多关联数据,DELETE FROM Moment。

2026-08-26 22:26:41 144

原创 【DL】链式法则|反向传播|神经网络梯度

链式法则如果你学习过导数,你应该听说过,我们想知道w2对 Loss 影响多少?,也就是∂L/∂w。如果想要知道体重变化对健康评分的变化,我们通过BMI进行查看,体重 → BMI → 健康评分。这种简单的你可以手写,但是情况一旦复杂,不可能人工计算,所以我们以后使用pytorch。这个过程叫做反向传播Backpropagation。链式法则:最终影响=中间影响 × 前面影响。讲到这里你应该有一个新的认知。

2026-08-26 14:51:45 301

原创 【DL】神经网络学习目标|prediction|Loss|Gradient

根据上面的讲解;深度学习就是用一个可学习的函数做预测,用 Loss 衡量错误,再用梯度不断调整参数,让下一次预测更好。殊途同归,都是这样,不要觉得这是一个不同的东西。不管多复杂的东西都是一样。

2026-08-25 10:41:18 332

原创 Superpowers 深度解析:从零读懂 AI 编程助手的 Skill 体系

是一个将完整的软件开发方法论打包为 AI 编程助手插件的项目。作者是 Jesse Vincent 及 Prime Radiant 团队。先和你讨论设计方案(Brainstorming)创建实施计划(Writing Plans)通过子代理用 TDD 执行(Subagent-Driven Development)完成代码审查(Code Review)

2026-08-24 18:26:57 309

原创 lesson45-50计算机网络应用层协议精讲:从 DNS、HTTP 到邮件系统

很多同学一听"应用层",就认为:是微信、QQ、浏览器。其实不完全对。应用层是为应用程序提供网络通信服务的一层。★★★★★注意:应用层不是应用程序本身。而是:应用程序和网络之间的桥梁。应用层│├── 为应用程序提供通信服务│├── DNS├── HTTP├── HTTPS├── FTP├── SMTP├── POP3└── IMAPDNS│├── 域名解析├── 域名 → IP├── 通常使用 UDP├── 分层结构├── 浏览器缓存├── 本地DNS。

2026-08-23 17:58:20 354

原创 lesson43-44深入理解 TCP 可靠传输与流量控制:从机制到实战

TCP可靠传输│├── Seq│ 数据编号│├── ACK│ 确认收到│├── 超时重传│ ACK不到→重传│├── 累计确认│ ACK一次确认多个│└── 保证顺序现在来看另一个问题。假设:接收方很快。但是:网络中间堵车了。电脑A↓路由器①(正常)↓路由器②(堵了)↓服务器即使服务器处理能力很强。中间网络堵了。数据还是会丢失。网络拥塞(Congestion)到这里。TCP 全部可靠机制已经学完。TCP│├── 三次握手├── 四次挥手。

2026-08-23 17:53:34 307

原创 lesson40-42TCP 协议完全指南:从核心特性到三次握手与四次挥手详解

TCP│├── 传输层协议├── 面向连接├── 可靠传输├── 面向字节流├── 首部至少20字节├── 建立连接├── 确认应答├── 超时重传├── 流量控制└── 拥塞控制上一课我们学过:面向连接。那问题来了:连接怎么建立?三次握手(Three-way Handshake)三次握手是 TCP 建立连接的过程,用于确认通信双方都具有发送和接收能力。⭐⭐⭐⭐⭐TCP 三次握手│├── 第一次:SYN│ 请求建立连接│├── 第二次:SYN + ACK。

2026-08-23 17:51:02 316

原创 lesson37-39计算机网络核心概念精讲:从路由器到UDP的实战与备考指南

"路由"两个字:其实很好理解。举个例子。北京广州坐高铁坐飞机自驾到底:走哪条路?路由选择(Routing)。互联网:也是一样。电脑↓路由器A↓路由器B↓路由器C↓服务器每经过一个路由器。下一跳(Next Hop)是谁。★★★★★每台路由器里面:路由表(Routing Table)可以理解成:导航地图。目标网络下一跳直连R210.0.0.0/8R3其他网络默认路由收到数据后:第一步:查路由表。第二步:决定:发给谁。传输层│。

2026-08-22 17:54:55 216

原创 lesson33-36计算机网络核心三剑客:子网划分、ARP与ICMP协议完全指南

把一个大网络划分成多个小网络。例如:里面有很多电脑。现在:↓子网1子网2子网3子网4这样:广播减少。管理方便。安全性提高。这是全章最重要的概念。一脸懵。告诉我们:哪一部分是网络号,哪一部分是主机号。★★★★★举个例子。前面:网络号。后面:主机号。这里很多同学会疑惑。来看二进制。111111110000000011111111111111111111111100000000前24位:全部是1。后8位:全部是0。于是:网络号:24位。主机号:8位。

2026-08-22 17:45:41 208

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除