愉快的洛杉磯之行结束,陈一然没等到周一,而是在周末就开始了工作。
之前已经整理了ispd 2006 placement benchmark的全部资料,还有几个测试案例的netlist文件,標准单元库的lef 格式描述,以及官方给出的线长和密度约束文档。
【数据的输入格式已经了解了,lef 描述的是標准单元的物理尺寸和引脚位置,netlist 给出的是单元之间的连通关係。hpwl 半周长线长模型。每个 net 的 bounding box 的宽度加高度,就是线长的近似值。】
“你的意思是,你能直接设计解析器?”
【可以,但这只是第一步。benchmark 的格式本身不复杂,复杂的是怎么把解析出来的数据餵给 deepflow。编辑器的 ast 是一维的树形结构,placement 是二维空间加三维连通。
核心改造在於:增量更新的触发条件从文本变更变成了空间位置变更 —— 当一个 cell 的位置移动,受影响的不再是语法树上的兄弟节点,而是空间上相邻的 cell 和 netlist 上相连的 cell。
我们需要一个 adapter,它的功能是:接收 placement 引擎每次移动 cell 之后的坐標变化,转换成 deepflow 能理解的 delta 描述,然后把 deepflow 计算出的梯度反馈回 placement 引擎。】
陈一然在笔记本上开始画图,茉莉一边分析一边让他改。
陈一然扛著久违的低烧感,努力了来两天。
最终输出了一份 13 页的设计文档,包含:benchmark 解析器架构、deepflow 適配层的接口定义、placement 引擎和 gpu 训练集群之间的数据流约定。每一部分的输入输出格式、数据结构、调用顺序,全都写清楚了。
周一早上,陈一然把设计文档列印了好,发给了每个人。凯萨琳也凑热闹想要一份,被陈一然以浪费纸张为由拒绝了。
高德伟看了五分钟,然后放下文档,看著陈一然。
“老板,不愧是第一个项目就能卖两亿的人啊。”
高德伟站起来走到白板前面,他把陈一然文档里的架构图又画了一遍,画完之后退了两步,看了一会。
“这个適配层的设计是对的,把增量更新的触发条件从 ast 的树形结构改成空间 + 连通性的混合索引 —— 这是 placement 和编辑器最本质的差异。”
周天佑看到 gpu 训练集群和 placement 引擎之间的数据流约定,说自己周末刚好把三台 r710 的 cuda 环境和 mpi 调通了 —— 本来以为还要一两周才能用上,没想到架构文档直接把接口定义好了。
其他人各领了一块,张明辉和刘毅负责 benchmark 解析器,桑杰和王雪负责 lef / 標准单元库的数据加载,阿密特和林志伟开始把 ispd 的物理约束翻译成 deepflow 能处理的格式。
工作分配白板上写满了,陈一然在旁边看了一眼,觉得自己没什么事可做了。
“我明天开始就不过来了,你们自己干,有问题 msn 找我。”
高德伟看了他一眼:“老板你这就居家了?”
“我在家效率更高。”
高德伟对这话是买帐的,作为公司里资歷经验最多的人。
他在前几天其实是有点担忧的,毕竟陈一然开业第二天就带大家出去玩的,这做派虽然会让员工很开心,但是以公司进度来看实在没有什么帮助。
更可怕的是,开业那天虽然他分配了人物,实际上路线也算合理,但是陈一然完全没有给大概的时间表。
高德伟自己算过,如果正常比较流畅的话。
团队磨合 + 工具链搭建需要 1 到 2 周。才能能编译、跑通 ispd 2006 benchmark。
deepflow 適配 placement 也需要 2 到 3 个月,才能適配增量计算引擎適配 2d 空间数据。
最后第一个 benchmark 结果,就得三四月,然后还得和传统方法的初步数据做对比。
rl 训练框架跑通的时候,至少得半年以后。
然后在一年左右,公司能產出可用的商业原型,进行稳定的可比可演示的引擎。
这都是往好了想,中途隨便出点问题,就可能卡很久。没有一个详细的项目时间表,整体团队都有可能变得有点混乱。
开业那天,陈一然完全没提过这些,高德伟感觉出来了,他应该是完全没有这个概念。
想想也正常,之前陈一然只是独立开发者,对整体的项目管理可以说是完全没有经验。
高德伟本来觉得,等陈一然发现问题后,可能提议慢慢的推出一个人做项目整体的主管。
这活高德伟自己可以干,但是他不太想,他年龄大了,不想那么累。
陈一然看这样不是个勤快人,团队里现在看只有拉杰比较合適。
然而用了两天,陈一然就让高德伟看到了什么叫做天才。
他几乎是一己之力,把可视范围內的麻烦全都解决了,该设计的全都设计好了。
这种人,不上班也就不上班了。隨便在线指挥一下,就足够让项目疯狂推进了。
接下来几天,陈一然基本上每天睡到自然醒,遛完皮蛋就开始一边看剧一边在线和员工们交流问题。
有问题的不少,但大多数自己琢磨一会就解决了。真正需要他帮忙的,都是茉莉能一眼看出来的东西。
林志伟在解析 lef 文件的时候撞上了格式版本的问题,ispd 2006 的数据还是 lef 5.6 的老格式,他按 5.7 写的解析器读到 obs 段就报错。茉莉扫了一眼,知道是 obs 段的 layer 嵌套在 5.6 和 5.7 之间改了,补了个向下兼容。
张明辉那边跑大案例的时候內存炸了,他习惯性地先把整个 netlist 读到內存再建结构,bigblue4 两百万个 cell 一口气吃掉了 16g。
陈一然让他改成流式解析,边读边建图,省掉中间的完整副本。张明辉是 ea 出来的,游戏引擎的资源加载全是流式的,这活对他来说应该顺手。果然第二天就重构完了,內存砍了一半。
阿密特遇到的麻烦比较刁钻,macro cell 的固定位置约束和標准单元的密度约束在同一个区域里衝突了。
需要一个约束消解层,macro 优先,標准单元只在 macro 没占用的空间里生效。茉莉把逻辑理了一下,写了几行发过去,阿密特加了这层之后全部约束通过了,然后发过来了一堆彩虹屁。
除此之外,团队基本上没出什么大问题。可以说,在茉莉的一对一投餵下,公司的磨合非常的快,基本上一周就完成了高德伟预计半个多月才能完成的任务。
周五下午,陈一然开车去了公司。
高德伟在终端前面跑了第一个集成测试,屏幕上的 log 刷了大概三十秒,最后一行显示:ispd 2006 adaptec1 loaded and validated。
办公室里稀稀落落地鼓了几下掌。
陈一然走到白板前面。上面还留著周一画的架构图,旁边多了密密麻麻的箭头和批註,全是这一周大家往上加的。
“下周开始跑第一次 placement,adaptec1,二十万个 cell。不要求线长多好,只要全流程走通。”
林志伟靠在椅子上想了想:“第一次跑的话,我建议先用最简单的隨机初始化做 baseline。不做任何 ai 训练,就隨机放 cell 然后让 deepflow 算线长。先把数据全流程验证一遍,从解析到引擎到线长评估,確保每一步的数据都是对的。等 baseline 確认没问题了再上 rl。”
高德伟点了点头:“同意。而且这个 baseline 本身就有用。你可以同时把模擬退火也跑一遍 adaptec1,用相同的 benchmark 条件。等 rl 训练起来之后,这两个 baseline 就是对比的锚点。”
周天佑手里还拿著半卷网线说:“训练集群这边有个问题。r710 只有 cpu 没有 gpu,placement 的 rl 训练如果是纯 cpu 跑,二十万个 cell 的叠代速度会很慢。deepflow 的增量计算引擎本身可以大幅降低单次叠代的计算量,但是 rl 需要的大量並发探索还是需要 gpu 加速。”
阿密特问:“你之前不是说三台 r710 都调通了吗。”
“调通了,但 r710 是伺服器级的 xeon,没配 gpu 卡。纯 cpu 跑深度学习训练,效率大概只有 gpu 的十分之一。”
高德伟转过来看陈一然:“这周先用 cpu 跑小的,benchmark 跑通了再考虑 gpu 扩容?”
陈一然看了下茉莉的说法,回復道:“先看看 adaptec1 在纯 cpu 上的单次叠代时间。deepflow 的增量更新可能比你想的省算力。如果一晚上能跑几万次叠代,对於二十万个 cell 的初版原型来说够了,后续上大规模训练再配 gpu。”
拉杰有点无奈的说:“儘快吧,我感觉现在只能帮帮忙。”
阿密特点点头说:“下周我可以把八个 benchmark 案例的约束全部翻译完,这周只做完了 adaptec1 这一个。”
“全部八个做完要多久。”
“两周。后面几个大的比较复杂,bigblue 系列有 macro corner 的额外密度约束。”
“先集中精力把 adaptec1 跑通全流程,其他 benchmark 后面再补。”
几个人又討论了一轮,白板上又多了一堆箭头和 todo。
硅谷是这样的,尤其是初创公司,正是大家都很热情的时候,说到兴奋处,几个单身的甚至开始提议乾脆今天晚上不回家,就在在单位住了。
陈一然赶紧败退了,今天可是周五,还要回家和爸妈视频呢,这周国內的房子他们应该就能定下了。
之前已经整理了ispd 2006 placement benchmark的全部资料,还有几个测试案例的netlist文件,標准单元库的lef 格式描述,以及官方给出的线长和密度约束文档。
【数据的输入格式已经了解了,lef 描述的是標准单元的物理尺寸和引脚位置,netlist 给出的是单元之间的连通关係。hpwl 半周长线长模型。每个 net 的 bounding box 的宽度加高度,就是线长的近似值。】
“你的意思是,你能直接设计解析器?”
【可以,但这只是第一步。benchmark 的格式本身不复杂,复杂的是怎么把解析出来的数据餵给 deepflow。编辑器的 ast 是一维的树形结构,placement 是二维空间加三维连通。
核心改造在於:增量更新的触发条件从文本变更变成了空间位置变更 —— 当一个 cell 的位置移动,受影响的不再是语法树上的兄弟节点,而是空间上相邻的 cell 和 netlist 上相连的 cell。
我们需要一个 adapter,它的功能是:接收 placement 引擎每次移动 cell 之后的坐標变化,转换成 deepflow 能理解的 delta 描述,然后把 deepflow 计算出的梯度反馈回 placement 引擎。】
陈一然在笔记本上开始画图,茉莉一边分析一边让他改。
陈一然扛著久违的低烧感,努力了来两天。
最终输出了一份 13 页的设计文档,包含:benchmark 解析器架构、deepflow 適配层的接口定义、placement 引擎和 gpu 训练集群之间的数据流约定。每一部分的输入输出格式、数据结构、调用顺序,全都写清楚了。
周一早上,陈一然把设计文档列印了好,发给了每个人。凯萨琳也凑热闹想要一份,被陈一然以浪费纸张为由拒绝了。
高德伟看了五分钟,然后放下文档,看著陈一然。
“老板,不愧是第一个项目就能卖两亿的人啊。”
高德伟站起来走到白板前面,他把陈一然文档里的架构图又画了一遍,画完之后退了两步,看了一会。
“这个適配层的设计是对的,把增量更新的触发条件从 ast 的树形结构改成空间 + 连通性的混合索引 —— 这是 placement 和编辑器最本质的差异。”
周天佑看到 gpu 训练集群和 placement 引擎之间的数据流约定,说自己周末刚好把三台 r710 的 cuda 环境和 mpi 调通了 —— 本来以为还要一两周才能用上,没想到架构文档直接把接口定义好了。
其他人各领了一块,张明辉和刘毅负责 benchmark 解析器,桑杰和王雪负责 lef / 標准单元库的数据加载,阿密特和林志伟开始把 ispd 的物理约束翻译成 deepflow 能处理的格式。
工作分配白板上写满了,陈一然在旁边看了一眼,觉得自己没什么事可做了。
“我明天开始就不过来了,你们自己干,有问题 msn 找我。”
高德伟看了他一眼:“老板你这就居家了?”
“我在家效率更高。”
高德伟对这话是买帐的,作为公司里资歷经验最多的人。
他在前几天其实是有点担忧的,毕竟陈一然开业第二天就带大家出去玩的,这做派虽然会让员工很开心,但是以公司进度来看实在没有什么帮助。
更可怕的是,开业那天虽然他分配了人物,实际上路线也算合理,但是陈一然完全没有给大概的时间表。
高德伟自己算过,如果正常比较流畅的话。
团队磨合 + 工具链搭建需要 1 到 2 周。才能能编译、跑通 ispd 2006 benchmark。
deepflow 適配 placement 也需要 2 到 3 个月,才能適配增量计算引擎適配 2d 空间数据。
最后第一个 benchmark 结果,就得三四月,然后还得和传统方法的初步数据做对比。
rl 训练框架跑通的时候,至少得半年以后。
然后在一年左右,公司能產出可用的商业原型,进行稳定的可比可演示的引擎。
这都是往好了想,中途隨便出点问题,就可能卡很久。没有一个详细的项目时间表,整体团队都有可能变得有点混乱。
开业那天,陈一然完全没提过这些,高德伟感觉出来了,他应该是完全没有这个概念。
想想也正常,之前陈一然只是独立开发者,对整体的项目管理可以说是完全没有经验。
高德伟本来觉得,等陈一然发现问题后,可能提议慢慢的推出一个人做项目整体的主管。
这活高德伟自己可以干,但是他不太想,他年龄大了,不想那么累。
陈一然看这样不是个勤快人,团队里现在看只有拉杰比较合適。
然而用了两天,陈一然就让高德伟看到了什么叫做天才。
他几乎是一己之力,把可视范围內的麻烦全都解决了,该设计的全都设计好了。
这种人,不上班也就不上班了。隨便在线指挥一下,就足够让项目疯狂推进了。
接下来几天,陈一然基本上每天睡到自然醒,遛完皮蛋就开始一边看剧一边在线和员工们交流问题。
有问题的不少,但大多数自己琢磨一会就解决了。真正需要他帮忙的,都是茉莉能一眼看出来的东西。
林志伟在解析 lef 文件的时候撞上了格式版本的问题,ispd 2006 的数据还是 lef 5.6 的老格式,他按 5.7 写的解析器读到 obs 段就报错。茉莉扫了一眼,知道是 obs 段的 layer 嵌套在 5.6 和 5.7 之间改了,补了个向下兼容。
张明辉那边跑大案例的时候內存炸了,他习惯性地先把整个 netlist 读到內存再建结构,bigblue4 两百万个 cell 一口气吃掉了 16g。
陈一然让他改成流式解析,边读边建图,省掉中间的完整副本。张明辉是 ea 出来的,游戏引擎的资源加载全是流式的,这活对他来说应该顺手。果然第二天就重构完了,內存砍了一半。
阿密特遇到的麻烦比较刁钻,macro cell 的固定位置约束和標准单元的密度约束在同一个区域里衝突了。
需要一个约束消解层,macro 优先,標准单元只在 macro 没占用的空间里生效。茉莉把逻辑理了一下,写了几行发过去,阿密特加了这层之后全部约束通过了,然后发过来了一堆彩虹屁。
除此之外,团队基本上没出什么大问题。可以说,在茉莉的一对一投餵下,公司的磨合非常的快,基本上一周就完成了高德伟预计半个多月才能完成的任务。
周五下午,陈一然开车去了公司。
高德伟在终端前面跑了第一个集成测试,屏幕上的 log 刷了大概三十秒,最后一行显示:ispd 2006 adaptec1 loaded and validated。
办公室里稀稀落落地鼓了几下掌。
陈一然走到白板前面。上面还留著周一画的架构图,旁边多了密密麻麻的箭头和批註,全是这一周大家往上加的。
“下周开始跑第一次 placement,adaptec1,二十万个 cell。不要求线长多好,只要全流程走通。”
林志伟靠在椅子上想了想:“第一次跑的话,我建议先用最简单的隨机初始化做 baseline。不做任何 ai 训练,就隨机放 cell 然后让 deepflow 算线长。先把数据全流程验证一遍,从解析到引擎到线长评估,確保每一步的数据都是对的。等 baseline 確认没问题了再上 rl。”
高德伟点了点头:“同意。而且这个 baseline 本身就有用。你可以同时把模擬退火也跑一遍 adaptec1,用相同的 benchmark 条件。等 rl 训练起来之后,这两个 baseline 就是对比的锚点。”
周天佑手里还拿著半卷网线说:“训练集群这边有个问题。r710 只有 cpu 没有 gpu,placement 的 rl 训练如果是纯 cpu 跑,二十万个 cell 的叠代速度会很慢。deepflow 的增量计算引擎本身可以大幅降低单次叠代的计算量,但是 rl 需要的大量並发探索还是需要 gpu 加速。”
阿密特问:“你之前不是说三台 r710 都调通了吗。”
“调通了,但 r710 是伺服器级的 xeon,没配 gpu 卡。纯 cpu 跑深度学习训练,效率大概只有 gpu 的十分之一。”
高德伟转过来看陈一然:“这周先用 cpu 跑小的,benchmark 跑通了再考虑 gpu 扩容?”
陈一然看了下茉莉的说法,回復道:“先看看 adaptec1 在纯 cpu 上的单次叠代时间。deepflow 的增量更新可能比你想的省算力。如果一晚上能跑几万次叠代,对於二十万个 cell 的初版原型来说够了,后续上大规模训练再配 gpu。”
拉杰有点无奈的说:“儘快吧,我感觉现在只能帮帮忙。”
阿密特点点头说:“下周我可以把八个 benchmark 案例的约束全部翻译完,这周只做完了 adaptec1 这一个。”
“全部八个做完要多久。”
“两周。后面几个大的比较复杂,bigblue 系列有 macro corner 的额外密度约束。”
“先集中精力把 adaptec1 跑通全流程,其他 benchmark 后面再补。”
几个人又討论了一轮,白板上又多了一堆箭头和 todo。
硅谷是这样的,尤其是初创公司,正是大家都很热情的时候,说到兴奋处,几个单身的甚至开始提议乾脆今天晚上不回家,就在在单位住了。
陈一然赶紧败退了,今天可是周五,还要回家和爸妈视频呢,这周国內的房子他们应该就能定下了。
