詳解Modular:LLVM之父如何打造未來AI引擎語言?

本文結構

1.什麼是編譯器?

2.關於LLVM之父Chris Lattner

  • 什麼是XLA和MLIR

  • LLVM是什麼?

  • 什麼是Clang

  • Clang和LLVM的關係

3.關於Modular

  • Modular——人工智能引擎

  • 關於谷歌的TPU

  • 關於深度學習和可編程性

  • 實際構建引擎的過程中存在有哪些技術挑戰?

4.關於創業,和工程團隊建設、AI的未來

一、什麼是編譯器?

編譯器(Compiler),是一種將高級編程語言翻譯成計算機可執行代碼的軟件工具,編譯器將程序員編寫的源代碼轉換成計算機可以理解和執行的二進制指令,這些指令被打包成可執行文件或庫,以便在計算機上運行程序。

編譯器的主要工作流程是源代碼(source code)→預處理器(preprocessor)→編譯器(compiler)→目標代碼(object code)→鏈接器(Linker)→可執行程序(executables)

再舉個形象的例子:

老師:小朋友們,今天我們學習加法。

bla bla bla ……

小朋友們:老師,我們學會了。

老師:現在你們就是能讀懂1+1=?的編譯器了

二、LLVM之父Chris Lattner

在講Modular之前,我們先講講Chris Lattner的經歷,他1978年出生在美國加利福尼亞州,在舊金山灣區長大,很年輕的時候就開始編程,之後他在UC Berkeley獲得計算機科學學士學位,並在斯坦福大學(Stanford University)攻讀博士學位,方向主要是編譯器優化和自動並行化。

Chris Lattner在讀博士學位期間主導開發了LLVM,因為LLVM,獲得了2012 年ACM 軟件系統獎(ACM Software System Award)。之後,Lattne被蘋果聘用,在蘋果公司負責了許多重要項目,包括Clang編譯器前端、Swift(取代Objective-C 的語言)編程語言的設計和開發,以及Xcode開發環境的改進。 Swift語言因其簡潔性和性能而受到廣泛歡迎,並被開發者用於iOS、macOS和其他蘋果平台的應用程序開發。

離開蘋果公司後,Chris Lattner曾在特斯拉(Tesla)和谷歌(Google)等公司工作,並繼續在編程語言和編譯器技術領域發表研究論文和參與開源項目, 在谷歌負責領導Tensorflow 基礎架構團隊,創建了XLA和MLIR。

這裡我們解釋一下什麼是XLA和MLIR:

XLA(Accelerated Linear Algebra:加速線性代數)是一種針對特定領域的線性代數編譯器,能夠加快TensorFlow 模型的運行速度,而且可能完全不需要更改源代碼。它可以提高運行速度並改進內存用量。

MLIR(Multi-Level Intermediate Representation:多級中間表示)是一種編譯器框架,它的設計優化了編譯器,基本把編譯器設計中的通用部分全部包攬,極大地方便了編譯器的開發人員。

還有更重要的,LLVM是個啥? (以下摘自簡書,原文見參考鏈接)

可以把LLVM理解為模塊化、可重用的編譯器以及工具鏈技術的集合。 LLVM(其實是Low Level Virtue Machine的全稱,但是它從來沒被用做虛擬機)所以後面LLVM也不是首字母縮略詞; 它是項目的全名。

然後我們繼續,傳統編譯器架構長下面這樣:

拆開來看的話,包括:

  • Frontend:前端(詞法分析、語法分析、語義分析、生成中間代碼)

  • Optimizer:優化器(中間代碼優化)

  • Backend:後端(生成機器碼)

而LLVM架構長這樣

