第58章 瘋狂推進度
愉快的洛杉磯之行結束,陳一然沒等到周一,而是在周末就開始了工作。
之前已經整理了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。
矽谷是這樣的,尤其是初創公司,正是大家都很熱情的時候,說到興奮處,幾個單身的甚至開始提議乾脆今天晚上不回家,就在在單位住了。
陳一然趕緊敗退了,今天可是周五,還要回家和爸媽視頻呢,這周國內的房子他們應該就能定下了。