我認為,對于想做 AI 但不太了解的人來說,問題是:AI有什么區(qū)別?專為 AI 而生的人是否會做得更好,或者同時進行推理和訓練的能力是否會對我的應用程序感興趣?或者——或許還有——成本是否成為您評估是使用傳統(tǒng)的 GPU-CPU 計算還是為特定問題空間構建的東西時的一個因素?
我認為所有這些問題都很重要。從根本上說,在考慮 AI 模型和開發(fā) AI 軟件時,都是使用框架完成的。所以使用 pytorch 或 TensorFlow。Pytorch 最近似乎獲得了最多的關注,無論是在研究人員中還是在工業(yè)界。但是,盡管如此,這兩個框架都將這些機器學習模型開發(fā)為我們所說的數據流圖。
因此,數據流圖根據內核表示模型。內核可以是矩陣乘法,它們可以是卷積,它們可以是池化,它們可以是任何東西。然后在這些內核之間移動的數據是代表模型本身的張量數據。
因此,我們在 SambaNova 設計中的重點是從這些模型中表達的數據流中獲取線索,并非常有效地將其在空間和時間上映射到架構。因此,它為您做的是為您提供路線圖的應用程序,但大多數傳統(tǒng)架構、CPU 和 GPU 都忽略了該路線圖。我們說,你在這里給了我們信息,讓我們用它來優(yōu)化數據流,并將應用程序中表示的數據流與架構相匹配。
因此,我們擁有所謂的可重構數據流架構,可以最大限度地減少生成的帶寬,尤其是片外帶寬。它最大限度地利用了計算,因為它使您能夠在芯片上的空間中進行所謂的流水線操作,這樣您就可以充分利用芯片功能的所有單元。
因此,如果您考慮任何計算環(huán)境的關鍵要素,那就是您的計算能力是什么,您的內存帶寬能力是多少,包括片上和片外?您與芯片上和其他單元的通信帶寬是多少?然后你如何有效地使用它?
因此,通過控制由數據流圖驅動的計算和通信的能力,我們擁有 Samba 流軟件開發(fā)環(huán)境的能力,其中包括非常復雜的編譯器,這些編譯器查看數據流圖并將其匹配到體系結構的功能,因為體系結構基本上是可重新配置的,因此可以重新配置以匹配您正在運行的應用程序的屬性。
這對應用程序開發(fā)人員意味著什么?使用非常受歡迎的 CPU 或 GPU 的傳統(tǒng)吸引力之一是您已經擁有所有這些工具。而且很多人要么很熟悉,不熟悉也有各種各樣的方法可以學習。在 AI 中,這是 SambaNova 的常見體驗嗎?其他人工智能公司有什么不同嗎?
但歸根結底,如果你問任何一個正在努力實現(xiàn)績效的人,他們都希望以最簡單、最容易的方式實現(xiàn)這種績效。大多數人被迫編寫 CUDA。一旦他們編寫了 CUDA,現(xiàn)在他們就被鎖定在 Nvidia 硬件中。但這并不是大多數 AI 開發(fā)人員想要做的。
大多數 AI 開發(fā)人員希望使用這些框架在 Python 中開發(fā)他們的應用程序。事實上,絕大多數模型和應用程序都是在 Python 的這種高層次上開發(fā)的。因此,我們最終要做的是讓我們的能力更容易使用。這是通過擁有一個我們稱之為 Sambaflow 的軟件棧來實現(xiàn)的,它采用了這些模型;分析計算、通信和內存使用;然后針對內存位置和計算對其進行優(yōu)化,以便將應用程序的要求映射到該架構,然后重新配置架構以獲得最佳性能。而這一切都是自動發(fā)生的。
所以你作為開發(fā)者?,F(xiàn)在,如果您真的非常關心低級性能優(yōu)化,并且您真的有能力做到這一點,那么很少有面向性能的工程師。您可以深入研究……我們可以為您提供 C 語言的低級編程模型,讓您可以嘗試在數據流級別進行實際編程,但這只適用于 1% 的開發(fā)人員。其他 99% 的人會對使用框架感到非常滿意,因為編譯器可以提供性能。
所以人們不得不編寫 CUDA 的原因是因為他們無法從現(xiàn)有的庫內核中獲得所需的性能。但數據流的好處在于,它為您提供所謂的自動融合。所以因為你可以同時將兩個內核放在同一個芯片上并讓它們在兩者之間有效地通信,所以你得到了融合。所以如果你看看大多數 CUDA 程序員在編寫自定義 CUDA 內核時試圖實現(xiàn)的目標,他們正在做的是,他們實際上是在手動進行這種融合。他們采用兩個以前獨立的內核,這些內核不能非常有效地通信,并將它們放在一個內核中,以便通信高效。
我們對數據流的處理是自動進行的。所以你可以隨心所欲地定義內核,然后我們將確保它們一起高效運行。
所以我們采取的是一種全圖分析方法,從框架層面開始,分析全圖。
現(xiàn)在,當然,傳統(tǒng)架構不理會這種全圖方法的原因之一是因為它們只在時間內核中執(zhí)行事情,然后它們將所有數據從芯片傳輸到 HBM 和然后將其拉回下一個內核。我們不想那樣做。那是對帶寬的浪費,它不會為您提供我們剛才談到的融合優(yōu)勢。
理想情況下,您希望這兩個內核同時運行。然后你也會得到流水線。因此,當第二個內核處理較早的數據時,第一個內核獲取下一個數據,依此類推。你得到了發(fā)生在芯片上的計算管道。當然,溝通非常順暢且非常高效。
我記得在斯坦福大學待了很多年。我曾經聽 John Hennessy 說,他當然是斯坦福大學的前任校長,也是一位偉大的計算機架構師,他將流水線描述為自計算機架構切片面包以來最好的東西。正如這樣的想法,只需非常非常少的額外資源,您就可以獲得巨大的性能提升。你知道,這是早期推動風險的原因;它是現(xiàn)代 CPU 設計的驅動力。我們以這種動態(tài)方式使用它來加速 AI 應用程序。
高性能計算有點有趣,因為最長的時間是可以聯(lián)合使用多少個 CPU?在這一點上,我們現(xiàn)在擁有主要基于 GPU 的超級計算機。人工智能處理器會一直是這些的模塊嗎?或者我們會看到 AI 超級計算機嗎?
我們將看到一臺 AI 超級計算機,因為當然,HPC 人員正在嘗試做的事情正在被 AI 改造,就像世界上的其他一切一樣。所以如果你看任何東西的模型——你試圖模擬機翼上的氣流,你試圖模擬材料,你試圖理解核彈是如何爆炸的——你有一些物理模型,你是試圖模擬。運行并模擬。
因此,您可以根據第一原理創(chuàng)建一個模型,然后您可以使用該模型生成的數據來訓練基于機器學習的模型。該模型的運行速度可能比您的詳細物理模型快三個數量級,但同樣準確,但可能并非在所有情況下都如此。所以你看到的是這種混合情況,有時你運行詳細的物理模型,有時你運行這個 AI 模型,然后你可能會在進入不同的制度。
因此,我們再次回到之前關于訓練和推理之間融合的討論。同樣,您會看到它發(fā)生在高性能計算領域。因此,理想情況下,您需要的是一種能夠非常高效地完成所有這些類型計算的單一功能。