018 · 研究原型交棒進生產程式碼的三槓桿
Higharc 研究工程師分享如何用文件、monorepo 架構與 PR 拆解三個槓桿,把機器學習研究原型交棒給軟體工程師做成正式產品代碼。
原標題:Research to Reality: Bringing Frontier ML Research to Production - Vaidas Razgaitis, Higharc
重點摘要
- 研究與工程的落差機器學習研究者熟悉最新論文,能用有創意的方式組合新概念,卻少有寫過正式產品等級 API 的經驗;軟體工程師則相反,擅長寫穩健的程式碼,但不熟悉背後的研究方法,這個落差正是交棒卡關的根源。
- 用技術設計文件對齊團隊Higharc 要求每個研究原型都附上一份「研究原型分類」文件,寫清楚領域背景、資料型別、商業目標與系統架構,讓後續接手的軟體工程師與產品經理能快速看懂脈絡。
- 獨立的機器學習 monorepo機器學習相關程式碼獨立成一個 Python monorepo,裡面是彼此解耦的 microservice,大致是一位研究者對應一個 microservice,各自維持 API、商業邏輯、資料層三層架構。
- 用 graphite 拆解大型 PR把龐大的研究原型依相依關係拆成一系列 stacked diff,讓不同領域的專家可以非同步審查,同時加快正式上線的速度。
- 三個自我檢查指標分別對應原型是否好懂、程式碼庫是否還撐得住新概念、拆解與審查流程是否順暢;卡關時通常代表研究交接或程式碼庫架構該調整了。
時間軸
時碼點下去會跳到影片的那一段。
| 時碼 | 段落 | 重點 |
|---|---|---|
| 00:00 | 開場 | 講者是 Higharc labs 團隊的資深研究工程師,團隊把電腦視覺、推理 agent、自訂 transformer 與 diffusion model 這些前沿技術應用在住宅設計上。 |
| 01:18 | 交棒的落差 | 把前沿研究做成量產,需要軟體、平台、基礎架構工程師接手,但他們不熟悉背後的研究方法;研究者則相反,很少寫過正式產品等級的 API。 |
| 02:32 | 兩個效率槓桿 | 先點出兩個能加速研究落地的槓桿:研究原型的可讀性,以及程式碼庫要怎麼架構才能快速收下新原型。 |
| 03:32 | 技術文件的由來 | 引用 The Pragmatic Engineer 談軟體工程團隊擴張時該寫技術設計文件對齊共識,Higharc 也要求每個研究原型附上類似文件。 |
| 04:40 | RPT 文件內容 | 這份「研究原型分類」文件要寫清楚領域背景、資料表示方式、商業目標、型別安全的介面約定、資料持久層、整體系統架構,以及最後打算怎麼合併與拆解。 |
| 06:48 | 獨立 ML monorepo | 機器學習程式碼獨立成一個 Python monorepo,是一群彼此解耦的 microservice,大致一位研究者對應一個 microservice。 |
| 07:58 | microservice 三層架構 | 每個 microservice 都採 API 層、商業邏輯層、資料層的簡單分層,並附上乾淨的規格文件,方便 agent 協助研究者導覽程式庫。 |
| 09:56 | CI/CD 與工具層 | monorepo 底下有自動化建置部署、測試、linting 與型別檢查,也用 Jupyter notebook 搭配 Modal 的 GPU 算力跑機器學習實驗。 |
| 10:55 | 拆解是設計問題 | 把拆解大型研究原型當成設計問題處理,先畫出相依關係圖,再用 graphite 拆成一串 stacked diff,方便不同領域專家非同步審查。 |
| 12:31 | 三個檢查指標 | 重新看研究可讀性、程式碼庫結構、拆解與審查這三個槓桿,並為每一個提出可以自我檢查的診斷問題。 |
| 13:12 | 程式碼庫跟不跟得上 | 問程式碼庫是否還有清楚的模板與框架可以依循,還是已經因為不斷塞入新研究概念,被逼出一堆舊的抽象包袱。 |
| 14:12 | 收尾 | 最後一個檢查點看拆解階段:時程能不能穩定估算、該找哪些領域專家審查;卡關通常代表交接協調或程式碼庫架構出了問題。 |
值得記的話
名詞與人物
| Higharc | 訂製住宅設計新創公司,講者任職於其中的 labs 研究團隊,這場談的正是團隊如何把研究成果做成量產系統。 |
|---|---|
| Research Prototype Taxonomy(RPT) | Higharc 要求每個研究原型都要附上的技術設計文件,寫清楚領域背景、資料型別與系統架構,作為交棒依據。 |
| monorepo | Higharc 用來集中放所有機器學習程式碼的單一版本庫,裡面是彼此解耦、各自獨立部署的 microservice。 |
| graphite | 程式碼審查工具,這場用它把龐大的研究原型拆成一串 stacked diff,讓不同領域專家可以非同步審查。 |
| The Pragmatic Engineer | 講者引用的部落格文章,談軟體工程團隊隨規模擴大而需要技術設計文件來對齊共識。 |
延伸
- 提到撰寫 RPT 文件時用的是 Notion,但也說任何文字工具都做得到,沒有進一步展開範本內容。
- 提到部分機器學習研究涉及頂級機密主題,沒辦法在這場公開分享細節。
- 提到用 Jupyter notebook 搭配 Modal 的 GPU 算力跑機器學習實驗,沒有進一步說明實驗內容。