https://x.com/i/article/2119890649227120640
用 Seedream 5.5 画 LLM 原理图:同一张图连续改 30 轮
画技术原理图,很少一次就画成。看到第一版,作者往往会冒出新的想法。
一张原理图要跟着作者的想法改很多轮。图像模型能不能一轮接一轮稳定地改下去,决定了它能不能用在技术写作里。
这次我用豆包里的 Seedream 5.5,给 LLM 推理和后训练画了三张原理图。第一张定稿之后,我又在同一个对话里对它连续提了 30 轮修改,每轮改一两处。
30 轮里,单轮改动的面积最大只占画面的 1.02%,没有提到的文字一直留在原位。下面是改到第 30 轮的样子:
它画的是 Qwen3-0.6B 回答一个问题的完整过程。问 Is OpenAI open?,模型回答 Partly. Some weights are open.,共 9 个 token:
- Request:问题套进 chat template,切成 13 个 token ID;
- Prefill:模型一次读完 13 个位置,写入 KV cache,给词表里 151,936 个条目各打一个分;
- Decode:采样选出一个 token,接回序列再运行一次,每次只算 1 个新位置。
图里有三栏、11 个模块框、九个 token 方块、一段 chat template 原文、一组概率条和一个颜色图例,中英文混排。
下面先讲这张图在同一个对话里怎样连续改 30 轮,再讲三张图从首版到定稿用到的几种修改方式。
同一个对话,连续改 30 轮
起点是 token 图的定稿。我把它上传到豆包的新对话,打开 图像生成,模型选 Seedream 5.5,比例选 16:9,然后一轮一轮往下改。
每一轮的说明都以“继续编辑最新这张图”开头,写清楚改哪一处,最后加一句“其余所有内容完全不变”。
30 轮修改按我想到的先后排列,大致有四类:
- 补信息:Sampling 参数改成 Qwen3 非思考模式的推荐值 temperature 0.7、top-p 0.8;decode 的 KV cache 标上 13 → 21;Embedding 和 LM head 之间标出 tied weights;prefill 的缓存交给 decode,加一条 hand over 虚线;
- 改文字:三栏标题加上 ① ② ③,底部说明改成中文,两个副标题补上 compute-bound 和 memory-bound;
- 改颜色和样式:第一个 token Part 描成橙色,模板里的 user 标蓝、assistant 标绿,右下角加颜色图例;
- 改主意:底部标题改成“一句回答的诞生”,下一轮又改了回来。
为了看清每一轮动了多少,我把相邻两版逐像素比较,统计变化的像素占整张图的比例:
单轮改动面积最大 1.02%,中位数 0.20%。
面积较大的几轮是标题、底部说明、token 行这类整行重写的修改;加一条线、改一个词的轮次大多在 0.4% 以下。
把 30 轮的改动位置叠在一起看:
亮起的区域都是我提过修改的地方。
左栏的 Tokenizer、13 token IDs 和下面一行 token ID 数字,中间栏的 logits 和 LM head,右栏的 Detokenize 一行,30 轮里文字和位置都没有变。
30 轮修改,改动集中在作者指定的位置。改到第 30 版,起点里没有提到的内容都还在原位。
一句话统一连线。 改到第 15 版,我注意到 prefill 指向 Sampling 的 first token 箭头有一点斜。原理图的连线最好横平竖直,第 16 轮我写了这样一段说明:
箭头改成了一条水平线,高度对齐 Sampling 框的中部。
从这一轮起,图里的连线都是水平或竖直的。后面加 hand over 虚线时,我在说明里也写上“只用水平线和竖直线”,画出来是一条直角折线。
一处细节,连着改几轮。 有的想法要两三轮才到位。Qwen3-0.6B 的 Embedding 和 LM head 共用一套权重,我想在两个框之间加一条虚线,标上 tied weights。
竖排的小字拼了几次没拼对,我改成横排,一次写对;之后又调了虚线的颜色和样式。中间栏在这几轮里的样子:
这几轮里,旁边的 LM head、Transformer、KV cache 和 Embedding 框,文字和位置都没有变。
偶尔一轮会顺带改到相邻的连线,比如第 17 轮把旁边的蓝色箭头也改成了虚线,下一轮一句话就改了回来。
第 25 到 27 轮加 hand over 虚线时也是这样,连线在两个 KV cache 之间调了三轮,其余模块原样保留。
同一处细节可以连着改几轮,直到满意,其余模块一直原样保留。
首版:按规格画出整体
回到三张图的首版。在豆包的输入框里打开 图像生成,模型选 Seedream 5.5,比例选 16:9。风格一栏没有选预设,风格全部写进提示词。
我找了一张研究者手绘的架构图做参考,把它的特征写成具体的要求:
- 近黑纯色底,Excalidraw 风格的手写字,白色或浅灰;
- 圆角矩形只描边,不要填充、渐变、阴影和发光;
- 描边只用蓝、绿、紫、琥珀橙四种颜色;
- 每个阶段用一个灰色虚线大框圈起来;
- 不要图标、人物、机器人和 3D 效果。
后面逐个写出每个框里的文字、每根箭头的起点和终点,数字和公式原样写进去。
三张图的首版都按这些要求画出了整体:四种描边色,框只描边,阶段用虚线框分开。三张图放在一起,风格一致。
文字也大部分一次写对:<|im_start|>、151,936 × 1,024、π_θ(y|x) 这样的符号和数字都清楚,手写字体在小字号下也能读。
同一个主题,用风格预设和用提示词写风格,放在一起比较:
风格写成具体的条款,Seedream 5.5 就能按条款画;后面每一轮修改,这套风格也一直保留着。
用文字说明改结构
首版的布局已经接近我想要的样子。看着它,我想改两处结构:
1. decode 的回路画得更明确:采样之后把 token 接回去,再运行一次;运行的结果以 logits 的形式回到采样。
1. 三条概率条的长度对应 57%、29%、14%。
第一轮修改说明里写了这两处,下一版都改好了,三栏布局和其他模块保持原样:
接着我又想到,九个 token 下面如果标上 1 到 9,读者能直接数出模型运行了 9 次。这一条也用一句文字加上了。
结构上的修改,用一段文字说清楚改哪里、保留什么。30 轮长链里的大部分修改,用的也是这种方式。
用标记改图改细节
有些修改落在很小的地方,比如第几个方块里多了一个字符,或者某一行多了一根竖线,用文字很难说清是哪一处。
这时用豆包看图界面里的 标记改图:在大图上框出一块区域,给这个框写一句说明。一次可以框几处,一起发送。
我框出 token 行,说明第 3 个和第 8 个方块里只写一个句号。下一版的 token 行就是九个独立的方块:
模板第一行的写法、三个阶段的虚线分区,也是用标记改图逐处调整的。
最后一处是一个单词的拼写。我把较满意的一版上传到新对话,只说明要改这一个词,其余保持不变,得到了定稿,也就是 30 轮长链的起点。
下图是定稿路径上的 6 版,每版上方标了这一轮的修改方式:
修改可以用一句话说明,也可以直接在图上框出来。两种方式交替使用,大到结构、小到一个字符,都能改到。
用擦除删线条
第二张图讲 KV cache 在什么时候变长:
- prompt 有 4 个位置。prefill 结束、选出 y1 时,缓存里有 4 个位置;
- y1 在下一次运行中被送回模型,它的 key 和 value 写进缓存,缓存变成 5 个位置,这次运行再预测 y2。
首版里有几根我没有要求的连线,其中两根从 KV cache 指向 y1 和 y2,容易让人以为 token 是从缓存里读出来的。因果遮罩的小方格我也决定不画了,这张图只讲缓存数量。
这时用的是 擦除:在图上涂抹要删除的部分,涂过的区域换成干净的背景。
一次擦除去掉了遮罩方格和三根连线,周围的模块和文字都在原位。
我再把这一版上传到新对话,用一句话清掉一小块残留的痕迹,又改了一个单词,这张图就定稿了。
要删的东西直接涂掉,涂过的区域换成干净的背景,旁边的模块不用重画。
公式的修改
第三张图比较同一份偏好数据的两种用法:
- 左边训练一个 reward model,给两个回答分别打分;
- 右边是 DPO,比较可训练的 policy 和冻结的参考模型给同一对回答的概率,只更新 policy。
首版的两栏排版完整,三行 DPO 公式的下标和希腊字母排得整齐。核对时我发现两处要改:
- 第一行分数线的范围:β 和 log 应写在分数线左边,分数只包含两个概率;
- 参考模型是冻结的,图上不应有箭头指向它。
我用文字说明了这两处。第二版里,公式改成了 s(y) = β · log[π_θ(y|x) / π_ref(y|x)],排版和其余两行保持一致;第三版去掉了指向参考模型的箭头头部:
这张图 3 版定稿。
公式里一条分数线的范围,也能用一句文字说明改对。
我的修改节奏
三张图加一条 30 轮的长链改下来,我总结了几条做法:
1. 每轮集中提一两处修改,并说明哪些保持不变。 长链里每轮说明都用同样的开头和结尾,修改范围越清楚,结果越接近预期。
1. 按修改类型选方式。 结构、连线和文字用文字说明;具体到某个字符、某个方块,用标记改图;要删掉的线条和小图,用擦除。
1. 擦除之后要接着改,先把擦除结果上传到新对话。 在长链对话里,我看到擦除后的下一轮文字修改是从上一张文字修改的结果接着改的。上传之后,修改的起点很明确。
1. 每一轮下载原图放大看。 原理图上的数字、符号和箭头都要和原文对得上。
1. 保留每一版。 想法变了,可以回到任何一版继续改。
小结
- 三张 LLM 原理图从首版到定稿一共生成 20 版:token 图 11 版,prefill 与 decode 6 版,reward model 与 DPO 3 版。
- token 图定稿后,又在同一个对话里连续改了 30 轮。单轮改动面积最大 1.02%、中位数 0.20%,没有提到的内容一直在原位。
- 补参数、加连线、改颜色、改标题再改回来,作者临时冒出的想法都能一轮一轮加进去。
- 文字说明、标记改图、擦除和上传图片编辑,覆盖了从结构调整到单个字符的各种修改。
实测范围: 豆包 Seedream 5.5 的图像生成、标记改图、擦除和上传图片编辑。
30 轮长链在一个对话里完成,其中 28 轮用文字说明,2 轮用擦除;对应的修改改用文字说明完成。
