才发现入职菊厂以来就再也没有写过个人博客了。最近把 AI-Infra 重新捡了起来,肝了两个周末,在 AI 的帮助下写了一篇长篇巨著《大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术》。真的是长篇巨著,将近 20 万字,所以又把它拆成了十几篇文章。
然后就有点收不住了。写完 vLLM 发现前面还有一大堆东西值得系统地梳理一遍:Python 和 C++ 在 AI-Infra 里到底用到哪些语言机制、PyTorch 从 Tensor 到 Dispatcher 到编译器是怎么串起来的、Transformer 的算量和数值怎么算、CUDA Kernel 怎么从 naive 写到 FlashAttention、NCCL / RDMA 通信、千卡训练的并行与容错、AI 平台工程、最后是怎么给 PyTorch / vLLM 提第一个 PR。整理下来变成了十个系列、近百篇文章,大概是这个博客过去十年产量的总和。
写这么多,自然就想让它们好读一点。于是顺便把博客也更新了一下——本来只是想改个目录样式,结果一路改下来,几乎把能碰的地方都碰了一遍。这篇记个流水账。
一、读起来更顺手
1. 右侧目录:可收起、可过滤
把文章详情页右边的 OUTLINE 样式优化了一下,可以展开收起来,随滚动高亮当前章节;顶部多了一个过滤框,两三万字的长文,输入几个字就能直接跳到想看的小节。


2. Markdown 对齐 GitHub 风格,支持 Mermaid 和 LaTeX
整个 Markdown 样式向 GitHub 对齐,并且支持了 Mermaid 图表和 KaTeX 数学公式。考虑到 Mermaid 生成的图可能比较大,鼠标点一下会弹出单独的图层,可以拖动、滚轮缩放、双击复位——正文里的图片也是一样,点了放大。别说,Mermaid 画出的图其实还挺好看的。

3. 文章头部多了一行”小字”
发表日期、最后更新日期、大概要读几分钟、多少字、多少人读过、多少人觉得有用——都在标题下面那一行。阅读时长是按去掉代码块之后的字数估的,还算靠谱。
4. 系列文章导航
十个系列、近百篇文章,仅仅靠”上一篇 / 下一篇”是翻不过来的。现在系列信息写在文章的 front matter 里,页面自动生成三样东西:文首的「本文是《…》系列的第 N 篇(共 X 篇)」引用块、文末的系列目录,以及把 Previous / Next 换成系列内的上一篇 / 下一篇。


二、Slides:用 Markdown 写 PPT
基于 reveal.js 实现了 SLIDES 功能,可以用 Markdown 在线写 PPT 了,样式参考了 SlideShare,个人感觉还挺好看的。有一个 Slides 独立页面做索引,也可以用 keynote 布局把一份幻灯片嵌进一篇文章里,上面是片子、下面是讲稿和评论。


三、搜索和归档
站内全文搜索把原来的 Google CSE 换成了本地索引 + 前端检索:支持标题 / 标签 / 正文匹配、命中高亮,速度快多了。索引第一次打开时下载一次,之后按构建版本缓存,不用每次重下。

Archive 新增 Go to article:实时过滤 + 键盘导航(↑ / ↓ / Enter / Esc)+ 点击跳转,三百多篇文章不用再一路往下滚。

四、悬停就能看的解释
写技术文章常碰到一个矛盾:有些名词需要解释一下,但又不想在正文里岔开去讲。以前的办法是加个链接让读者自己跳出去,现在有两种更省事的:
- 脚注:还是用标准的 Markdown 脚注语法写,但读者把鼠标放到脚注编号上,解释会就地弹出来,卡片里可以有代码、表格、公式。点编号才会真的跳到文末。
- 带
?的虚线词:一两句话能说清的名词,直接悬停显示。


站外链接会带一个小 ↗,点了在新窗口打开,站内链接不带。手机上这些都是”轻触”版本。
五、划线评论:这次最想让你试的功能
这是这轮更新里花时间最多、也最想让大家试一试的部分。
以前的评论区是文末的一个 iframe(多说、Disqus、giscus 一路换过来),读者想针对某一句话说点什么,只能在底下留言”第三节第二段那里……”。现在的做法更像微信读书或者 Code Review:用鼠标选中正文里任意一段文字,选区上方浮出一个小工具条——「评论」「复制」「搜一搜」和一个分享链接图标。

点「评论」,段落下方就地展开一个输入框,顶部引用着你选的原文。支持 Markdown,有撰写 / 预览和一排格式按钮。

发表之后,那段文字变成淡黄色,段尾多一个带数字的小标记。点标记或点高亮,就能展开这段文字下面的全部讨论——回复、投票,作者的回复带一个「作者」小徽章。同一段文字只有一个讨论串,不会各说各的。

拉到文章底部还是传统的评论区,同一个讨论串,同一套编辑器。几个顺手加的东西:
- 顶部的「有用」按钮和阅读数——觉得文章有用点一下,这是比阅读量更有信息量的反馈。
- 每条评论右侧有 ▲ 分数 ▼,赞同或反对,一人一票。
- 一篇文章被划了多处之后,评论区顶部会出现「最受关注的段落」——被划得最多、投票最高的几句话,某种意义上就是这篇文章的读者版摘要。
- 发现我写错了,发表时勾上「同时提交 Issue」,会在博客仓库开一个 Issue 并署你的名字,评论上带一个红旗徽章——这是我处理勘误的工作队列。

所有数据都存在这篇文章对应的 GitHub Discussions 里,登录用 GitHub,本站不保存任何凭据。自己发的评论可以原地编辑、删除;有人回复你,GitHub 会按你的通知设置发邮件。
六、手机上也一样
页面是响应式的:手机上侧栏挪到底部、目录收成一个按钮、代码和表格左右滑动而不是挤在一起。字体跟随系统,不下载任何网络字体,所以打开很快也不会闪一下换字体。悬停解释、划线评论、图放大,在手机上都是轻触版本。

七、Tech 和 Life 分开
博客里除了技术文章,偶尔也有几篇随笔——瑜伽、感恩节、走出象牙塔之类。以前它们混在技术文章的时间线里,基本没人看得到。现在导航栏分成 Tech 和 Life 两栏:首页只放技术文章,生活类的去 Life 页面,用各篇的题图做卡片。首页还支持置顶,把《致读者的一封信》钉在了最上面——那篇是给读者看的”说明书”,上面说的这些功能怎么用,那里写得更细。


八、看不见的部分
还有一些读者感觉不到、但让我省心不少的改动,一句话带过:
- GitHub Pages 从自带的 Jekyll 3 构建换成了 GitHub Actions + Jekyll 4.4,本地和线上终于是同一个版本;每天凌晨定时构建一次,写好未来日期的文章会自动在那天上线。
- 每次提交都跑一遍 CI:构建、用 lychee 检查全站两万多个内部链接和锚点、再用无头 Chrome 把改动的文章真的渲染一遍,看 Mermaid 有没有画出来、图片有没有 404。每周一还会检查一次外链,坏了就自动开一个 Issue。
- 文章图片全部转成 WebP(20 MB → 5.8 MB),Font Awesome 改成只含用到的图标的子集(77 KB → 20 KB),静态资源按构建版本缓存。
- 补齐了 Open Graph / Twitter Card / JSON-LD、RSS 自动发现、强制 HTTPS——分享到微信和推特时终于有正常的卡片了。
顺便说一句,这轮改动里的大部分代码是和 AI 结对写出来的:我说要什么、看效果、挑毛病,它写。写文章也是类似的分工。效率确实和以前不是一个量级——但要什么、什么是对的,还是得自己想清楚。
最后
博客地址:https://arganzheng.life/,基于 GitHub Pages 搭建,喜欢的同学可以直接 fork。
感觉还是要把博客重新捡起来,强迫自己学习和思考。与君共勉。
COMMENTS
评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。