<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>文章 on k4i's blog</title><link>https://k4i.top/zh/posts/</link><description>Recent content in 文章 on k4i's blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>sky_io@outlook.com (K4i)</managingEditor><webMaster>sky_io@outlook.com (K4i)</webMaster><copyright>All content is subject to the license of<a rel="license noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> .</copyright><lastBuildDate>Tue, 14 Jul 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://k4i.top/zh/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Entropy、Cross Entropy 和 KL Divergence：从编码代价理解模型训练</title><link>https://k4i.top/zh/posts/entropy-cross-entropy-kl/</link><pubDate>Tue, 14 Jul 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 14 Jul 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/entropy-cross-entropy-kl/</guid><description>&lt;p&gt;很多机器学习概念第一次看起来像三套公式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entropy：\(H(P)\)&lt;/li&gt;
&lt;li&gt;cross entropy：\(H(P,Q)\)&lt;/li&gt;
&lt;li&gt;KL divergence：\(D_{\mathrm{KL}}(P\Vert Q)\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里的字母首先是一种约定，而不是公式推导出来的变量名。Shannon 在信息论奠基论文中用 \(H\) 表示 entropy；&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;为什么选 &lt;code&gt;H&lt;/code&gt; 没有公认的唯一解释，因此把它记作历史符号最准确。cross entropy 仍然衡量平均编码代价，是 entropy 的推广，所以沿用 \(H(P,Q)\)：第一个参数是真实分布，第二个是用于编码的分布。KL 使用 \(D\)，是为了强调它衡量两个分布之间的 &lt;strong&gt;divergence（偏离程度）&lt;/strong&gt;；但 divergence 不等于 metric，KL 不对称，也不满足三角不等式。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/math-operators.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>deep-learning</category><category>information-theory</category><category>cross-entropy</category><category>kl-divergence</category><category>loss-function</category><category>AI</category></item><item><title>KL Divergence 为什么不是距离：方向一换，问题就变了</title><link>https://k4i.top/zh/posts/kl-divergence-not-a-distance/</link><pubDate>Tue, 07 Jul 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 07 Jul 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/kl-divergence-not-a-distance/</guid><description>&lt;p&gt;KL divergence 最容易被误读成“两个分布之间的距离”。这个说法有一半对：它确实在比较两个分布；但另一半很危险：&lt;strong&gt;KL 不是距离，因为方向有意义。&lt;/strong&gt; 更准确地说，KL 虽然满足非负性，而且只有 \(P=Q\) 时才为 0，却不满足 metric 要求的对称性和三角不等式。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/math-operators.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>deep-learning</category><category>kl-divergence</category><category>cross-entropy</category><category>rlhf</category><category>information-theory</category><category>AI</category></item><item><title>常见概率分布：均值、方差与标准差速查</title><link>https://k4i.top/zh/posts/common-distributions-variance-std/</link><pubDate>Thu, 02 Jul 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 02 Jul 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/common-distributions-variance-std/</guid><description>&lt;p&gt;学概率时，很多分布看起来像一张公式清单：Bernoulli、Binomial、Poisson、Normal、Exponential、Gamma、Beta……如果只背概率质量函数或密度函数，很容易忘记它们各自回答什么问题。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/dice-white.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>probability</category><category>statistics</category><category>distribution</category><category>variance</category><category>Math</category></item><item><title>Optimizer：从 SGD 到 AdamW，模型参数到底怎么更新</title><link>https://k4i.top/zh/posts/optimizers-adamw/</link><pubDate>Mon, 29 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 29 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/optimizers-adamw/</guid><description>&lt;p&gt;在前面的文章里，我们已经把训练过程拆成了几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://k4i.top/zh/posts/loss-functions-cross-entropy/"&gt;loss function&lt;/a&gt; 定义什么叫错；&lt;/li&gt;
&lt;li&gt;&lt;a href="https://k4i.top/zh/posts/forward-and-backward-propagation/"&gt;前向传播与反向传播&lt;/a&gt; 计算每个参数的梯度；&lt;/li&gt;
&lt;li&gt;&lt;a href="https://k4i.top/zh/posts/batch-vs-stochastic-gradient-descent/"&gt;梯度下降&lt;/a&gt; 根据梯度更新参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但真正写训练代码时，我们通常不会直接写：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/gradient-descent.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>deep-learning</category><category>optimizer</category><category>adamw</category><category>gradient-descent</category><category>AI</category></item><item><title>vLLM Scheduler：请求队列如何变成 SchedulerOutput</title><link>https://k4i.top/zh/posts/scheduler-request-queue-to-scheduler-output/</link><pubDate>Tue, 23 Jun 2026 11:20:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 23 Jun 2026 11:20:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/scheduler-request-queue-to-scheduler-output/</guid><description>&lt;p&gt;在 request lifecycle 里，Scheduler 是最容易被低估的一段。HTTP server 负责接入请求，ModelRunner 负责把 batch 跑到 GPU 上；Scheduler 每一轮要回答的是：&lt;strong&gt;这一步到底让谁跑，跑几个 token，KV cache 放不放得下？&lt;/strong&gt;&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/vllm-sglang-source-reading/source-reading-code-path-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>vllm</category><category>源码阅读</category><category>scheduler</category><category>ai-infra</category><category>AI</category><category>vLLM and SGLang Source Reading</category></item><item><title>vLLM ModelRunner：SchedulerOutput 如何变成 GPU Forward</title><link>https://k4i.top/zh/posts/model-runner-scheduler-output-to-gpu-forward/</link><pubDate>Tue, 23 Jun 2026 10:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 23 Jun 2026 10:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/model-runner-scheduler-output-to-gpu-forward/</guid><description>&lt;p&gt;Scheduler 决定 &lt;strong&gt;what to run this step&lt;/strong&gt;；ModelRunner 决定 &lt;strong&gt;how to run it on GPU&lt;/strong&gt;。如果说 Scheduler 把动态请求队列压缩成 &lt;code&gt;SchedulerOutput&lt;/code&gt;，那 ModelRunner 就负责把这份调度结果翻译成连续 tensor、KV cache slot、attention metadata、forward context、logits 和 sampled token。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/vllm-sglang-source-reading/source-reading-code-path-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>vllm</category><category>源码阅读</category><category>model-runner</category><category>ai-infra</category><category>AI</category><category>vLLM and SGLang Source Reading</category></item><item><title>模型里的数值类型：FP32、BF16、FP8、INT8 到 INT4</title><link>https://k4i.top/zh/posts/model-numeric-types/</link><pubDate>Tue, 23 Jun 2026 10:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 23 Jun 2026 10:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/model-numeric-types/</guid><description>&lt;h2 id="quick-answer"&gt;先给结论&lt;/h2&gt;
&lt;p&gt;模型里不是只有浮点类型，也会用整数类型。最重要的区别不是“浮点 vs 整数”，而是这个类型用在什么位置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位置&lt;/th&gt;
&lt;th&gt;常见类型&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;训练计算&lt;/td&gt;
&lt;td&gt;FP32、TF32、FP16、BF16&lt;/td&gt;
&lt;td&gt;保持梯度和激活稳定，同时利用 Tensor Core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;推理计算&lt;/td&gt;
&lt;td&gt;BF16、FP16、FP8、INT8&lt;/td&gt;
&lt;td&gt;降低带宽和计算成本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;权重存储&lt;/td&gt;
&lt;td&gt;BF16、FP16、FP8、INT8、INT4、NF4&lt;/td&gt;
&lt;td&gt;减少模型文件和显存占用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KV cache / activation&lt;/td&gt;
&lt;td&gt;BF16、FP16、FP8、INT8&lt;/td&gt;
&lt;td&gt;长上下文和高并发时省显存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;token id / mask / index&lt;/td&gt;
&lt;td&gt;INT32、INT64、bool&lt;/td&gt;
&lt;td&gt;表示离散索引，不是量化参数&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一句话记住：&lt;strong&gt;训练主路径通常是浮点；推理和存储会大量使用低精度浮点和整数；整数如果表示模型数值，通常需要 scale、zero point 或 codebook 才能还原成近似实数。&lt;/strong&gt;&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/model-numeric-types/numeric-types-cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>数值类型</category><category>bf16</category><category>fp8</category><category>int8</category><category>量化</category><category>AI</category><category>LLM Quantization and Low-Precision Serving</category></item><item><title>Loss Function：模型到底在优化什么</title><link>https://k4i.top/zh/posts/loss-functions-cross-entropy/</link><pubDate>Tue, 23 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 23 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/loss-functions-cross-entropy/</guid><description>&lt;p&gt;前向传播给出预测，反向传播计算梯度，梯度下降更新参数。但中间还有一个非常关键的问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;预测结果到底怎样才算“错”？错多少？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个问题由 &lt;strong&gt;loss function（损失函数）&lt;/strong&gt; 回答。它把模型输出和真实标签变成一个标量：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/gradient-descent.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>deep-learning</category><category>loss-function</category><category>cross-entropy</category><category>gradient-descent</category><category>AI</category></item><item><title>大模型推理采样：temperature、top-p、top-k 到底在控制什么</title><link>https://k4i.top/zh/posts/llm-sampling-temperature-top-p-top-k/</link><pubDate>Thu, 18 Jun 2026 21:20:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 18 Jun 2026 21:20:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-sampling-temperature-top-p-top-k/</guid><description>&lt;p&gt;同一个 prompt，为什么把 &lt;code&gt;temperature&lt;/code&gt; 调低会更稳定，把 &lt;code&gt;top_p&lt;/code&gt; 调低会更保守，把 &lt;code&gt;top_k&lt;/code&gt; 调小会更像“只从前几个答案里挑”？这些参数不是三种魔法风格，而是在&lt;strong&gt;下一 token 的概率分布&lt;/strong&gt;上做了三类很具体的操作。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-sampling-temperature-top-p-top-k/sampling-knobs-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>采样</category><category>vllm</category><category>源码阅读</category><category>ai-infra</category><category>AI</category><category>vLLM and SGLang Source Reading</category></item><item><title>Activation Function：神经网络里那个很小但很关键的非线性</title><link>https://k4i.top/zh/posts/activation-functions-neural-networks/</link><pubDate>Thu, 18 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 18 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/activation-functions-neural-networks/</guid><description>&lt;p&gt;Activation function 看起来只是神经网络层里一个很小的函数。真正重的计算通常是矩阵乘法：&lt;/p&gt;
&lt;p&gt;$$z = Wx + b$$&lt;/p&gt;
&lt;p&gt;然后逐元素套一个函数：&lt;/p&gt;
&lt;p&gt;$$a = \phi(z)$$&lt;/p&gt;
&lt;p&gt;很容易把 \(\phi\) 当成一个可以随便替换的名字：sigmoid、tanh、ReLU、GELU、SiLU、Mish，或者几百个变体。但 activation function 不是装饰。它决定了多层网络能不能表达非线性函数，梯度能不能传下去，hidden value 的分布是否稳定，以及为了很小的精度收益是否要付出明显的运行成本。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/activation-functions-neural-networks/activation-function-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>deep-learning</category><category>activation-function</category><category>neural-network</category><category>gradient-descent</category><category>AI</category></item><item><title>具身智能模型的三条路线：VLA、世界模型与 WAM</title><link>https://k4i.top/zh/posts/embodied-models-vla-jepa-wam/</link><pubDate>Thu, 18 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 18 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/embodied-models-vla-jepa-wam/</guid><description>&lt;p&gt;如果大语言模型只需要回答一句话，那么具身智能模型要多回答一个问题：&lt;strong&gt;这句话接下来要变成什么动作？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比如你对桌面机器人说：“把红色杯子推到盘子旁边。”模型不只要识别杯子、理解“旁边”，还要决定机械臂下一步往哪里移动、夹爪什么时候闭合、动作失败后如何修正。这里的难点不是多模态本身，而是语言、视觉、物理状态和连续动作之间有闭环：动作会改变世界，新的世界又会改变下一步动作。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/embodied-models-vla-jepa-wam/embodied-models-cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>embodied-ai</category><category>robotics</category><category>vla</category><category>world-model</category><category>jepa</category><category>notes</category></item><item><title>流式传输设计：为什么只靠传输层不够</title><link>https://k4i.top/zh/posts/streaming-application-layer-design/</link><pubDate>Wed, 17 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 17 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/streaming-application-layer-design/</guid><description>&lt;p&gt;很多人第一次设计“流式传输”时，会自然地问一个问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;既然 TCP 已经是可靠有序的字节流，HTTP/2、HTTP/3 也已经支持长连接和多路复用，为什么还要在应用层重新设计一套 streaming 协议？&lt;/strong&gt;&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/streaming-application-layer-design/streaming-cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>networking</category><category>streaming</category><category>distributed-systems</category><category>backend</category><category>notes</category></item><item><title>vLLM 请求生命周期：从 OpenAI API 到一次 Forward</title><link>https://k4i.top/zh/posts/request-lifecycle-openai-to-forward-pass/</link><pubDate>Sun, 07 Jun 2026 15:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sun, 07 Jun 2026 15:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/request-lifecycle-openai-to-forward-pass/</guid><description>&lt;p&gt;从外部看，vLLM 像一个 OpenAI-compatible HTTP server：请求 &lt;code&gt;/v1/chat/completions&lt;/code&gt;，返回 token stream。源码阅读时更关键的问题是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个 JSON 请求什么时候变成 engine request？什么时候跨进程？什么时候进入 scheduler？什么时候才真正触发一次 model forward？&lt;/strong&gt;&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/vllm-sglang-source-reading/source-reading-code-path-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>vllm</category><category>sglang</category><category>源码阅读</category><category>ai-infra</category><category>AI</category><category>vLLM and SGLang Source Reading</category></item><item><title>Prefill vs Decode：为什么同一个模型有两个完全不同的瓶颈</title><link>https://k4i.top/zh/posts/prefill-vs-decode/</link><pubDate>Fri, 05 Jun 2026 22:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 05 Jun 2026 22:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/prefill-vs-decode/</guid><description>&lt;p&gt;LLM 推理表面上像一个操作：输入 prompt，然后不断输出 token。底层其实是两个 workload 在共用同一套模型权重。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;prefill&lt;/strong&gt; 负责处理输入 prompt，并构建初始 KV cache。&lt;strong&gt;decode&lt;/strong&gt; 负责逐 token 生成，每一步读取已经存在的 KV cache，再追加新 token 的 KV。权重是同一套，但硬件瓶颈完全不同：prefill 更像大批量矩阵乘法；decode 更像很多小 query 反复读取一张不断增长的内存表。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/prefill-vs-decode/two-bottlenecks.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>prefill</category><category>decode</category><category>kv-cache</category><category>serving</category><category>systems</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>LLM Attention Kernels and GPU Primitives：Attention Kernel 与 GPU 基元路线</title><link>https://k4i.top/zh/posts/llm-attention-kernels-gpu-primitives/</link><pubDate>Fri, 05 Jun 2026 11:10:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 05 Jun 2026 11:10:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-attention-kernels-gpu-primitives/</guid><description>&lt;p&gt;这个系列专门放 kernel 和 GPU 基元。它和推理引擎机制系列的区别是：机制系列解释“系统为什么需要这个优化”，这里解释“这个优化在 kernel 和内存访问层面如何实现”。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-attention-kernels-gpu-primitives/gpu-attention-kernel-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>attention</category><category>triton</category><category>cuda</category><category>gpu</category><category>kernel</category><category>AI</category><category>LLM Attention Kernels and GPU Primitives</category></item><item><title>LLM Quantization and Low-Precision Serving：量化与低精度推理路线</title><link>https://k4i.top/zh/posts/llm-quantization-low-precision-serving/</link><pubDate>Fri, 05 Jun 2026 11:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 05 Jun 2026 11:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-quantization-low-precision-serving/</guid><description>&lt;p&gt;这个系列专门放量化和低精度 serving。它不只是“推理优化”的一个小节，因为量化同时牵涉表示方式、误差控制、校准数据、kernel 支持、KV cache、显存带宽和质量回归。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-quantization-low-precision-serving/quantization-4bit-buckets-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>量化</category><category>低精度</category><category>int4</category><category>fp8</category><category>serving</category><category>AI</category><category>LLM Quantization and Low-Precision Serving</category></item><item><title>LLM Inference Lab Reports：推理实验与 Benchmark 路线</title><link>https://k4i.top/zh/posts/llm-inference-lab-reports/</link><pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 05 Jun 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-inference-lab-reports/</guid><description>&lt;p&gt;这条系列专门放实验报告。它和源码阅读、机制解释的区别是：每篇文章都要有可复现环境、命令、指标、图表或表格，以及明确的调参结论。&lt;/p&gt;
&lt;p&gt;推理引擎岗位面试里，“知道 PagedAttention / prefix cache / chunked prefill”只是第一层。更有说服力的是能回答：在什么 workload 下它有效？指标改善多少？瓶颈从哪里转移到了哪里？如果线上指标变差，应该先看什么？&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-inference-lab-reports/benchmark-profiler-dashboard-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>benchmark</category><category>profiling</category><category>vllm</category><category>sglang</category><category>AI</category><category>LLM Inference Lab Reports</category></item><item><title>vLLM / SGLang 源码阅读：从请求到一次 Forward</title><link>https://k4i.top/zh/posts/vllm-sglang-source-reading/</link><pubDate>Thu, 04 Jun 2026 22:10:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 04 Jun 2026 22:10:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/vllm-sglang-source-reading/</guid><description>&lt;p&gt;这条系列专门放源码阅读和工程落地文章。目标不是逐文件翻译源码，而是把推理引擎里的关键机制定位到真实代码路径，并用 benchmark 或小实验验证它们的行为。&lt;/p&gt;
&lt;h2 id="reading-order"&gt;阅读顺序&lt;/h2&gt;
&lt;p&gt;先按“请求路径 -&amp;gt; 调度决策 -&amp;gt; GPU 执行”的顺序读三篇核心文章：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/vllm-sglang-source-reading/source-reading-code-path-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>vllm</category><category>sglang</category><category>源码阅读</category><category>ai-infra</category><category>AI</category><category>vLLM and SGLang Source Reading</category></item><item><title>LLM Inference Internals：推理引擎核心机制路线</title><link>https://k4i.top/zh/posts/llm-inference-internals/</link><pubDate>Thu, 04 Jun 2026 22:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 04 Jun 2026 22:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-inference-internals/</guid><description>&lt;p&gt;这个系列回答“推理引擎为什么长这样”。重点不是框架 API，而是 vLLM / SGLang 这类 serving engine 背后的核心机制：prefill/decode 分离、KV cache、PagedAttention、continuous batching、prefix caching、chunked prefill 和 disaggregated prefill。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-inference-internals/engine-kv-cache-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>kv-cache</category><category>vllm</category><category>sglang</category><category>systems</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>大模型量化综述：从线性量化到码本量化</title><link>https://k4i.top/zh/posts/llm-quantization/</link><pubDate>Mon, 01 Jun 2026 21:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 01 Jun 2026 21:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-quantization/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;一个 7B 模型如果用 FP16 存权重，光参数就需要：&lt;/p&gt;
&lt;p&gt;$$7 \times 10^9 \times 2\ \text{bytes} \approx 14\ \text{GB}$$&lt;/p&gt;
&lt;p&gt;这还没有算 KV cache、activation、临时 workspace、CUDA graph、batching 和运行时碎片。到了 70B，FP16 权重约 140 GB，单卡部署基本不现实。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-quantization/quantization-buckets-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>量化</category><category>推理</category><category>显存</category><category>int8</category><category>int4</category><category>fp8</category><category>AI</category><category>LLM Quantization and Low-Precision Serving</category></item><item><title>从绝对位置编码到 RoPE：位置为什么可以被旋转表示</title><link>https://k4i.top/zh/posts/positional-encoding-to-rope/</link><pubDate>Thu, 28 May 2026 21:53:12 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Thu, 28 May 2026 21:53:12 +0800</atom:modified><guid>https://k4i.top/zh/posts/positional-encoding-to-rope/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;Transformer 的自注意力有一个看似反直觉的性质：如果不给 token 额外的位置提示，它本身并不知道一句话里的词序。&lt;/p&gt;
&lt;p&gt;比如下面两句话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我 喜欢 你&lt;/li&gt;
&lt;li&gt;你 喜欢 我&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们的 token 集合几乎一样，但语义完全不同。RNN 会按时间步读取输入，CNN 会用局部窗口保留邻近关系，而标准 self-attention 对一组输入向量做的是全局两两匹配。只看 attention 公式：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/positional-encoding-to-rope/rope-rotation-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>transformer</category><category>attention</category><category>position-encoding</category><category>rope</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>如何估算 LLM 训练和推理需要多少算力与显存</title><link>https://k4i.top/zh/posts/llm-flops-memory-estimation/</link><pubDate>Wed, 27 May 2026 22:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 27 May 2026 22:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/llm-flops-memory-estimation/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;如果我要训练一个 7B 模型，需要准备多少 GPU？训练 1T tokens 大概要多久？如果只是部署推理，一张 24GB 显卡能不能跑？上下文长度从 4K 增加到 32K，显存为什么突然不够了？&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/llm-flops-memory-estimation/flops-memory-icon.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>训练</category><category>推理</category><category>flops</category><category>显存</category><category>transformer</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Agent Skill Management：把 AI 助手从聪明变成稳定</title><link>https://k4i.top/zh/posts/agent-skill-management/</link><pubDate>Sat, 23 May 2026 10:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sat, 23 May 2026 10:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/agent-skill-management/</guid><description>&lt;h2 id="why-skills-matter"&gt;为什么需要 Skill&lt;/h2&gt;
&lt;p&gt;用 coding agent 一段时间后，我发现真正影响效率的不是“模型今天够不够聪明”，而是它能不能稳定地复用经验。&lt;/p&gt;
&lt;p&gt;比如同一个仓库里，测试命令是什么、哪些文件不能随便改、生成图片应该放在哪个目录、发布前要跑什么检查、遇到 bug 应该先定位根因还是先补丁。人可以靠记忆和习惯处理这些隐性流程，但 agent 每次启动时并不天然知道这些约定。把所有规则都塞进一份巨大的 &lt;code&gt;AGENTS.md&lt;/code&gt; 也不是好办法：上下文会膨胀，触发边界会模糊，最后变成“什么都写了，但关键时刻不一定用”。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/terminal.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>agent</category><category>codex</category><category>skills</category><category>workflow</category><category>notes</category></item><item><title>Disaggregated Prefill：把计算拆到不同机器上</title><link>https://k4i.top/zh/posts/disaggregated-prefill/</link><pubDate>Wed, 22 Apr 2026 12:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 22 Apr 2026 12:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/disaggregated-prefill/</guid><description>&lt;h2 id="ceiling"&gt;为什么同一张 GPU 上的共存有上限&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://k4i.top/zh/posts/chunked-prefill/"&gt;chunked prefill&lt;/a&gt; 通过把 prefill 切成小块，让 prefill 和 decode 在同一张 GPU 上共存得更平滑。但即使 chunk 切得再好，prefill 和 decode 仍然在&lt;em&gt;共享同一张 GPU&lt;/em&gt;。它们会竞争：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/disaggregated-prefill/cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>inference</category><category>systems</category><category>distributed</category><category>scheduling</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Prefix Caching：跨请求复用 KV Cache</title><link>https://k4i.top/zh/posts/prefix-caching/</link><pubDate>Wed, 22 Apr 2026 11:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 22 Apr 2026 11:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/prefix-caching/</guid><description>&lt;h2 id="problem"&gt;重复前缀问题&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://k4i.top/zh/posts/kv-cache/"&gt;KV cache&lt;/a&gt; 解决的是&lt;strong&gt;同一个请求内部&lt;/strong&gt;的重复计算：解码第 \(t\) 个 token 时，不需要重新计算前面 \(t-1\) 个 token 的 K、V。可是生产环境里还有另一种更大规模的重复：&lt;strong&gt;不同请求经常以完全相同的一段 token 开头&lt;/strong&gt;。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/prefix-caching/cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>inference</category><category>systems</category><category>caching</category><category>kv-cache</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Chunked Prefill：把 Prefill 切片，保护 Decode 延迟</title><link>https://k4i.top/zh/posts/chunked-prefill/</link><pubDate>Wed, 22 Apr 2026 11:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 22 Apr 2026 11:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/chunked-prefill/</guid><description>&lt;h2 id="interference"&gt;干扰问题&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://k4i.top/zh/posts/continuous-batching/"&gt;continuous batching&lt;/a&gt; 通过按迭代粒度调度请求，让 GPU 尽量保持忙碌。但它有一个很容易破坏延迟体验的边界情况：&lt;strong&gt;很长的 prefill&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当一个带有 2048-token prompt 的请求到达时，朴素调度器会在一次迭代里把整个 prompt 跑完 prefill。以 A100 上的 7B 模型为例，2048-token prefill 大约需要 200 ms。在这 200 ms 里，当前 batch 里已经在流式输出的 decode 请求都要等待。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/chunked-prefill/cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>systems</category><category>latency</category><category>scheduling</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Continuous Batching：按迭代粒度调度</title><link>https://k4i.top/zh/posts/continuous-batching/</link><pubDate>Wed, 22 Apr 2026 10:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 22 Apr 2026 10:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/continuous-batching/</guid><description>&lt;h2 id="batching-problem"&gt;batching 问题&lt;/h2&gt;
&lt;p&gt;batching 是 LLM serving 系统让 GPU 忙起来的基本手段。单个请求通常无法充分利用 GPU，多个请求一起跑，才能把许多小矩阵运算变成更大的矩阵运算。问题是：请求不会同时结束。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/continuous-batching/cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>inference</category><category>systems</category><category>batching</category><category>scheduling</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Paged Attention：GPU 上的虚拟内存</title><link>https://k4i.top/zh/posts/paged-attention/</link><pubDate>Wed, 22 Apr 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 22 Apr 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/paged-attention/</guid><description>&lt;h2 id="memory-management-problem"&gt;显存管理问题&lt;/h2&gt;
&lt;h3 id="fragmentation"&gt;碎片化问题&lt;/h3&gt;
&lt;p&gt;上一篇 &lt;a href="https://k4i.top/zh/posts/kv-cache/"&gt;KV cache&lt;/a&gt; 解释了为什么自回归解码可以缓存 key 和 value。KV cache 帮我们避免了大量重复计算，但也引出了一个新的系统问题：&lt;strong&gt;这些不断增长的缓存到底放在哪里？&lt;/strong&gt;&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/paged-attention/cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>systems</category><category>vllm</category><category>memory</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Online Softmax：为任意大行设计的分块算法</title><link>https://k4i.top/zh/posts/online-softmax/</link><pubDate>Tue, 21 Apr 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Tue, 21 Apr 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/online-softmax/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;在&lt;a href="https://k4i.top/zh/posts/fused-softmax/"&gt;融合 softmax 一文&lt;/a&gt;中，我们展示了将整行保持在 GPU SRAM 中可以消除冗余全局内存流量——将 softmax 的内存操作从 \(8MN\) 降至 \(2MN\)。这背后有一个关键假设：大小为 \(N\) 的每一行能放入 SRAM。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/online-softmax/cover.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>triton</category><category>gpu</category><category>softmax</category><category>online-softmax</category><category>性能优化</category><category>flash-attention</category><category>AI</category><category>LLM Attention Kernels and GPU Primitives</category></item><item><title>LLM 推理中为什么 K、V 可以被缓存</title><link>https://k4i.top/zh/posts/kv-cache/</link><pubDate>Mon, 20 Apr 2026 12:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 20 Apr 2026 12:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/kv-cache/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;大语言模型以&lt;strong&gt;自回归&lt;/strong&gt;方式生成文本——每次生成一个 token，每个新 token 依赖于之前所有 token。这种串行特性带来了一个根本的优化机会：每一步中大部分计算是&lt;strong&gt;冗余&lt;/strong&gt;的。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/kv-cache/cover.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>llm</category><category>推理</category><category>kv-cache</category><category>transformer</category><category>优化</category><category>AI</category><category>LLM Inference Internals</category></item><item><title>Triton 中的融合 Softmax</title><link>https://k4i.top/zh/posts/fused-softmax/</link><pubDate>Mon, 20 Apr 2026 10:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 20 Apr 2026 10:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/fused-softmax/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;softmax 是深度学习中最常见的运算之一，出现在注意力机制、分类头，以及任何需要将向量归一化为概率分布的场景中。&lt;/p&gt;
&lt;p&gt;对于长度为 \(N\) 的向量 \(x\)，softmax 函数定义为：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/fused-softmax/cover.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>triton</category><category>gpu</category><category>softmax</category><category>kernel-fusion</category><category>性能优化</category><category>AI</category><category>LLM Attention Kernels and GPU Primitives</category></item><item><title>SSH 端口转发：本地与远程隧道详解</title><link>https://k4i.top/zh/posts/ssh-port-forwarding/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sun, 19 Apr 2026 00:00:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/ssh-port-forwarding/</guid><description>&lt;p&gt;SSH 端口转发（也称 SSH 隧道）允许你通过加密的 SSH 连接安全地路由网络流量。分为两种方向：&lt;strong&gt;本地转发&lt;/strong&gt;（&lt;code&gt;-L&lt;/code&gt;）用于访问远程服务，&lt;strong&gt;远程转发&lt;/strong&gt;（&lt;code&gt;-R&lt;/code&gt;）用于将本地服务暴露给远程机器。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/posts/ssh-port-forwarding/ssh-cover.svg" medium="image"><media:title type="html">featured image</media:title></media:content><category>ssh</category><category>networking</category><category>linux</category><category>devops</category><category>notes</category></item><item><title>Mitmproxy + Tampermonkey = 更好用的 {LLM, …} 查看器</title><link>https://k4i.top/zh/posts/mitmproxy-plus-tampermonkey-better-llm-dot-dot-dot-viewer/</link><pubDate>Sun, 22 Mar 2026 21:49:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sun, 22 Mar 2026 21:49:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/mitmproxy-plus-tampermonkey-better-llm-dot-dot-dot-viewer/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;调试 LLM 应用时，我经常想直接看到真实的 HTTP 流量：请求体、模型名、tool call、流式返回片段、token usage，以及最终响应。SDK 日志当然有用，但通常不是太概括，就是太吵。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/better-llm-viewer.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>mitmproxy</category><category>llm</category><category>tampermonkey</category><category>debugging</category><category>proxy</category><category>workspace-setup</category></item><item><title>批量梯度下降与随机梯度下降</title><link>https://k4i.top/zh/posts/batch-vs-stochastic-gradient-descent/</link><pubDate>Mon, 16 Feb 2026 23:30:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 16 Feb 2026 23:30:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/batch-vs-stochastic-gradient-descent/</guid><description>&lt;h2 id="introduction"&gt;引言&lt;/h2&gt;
&lt;p&gt;从上一篇前向传播与反向传播的文章中，我们已知梯度下降的更新公式：&lt;/p&gt;
&lt;p&gt;\[&lt;br /&gt;
\theta \leftarrow \theta - \eta \nabla C&lt;br /&gt;
\]&lt;/p&gt;
&lt;p&gt;其中 \(\nabla C\) 是&lt;strong&gt;整个训练数据集&lt;/strong&gt;上的损失梯度。但计算 \(\nabla C\) 意味着要对每一个训练样本运行前向传播和反向传播，然后取平均。当数据集有数百万样本时，这是极其昂贵的。&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/gradient-descent.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>gradient-descent</category><category>AI</category></item><item><title>前向传播与反向传播</title><link>https://k4i.top/zh/posts/forward-and-backward-propagation/</link><pubDate>Mon, 16 Feb 2026 23:26:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 16 Feb 2026 23:26:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/forward-and-backward-propagation/</guid><description>&lt;h2 id="deep-neural-network"&gt;深度神经网络&lt;/h2&gt;
&lt;figure&gt;&lt;img src="https://k4i.top/images/posts/forward-backward-propagation/neural_network_example.svg"
alt="图 1： 神经网络示例" width="70%"&gt;&lt;figcaption&gt;
&lt;p&gt;&lt;span class="figure-number"&gt;图 1： &lt;/span&gt;神经网络示例&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;每个层可以用数学形式描述如下，从输入层逐层计算到最终输出层的过程称为&lt;strong&gt;前向传播（forward propagation）&lt;/strong&gt;：&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/gradient-descent.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>gradient-descent</category><category>AI</category></item><item><title>婚礼音乐</title><link>https://k4i.top/zh/posts/wedding-music/</link><pubDate>Sat, 25 Jan 2025 02:19:00 +0000</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sat, 25 Jan 2025 02:19:00 +0000</atom:modified><guid>https://k4i.top/zh/posts/wedding-music/</guid><description>&lt;h2 id="网易云歌单"&gt;网易云歌单&lt;/h2&gt;
&lt;iframe
frameborder="no"
border="0"
marginwidth="0"
marginheight="0"
width=330
height=260
src="//music.163.com/outchain/player?type=0&amp;id=13131939809&amp;height=240"&gt;
&lt;/iframe&gt;
&lt;h2 id="音乐列表"&gt;音乐列表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;歌名&lt;/th&gt;
&lt;th&gt;歌手&lt;/th&gt;
&lt;th&gt;语言&lt;/th&gt;
&lt;th&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=327736"&gt;梁山伯与茱丽叶&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;卓文萱 / 曹格&lt;/td&gt;
&lt;td&gt;中文&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1870469768"&gt;老人と海&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ヨルシカ&lt;/td&gt;
&lt;td&gt;日语&lt;/td&gt;
&lt;td&gt;欢快、乐观、斗志&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=863046037"&gt;Way Back Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;SHAUN&lt;/td&gt;
&lt;td&gt;韩语&lt;/td&gt;
&lt;td&gt;欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=3950792"&gt;As Long as You Love Me&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Backstreet Boys&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、经典&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=2081313"&gt;Swear It Again&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Westlife&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=19163659"&gt;Anywhere But Here&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Safetysuit&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1837732899"&gt;Low Key In Love&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Struts / Paris Jackson&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=2277660"&gt;I Believe (Video / Radio Mix)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bro&amp;rsquo;Sis&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=5162474"&gt;Yellow&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Coldplay&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=28256115"&gt;I Do&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;911&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=507795651"&gt;Steady Me (feat. Aaron Cole)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hollyn / Aaron Cole&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=2117024"&gt;One And Only&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Adele&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1329894143"&gt;Goldmine&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PALASTIC&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=451703096"&gt;Shape of You&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ed Sheeran&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1312528250"&gt;Honey Take My Hand&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cody Francis&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=439122515"&gt;Tidal Wave&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kiso / Rossy&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行、欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=447079449"&gt;Must Be Dreaming&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Biên&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;流行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1311826926"&gt;Stand by Me&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Camishe / Max Oazo&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;节奏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=17085365"&gt;Theme for a Dream&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cliff Richard &amp;amp; the Shadows&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、欢快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=2080139"&gt;Beautiful In White (Demo)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Shane Filan&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=4388051"&gt;Angel of Mine&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Icarus Account&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=2411634"&gt;A Thousand Years&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Christina Perri&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=17950509"&gt;Romeo&amp;rsquo;s Tune&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pajaro Sunrise&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、轻快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=486068399"&gt;All My Life&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;WILD&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=27810037"&gt;How Long Will I Love You&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ellie Goulding&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=16439857"&gt;When You Say Nothing At All&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Alison Krauss&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=5043107"&gt;Look At Me&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Alan Jackson&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=491757270"&gt;I Will Spend My Whole Life Loving You&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kina Grannis / Imaginary Future&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;舒缓、安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=480769623"&gt;Anchor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Novo Amor&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;舒缓、爱情&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=3404715"&gt;I Knew I Loved You&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Savage Garden&lt;/td&gt;
&lt;td&gt;英语&lt;/td&gt;
&lt;td&gt;舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=446512687"&gt;Loving you/Yêu anh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;park / B Double O&lt;/td&gt;
&lt;td&gt;英语、越南语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=443860"&gt;いつも何度でも&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;木村弓&lt;/td&gt;
&lt;td&gt;日语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=5264856"&gt;夜色&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;玉置浩二&lt;/td&gt;
&lt;td&gt;日语&lt;/td&gt;
&lt;td&gt;安静、舒缓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=26518682"&gt;Небо-самолеты&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Макsим&lt;/td&gt;
&lt;td&gt;俄语&lt;/td&gt;
&lt;td&gt;安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1459849658"&gt;First Love&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Jurrivh&lt;/td&gt;
&lt;td&gt;纯音乐&lt;/td&gt;
&lt;td&gt;安静&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=26237342"&gt;River Flows in You&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yiruma&lt;/td&gt;
&lt;td&gt;纯音乐&lt;/td&gt;
&lt;td&gt;钢琴曲、安静、好听&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://music.163.com/#/song?id=1455273374"&gt;风的小径&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;万能日记&lt;/td&gt;
&lt;td&gt;纯音乐&lt;/td&gt;
&lt;td&gt;舒缓、安静&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/i-do-911.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>wedding</category><category>music</category></item><item><title>Sweep Bling LP 矮轴分体键盘</title><link>https://k4i.top/zh/posts/sweep-bling-lp-%E7%9F%AE%E8%BD%B4%E5%88%86%E4%BD%93%E9%94%AE%E7%9B%98/</link><pubDate>Sat, 25 May 2024 22:01:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sat, 25 May 2024 22:01:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/sweep-bling-lp-%E7%9F%AE%E8%BD%B4%E5%88%86%E4%BD%93%E9%94%AE%E7%9B%98/</guid><description>&lt;h2 id="分体键盘介绍-如何选择分体键盘"&gt;分体键盘介绍/如何选择分体键盘&lt;/h2&gt;
&lt;h3 id="选择键盘固件"&gt;选择键盘固件&lt;/h3&gt;
&lt;p&gt;zmk官网有对常见键盘固件功能的对比: &lt;a href="https://zmk.dev/docs"&gt;zmk features&lt;/a&gt;, 我自己没有接触过除zmk的其它固件, 冲分体和蓝牙多设备我直接选择了zmk, 而且感觉zmk社区也比较活跃.&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/sweep-split-kbd.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><category>sweep</category><category>keyboard</category></item><item><title>做自己, 纯粹一点</title><link>https://k4i.top/zh/posts/%E5%81%9A%E8%87%AA%E5%B7%B1-%E7%BA%AF%E7%B2%B9%E4%B8%80%E7%82%B9/</link><pubDate>Wed, 05 Apr 2023 21:58:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Wed, 05 Apr 2023 21:58:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/%E5%81%9A%E8%87%AA%E5%B7%B1-%E7%BA%AF%E7%B2%B9%E4%B8%80%E7%82%B9/</guid><description>&lt;p&gt;发现工作快一年了, 上班时间似乎没有百分百投入, 下班时间大部分是在玩手机或者玩游戏. 整个人似乎浑浑噩噩度过每一天, 没有去收拾房间, 打扫卫生, 出门晒太阳, 学习感兴趣的知识.&lt;/p&gt;</description><dc:creator>K4i</dc:creator><category>reflection</category><category>diary</category></item><item><title>Tiling WM (i3)</title><link>https://k4i.top/zh/posts/tiling-wm--i3/</link><pubDate>Sat, 04 Dec 2021 22:36:00 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Sat, 04 Dec 2021 22:36:00 +0800</atom:modified><guid>https://k4i.top/zh/posts/tiling-wm--i3/</guid><description>&lt;h2 id="什么是窗口管理器"&gt;什么是窗口管理器&lt;/h2&gt;
&lt;p&gt;窗口管理器 (Window Manager) 就是用来管理窗口的. 主要分为两大类:&lt;/p&gt;
&lt;h3 id="stacking-wm"&gt;Stacking WM:&lt;/h3&gt;
&lt;p&gt;每个窗口都可以拖拽, 改变大小, 窗口之间可以有重叠, 主要靠鼠标控制.&lt;/p&gt;
&lt;p&gt;比如下图, Stacking WM的屏幕利用率比较低, 而且操作严重依赖鼠标, 比较慢.&lt;/p&gt;</description><dc:creator>K4i</dc:creator><media:content url="https://k4i.top//images/icons/i3wm-logo.png" medium="image"><media:title type="html">featured image</media:title></media:content><category>wm</category><category>notes</category></item><item><title>(1) Qt, VSCode and CMake</title><link>https://k4i.top/zh/posts/socksab-devlog/1-qt-vscode-and-cmake/</link><pubDate>Fri, 25 Dec 2020 13:31:42 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 25 Dec 2020 13:31:42 +0800</atom:modified><guid>https://k4i.top/zh/posts/socksab-devlog/1-qt-vscode-and-cmake/</guid><description>&lt;p&gt;用Vscode和Cmake创建一个简单的qt应用，以后可以当成qt应用的模板使用&lt;br /&gt;
模板代码放在&lt;a href="https://github.com/sky-bro/Qt-Cmake-Example"&gt;github.com/sky-bro/Qt-Cmake-Example&lt;/a&gt;&lt;/p&gt;</description><dc:creator>&lt;a href="https://sky-bro.github.io" class="theme-link"&gt;Kyle&lt;/a&gt;</dc:creator><category>map[categories:[map[image:&lt;nil&gt; libraries:[mathjax]]] series:[SocksAB DevLog]]</category></item><item><title>(0) SocksAB Intro</title><link>https://k4i.top/zh/posts/socksab-devlog/0-socksab-intro/</link><pubDate>Fri, 25 Dec 2020 13:31:30 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Fri, 25 Dec 2020 13:31:30 +0800</atom:modified><guid>https://k4i.top/zh/posts/socksab-devlog/0-socksab-intro/</guid><description>&lt;p&gt;准备用qt写一个简单的fq/代理软件，叫做SocksAB，分为服务端Socks-Bob和客户端Socks-Alice两个部分。&lt;br /&gt;
程序源代码托管在&lt;a href="https://github.com/sky-bro/SocksAB"&gt;github.com/sky-bro/SocksAB&lt;/a&gt;&lt;/p&gt;</description><dc:creator>&lt;a href="https://sky-bro.github.io" class="theme-link"&gt;Kyle&lt;/a&gt;</dc:creator><category>map[categories:[map[image:&lt;nil&gt; libraries:[mathjax]]] series:[SocksAB DevLog]]</category></item><item><title>Clusterfuzz Local Setup</title><link>https://k4i.top/zh/posts/clusterfuzz-local-setup/</link><pubDate>Mon, 18 May 2020 12:59:28 +0800</pubDate><author>sky_io@outlook.com (K4i)</author><atom:modified>Mon, 18 May 2020 12:59:28 +0800</atom:modified><guid>https://k4i.top/zh/posts/clusterfuzz-local-setup/</guid><description>&lt;p&gt;本教程展示如何搭建clusterfuzz进行本地测试，教程使用的clusterfuzz版本为v2.0.1 (推荐总是使用最新的release版本)。&lt;br /&gt;
我的clusterfuzz将搭建在ubuntu18.04 docker容器中。最后提供一个dockerfile作为参考，下面内容基本是将dockerfile中的步骤一步步展开&lt;/p&gt;</description><dc:creator>&lt;a href="https://sky-bro.github.io" class="theme-link"&gt;Kyle&lt;/a&gt;</dc:creator><category>map[series:[map[categories:[map[image:images/icons/tortoise.png libraries:[mathjax]]]]]]</category></item></channel></rss>