<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>111qqz的小窝</title><link>https://111qqz.com/</link><description>Recent content on 111qqz的小窝</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>hust.111qqz@gmail.com (111qqz)</managingEditor><webMaster>hust.111qqz@gmail.com (111qqz)</webMaster><copyright>© 2011-2026 111qqz</copyright><lastBuildDate>Sat, 26 Sep 2026 15:30:00 +0800</lastBuildDate><atom:link href="https://111qqz.com/index.xml" rel="self" type="application/rss+xml"/><item><title>caffe 源码阅读笔记</title><link>https://111qqz.com/2020/06/caffe-notes/</link><pubDate>Tue, 30 Jun 2020 19:47:02 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2020/06/caffe-notes/</guid><description>&lt;p&gt;caffe做部署是YYDS!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part1/" target="_blank" rel="noreferrer"&gt;blob&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part2/" target="_blank" rel="noreferrer"&gt;layer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part3/" target="_blank" rel="noreferrer"&gt;net&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part4/" target="_blank" rel="noreferrer"&gt;激活函数&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part5/" target="_blank" rel="noreferrer"&gt;卷积&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part6/" target="_blank" rel="noreferrer"&gt;reshape&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part7/" target="_blank" rel="noreferrer"&gt;slice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part8/" target="_blank" rel="noreferrer"&gt;loss function&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part9/" target="_blank" rel="noreferrer"&gt;reduce&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part10/" target="_blank" rel="noreferrer"&gt;eltwise&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part11/" target="_blank" rel="noreferrer"&gt;argmax&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>GAN 的对抗到底发生在哪里：从 D(G(z)) 到 Distribution Matching</title><link>https://111qqz.com/2026/09/gan-adversarial-distribution-matching/</link><pubDate>Sat, 26 Sep 2026 15:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/gan-adversarial-distribution-matching/</guid><description>&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/vae-latent-distribution/" &gt;上一篇&lt;/a&gt;讲完 VAE，走到一条因果链：VAE 通过把 Encoder 的输出从确定点变成概率分布，让 latent space 服从已知 prior，于是可以从 prior 采样、交给 Decoder 生成新样本。&lt;/p&gt;</description></item><item><title>从伯努利分布推到二元交叉熵：二分类损失为什么长这样</title><link>https://111qqz.com/2026/09/bernoulli-to-bce/</link><pubDate>Sat, 26 Sep 2026 13:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/bernoulli-to-bce/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在看 GAN 的时候，判别器的训练目标里反复出现两项：&lt;/p&gt;</description></item><item><title>训练信号从哪里来：重新理解有监督、无监督、半监督与自监督学习</title><link>https://111qqz.com/2026/09/training-signal-learning-paradigms/</link><pubDate>Sat, 26 Sep 2026 10:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/training-signal-learning-paradigms/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;我过去一直把机器学习里的学习范式简单理解成两类：&lt;/p&gt;</description></item><item><title>从 batch size 设多少到动态推理：重看 TensorRT 5 之后的演进</title><link>https://111qqz.com/2026/09/tensorrt-dynamic-inference-evolution/</link><pubDate>Sat, 26 Sep 2026 09:50:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/tensorrt-dynamic-inference-evolution/</guid><description>&lt;h2 class="relative group"&gt;一个部署工程师的困惑
 &lt;div id="一个部署工程师的困惑" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80%e4%b8%aa%e9%83%a8%e7%bd%b2%e5%b7%a5%e7%a8%8b%e5%b8%88%e7%9a%84%e5%9b%b0%e6%83%91" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;几年前我在做计算机视觉模型的部署，用的是 TensorRT 4 和 5。每次把训练好的模型转成 TensorRT engine，都绕不开一个参数：&lt;code&gt;maxBatchSize&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>VAE 为什么要让 Latent Variable 变成一个概率分布</title><link>https://111qqz.com/2026/09/vae-latent-distribution/</link><pubDate>Sun, 20 Sep 2026 19:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/vae-latent-distribution/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/latent-variable-latent-space/" &gt;上一篇文章&lt;/a&gt;理清了 latent variable 和 latent space 的概念，最后停在一个地方：&lt;/p&gt;</description></item><item><title>从特征表示到生成语义：深入理解 Latent Variable 与 Latent Space</title><link>https://111qqz.com/2026/09/latent-variable-latent-space/</link><pubDate>Sun, 20 Sep 2026 17:55:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/latent-variable-latent-space/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在看 MIT 6.S191 Lecture 4——Generative Modeling。在这之前我对生成模型基本没什么了解，刚建立了一个很粗的认知：&lt;/p&gt;</description></item><item><title>概率密度不是概率：连续随机变量为什么需要 PDF</title><link>https://111qqz.com/2026/09/pdf-is-not-probability/</link><pubDate>Sun, 20 Sep 2026 16:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/pdf-is-not-probability/</guid><description>&lt;h2 class="relative group"&gt;上一篇只回答了&amp;quot;为什么不矛盾&amp;quot;
 &lt;div id="上一篇只回答了为什么不矛盾" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%8a%e4%b8%80%e7%af%87%e5%8f%aa%e5%9b%9e%e7%ad%94%e4%ba%86%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%8d%e7%9f%9b%e7%9b%be" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/countable-uncountable-infinity/" &gt;上一篇文章&lt;/a&gt;里，我沿着一个概率问题一路追到了集合论。&lt;/p&gt;</description></item><item><title>无限也有大小：从可数集合到康托尔对角线论证</title><link>https://111qqz.com/2026/09/countable-uncountable-infinity/</link><pubDate>Sun, 20 Sep 2026 15:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/countable-uncountable-infinity/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在补概率基础的时候，碰到一个解释：连续分布中，每一个单点的概率都是 0，但整个区间的概率可以是 1。&lt;/p&gt;</description></item><item><title>从 Faster R-CNN 到 Anchor-Free：经典目标检测架构到底在解决什么问题</title><link>https://111qqz.com/2026/09/classical-object-detection-evolution/</link><pubDate>Sun, 20 Sep 2026 13:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/classical-object-detection-evolution/</guid><description>&lt;p&gt;以前在商汤做 CV 的时候，Faster R-CNN、SSD、FPN、RetinaNet 这些名字是天天打交道的。模型训练、转换、部署，各种坑也踩了不少——&lt;a href="https://111qqz.com/2019/11/debug-Frcnn-Model-When-Upgrading-From-Tensorrt4-to-Tensorrt5/" &gt;TensorRT 版本间 softmax axis 默认值不一致&lt;/a&gt;、&lt;a href="https://111qqz.com/2019/12/debug-faster-rcnn-once-again/" &gt;RoI Align 的 num_roi_per_image 默认 300 导致多 batch 结果错乱&lt;/a&gt;，这类问题当年 debug 到怀疑人生。&lt;/p&gt;</description></item><item><title>视频不等于视频模型：从抽帧 2D CNN 到 Conv3D 的选择逻辑</title><link>https://111qqz.com/2026/09/video-does-not-need-video-model/</link><pubDate>Sun, 20 Sep 2026 12:20:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/video-does-not-need-video-model/</guid><description>&lt;p&gt;以前做 CV 内容审核的时候，训练数据里有大量视频。色情视频审核是一个很典型的场景——输入是一段几十秒甚至几分钟的视频，输出是一个二分类：这段视频是否包含色情内容。&lt;/p&gt;</description></item><item><title>9 年后重温 CNN：剥掉算子细节后，真正留下了什么</title><link>https://111qqz.com/2026/09/convnet-architecture-thinking/</link><pubDate>Sun, 20 Sep 2026 10:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/convnet-architecture-thinking/</guid><description>&lt;p&gt;最近在重新过 MIT 6.S191 Lecture 3（卷积神经网络）。2017 年刚接触 CV 那会儿，CNN 算是吃饭的家伙，每天都在调。后来精力逐渐转到 ML Infra，成天跟 GPU 显存、通信拓扑和算子优化打交道，卷积网络的很多具体细节就慢慢生疏了——写个 &lt;code&gt;nn.Conv2d&lt;/code&gt; 时 weight 的四维形状到底怎么排、Kaiming 初始化的方差怎么推、感受野怎么算，冷不丁被问到，还得在脑子里卡壳一下。&lt;/p&gt;</description></item><item><title>Attention 之后还缺什么：从 Residual Connection 到 Transformer Stack</title><link>https://111qqz.com/2026/09/transformer-block-residual-stream/</link><pubDate>Sat, 19 Sep 2026 16:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/transformer-block-residual-stream/</guid><description>&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/multi-head-attention/" &gt;上一篇&lt;/a&gt;结尾我写：Multi-Head Attention 仍然只是一个 information routing / read mechanism，一个完整的 Transformer layer 还包含 FFN、residual connection、layer normalization 等组件。&lt;/p&gt;</description></item><item><title>从标量整数到相对几何：Sinusoidal Positional Encoding 到底在设计什么？</title><link>https://111qqz.com/2026/09/sinusoidal-positional-encoding/</link><pubDate>Sat, 19 Sep 2026 14:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/sinusoidal-positional-encoding/</guid><description>&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/where-sequence-order-went/" &gt;上一篇&lt;/a&gt;走到了一个结论：去掉 recurrence 之后，Self-Attention 必须重新获得 positional information。position 可以加进 token 的 representation，两者相加不要求后续计算无损还原，只要下游能利用其中的信息就行。&lt;/p&gt;</description></item><item><title>一组 QKV 就够了吗：Multi-Head Attention 到底在拆什么</title><link>https://111qqz.com/2026/09/multi-head-attention/</link><pubDate>Sat, 19 Sep 2026 10:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/multi-head-attention/</guid><description>&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/single-head-attention-qkv/" &gt;上一篇&lt;/a&gt;结尾我留了一个问题：一组 \(W_Q, W_K, W_V\) 只定义了一个 matching / routing space，如果不同类型的信息需求需要不同的 routing 策略，一个 space 够吗？&lt;/p&gt;</description></item><item><title>从动态读取到 QKV：Self-Attention 的公式是怎么长出来的</title><link>https://111qqz.com/2026/09/single-head-attention-qkv/</link><pubDate>Fri, 18 Sep 2026 18:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/single-head-attention-qkv/</guid><description>&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/rnn-to-self-attention/" &gt;上一篇&lt;/a&gt;结尾留了三个问题：谁和我相关？相关程度是多少？我该从对方那里读什么？&lt;/p&gt;</description></item><item><title>从倒排索引到 BPE：高性能系统为什么总在避免扫描全集</title><link>https://111qqz.com/2026/09/avoid-global-scan-in-systems/</link><pubDate>Thu, 17 Sep 2026 23:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/avoid-global-scan-in-systems/</guid><description>&lt;p&gt;最近在系统学习 Search 和 Information Retrieval 的知识。在看倒排索引（Inverted Index）的时候，我越看越觉得这个结构非常眼熟。直到我想起前段时间写 CS336 作业里 BPE（Byte-Pair Encoding）分词算法的优化逻辑，我才突然意识到：原来这些看似完全不同领域的系统，底层其实都在共享同一种 pattern。&lt;/p&gt;</description></item><item><title>推荐系统的动态算力：当机器跟不上流量，如何让 Workload 具备弹性</title><link>https://111qqz.com/2026/09/adaptive-load-control/</link><pubDate>Wed, 16 Sep 2026 21:08:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/adaptive-load-control/</guid><description>&lt;p&gt;在 2022 年的年终总结里，我提过当时做的一个“动态算力”项目。那一年，我和另一位同事一起推进了这套系统，陆续接入腾讯新闻、QQ 音乐、全民 K 歌等业务，部分场景节省了约 30% 的成本。&lt;/p&gt;</description></item><item><title>模型压缩之后，为什么推理反而变慢了：一次 CPU Serving 的性能优化实践</title><link>https://111qqz.com/2026/09/cpu-serving-decompression-tax/</link><pubDate>Tue, 15 Sep 2026 22:53:41 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/cpu-serving-decompression-tax/</guid><description>&lt;p&gt;之前我负责过一个推荐系统深度学习 Serving 框架的功能开发与性能优化。&lt;/p&gt;
&lt;p&gt;我们的系统主要跑在 CPU 上，以 TensorFlow 为主力 inference engine。随着模型迭代，尤其是 Embedding 层越来越大，模型导出、传输和上线变得非常慢，Serving 节点的内存成本也眼看着往上飙。&lt;/p&gt;</description></item><item><title>推荐模型不只是一次 Forward：回看排序模型的 Serving 架构</title><link>https://111qqz.com/2026/09/ranking-model-serving-architecture/</link><pubDate>Tue, 15 Sep 2026 22:29:22 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/ranking-model-serving-architecture/</guid><description>&lt;p&gt;之前在腾讯做过一个面向推荐场景的深度学习框架（内部叫「无量」），我当时负责其中 Serving 相关的工作。后来和朋友聊起，有人问我：把一个推荐模型部署上线，是不是就是加载模型文件，然后来一个请求做一次 forward？&lt;/p&gt;</description></item><item><title>量化交易不是一个模型：从 Alpha 到执行的完整系统框架</title><link>https://111qqz.com/2026/09/quant-trading-is-a-system/</link><pubDate>Mon, 14 Sep 2026 21:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/quant-trading-is-a-system/</guid><description>&lt;h2 class="relative group"&gt;读书时记下的一张系统图
 &lt;div id="读书时记下的一张系统图" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%af%bb%e4%b9%a6%e6%97%b6%e8%ae%b0%e4%b8%8b%e7%9a%84%e4%b8%80%e5%bc%a0%e7%b3%bb%e7%bb%9f%e5%9b%be" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2024 年我读过 Rishi K. Narang 的《打开量化投资的黑箱》（Inside the Black Box）。书里把一个典型的量化交易系统拆成几个组成部分——Alpha Model、Risk Model、Transaction Cost Model、Portfolio Construction Model、Execution Model，底下还有 Data 和 Research。&lt;/p&gt;</description></item><item><title>当资源利用率开始影响 Quota：一次训练集群资源治理机制的设计与反思</title><link>https://111qqz.com/2026/09/quota-feedback-loop-training-cluster/</link><pubDate>Mon, 14 Sep 2026 18:52:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/quota-feedback-loop-training-cluster/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;三年前我参与维护过一个多人共享的训练集群。集群上跑着各业务线的训练任务，用户通过一个队列系统提交，每个用户有自己的资源 Quota。&lt;/p&gt;</description></item><item><title>去掉 RNN 之后，顺序去哪了？</title><link>https://111qqz.com/2026/09/where-sequence-order-went/</link><pubDate>Sun, 13 Sep 2026 20:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/where-sequence-order-went/</guid><description>&lt;p&gt;在&lt;a href="https://111qqz.com/2026/09/rnn-to-self-attention/" &gt;Self-Attention 那篇&lt;/a&gt;里，去掉 recurrence 让不同位置可以并行计算。但顺序原本就编码在这条递推关系里；换成纯 self-attention 后，它由谁来表示？&lt;/p&gt;</description></item><item><title>市盈率为什么不等于“多少年回本”？</title><link>https://111qqz.com/2026/09/pe-is-not-payback-period/</link><pubDate>Sun, 13 Sep 2026 18:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/pe-is-not-payback-period/</guid><description>&lt;p&gt;整理金融基础笔记时，我想弄清楚一句常见说法：20 倍 PE，是否就意味着买进去 20 年回本？按定义算出的倍数，和股东实际收到现金的时间，中间隔着哪些条件？&lt;/p&gt;</description></item><item><title>从 RNN 到 Self-Attention：信息为什么一定要沿着 State 一步步传递？</title><link>https://111qqz.com/2026/09/rnn-to-self-attention/</link><pubDate>Sun, 13 Sep 2026 18:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/rnn-to-self-attention/</guid><description>&lt;p&gt;上一篇&lt;a href="https://111qqz.com/2026/09/seq2seq-to-attention/" &gt;《从 RNN / LSTM / GRU 到早期 Attention》&lt;/a&gt;结尾我留了一句话：早期的 attention 并不是为了取代 RNN 而出现的，它只是夹在 encoder–decoder 中间解决 fixed-context bottleneck；但“根据当前需求去读取一组 representation”这种机制，并不一定要依附在 RNN 上。这篇接着讲那个“另一个故事”。&lt;/p&gt;</description></item><item><title>夏普比率到底衡量了什么？</title><link>https://111qqz.com/2026/09/what-does-sharpe-ratio-measure/</link><pubDate>Sun, 13 Sep 2026 17:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/what-does-sharpe-ratio-measure/</guid><description>&lt;p&gt;整理完&lt;a href="https://111qqz.com/2026/09/risk-is-not-a-number/" &gt;风险指标&lt;/a&gt;，再看夏普比率时，我关注的是公式里的两个选择：为什么分子减去无风险收益率，分母又为什么选波动率？“收益除以风险”这句简称，把这两件事省掉了。&lt;/p&gt;</description></item><item><title>风险也不是一个数字：波动率、最大回撤和 VaR 到底在衡量什么？</title><link>https://111qqz.com/2026/09/risk-is-not-a-number/</link><pubDate>Sun, 13 Sep 2026 16:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/risk-is-not-a-number/</guid><description>&lt;p&gt;在&lt;a href="https://111qqz.com/2026/09/return-is-not-a-number/" &gt;收益率那篇&lt;/a&gt;里，同样赚了 10%，可能来自完全不同的路径。要继续比较，就得知道风险指标各自省略了什么。&lt;/p&gt;</description></item><item><title>从 RNN / LSTM / GRU 到早期 Attention：为什么“压缩历史”最终变成了“按需读取”</title><link>https://111qqz.com/2026/09/seq2seq-to-attention/</link><pubDate>Sun, 13 Sep 2026 15:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/seq2seq-to-attention/</guid><description>&lt;p&gt;上一篇&lt;a href="https://111qqz.com/2026/09/rnn-lstm-gru-architecture/" &gt;《从 RNN 到 LSTM，再到 GRU》&lt;/a&gt;把 gate 机制理了一遍：LSTM / GRU 把 recurrent state 的信息流变成了可学习的动态控制，决定什么写入、什么保留、什么暴露。写到那里，我以为 RNN 这条线差不多收尾了。&lt;/p&gt;</description></item><item><title>收益率不是一个数字：一项投资到底赚了多少？</title><link>https://111qqz.com/2026/09/return-is-not-a-number/</link><pubDate>Sun, 13 Sep 2026 14:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/return-is-not-a-number/</guid><description>&lt;h2 class="relative group"&gt;一笔买入、一笔卖出
 &lt;div id="一笔买入一笔卖出" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80%e7%ac%94%e4%b9%b0%e5%85%a5%e4%b8%80%e7%ac%94%e5%8d%96%e5%87%ba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;前段时间把基金从业资格考试的两门科目考完了。准备的过程里，我第一次完整地看到&amp;quot;收益率&amp;quot;这个词下面的各种定义，也发现过去自己对它的把握只有一句话：赚到的钱除以本金。&lt;/p&gt;</description></item><item><title>翻到 2017 年的简历，我才想起自己还做过一个游戏</title><link>https://111qqz.com/2026/09/pixel-war-archive/</link><pubDate>Sat, 12 Sep 2026 23:26:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/pixel-war-archive/</guid><description>&lt;p&gt;很多项目随着工作年限增加，会自然从简历里消失，这很正常。但从简历里消失，不代表这些事情没有发生过。&lt;/p&gt;</description></item><item><title>从 RNN 到 LSTM，再到 GRU：循环网络真正改变的是什么？</title><link>https://111qqz.com/2026/09/rnn-lstm-gru-architecture/</link><pubDate>Sat, 12 Sep 2026 18:24:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/rnn-lstm-gru-architecture/</guid><description>&lt;p&gt;

