使用多個推理晶片進行設計的優勢與挑戰

eet電子工程專輯 發佈 2020-01-03T13:53:12+00:00

儘管這些創新都是偉大的,但問題在於大多數公司都不知道如何使用各種解決方案,因為他們無法確定哪個解決方案的性能優於另一個解決方案。簡而答之,只要推理晶片設計正確,使用多個推理晶片可以實現性能的線性提高。

過去兩年是推理晶片行業最繁忙的兩年。甚至有段時間,每隔一周都會有新公司推出新的優化方案。儘管這些創新都是偉大的,但問題在於大多數公司都不知道如何使用各種解決方案,因為他們無法確定哪個解決方案的性能優於另一個解決方案。在這個新市場上,由於沒有一套既定的基準,公司們要麼必須儘快熟知推理晶片,要麼必須相信各個供應商提供的性能數據。

大多數供應商給出的某些性能指標通常都是有利於其晶片表現的基準。一些供應商在討論TOPS和TOPS/Watt時沒有指定模型、批量大小或工藝/電壓/溫度條件。其它供應商使用ResNet-50基準,這一模型相當簡單,遠低於人們的需求,因此它在評估推理選項方面的價值令人懷疑。

我們在這條漫長道路上探索了很久。眾多公司逐漸發現,在評測推理晶片性能時,最關鍵的是(1)高MAC利用率(2)低功耗(3)保持小尺寸。

我們知道如何評測——接下來呢?

在我們熟知推理晶片之間的性能評測比對方法之後,公司們開始提出在同一設計中同時使用多個推理晶片的優點(或缺點)的問題。 簡而答之,只要推理晶片設計正確,使用多個推理晶片可以實現性能的線性提高。當我們考慮使用多個推理晶片時,可以拿高速公路作類比,你想要一條單行道公路還是一條四車道公路?

顯然,每家公司都想要一條四車道的高速公路,所以現在的問題變成了「我們如何在不造成交通堵塞的情況下成功打造這條四車道高速公路?」 答案在於選擇正確的推理晶片。為解釋這一點,讓我們先了解神經網絡模型。

神經網絡被分解成多層。像ResNet-50有50層,YOLOv3有100多層,並且每層都會跟進上一層的激活。因此,在第N層中,其輸出是進入N+1層的激活值。它等待該層的進入,計算完成後,輸出是進入n+2層的激活值。這會一直持續到最後一層,直到算出結果為止。請記住,此示例的初始輸入是圖像或模型正在處理的任何數據集。

多個晶片何時發揮作用?

事實是,即便你的晶片具有一定的性能水平,總會有客戶希望獲得兩倍或四倍的性能。但在某些情況下,如果你分析神經網絡模型,這是有可能實現的。你只需要關注如何將模型分成兩個晶片或四個晶片。

多年來,這一直是並行處理面臨的問題,因為對於正在進行的處理,人們很難找出劃分方式 並確保所有處理都會疊加,而不是造成性能縮減。

與並行處理和通用計算不同,使用推理晶片的好處在於,客戶通常提前知道他們是否需要使用兩個晶片,這樣編譯器就不必在運行中做出決定,它是在編譯時完成的。有了神經網絡模型,一切都是完全可預測的,因此我們可以分析並找出如何準確地拆分模型,以及它是否能在兩個晶片上良好地運行。

為了確保該模型可以在兩個或更多晶片上運行,必須逐層查看MAC的激活值大小和數量。通常情況下,最大的激活值出現在第一層。這意味著激活值大小隨著層數的遞增而緩慢下降。

查看MAC的數量以及每周期MAC完成數量也很重要。在大多數模型中,每個周期中完成的MAC數量通常與激活值大小相關。這很重要,因為如果您有兩個晶片,並且希望以最大頻率運行,則需要為每個晶片分配相同的工作負載。如果一個晶片完成了模型的大部分工作,而另一個晶片只完成了模型的一小部分工作,那麼您將受到第一個晶片的吞吐量的限制。

如何在兩個晶片之間分割模型也很重要。您需要查看MAC的數量,因為這決定了工作負載的分配。您還必須查看晶片之間傳遞的信息。在某些情況下,您需要分割模型,並使其能夠傳遞最小激活值,以使所需通信帶寬量和傳輸延遲最小化。若分割的模型導致激活值非常大,則激活值的傳輸會成為瓶頸,並限制雙晶片方案的性能。

下圖顯示了YOLOv3/Winograd/2 Megapixel圖像的激活輸出大小和累積的Mac逐層操作(繪製出卷積層)。為了平衡兩個晶片之間的工作量,該模型將削減約50%的累積MAC操作——此時,從一個晶片到另一個晶片的激活值是1MB或2MB。在4個晶片之間分割,削減量大約為25%、50%和75%;注意,激活值在開始時最大,所以在25%的削減點時,有4或8MB的激活要傳輸。

YOLOv3/Winograd/2Mpixel圖像的激活輸出值(藍條)和MAC操作累積(紅線),顯示了如何在多個晶片之間分配工作負載(圖片:Flex Logix)

性能工具

幸運的是,現在可以使用性能工具來確保高吞吐量。事實上,模擬單個晶片性能的工具可以推廣到模擬兩個晶片的性能。雖然任何給定層的性能完全相同,但問題在於數據傳輸如何影響性能。建模工具需要考慮這一點,因為如果所需的帶寬不夠,那麼該帶寬將限制吞吐量。

如果您需要處理4個晶片,則將需要更大的帶寬,因為模型第一個1/4部分的激活值遠大於後面部分的激活值。因此,您可以藉助投入的通信資源將大量晶片連接在一起,但所有晶片,包括獨立晶片在內,也會因此承擔間接成本。

結論

使用多個推理晶片可以顯著提高性能,但前提是必須按照上述方法正確設計神經網絡。如果我們回顧一下高速公路的類比,就會發現,使用錯誤的晶片和神經網絡模型很有可能會增加通信量。如果你一開始就使用正確的晶片,那你就步入正軌了。謹記,最重要的是吞吐量,而不是TOPS或Res-Net50基準。一旦你選擇了正確的推理晶片,你就可以設計一個同樣強大的神經網絡模型,為你的應用需求提供最佳的性能。

關鍵字: