Skip to content

织江山

宣德年间,皇帝下了一道旨意:要南京织造局织一幅巨锦,名曰《万里江山图》。

这幅锦不是寻常物件。长四十丈,宽两丈,上面要织出大明万里疆域——山川河流、城池关隘、舟车牛马、市井人烟,一寸都不能少。织成之后悬于奉天殿,供天下人观瞻。

旨意到了织造局,总办大人犯了难。这活儿谁来做?


他先想到的是城里的苏绣名家,黄娘子。

黄娘子一手苏绣,天下无双。她绣一朵牡丹,花瓣的光泽、叶脉的走势、露珠将落未落的那一点灵气,都能在针线之间纤毫毕现。满城绣娘,没人能及她一根手指头。

总办把活儿说了,问黄娘子能不能接。

黄娘子看了图样,沉吟半晌,说:"这活儿我做得了。但大人您得等。"

"等多久?"

黄娘子算了算:"四十丈长的锦面,我一天绣一寸,从头绣到尾,大约要四十年。我今年已经三十了,怕是绣不到头。"

总办苦笑:"陛下要明年端午之前挂上奉天殿。"

黄娘子摇头:"我这双手,一次只走一针,一针只穿一色。 您让我同时走两针,做不到。手艺就是这个手艺,快不了。"


总办又去了织造局的大作坊。

大作坊跟黄娘子的绣房完全是两个世界。黄娘子的绣房里,一架绣绷、一盒丝线、一双手。大作坊里呢?一千架织机,排成一片,每架织机前坐着一个织工。

这些织工的手艺比黄娘子差远了——单拎出来一个,织出来的花样粗朴得很,远不如黄娘子精细。可大作坊的路子不同:它不让一个人织整幅锦,而是把四十丈长的画面分成一千条竖条,一千架织机同时开工,每架只织自己那一条。

总办问作坊管事老周:"你们织这幅锦要多久?"

老周说:"黄娘子一个人织要四十年。我这一千架织机同时动,四十年的活儿,压到半个月就够了。"

总办大喜,可老周抬手拦住他:"大人先别高兴。难处不在织,在接。"


难处出在条与条的接缝上。

一千条竖条分头织,织完了要拼成一幅完整的画面。可织锦不是拼布头——这一条上的山脊线要和隔壁那一条上的山脊线对得上,这一条里的河水流到了右边缘,隔壁那一条的左边缘就得恰好接住。颜色要渐变过去,经纬要对齐,不能有一丝错位,否则拼起来一眼就看出断茬。

要做到这一点,相邻的织机之间就得不停地对活儿:"我这边的山脊线到了第几根经线?""你那条河用的是哪个色号的蓝?""我这一段织快了,你慢一点,等我对齐再往下走。"

一千架织机,相邻的两两都要对话。满作坊全是传话的学徒跑来跑去,光传话的功夫,比织布本身还费时。

老周早有准备。他在作坊中央架了一条长长的丝线槽——每架织机把自己边缘的色样往槽里一挂,隔壁的织机需要对色的时候,伸手从槽里取就是了。丝线槽修得越宽,能同时挂的色样就越多,对活儿的速度就越快。

"这条丝线槽,"老周对总办说,"才是我这作坊里最值钱的东西。 织机可以加,织工可以招,但丝线槽的宽度就这么大。槽堵了,加再多织机也是白搭——一千个人坐在那儿等对色,一尺锦也织不出来。"


总办听明白了,可还有一桩更大的难处。

四十丈的巨锦,不是一间作坊装得下的。总办把活儿分给了四间作坊——东坊织山峦,西坊织江河,南坊织城池,北坊织人烟。四间坊各织一段,最后拼成全图。

可四间坊之间也要对活儿。东坊的山脚要接上西坊的水岸,南坊的城墙要对上北坊的人流。这种坊与坊之间的对活儿,比一间坊里织机和织机之间对活儿还麻烦——织机之间好歹在一个屋檐下,伸手就够着丝线槽;坊和坊之间隔了几条街,对色样全靠跑腿的小厮来回送。

总办派人在四间坊之间修了专用的甬道,安排快马传递色样。甬道修得宽、快马跑得勤,四间坊对活儿的速度就快;甬道窄了、快马少了,四间坊就只能干等,各自的一千架织机全闲着。

总办后来对人说:"织这幅江山图,快不快,不取决于哪个织工手最巧,而取决于三样东西:一间坊里有多少织机能同时开,坊里丝线槽有多宽,坊和坊之间的甬道有多快。 三样东西,短了任何一样,其他两样再好也枉然。"


巨锦织了大半年,终于在端午前夕完工。挂上奉天殿那天,满朝文武仰头看去,四十丈的江山气象万千,叹为观止。

有人问总办:"这幅锦到底是谁织的?"

总办说:"黄娘子一个人织不了这幅锦——她手艺再好,一辈子也织不完。可没有黄娘子这样的手艺人在背后定下针法和配色的规矩,一千架织机织出来的就是一堆乱麻。这幅锦是黄娘子的手艺、大作坊的人手、和我修的那几条甬道,三样东西合在一起织出来的。"


几年之后,江南又出了一桩新鲜事。

杭州城外开了一家小作坊,东家姓乔。乔家的作坊规模不大,只有几十架织机,手艺也还过得去。可它有一桩旁人没有的好处——每架织机的旁边就放着一筐丝线,随用随取。

别的作坊怎么干的呢?丝线统一存在公共的丝库里,织工要用什么颜色,得跑到丝库去取,取了再跑回来。一千架织机同时要丝线,丝库门口挤成一团,光排队就要半天。

乔家不这样。它把丝库拆了,直接把丝线分到每架织机旁边。织工伸手就够着,省去了来回跑的功夫。

有人慕名来看了,问乔家东家:"你们能不能也织那样的万里江山图?"

乔家东家摇头:"织不了。那幅巨锦一条竖条要用的丝线,比我一架织机旁边那一小筐多几十倍。筐里的丝线不够,还是得去别处取,一去取,我们的便利就没了。再说,我们满打满算几十架织机,人家上千架,绝对快慢差着一个数量级。"

他顿了顿,又说:"不过,若不是织那等旷世巨作,只是织几幅中堂挂锦、屏风围面这等中等活计,我们倒有一桩独到的好处——别家开一千架织机的活儿,我们几十架就够了,因为省下来的跑腿功夫实实在在地变成了织布的功夫。 况且我们的织机和丝筐挨得近,整间作坊一个屋檐就罩住了,不用修甬道、养快马,开销小得多。小本买卖做中等活计,找我们比找大作坊划算。"


黄娘子一次只走一针,一针只穿一色——这是 CPU 的架构哲学:少量核心,每个核心极其复杂(分支预测、乱序执行、深层缓存),目标是把单条指令序列跑得尽可能快。但大模型训练的核心运算是矩阵乘法,本质上是对海量数据执行相同的简单操作,这不是 CPU 的长项。

大作坊的一千架织机同时开工,这就是 GPU。NVIDIA H100 有数千个 CUDA 核心和数百个 Tensor Core,单个核心远弱于 CPU,但能同时做大规模并行运算。矩阵乘法 C=A×B 可以完美拆分成数千个独立的向量点积并行完成,所以同样的运算 GPU 比 CPU 快几十到几百倍。

丝线槽是显存带宽(Memory Bandwidth)。H100 的 HBM3 带宽 3.35 TB/s,典型 CPU 内存带宽只有几十到一百多 GB/s。Transformer 训练每一步都要在显存和计算单元之间来回搬运权重矩阵和激活值,带宽不够,算力再强也是空转。业界用 MFU(Model FLOPs Utilization)衡量实际利用率,很大程度上受限于这条"丝线槽"。

坊与坊之间的甬道是分布式训练的互联带宽(Interconnect Bandwidth)。训练 GPT-4 级别的模型需要上万张 GPU 分布在多台机器上,频繁同步梯度或传递激活值。NVLink(机内 900 GB/s)和 InfiniBand(机间 400-800 Gb/s)就是那几条甬道,通信开销往往占总时间的 30%-50%。

NVIDIA 股价大涨的原因也在这里——它垄断的不只是芯片,而是从 CUDA 编程框架到 Tensor Core 到 NVLink 到 cuDNN/NCCL 的整条垂直生态。竞争对手追赶的不是一块芯片,是一整套体系。总办说的"三样东西缺一不可",正是这道护城河的本质。

乔家作坊每架织机旁边放着一筐丝线——这是 Apple M 系列的统一内存架构(UMA)。CPU、GPU、Neural Engine 和内存集成在同一块硅片上,共享物理内存,省去了搬运开销。但 UMA 的优势有边界:M4 Max 统一内存带宽约 546 GB/s,远低于 H100 的 3.35 TB/s,GPU 核心也少得多。训练大模型时,绝对算力和带宽的差距让"省搬运"的优势可以忽略不计。

不过对于推理和中小规模微调,M 系列确实有独到之处。UMA 让它能把 70B 参数的模型直接加载进统一内存运行,不像 NVIDIA 消费级 GPU 受限于 8-24GB 显存。MLX 和 llama.cpp 在 M 系列 Mac 上跑中等规模模型体验出奇地好——绝对速度不如数据中心 GPU,但性价比和能效比极高。