最近复习 RNN、LSTM 和 GRU，我把它们的状态更新公式放在一起看。有一处值得单独想想：candidate 和 input gate 最后只是相乘，为什么要分成两组参数来学？从这个问题往回看，才能看清几个 gate 各自控制了什么。&lt;/p&gt;</description></item><item><title>把 RNN 沿时间展开之后：理解 BPTT 与梯度传播</title><link>https://111qqz.com/2026/09/rnn-bptt/</link><pubDate>Sat, 12 Sep 2026 14:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/rnn-bptt/</guid><description>&lt;p&gt;复习 RNN 的 backward 时，我关注的是参数共享：同一份 weight 在多个 timestep 被使用，各处产生的梯度最后怎么汇到它上面？把时间展开成计算图之后，这件事就可以用普通的 chain rule 来算。&lt;/p&gt;</description></item><item><title>从 Docker 到 Kubernetes：目标状态与资源抽象</title><link>https://111qqz.com/2026/09/k8s-abstraction-desired-state-resource/</link><pubDate>Sat, 12 Sep 2026 10:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/k8s-abstraction-desired-state-resource/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在上一篇《&lt;a href="https://111qqz.com/2026/09/docker-process-not-machine/" &gt;从进程视角重新理解 Docker&lt;/a&gt;》中，我总结了 Docker 最核心的价值：它通过 namespace 和 cgroup 给进程构造了独立的视图和资源限制，并把这套运行环境固化成了可以直接分发的 artifact。&lt;/p&gt;</description></item><item><title>从局部线性化到 RNN：理解 Jacobian 连乘</title><link>https://111qqz.com/2026/09/rnn-gradient-jacobian/</link><pubDate>Sat, 12 Sep 2026 00:20:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/rnn-gradient-jacobian/</guid><description>&lt;p&gt;最近在重拾一些深度学习基础，发现了一个很有意思的视角。&lt;/p&gt;
&lt;p&gt;以前在看 RNN（Recurrent Neural Network）的长距离梯度传播公式时，总能看到一堆 Jacobian 矩阵的连乘，比如 \(\frac{\partial h_T}{\partial h_0} = J_T J_{T-1} \dots J_1\)。&lt;/p&gt;</description></item><item><title>开公司 VPN 后 ChatGPT 无法访问：一场 DNS 归属与透明代理的冲突</title><link>https://111qqz.com/2026/09/vpn-dns-transparent-proxy/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/vpn-dns-transparent-proxy/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在家办公，需要连公司 VPN（UniVPN）进内网。但一连上 VPN，浏览器里的 chatgpt.com 就直接打不开了。&lt;/p&gt;</description></item><item><title>为什么一个 Python Library 既要锁依赖，又不能锁依赖</title><link>https://111qqz.com/2026/09/python-library-dependency-model/</link><pubDate>Fri, 11 Sep 2026 00:05:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/python-library-dependency-model/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在团队内部重新整理 Python 项目的打包、发布和依赖管理规范，逐渐把各个工程统一收敛到：&lt;/p&gt;</description></item><item><title>从进程视角重新理解 Docker</title><link>https://111qqz.com/2026/09/docker-process-not-machine/</link><pubDate>Thu, 10 Sep 2026 20:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/docker-process-not-machine/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;第一次接触 Docker 是 2017 年，在深圳网警机房驻场做审核项目。机房完全没有外网，模型、依赖、运行环境全靠 U 盘拷贝 docker image 来传输。后来做模型转换系统，再到量化行业负责机器学习平台，和 Docker、K8s 打了不少交道。但距离上一次系统梳理 namespace、cgroup 这些底层机制，已经过去好几年了。&lt;/p&gt;</description></item><item><title>训练数据从哪里来：回看 2018 年的一套图片与视频采集系统</title><link>https://111qqz.com/2026/09/where-training-data-comes-from/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/where-training-data-comes-from/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;写训练代码的时候，经常从这里开始：&lt;/p&gt;</description></item><item><title>从一次训练集群卡顿，理解 Linux Overcommit</title><link>https://111qqz.com/2026/09/linux-overcommit-training-cluster/</link><pubDate>Wed, 09 Sep 2026 23:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/linux-overcommit-training-cluster/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近偶然看到一篇文章，里面提到一个 Linux 和 Windows 的差异：在 Linux 下，即使机器实际上没有足够的物理内存，一个很大的 &lt;code&gt;malloc&lt;/code&gt; 仍然可能成功返回。而 Windows 对 committed memory 的管理要严格得多，类似的 allocation 更容易被直接拒绝。&lt;/p&gt;</description></item><item><title>从 Token ID 到 Dense Vector：Embedding 到底在做什么</title><link>https://111qqz.com/2026/09/bpe-to-embedding/</link><pubDate>Wed, 09 Sep 2026 21:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/bpe-to-embedding/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在继续 CS336 和 MIT 6.S191。&lt;/p&gt;</description></item><item><title>Next-Token Prediction：语言模型的训练目标从哪来</title><link>https://111qqz.com/2026/09/next-token-prediction/</link><pubDate>Tue, 08 Sep 2026 23:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/next-token-prediction/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/2026/09/rnn-state-transition/" &gt;上一篇&lt;/a&gt;把 RNN 拆成了两层：state transition 和 output projection。State transition 维护 hidden state，output projection 从 hidden state 中映射出当前任务需要的预测结果。&lt;/p&gt;</description></item><item><title>重新理解 RNN：Hidden State、Output 和 Prediction 的区别</title><link>https://111qqz.com/2026/09/rnn-state-transition/</link><pubDate>Tue, 08 Sep 2026 00:20:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/rnn-state-transition/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在复习 MIT 6.S191 的 RNN 部分，看到下面这张 slide 时停了一下。&lt;/p&gt;</description></item><item><title>从 Forward 到 Optimizer：再看一遍 Training Loop</title><link>https://111qqz.com/2026/09/nn-training-loop-mental-model/</link><pubDate>Sun, 06 Sep 2026 22:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/nn-training-loop-mental-model/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;CS336 的 training loop 里，&lt;code&gt;loss.backward()&lt;/code&gt; 和 &lt;code&gt;optimizer.step()&lt;/code&gt; 挨在一起。前者计算 gradient，后者更新 parameter；但 gradient 存在哪里、什么时候清零、optimizer 还维护什么状态，需要分开看。于是结合 MIT 6.S191 的 Lecture 1，把一次训练迭代重新过了一遍。&lt;/p&gt;</description></item><item><title>博客历史</title><link>https://111qqz.com/history/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/history/</guid><description>&lt;h2 class="relative group"&gt;网易博客 (2011 - 2014)
 &lt;div id="网易博客-2011---2014" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%bd%91%e6%98%93%e5%8d%9a%e5%ae%a2-2011---2014" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;高中时接触 OI，开了个网易博客，标题叫「我的OI我的爱」。那时候写 Pascal，主要在 vijos 和 tyvj 上刷题，博客内容基本是题解。&lt;/p&gt;</description></item><item><title>从推理到训练：模型调度中的显存约束</title><link>https://111qqz.com/2026/09/training-memory-scheduling/</link><pubDate>Sat, 05 Sep 2026 11:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/training-memory-scheduling/</guid><description>&lt;h2 class="relative group"&gt;推理任务能放下，为什么训练任务放不下
 &lt;div id="推理任务能放下为什么训练任务放不下" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a8%e7%90%86%e4%bb%bb%e5%8a%a1%e8%83%bd%e6%94%be%e4%b8%8b%e4%b8%ba%e4%bb%80%e4%b9%88%e8%ae%ad%e7%bb%83%e4%bb%bb%e5%8a%a1%e6%94%be%e4%b8%8d%e4%b8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/2026/08/gpu-memory-mental-model/" &gt;上一篇&lt;/a&gt;讨论了模型调度中的 Capacity Constraint：一组模型到底能不能同时放进一张 GPU。&lt;/p&gt;</description></item><item><title>从 CS336 到 ML Infra：理解 Arithmetic Intensity、Accelerator Intensity，以及 Compute Bound / Memory Bound</title><link>https://111qqz.com/2026/09/arithmetic-intensity-compute-bound/</link><pubDate>Thu, 03 Sep 2026 21:00:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/09/arithmetic-intensity-compute-bound/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;这是 CS336 系列的又一篇。&lt;/p&gt;</description></item><item><title>从 reshape 到 einops：理解 Transformer 代码中的 Tensor Shape DSL</title><link>https://111qqz.com/2026/08/einops-tensor-shape-dsl/</link><pubDate>Thu, 27 Aug 2026 21:35:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/08/einops-tensor-shape-dsl/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在做 CS336（Language Modeling from Scratch）的 Transformer 实现，代码里反复出现这种写法：&lt;/p&gt;</description></item><item><title>从线上模型切换问题理解 PyTorch CUDA Caching Allocator：为什么显存管理需要理解生命周期</title><link>https://111qqz.com/2026/08/cuda-caching-allocator-lifetime/</link><pubDate>Wed, 26 Aug 2026 23:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/08/cuda-caching-allocator-lifetime/</guid><description>&lt;h2 class="relative group"&gt;起因
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;我们的线上推理系统中存在大量模型——MLP、GNN、MoE，以及它们的各种组合。这个 workload 有几个重要特点：&lt;/p&gt;</description></item><item><title>Lance 适合我们的训练特征存储吗？从 NumPy、mmap 到 GPFS I/O 的一次分析</title><link>https://111qqz.com/2026/08/lance-gpfs-training-feature-storage/</link><pubDate>Wed, 26 Aug 2026 20:30:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/08/lance-gpfs-training-feature-storage/</guid><description>&lt;h2 class="relative group"&gt;起因：一个来自运维同事的问题
 &lt;div id="起因一个来自运维同事的问题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0%e4%b8%80%e4%b8%aa%e6%9d%a5%e8%87%aa%e8%bf%90%e7%bb%b4%e5%90%8c%e4%ba%8b%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;前阵子运维同事找到我，大意是：&lt;/p&gt;</description></item><item><title>从 DataLoader 到 Remote DataLoader：如何让 GPU 不再等待数据</title><link>https://111qqz.com/2026/08/dataloader-to-remote-dataloader/</link><pubDate>Sun, 23 Aug 2026 23:58:00 +0800</pubDate><author>hust.111qqz@gmail.com (111qqz)</author><guid>https://111qqz.com/2026/08/dataloader-to-remote-dataloader/</guid><description>&lt;h2 class="relative group"&gt;起因：GPU 没吃满，但不是算力问题
 &lt;div id="起因gpu-没吃满但不是算力问题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0gpu-%e6%b2%a1%e5%90%83%e6%bb%a1%e4%bd%86%e4%b8%8d%e6%98%af%e7%ae%97%e5%8a%9b%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近组里有同学训练模型时，最直接的感受是：GPU utilization 上不去，step time 里总有一段在等数据。&lt;/p&gt;</description></item></channel></rss>