準確地形容的話,LLVM在編譯器這塊,進行了很多創新,比如說:

  • 不同的前端后端使用統一的中間代碼LLVM Intermediate Representation (LLVM IR)

  • 如果需要支持一種新的編程語言,那麼只需要實現一個新的前端

  • 如果需要支持一種新的硬件設備,那麼只需要實現一個新的後端

  • 優化階段是一個通用的階段,它針對的是統一的LLVM IR,不論是支持新的編程語言,還是支持新的硬件設備,都不需要對優化階段做修改

  • 相比之下,GCC的前端和後端沒分得太開,前端后端耦合在了一起。所以GCC為了支持一門新的語言,或者為了支持一個新的目標平台,就變得特別困難

  • LLVM現在被作為實現各種靜態和運行時編譯語言的通用基礎結構(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

什麼是Clang?

LLVM項目的一個子項目,基於LLVM架構的C/C++/Objective-C編譯器前端。相比於GCC,Clang具有如下優點

  • 編譯速度快:在某些平台上,Clang的編譯速度顯著的快過GCC(Debug模式下編譯OC速度比GGC快3倍)

  • 佔用內存小:Clang生成的AST所佔用的內存是GCC的五分之一左右

  • 模塊化設計:Clang採用基於庫的模塊化設計,易於IDE 集成及其他用途的重用

  • 診斷信息可讀性強:在編譯過程中,Clang 創建並保留了大量詳細的元數據(metadata),有利於調試和錯誤報告

  • 設計清晰簡單,容易理解,易於擴展增強

Clang與LLVM關係

LLVM整體架構,前端用的是clang,廣義的LLVM是指整個LLVM架構,一般狹義的LLVM指的是LLVM後端(包含代碼優化和目標代碼生成)。

源代碼(c/c++)經過clang–> 中間代碼(經過一系列的優化,優化用的是Pass) –> 機器碼

參考資料:簡書-Aug 12, 2018-深入淺出讓你理解什麼是LLVM

三、關於Modular

Modular——人工智能引擎

  • Chris Lattner對編譯器和創業做Modular的思考有哪些?

Chris Lattner:”我創建Modular,不是拿著錘子找釘子,也不是為創新而創新,目前對OpenAI 這樣的公司來說,少數員工需要花費大量時間手動編寫CUDA 內核。但是,針對人工智能編譯器的優化,可以用編譯器提高軟件協作,擴大擁有不同技能和知識的人員的能力”

“編譯器的最終形態,是希望能讓用戶不需要對硬件有太多了解,可以用非常簡單的彙編代碼來完成任何和解決問題,編譯器的真正作用是,能用更高的抽象級別來進行表達。”

“英偉達推出的FasterTransformer,能夠帶來巨大性能提升,因此,很多大模型公司和開發者都在使用FasterTransformer,但是,如果想在Transformer 領域進行創新,就會受到FasterTransformer 的限制。”

  • 也就是說,編譯器的作用,在於它的通用化,如何理解這裡的通用化?

Chris Lattner:如果想要獲得與FasterTransformer 相同或更好的結果,但使用的是其他通用架構(這裡指非Transformer架構),那麼通過編譯器,就能獲得兩全其美的結果,可以在研究的同時獲得同樣優秀的性能,也就是說,在編譯器層面實現優化,可以相當於一個”AI引擎”,並且在未來協助LLM架構的轉變。

  • 目前Mojo很火,它和Python生態兼容,但Modular 的目標,是建立一個統一的人工智能引擎。那麼,站在你的角度,當前在人工智能研發領域,還有哪些問題需要解決?

Chris Lattner:如果回到2015、2016、2017 年那段時間,人工智能的迅速發展的火熱階段,而那個時代的技術,主要是由TensorFlow 和PyTorch 統領,PyTorch 比TensorFlow出現稍晚些,但它們在某些方面都是類似的設計。但是,構建和設計TensorFlow 和PyTorch 系統的人,主要是由人工智能、微分方程、自動差分的背景組成的,他們並沒有解決軟硬件的邊界問題。

於是就需要Keras(註釋:Keras是一個由Python編寫的開源人工神經網絡庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應用程序接口,進行深度學習模型的設計、調試、評估、應用和可視化) 或nn.Module(註釋:nn.Module 是PyTorch 特有的概念,也是將經常使用的一個類)這樣的存在。

這些東西的底層,其實就是算子,如何實現卷積、矩陣乘法、約簡算法和逐元素運算?就需要使用CUDA和英特爾MKL(英特爾數學核心函數庫)這類的,之後,在這些基礎上繼續構建。

剛開始這種模式是可以的,但問題也同樣存在,最初的算子是很少的,但是,只要推出一種新硬件,哪怕只是英特爾隨便推出一個CPU新變種,都會讓計算複雜度不斷上升,如今,TensorFlow和PyTorch擁有成千上萬個算子,每個都被稱為kernel,所有的kernel都需要由人來手動進行編寫。

(註釋:芯片行業中所說的IP,一般也稱為IP核。IP核是指芯片中具有獨立功能的電路模塊的成熟設計。該電路模塊設計可以應用在包含該電路模塊的其他芯片設計項目中,從而減少設計工作量,縮短設計週期,提高芯片設計的成功率。該電路模塊的成熟設計凝聚著設計者的智慧,體現了設計者的知識產權,因此,芯片行業就用IP核來表示這種電路模塊的成熟設計。IP核也可以理解為芯片設計的中間構件)

也就是說,一旦新硬件推出,你就必須重新寫上千個Kernel,於是進入硬件的門檻就會越來越高,並且,這種現狀也給科研製造了很多困難,比如說,一名研究員,很少能知道這些kernel是如何工作的。

(註釋:因為kernel的開發很多時候是特定硬件平台的,即便是nvidia也不是都通用,更別說FPGA或者DPU,自定義算子是擴展硬件平台軟件計算能力的主要渠道)

大家應該也知道,現在很多人在編寫CUDA Kernel(註釋:Kernel: 在GPU上由CUDA運行的函數的名字),但這裡的工程師的技能畫像,和能夠創新模型架構的技能完全不同。於是,很多人工智能係統就面臨這樣的挑戰:找不到能編寫Kernel的技術專家。

(註釋:使用GPU 進行計算的時候,所有計算流程都可以封裝成一個GPU 的Kernel,放到GPU 上執行,並且是順序性的。傳統的算子庫為了通用性,會把算子設計的非常基本,因此數量也非常多)

關於谷歌的TPU

我在谷歌的時候參與過谷歌的TPU項目,當時,作為TPU團隊團隊面臨的挑戰包括,市面上有數千種不同的Kernel,如何推出一種新穎的硬件?當時,很多同事也提到過,能不能使用編譯器來完成這件事。因此,與其手寫數千個Kernel,重新編寫所有這些算子,像英特爾或NVIDIA那樣完全搞一套自己的生態,編譯器可以比人工更具彈性,因為編譯器可以允許我們以不同的方式混搭Kernel ,還可以優化很多性能。

編譯器能以通用化的方式,實現這一點,而如果我們用傳統的手寫Kernel,出來的一定是人們自己認為有意思的Kernel的固定排列,而不是研究人員想要的新東西。於是,谷歌的XLA(前文有解釋Accelerated Linear Algebra:加速線性代數) 就此誕生。 XLA可以持大規模的exaflop級計算機,但是問題又來了,XLA的出現是為了支持谷歌的TPU。

而構建編譯器真的很難,且還存在可擴展性問題,目前,必須僱用編譯器工程師才能完成很多機器學習的工程項目,而懂機器學習和各種相關知識的編譯器工程師就更少了。除此之外,XLA 是不可擴展的,它只適配於TPU。

關於深度學習和可編程性

如果我們回頭再看NVIDIA的CUDA和深度學習的發展歷程,比如AlexNet的誕生和深度學習的發展,多人都認為AlexNet 的誕生是數據、ImageNet +計算、GPU 的力量結合在一起的結果。

(註釋:2012 年,深度學習三巨頭之一、圖靈獎得主Geoffrey Hinton 的學生Alex Krizhevsky 和ilya提出了AlexNet,並在當年度的ILSVRC以顯著的優勢獲得當屆冠軍,成績遠超第二名。這一成績引起了學界和業界的極大關注,計算機視覺也開始逐漸進入深度學習主導的時代)

但很多人忘記了”可編程性”的重要性。

因為正是CUDA ,讓研究人員能夠發明出以前不存在的捲積內核,那時還沒有TensorFlow。實際上,是數據、計算和可編程性之間的的結合,使得新穎的研究開啟了深度學習系統的整個浪潮。

因此,從過去的事情和歷史中學習,是非常重要的。那麼,如何邁出下一步?在這項技術方面,我們如何進入下一個時代,讓大家能夠從人類驚人的算法創新和想法中獲益?如何從編譯器中獲益?如何利用編譯器的規模和通用性,從而解決新問題?最重要的是,如何從可編程性中獲益?這就是,我們在做的Modular——人工智能引擎。

關於人工智能的未來

  • 如何看待人工智能發展的未來?你認為不同畫像或方向的團隊會有更多的合作嗎?你想要做的目標之一,是不是降低那些非編譯器專家應用編譯器的難度?

Chris Lattner:人類非常了不起,但沒人可以把所有東西都裝進自己腦袋裡,不同種類、特長的人在一起工作,就能做出比所有人都偉大的東西,舉個例子,我有一定能力,但我基本不記得任何微分方程,對吧?所以下一個LLM架構的發明者肯定不是我(笑)。

但是,如果從系統的角度考慮問題,如果我能讓這些人一起貢獻,協作,並且了解這些東西是如何工作的,就會有出現突破。如何促進發明?如何讓更多了解這個問題不同部分的人,真正開展合作?因此,Mojo和引擎的探索,就是努力消除問題的複雜性。因為目前有很多已經構建好的系統,只是單純聚合在一起。

這裡的解決方案,通常只是以解決問題出發,而不是從上到下設計出來的。而我認為,Modular提供了一個更簡單的堆棧,能協助降低整個堆棧的複雜性,如果不重構,還遵循支離破碎的混亂歷史(人工智能領域的碎片化)一旦想稍微改變一下,都會崩潰,性能會變得很糟糕,或者沒法工作,這種情況是來自於底層的碎片化。

  • 如何理解編譯器:編譯器和變成語言是人類合作或跨界的媒介?

Chris Lattner:我創建Modular,不是拿著錘子找釘子,也不是為創新而創新,目前對OpenAI 這樣的公司來說,少數員工需要花費大量時間手動編寫CUDA 內核。但是,針對人工智能編譯器的優化,可以用編譯器提高軟件協作,擴大擁有不同技能和知識的人員的能力。

編譯器的最終形態,是希望能讓用戶不需要對硬件有太多了解,可以用非常簡單的彙編代碼來完成任何和解決問題,編譯器的真正作用是,能用更高的抽象級別來進行表達。編譯器也是適當自動化通用優化的一種方式,否則,這些優化可能需要手動編程。

第一個目標是讓流程盡可能簡化;

第二個目標是,如果把大量的複雜性從腦子裡擠出去,就能為新的複雜性騰出空間。除此之外,通過抽象化,就可以利用編譯器的優勢——因為編譯器對細節有無限的關注,而人類不會;

更高層次的抽象,還能賦予我們很多其他能力。深度學習系統和Modular將計算提升到了圖形層面,怎麼解釋呢,這裡是說,一旦你從for 循環這些複雜的編程語句解脫出來,變成更具有聲明性的東西,就意味著在改變計算模式。很多人還沒意識到這點,但我認為,這有可能實現。因為現有系統很容易讓人頭疼,抽象提供的很多功能,都是為了實現Pmap 和Vmap(註釋:這倆包含自動求導和並行在內的函數轉換)

而技術的提升,得益於大量層次分明和結構合理的系統和大量新穎的高性能計算類型的硬件,得益於大量已經取得的突破性進展,因此,我很希望Modular能夠得到更為廣泛的應用和普及,打破系列複雜性,這太美好了。

(註釋:聲明式編程和普通編程最大的區別就是在於多了一個時間的概念,你可以定義過去,現在和將來,而不是要保持整個執行鏈路的時間單向性,有了時間的概念,定義內容就可以簡化,然後通過“推演”得到計算圖,而不是我這寫一個算子,那寫一個算子,拼起來一個static的圖)

  • 能不能給Modular的人工智能引擎、人工智能框架、人工智能編譯器下個定義?

Chris Lattner:大多數人在訓練大模型的時候,都會用到PyTorch這類工具,在這樣的場景下,很快會引入CUDA 或英特爾MKL,我把這類統稱為引擎,而提到引擎,主要指的是硬件接口,而Modular提供了一個新引擎,可以引入TensorFlow、PyTorch 和其他,然後,用戶可以以一種新的方式來驅動操作,進行硬件編程,建立在正確的抽象之上,就可以產生很酷的實現。

  • 按照你的定義,Modular基於框架層和硬件層之間,然後我們就想知道,Modular在A100 的petaflops(每秒鐘可以進行的浮點運算次數),但是我發現,網站全部都是CPU,沒看到GPU。所以我的問題是,大家都在努力讓GPU 變得更快,那麼你們為什麼要先讓CPU 跑起來?

Chris Lattner:從第一性原理思考,我們必須從底層開始。如何定義今天人工智能係統?很多人每天都在念叨GPU,為GPU 爭論不休,似乎一切都與GPU 有關。但是,人工智能實際上是一個大規模、異構、並行計算問題。因此,傳統人工智能,是從數據加載開始的,而GPU 不會加載數據,所以你必須進行數據加載、預處理、聯網等系列工作,還包括大量的矩陣計算。

而驅動GPU ,就一定需要CPU。當我們為Accelerator 開發軟件時,會發現各種問題都存在,開發者認為重要的東西,才是他們要解決問題的重要部分。於是,大家就去基於問題構建一個系統,還得完全按照芯片的要求去設計。

從技術的角度來看,Modular就是想要構建通用的編譯器,因為從通用到垂直是容易的,但XLA給我的經驗是, 從專業化的東西開始再將其通用化的不可行的。

對於人工智能行業來說,訓練規模與研究團隊規模成正比,而推理規模與產品規模、用戶群等成正比。因此,現在很多推理仍然是在CPU 上完成的。因此,我們決定從CPU 開始,先改進架構,而CPU也更容易使用,而且不會買不到,等到通用架構構建完成之後,就可以繼續擴展。然後我們目前也弄GPU,很快就會推出,隨著時間的推移,擴展到這些不同類型的Accelerator中。

  • 實際構建引擎的過程中存在有哪些技術挑戰?

Chris Lattner: 我們團隊裡的成員,基本接觸過業界裡所有編譯器和相關存在,比如我參與過XLA 和TensorFlow的研究,還有來自PyTorch、TVM、英特爾OpenVINO 、Onyx Runtime的成員,大家面臨的挑戰是,很多系統都是五到八年前設計的。那個時候的人工智能和現在不一樣,不存在大語言模型。

問題在於,當你構建一個系統時,它一開始只是一堆代碼,然後會變得越來越大、越來越大、越來越大。而係統發展得越快,就越難做出根本性改變。因此,我們選擇從頭開始重新做。

如果你還是希望能夠手寫Kernel,我們首先會用C++ 製作原型,隨後逐步引入mojo ,也就是說,你可以構建非常複雜的自動融合編譯器,應用了所有最先進的技術,同時也超越了最先進的技術。

我們知道,用戶討厭靜態形狀限制( Static Shape Limitations),討厭缺乏可編程性。例如,他們不希望只與Tensor綁定(注:Tensor實際上就是一個多維數組multidimensional array,目的是能夠創造更高維度的矩陣、向量。而很多大模型都存在不規則Tensor的情況)

  • 有沒有關於Modular的設計目標?或者原則?

Chris Lattner: 我不知道自己是否有一套成系統的原則,聽起來有一套原則有點像拿著錘子看什麼都是釘子。不過,我們要做的很多事情是釋放硬件潛能,並且以一種超級易用的方式做到這點。因此,很多起始條件並不是啟用新事物,更多的是要解決完成任務時的複雜問題,因此更像是設計和工程。

如果和一家LLM 公司聊天,很容易就發現他們在GPU 和特定內存大小的A100 GPU 上花費了超2 億美元,大家都希望通過GPU(算力)獲得所有的可能性,一方面,很多人希望能深入到芯片內部,釋放潛力,但還有很多其他人想要更多的可移植性、通用性和抽象性。

因此,這裡的挑戰,就變成瞭如何啟用和設計系統,並且在默認情況下獲得抽象性,同時又不放棄所有的功能。同樣,很多編譯器,特別是機器學習編譯器,基本只是試圖覆蓋空間中的一個特定點,功能不具備通用性。

還有就是我們關心用戶,因為很多人沉迷於技術,卻忘記了應用技術與創建技術的人的畫像,是截然不同的,需要理解使用工具的開發者的想法。

  • 這幾天Modular剛發布了基於Linux Mojo的下載使用,很快MacOS 和Windows 版本也馬上會發布,那麼現在開始的六到九個月內,還會有哪些工具包和組件?

Chris Lattner:Mojo 仍然是一門年輕的語言,我們會逐步和生態一起,讓它越來越成熟。我們希望圍繞在Mojo 周圍,有一個大社區,來共同構建很酷的東西。為了實現這一目標,我們將逐步開源Mojo,大家必須一起來解決很多細節問題,才能構建一個運行良好的生態,而不僅是一個爛攤子。

就像所有人都經歷過的Python 2-3 災難一樣,沒有人願意去回憶它(註釋:這倆8成以上語法不兼容,而且由於歷史遺留問題,很多Linux的發行版底層依賴py2,但是用戶不小心要用py3,pip install xxx的東西就把系統搞崩潰了)。

問:你跟Guido (注:荷蘭工程師Guido van Rossum,發明了Python語言)和Python 基金會是什麼樣的關係?是如何相互關聯的?

Chris Lattner:Guido知道Mojo 即將推出, Guido花了很多時間和我們團隊在一起,我們覺得很幸運。他偶爾會出現在Discord mojo社區,給我出難題,真是太棒了。

我們認為,mojo是Python 家族的一員,當然,Python 家族還有很多成員,包括PyPy 和Cython 等等,我我們希望Python 能夠繼續發展,不斷添加新的內容。 Mojo 也繼續發展並添加新內容。

回到30、40 年前,當時有C 語言,然後在1983 年出現了一個叫C++ 的新生事物, C++ 其實就是帶類的C語言(C with classes)(註釋:1979年,Bjame Sgoustrup到貝爾實驗室,開始把C改造成帶類的語言,1983年該語言被正式命名為C++)

當時的情況是,C 和C++ 最初是兩個不同的社區,但它們之間有大量的融合、想法分享和想法交流。

當然,所有的C 語言特性最終也都融入了C++。所以我希望同樣的事情也會發生在Mojo和Python上。

關於創業和工程團隊建設

  • 曾經有很多像你這樣的創始人,有著很長的、了不起的工程師職業生涯。突然之間,就成了首席執行官。那麼,你在組建團隊、指導他人方面有什麼心得體會?尤其當了工程師之後,現在又要兼任產品負責人、負責融資,有什麼心得?

Chris Lattner:在Modular,我和聯合創始人Tim關係非常緊密,非常互補。在創業的過程中,有一個可以傾訴的對象真的非常非常重要。現在經歷的,是我在谷歌和蘋果擔任工程負責人或沒有體會過的。

當我們創辦這家公司時,我們的信念是——理解痛苦。代表一個大廠,和代表創業公司出門是不一樣的,當創業公司真正成立之後,我去做工程負責人,開始組建工程團隊,而Tim會則負責產品和業務方面的工作,並在沒有大廠光環的情況下和不同的公司(客戶)交流。比如,你目前的痛點是什麼?

目前在做什麼?面臨的挑戰是什麼?我們能幫上什麼忙?你們對我們做的事情有何看法?作為Modular來說,我們所面臨的挑戰是,我們要打造的東西真的是一個超難的、並且非常抽象的技術問題。

要解決這些難度如此之高的問題,需要從所有大科技公司中聘請成本非常高的技術專家,因此,我必須融到大量資金,很好地激勵員工,給他們發工資,讓員工感到舒適。

我們直接面對客戶,我們看到了AI智能領域存在的客戶的痛苦,構建和部署很多東西真的是一團亂麻,大家被太多無效的東西裹挾。所以,我們的願景,就是讓由Modular去統一所有這些東西。

但問題又來了,在開發產品的同時,產品也在不斷變化,需求會隨著時間不斷變化。因此,與我們合作的團隊最終的情況是,複雜度非常高,大家為不同的特殊情況開發了很多不同的混亂系統。

  • 作為工程領導者的經驗:有大量組建團隊和招聘工程師的經驗。在工程管理方面有什麼心得或建議?

Chris Lattner:我的工作就是幫助團隊獲勝,必須定義什麼是贏,就要給人們一個清晰的願景,一個明確的目標,讓大家保持一致,當你有周圍有一大群非常優秀的人,都想成為英雄時,明確的目標就會非常重要。勢能疊加,會迅速取得巨大進步,而反之,動力就會抵消。

在我們內部,我經常會親自幫助構建初始基礎工程,向團隊展示如何落地非常重要,這也是我們的文化。在工程團隊中,對我來說最重要的一點就是落地速度,如果等上24 小時或三週才能運行CI,那麼一切都會慢下來。

在招聘時和員工不斷發展的過程中,你也要確定,員工擅長什麼,對嗎?我真的相信,如果你有一個非常優秀、非常有激情的,團隊成員,而你又把他們和他們真正想做的事情結合在一起,那麼,他們就具備超能力。

因此,很多時候,我們要確保人們在解決正確的問題。這樣,他們就能成長,能做事,能推動,能自主決策。但很多時候,人們會非常專注於產品,或者有的特別擅長做生意,專注於客戶和客戶遇到的問題。但如果沒有團隊,就無法解決和打造產品。

我很喜歡Tim,因為他真的很擅長我不太擅長的領域,大家都在互相學習。

關於ChatGPT和人工智能

ChatGPT的爆發超級有趣,對於像我們這樣長期關注人工智能的人來說,ChatGPT意味著一種用戶界面創新,並且讓人們認識到了人工智能的力量。回過頭來看,我認為這讓人工智能在公眾意識中的地位提高了好幾年。

人工智能領域最有趣的未解之謎是什麼?

Chris Lattner:我認為人工智能現在正處於青春期。有很多聰明人對AI是什麼有不同的看法,對吧?有些人認為一切都應該是端到端的神經網絡,軟件應該消失,我認為待解決的問題是,訓練算法和智能設計算法之間的平衡到底是怎樣的?我個人不認為這是全是一種或全是另一種,如果你想構建一個cat detector,那麼CNN 確實是一個很好的方法。如果你想編寫一個引導加載程序或操作系統,那麼用for 循環實現也很好。但隨著時間的推移,這些東西會在哪些方面逐步淘汰?我們又該如何讓應用開發者能夠更一致思考這些呈現?

我們對未來下的賭注是:人工智能將作為一種軟件開發方法,最終會成為人們思考如何構建應用程序工具集的一部分。不僅僅是iPhone 應用或類似的形態,還包括整個雲服務、數據管道,最終迭代整個用戶產品的構建,當然,我們目前也還在探索的道路上。

*感謝技術生活進化論所有朋友們對筆者多年來一如既往的支持,感謝ChaosAI

*感謝Dakai、AsyncGreed、張博、毛利、Ethan、Mew在專業知識上給予的幫助

參考文獻:

1.https://www.latent.space/p/modular

2.參考資料:芯片行業所說的IP是個什麼東西? -芯論語 -天高雲淡Andi863

3.Chris Lattner’s Homepage (nondot.org)

4.nn.functional和nn.Module- 梁雲1991 算法美食屋 2020-07-10 21:47

5.參考資料:簡書-Aug 12, 2018-深入淺出讓你理解什麼是LLVM

Total
0
Shares
Related Posts