這一年經歷了很多。(貌似這幾年每年都經歷了很多。。。)
新方向的開始
隨著年齡的增長,發現純數學的東西已經離我過遠了。專心做工程和演算法的結合。
入職的前半年,開發發現自己的各項能力都很難滿足一個優秀的演算法工程師的要求,主要在做專案經理和需求相關的工作,程式碼改的並不多,也在不斷懷疑這是不是我要走的路。
2020 年開始,演算法方面和現場的溝通不再是最重要的事情,領導覺得我薪水高要做更技術的方向,開始了新的折騰。
新的方向
我 2015-2018 年做了 3 年的移動端開發,後面也接觸過演算法到移動端的移植。
因此這時候的方向就是把模型轉化到異構計算的框架上去。
當時華為還沒有被美國徹底制裁,同時由於中美關係的緊張化,選了華為的昇騰框架做移植。
填坑的開始
這部分工作主要是從 2 月做到 6 月,完成了一個運算元的轉化框架,將 ONNX 的模型轉化成昇騰支援的 TF 模型,適配我們基本所有的模型。
做了一個工程的 DEMO,可以簡單收發識別圖片資訊。
對於深度學習的網路來說,每個網路都是由多個計算節點拼接而成的。
通常情況下,神經網路的圖都是有向無環圖,圖中的節點是運算元。
從運算元到硬體能識別的指令需要編譯器(華為基於 TVM 的實現,不開源),需要圖執行、內部資源的排程程式(不開源)。
因此對於第三方廠商能做的就是把模型轉化成華為能認識的模型。
但是對於任何程式,都會有普適性和專用性的平衡
在異構計算領域,華為並沒有英偉達、AMD、INTEL(INTEL 的也很難用) 的積累,所以適配過程中難點重重
矛盾的積累
當外行領導一週提一次不切實際的目標,然後你又知道你很菜,很多東西都不知道的時候,壓力就會非常非常的大。
同時你所有的勞動成果都成了別人的 PPT,而你只是沒有名字寫程式碼的。呵呵。。。
最後你發現靠你自己,一個人獨立的寫著程式碼,坐等替啥也不幹的人背鍋。出去大機率也只能找同樣坑的職位。
開始每週日的晚上都睡不著,埋怨自己為什麼年輕的時候沒有勇於跳出測試,選了安逸。導致能力不匹配年齡,在這每天都是煎熬。
更新的折騰
領導說了,我們異構計算要牛逼,要懂彙編,要能自己定製。(其實他啥也不懂,我一般說到第四句話,他就聽不懂了。)
我前面跟領導說公司沒錢,你專案不能這麼搞,一直強調效能但是不落地是不行的。他說專案落地那是他的事情,你就寫程式碼把模型加速好了。(吵了 2 個月,實在是無力改變了,那我就自己玩自己的吧。)
PS:這也是我現在努力的方向,國內奇缺,難度極大,國內只有 TOP 的 3-5 個實驗室做類似的方向。可以瞭解一下什麼是 CS 的三大浪漫,這三大浪漫都要會。
在異構計算的核心是什麼,是速度!
在 CPU 類的計算優先的是邏輯,速度是最後一英里的事情。而對異構計算來說這是基礎。
靠什麼來加速?靠硬體設計更快的指令加上編譯器最佳化加上更好的作業系統排程。
同時由於落地的要求,普適性要求也越來越高,普適性是更難的,英偉達花了 10 年的時間做 CUDA。
無知的自己從 5 月份開始走讀神經網路編譯器 TVM 的程式碼,開始越來越發現自己的基礎極其薄弱。
從資料結構到作業系統、計算機組成原理、編譯原理。理解下面,才能再到之上的平行計算,編譯器。
面對焦慮
坦然面對自己菜和遲早被裁的命運。開始依靠吃藥主動干預心理狀態。
依靠上班摸魚,上班學習和下班學習的方式提升自己的能力。
2020 的結局
12-28 是協商的離職時間。從 11 月開始下了決心,離職調整心態用最愚蠢的方法來學習。
做題 + 學習課程 + 走讀程式碼 + 寫程式碼走讀總結。
開局就不太順利:最近在打 LEETCODE 的周賽,基本只能做對 2 題,偶爾 3 題;太差了,哎。。。
推薦大家看一下 CS61B(正在刷),這是 JAVA 版的,如果用 C++ 可以結合 STL 標準庫來看。