<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Zguigo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Zguigo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Zguigo]]></copyright><item><title><![CDATA[学会更高效的理解AI的输出？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/168223411</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/168223411</guid><author>Zguigo</author><pubDate>Sat, 17 Oct 2026 09:50:25 +0800</pubDate><description><![CDATA[本文基于Andrej Karpathy观点，探讨如何高效理解AI输出而非仅追求模型更聪明。以L2D论文为例，展示通过简明语言、图表可视化、交互式网页和定制视频等方式，将复杂内容转化为可理解、可应用的知识。实验表明，图文结合的呈现方式显著优于纯文本，尤其在提升学习效率与减少“幻觉”方面效果突出。核心在于：学会“读懂AI”，才是未来关键。]]></description><category></category></item><item><title><![CDATA[Anthropic 这篇文章讲了什么？——当 AI 写代码太快，Git 反而成了瓶颈]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/168029271</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/168029271</guid><author>Zguigo</author><pubDate>Thu, 15 Oct 2026 20:07:16 +0800</pubDate><description><![CDATA[在ai时代最大的瓶颈不是生产力，而是协调成本，软件工程正在从编写代码转向设计约束，以前是只要需求翻译成代码，现在ai具有这个能力，所以一个好的工程师不再是一个善于写出正确代码的人，而是善于建立一个能持续产出正确代码的系统的人。思考：作为独立开发者，我们有必要放弃git吗，我决定没有必要，A社表明Scion 绝非 Git 的通用替代品，原因很简单，git目前十分成熟，目前不可能马上被替代，不过也许这是一种趋势，从个人开发到agent开发。三.每次提交的成本应该取决于改动大小，而不是仓库大小。]]></description><category></category></item><item><title><![CDATA[【CUDA8】第一个CUDA C++ Kernel --vector add]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/167171227</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/167171227</guid><author>Zguigo</author><pubDate>Tue, 06 Oct 2026 11:04:18 +0800</pubDate><description><![CDATA[我们今天写一个最简单的GPU程序：CUDA一个thread负责一个元素。]]></description><category></category></item><item><title><![CDATA[【CUDA7】GPU 程序为什么慢？到底慢在哪里？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/167131106</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/167131106</guid><author>Zguigo</author><pubDate>Mon, 05 Oct 2026 22:32:41 +0800</pubDate><description><![CDATA[之前我们讲过Benchmark，它回答的是这个程序跑了多久？比如GPU time=1ms，而我们今天要讲的是profiling，它回答的是为什么是1ms，profiling的目标就是找到真正的性能瓶颈。在AI工程里非常重要的指标Latency，Throughput,前者表示一个请求需要多久，比如说request–GPU–50ms，所以latency=50ms。]]></description><category></category></item><item><title><![CDATA[【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/166991979</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/166991979</guid><author>Zguigo</author><pubDate>Fri, 02 Oct 2026 14:18:14 +0800</pubDate><description><![CDATA[之前在实验中我们写过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，把当前已经提交的工作执行完。]]></description><category></category></item><item><title><![CDATA[【CUDA5】为什么“少做几次”有时候比“算得更快”更重要？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/166778937</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/166778937</guid><author>Zguigo</author><pubDate>Mon, 28 Sep 2026 10:18:35 +0800</pubDate><description><![CDATA[每个步骤可能都需要启动一个GPU Kernel，这三行代码对应三个Kernel，如果有1000000个元素，不断访问GPU,数据被反复从 Global Memory 读出来，又写回去，事实上可以将想做的一次性完成，这样只需要一次主要的读取和一次主要的写回，这就是Kernel Fusion。如果你用python的角度来看，只有三行，但是 GPU 可能把它执行成多个 Kernel。所以当看到一个GPU程序很慢，不要第一反应就说GPU算力不够，而是先。Kernel = 一段让 GPU 执行的程序。]]></description><category></category></item><item><title><![CDATA[【CUDA4】GPU里面的数据放到哪里？为什么有的数据访问快，有的慢？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/166778780</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/166778780</guid><author>Zguigo</author><pubDate>Mon, 28 Sep 2026 10:16:38 +0800</pubDate><description><![CDATA[Register 是最靠近计算单元的存储,它的速度非常快，作用范围单个thread，所以每个线程都有自己的register。shared memory是block的小仓库，作用范围block内线程共享。L1 Cache它主要用于缓存近期访问的数据，可以理解位GPU计算单元旁边的小型高速缓存，L2 比 L1 更大，但通常也更远、更慢，它是 GPU 多个计算单元之间可以共享的数据缓存层。global memory速度相对慢，延迟高，但是容量大。不要把它们当成两个完全独立的物理内存层.]]></description><category></category></item><item><title><![CDATA[【CUDA3】GPU到底是怎么同时执行线程的？为什么GPU喜欢连续访问？怎么让GPU执行得更快？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/166733465</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/166733465</guid><author>Zguigo</author><pubDate>Sun, 27 Sep 2026 10:53:30 +0800</pubDate><description><![CDATA[我们上节课讲过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的等着，分奇数和偶数的时候更糟糕。]]></description><category></category></item><item><title><![CDATA[【CUDA2】有趣的一个实验，CPU永远要被踩在脚下吗？]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/165285790</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/165285790</guid><author>Zguigo</author><pubDate>Mon, 14 Sep 2026 09:35:25 +0800</pubDate><description><![CDATA[根据结果可以知道，CPU的时间明显小于GPU，如果你的计算任务非常小，数据传输时间远大于GPU计算时间，GPU反而更慢，这也是GPU喜欢大量，规划，可以并行的工作原因，在深度学习中，神经网络到处都是矩阵运算，GPU非常适合。NVIDIA GPU有一个非常重要的概念：一个Warp：32 threads，硬件执行模型会以Warp为重要的调度/执行单位，这个32也不是随便规定的，涵盖种种因素，这里不详细讲述。]]></description><category></category></item><item><title><![CDATA[【CUDA1】GPUvsCPU,CUDA Kernel]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/165240458</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/165240458</guid><author>Zguigo</author><pubDate>Sun, 13 Sep 2026 17:34:12 +0800</pubDate><description><![CDATA[可以把它理解为让 GPU 执行的一段程序，比如我们需要C[i] = A[i] + B[i]；有1亿个元素，GPU启动大量线程...当然GPU不是真的同时拥有这么多的物理计算核心，所以我们需要把thread分组，若干个thread合成一个block，我们再将所有的block集合为grid，于是形成了一个层级结构Grid│↓ ↓ ↓│ │ │GPU内部存在一种叫SM的计算单位，暂时可以理解为GPU里面真正负责执行CUDA Thread的计算单元。]]></description><category></category></item><item><title><![CDATA[【DL99】RAG--让LLM连接外部知识]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164969375</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164969375</guid><author>Zguigo</author><pubDate>Fri, 11 Sep 2026 10:46:52 +0800</pubDate><description><![CDATA[RAG核心思想：不要什么都塞进模型参数里，而是在需要的时候，从外部知识库把相关信息找出来，再交给 LLM。它可以减少幻觉，因为模型回答问题时，可以参考真实的外部资料，而不是完全依赖参数中记住的知识。]]></description><category></category></item><item><title><![CDATA[【DL21】LLM 推理性能优化 —— Compute-bound、Memory-bound 与 FlashAttention]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164732374</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164732374</guid><author>Zguigo</author><pubDate>Wed, 09 Sep 2026 11:39:04 +0800</pubDate><description><![CDATA[这个公式正常计算，求QKt，这是一个很大的矩阵，这些中间矩阵需要在不同计算步骤之间反复读写 GPU HBM，这个时候flashattention出来了，利用 GPU 的片上高速 SRAM / Shared Memory 等存储，对 Q、K、V 进行分块计算，尽量避免把巨大的中间 Attention Matrix 写回 HBM,它在算法设计的时候，把 GPU 内存层级和数据搬运成本考虑进去。减少内存访问主要帮助 Memory-bound。前情提要：cpu：少量强大的计算核心，gpu：大量计算核心。]]></description><category></category></item><item><title><![CDATA[【DL20】vLLM 深入 —— Scheduler、Continuous Batching、KV Cache Manager 与 PagedAttention]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164454581</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164454581</guid><author>Zguigo</author><pubDate>Mon, 07 Sep 2026 10:59:05 +0800</pubDate><description><![CDATA[Scheduler 决定当前这一轮 GPU 应该处理哪些请求，以及每个请求处理多少 Token，不是简单的哪个请求先来就先处理谁，而是需要考虑GPU显存，KV cache，prompt长度，输出长度，当前batch，prefill和decode。这就是kv cache manager，这里将请求分成block，其实就是分页的思想，把 KV Cache 分成 Block，并通过 Block Table 管理它们，attention在访问历史KV时，哪些 Block 正在使用？哪些 Block 空闲？]]></description><category></category></item><item><title><![CDATA[【DL19】KV Cache 深入——从 Attention 到 GQA，再到显存计算]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164431256</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164431256</guid><author>Zguigo</author><pubDate>Sun, 06 Sep 2026 22:19:10 +0800</pubDate><description><![CDATA[实际上token1-4的KV不会发生变化，这其实也就是KV cache能够存在的根本原因，只要模型权重和上下文不变，K1和V1就不需要因为后面又生成了token而重新计算，所以只需要将它们缓存下来，不然每一次生成新的token的时候就需要计算一次。所有的Query head共享同一组KV，也就是Hkv=1，直接缩小到原来的32分之一，非常夸张，都是全部共享kv，表达能力可能会受到影响，GQA应用而生。把Query head分成若干组，每组共享KV，比如说几个Q共享一个KV head，折中的办法。]]></description><category></category></item><item><title><![CDATA[【DL18】LLM推理架构]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164404268</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164404268</guid><author>Zguigo</author><pubDate>Sat, 05 Sep 2026 22:34:11 +0800</pubDate><description><![CDATA[现阶段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还能够很快执行？]]></description><category></category></item><item><title><![CDATA[【DL17】ZeRO,FSDP深入]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164403171</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164403171</guid><author>Zguigo</author><pubDate>Sat, 05 Sep 2026 19:53:39 +0800</pubDate><description><![CDATA[现在我们再看看FSDP，fully shared data parallel,完全分片的数据并行，它的思想和zero-3非常接近，那么它怎么计算呢，假设有四张GPU，一个layer参数P，被拆成P0,P1,P2,P3,分配到四张GPU，当某个layer需要forward，all gather，获得完整的P，forward。举个实际例子，比如说有一套书，一共有四本，你先要看全部的书，都是你只有买一本书的钱，所以你可以再找三个想要买书的人，一人买一本，然后换着看，唯一的缺点就是需要和别人换，这就是通信换显存。]]></description><category></category></item><item><title><![CDATA[Coding Agent 上下文压缩：从 Claude Code / Codex / Pi 到自研策略]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164398039</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164398039</guid><author>Zguigo</author><pubDate>Sat, 05 Sep 2026 11:05:16 +0800</pubDate><description><![CDATA[<think>我们只需要根据内容生成一篇≤150字的摘要。内容是关于上下文压缩技术的介绍，包括Claude Code、Codex、Pi agent的压缩方法，以及作者自己的设计原则。摘要要简洁，涵盖主要点。</think>上下文压缩是Coding Agent的核心技术。Claude Code采用分支压缩；Codex分本地与远程压缩，远程压缩对高敏感数据有风险；Pi强调历史树结构。设计压缩策略应因用途而定，原则包括：不一次性总结、使用检查点、保留历史树、工具输出不入长期上下文、按信息类型分别压缩、以文件系统为]]></description><category></category></item><item><title><![CDATA[【DL16】All-Reduce|NCCL]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164364074</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164364074</guid><author>Zguigo</author><pubDate>Fri, 04 Sep 2026 10:55:49 +0800</pubDate><description><![CDATA[每张GPU都有完整模型，经过forwar 和backword，四张GPU的梯度不一样，这里我们采用先聚合再平均，这样所有的GPU得到完全相同的参数，这就是ALL reduce（all+reduce），reduce意思把多个GPU的数据聚合起来，all就是所有的gpu最终都得到这个结果.那么为什么不使用普通的CPU通信，因为我们现在的数据主要再GPU显存，如果GPU–CPU–GPU，就会产生大量数据搬运，效率很低，NCCL会尽量利用GPU–高速互通–GPU进行通信。好，现在变成四张GPU。]]></description><category></category></item><item><title><![CDATA[【DL15】大模型分布式训练|并行技术]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164360526</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164360526</guid><author>Zguigo</author><pubDate>Fri, 04 Sep 2026 09:48:23 +0800</pubDate><description><![CDATA[DP：每张 GPU 都保存一份完整模型，然后不同 GPU 处理不同的数据,一张GPU处理Batch A，现在四张GPU就可以同时处理ABCD，所以可以训练吞吐量。七十B参数，如果只看FP16权重，大约需要140GB，训练时远远不只是保存模型权重，还需要模型参数，梯度，optimizer state，activation，所以训练显存远远大于140GB.Y=XW，其中X是输入，W是一个非常大的权重矩阵，如果W太大，一张GPU放不下，可以把W切开，把工作拆到多张GPU上，]]></description><category></category></item><item><title><![CDATA[【DL14】LLM量化|PTQ|AWQ|bitsandbytes]]></title><link>https://blog.youkuaiyun.com/Zguigo/article/details/164328732</link><guid>https://blog.youkuaiyun.com/Zguigo/article/details/164328732</guid><author>Zguigo</author><pubDate>Thu, 03 Sep 2026 11:01:19 +0800</pubDate><description><![CDATA[假设一个模型有7B参数，也就是70亿个参数，如果每个参数使用FP32，仅仅模型权重就需要28GB，还有KV cache，CUDA Runtime，其他显存开销，所以实际运行需要更多的显存。模型架构本身没有因为量化就变成另外一种网络,参数以及某些计算中的数值表示精度,所以FP16 transformer和INT4 transformer可以是同一个模型架构，不同的数值表达方式。一种常见的后训练权重量化，简称PTQ，尽量降低权重精度，同时让量化后的模型尽可能接近原模型。FP16 和 BF16 又是什么关系？]]></description><category></category></item></channel></rss>