當前位置:
首頁 > 科技 > CNN IP 新「門類」!ASIP處理器設計指南

CNN IP 新「門類」!ASIP處理器設計指南

本文根據云天勵飛處理器架構總監李煒在智東西公開課推出的《面向AI的ASIP處理器設計》上的系統講解整理而來。本期講解是AI晶元系列課第二季第一講。

本次講解中,李煒老師首先從性能、能耗、複雜度、靈活性四個方面,詳細介紹了GPU、DSP、ASIC以及ASIP等幾種不同類型的CNN IP方案。ASIP作為 CNN IP新「門類」,是針對某種特定的運算或者某類演算法的定製,具有高性能、高靈活度、低功耗、低複雜度的特點。

此外,結合雲天勵飛ASIP處理器,李煒老師還從演算法需求分析、軟硬體切割、架構定義、指令集定義、指令集模擬器開發、ISS模擬&架構迭代優化等方面,系統講解了ASIP處理器架構的設計流程,以及設計過程中RTL開發、驗證、後端物理實現等難點和注意事項。

精華整理

李煒:大家好,我是雲天勵飛處理器架構總監李煒,目前主要從事針對AI處理器的架構以及微架構設計等方面的工作。今天分享的主題是《面向AI的ASIP處理器設計》,主要包括以下5個部分:

1. AI背景介紹;

2. CNN的IP方案介紹;

3. AI ASIP處理器架構設計;

4. AI ASIP處理器實現難點;

5. AI ASIP處理器配套工具鏈。

過去幾年,深度學習在視覺識別、語音識別以及自然語言處理等方面都表現得非常出色。在不同類型的深度學習神經網路中,CNN卷積神經網路是得到最深入研究的神經網路,它由很多層組成,主要包括:

1. 卷積層(Convolutional layer),用來提取不同的特徵值;

2. 池化層(Pooling layer),主要對輸入的特徵圖進行壓縮,使特徵圖變小,從而簡化計算。另一方面能夠進行特徵的壓縮,取特定區域的最大、最小或者平均值,從而得到新的維度、較小的特徵。

3. 線性整流層(ReLU layer),主要是引入非線性。由於現實世界中的很多東西都是非線性的,因此引入非線性後,就可以逼近任何函數;

4. 全連接層(Fully-Connected layer),把所有的局部特徵變成全局特徵,用來計算最後每一類的得分。

除了這些層之外,卷積神經網路還包括很多其他的運算。CNN的網路結構也有很多種,常見的包括GoogleNet、AlexNet、VGG16、DensNet以及MobileNet等。這些網路都有著不同的結構,每一層所需要的運算也有所不同,並且每種網路的層數以及需要支持的各種操作也是不太一樣的。

CNN的IP方案介紹

CNN計算具有操作相對固定、計算量大、需要的帶寬大三個特點。目前CNN IP方案可以分為GPU類方案、DSP類方案、ASIC類方案以及ASIP類方案幾種。ASIP是指針對某種特定的應用或者演算法來定製的處理器。

右邊這張圖展示了各種方案在各個方面的特點比較,主要包括性能、能耗、複雜度以及靈活性四個方面。

首先,在性能方面,ASIC的性能是最高的,因為它是專門實現某類定製的電路演算法。ASIP也是針對某種特定的運算或者是根據某類演算法來定製的。它的性能要比ASIC要低一些,因為ASIP還涉及到軟體編程的問題,因此它的性能要比ASIC低;接下來是GPU,性能最低的是DSP,因為DSP要通過軟體編程實現所有層的計算,因此它的性能是最低的。

第二,在能耗方面,DSP的能耗是最高的,因為DSP的所有計算過程都要通過軟體來實現。其次是GPU,GPU的大部分計算也是通過軟體編程來實現的,因此能耗也是比較高的;再往下是ASIP,雖然它也涉及到一些指令編程,但它卻做了很多定製的操作和處理,因此我們認為ASIP的能耗要比DSP低。能耗最低的是ASIC,因為它完全不需要編程,所有控制都是通過硬體狀態機來控制的,因此它的能耗是最小的。

第三,在靈活性方面,我們認為能夠通過軟體編程來實現的架構靈活性就高,因此DSP的靈活性是最高的,其次是ASIP和GPU,靈活性最差是ASIC。

第四,複雜度方面,這裡所說的複雜度不僅僅是指硬體,還有配套的工具鏈以及軟體的複雜度,因此,我認為複雜度從高到低依次是DSP、 GPU、 ASIP和 ASIC。從硬體上來說,ASIC的控制複雜度要稍高一點,因為它是通過硬體狀態機來實現的。但是從軟體的角度來看,ASIC不需要軟體編程,而軟體只需要通過一些配置寄存器就可以了。因此綜合來講,ASIC的複雜性是最低的。

接下來跟大家介紹下各類CNN IP方案,我舉了一些典型的例子,大家來可以看一下各類CNN IP方案的特點。

首先是 GPU類方案,這裡以NVIDIA GPU為例。 GPU的特點包括多核並行計算,且核心數非常多,能夠支撐大量數據的並行運算,並且擁有更高的訪存速度和浮點運算能力。這些特點決定了GPU在深度學習領域,特別是訓練方面也是非常合適的。不光是訓練方面,在雲端推理等可能需要計算量比較大的地方,GPU也是比較合適的。另外,NVIDIA GPU提供了比較完整的工具包,適用於現在所有主流的深度學習框架,比如對TensorFlow、Caffe等深度學習框架的支持都是比較好的。同時,NVIDIA GPU通過PCI-e介面可以直接部署在伺服器中,使用起來非常方便。

接下來看一下DSP類的CNN IP方案。這裡以Cadence VP6為例。DSP VP6提供的指令是比較豐富的,而且還專門針對深度學習定製了一些指令。這些深度學習定製指令主要是跑在標量和和矢量和上。標量和主要做一些程序的控制和一些簡單的運算。另外,Cadence VP6還提供了一些深度學習庫供大家調用,因此它是標量和加矢量和的架構。VLIW,叫作超長指令集架構,意思是在發射了一條指令後,這條指令中存在很多運算,可以把指令中不同的操作分發給各種不同的功能部件來同時運算,提高並行度。同時,Cadence VP6還是一個SIMD架構的DSP,即單指令多數據流,主要體現在它的矢量單元上。它有256個MACs,一條指令下來,它的256個MACs是一起工作的,因此它的並行性也是比較高的。

接下來是ASIC類,一個比較典型的是NVDLA,它是由NVIDIA提供的開源的深度學習平台。簡單介紹一下,CSB/Interrupt interface介面是主控通過CSB來配置NVDLA中的寄存器,完成任務後,它會返回中斷;DBB interface是一個memory匯流排介面,主要用來連接DDR; second DBB interface也是一個memory匯流排介面,用來連接片上SRAM。右圖是NVDLA的一系列的操作單元,其中Convolution buffer用來存放Input的Feature map,Convolution core負責CONV和FC操作,Activation engine負責RELU/BN/ELTWISE等操作;Pooling engine負責POOLING操作;Local resp.norm主要負責LRN的運算,再往下是RUBIK/DMA,主要負責SPLIT/CONCAT/RESHARE等操作。

關於ASIP類,我們舉兩個例子。首先是寒武紀深度學習體系架構的處理器,它實際上是屬於ASIP類的。ASIP是專門針對某種特定的應用或者是演算法來定製的處理器。定製的處理器,自然也有自定義的指令集,它具備了ASIC的高效性和DSP的靈活性。

上面這張圖簡單介紹了寒武紀的硬體架構,最上面是Control Processor,可以看到有很多的虛線都是從這裡出來然後發給各個單元,主要是負責給各個模塊下髮指令。左上角藍顏色Nbin模塊用來存儲input feature map,左下角的SB模塊用來存儲kernel。在有了input feature map和Kernel後,就會讀到它的NFU中,根據Control Processor下發的指令來做一些運算。通過NFU1、NFU2以及NFU3三級流水算出結果後會送到Buffer中,可以看到每個Buffer上有三個DMA,這些DMA主要用來搬運feature map和計算參數。

接下來介紹一下雲天勵飛的NNP,它也是屬於ASIP類的。首先我們有一百多條自定義的指令,並且50%的操作是針對AI來特殊定製的。其中NU單元是我們CNN處理的核心,由多個基本的處理單元PE組成,同時是15級流水。同樣,我們也有一個CU模塊,即Control unit,和寒武紀中的Control Processor類似,用來給各個模塊分髮指令做任務調度,支持八級流水線。

AI ASIP處理器架構設計

接下來介紹一下面向AI ASIP處理器的架構設計流程,主要從以下幾方面來介紹,分別是演算法需求的分析、軟硬體切割、架構定義、指令集定義、指令集模擬器開發、ISS模擬&架構迭代優化以及最後確定微架構和指令集,之後就會進入開發階段。

需求分析,主要分為演算法的需求分析和產品的需求分析兩部分。AI的演算法需求分析主要用來分析AI演算法的基本流程,以及演算法中使用的CNN模型。需要分析清楚模型中有哪些基本操作,有哪些特殊操作,這些操作是否具有通用性或者擴展性,ASIP處理器是否能夠獨立完成運算或需要系統中其他的模塊來一起配合。產品的需求分析,主要用來確定產品的應用場景。在各種應用場景下,ASIP處理器的頻率以及算力能達到多少,以及系統能提供多少帶寬,在結合演算法和應用後,系統需要多少帶寬等等問題。在設計架構之前,必須要把這些都分析清楚才能夠定義出一個比較好的ASIP處理器架構。

軟硬體切割,剛才也提到,ASIP是針對特定的演算法和應用定製的處理器,它兼顧了ASIC的高效性以及DSP的靈活性。ASIP也可以支持豐富的指令集,比如循環、跳轉、子程序的調用指令、基本的算術運算和邏輯運算指令,還有一些專門針對CNN特殊定製的運算指令。有了這些指令,如何利用好這些基本的指令來實現軟體和硬體效率的最大化是軟硬體切割要考慮的問題,針對ASIP的合理的軟硬體切割,可以達到事半功倍的效果。比如一些複雜的控制和狀態機是可以通過ASIP指令編程來實現的。ASIP中的數據可以直接用DMA來搬運,也可以使用大顆粒度的指令來提高ASIP的編程效率以及硬體操作的效率。我們都知道,指令的顆粒度越小,編程的效率就越低,因此這對於硬體效率來說是最高的,而且對於編程也是比較友好的。

在某些情況下,我們可能要考慮採用ASIP+ASIC的方式,把ASIC作為ASIP的加速單元來完成某類特定的運算。通常來講,如果某些運算比較難以融入到當前ASIC處理器的設計中,或者某些運算使用的頻率比較高,使用ASIP來計算這些運算不划算時,就可以利用加速器對ASIP進行擴展。因此ASIP處理器的指令集以及硬體架構就需要有一定的擴展能力。比如上圖,左邊這部分是一個ASIP,上面是Program Memory,NN CORE可以從PM中讀取指令來進行解碼、convlution以及pooling等運算,最後把結果存到DM里。但有些運算可能不太適合放到NN CORE中進行,比如FFT或者resize等,這種情況下可以把FFT或者resize作為ASIC加速器對ASIP擴展的方式。因此ASIP處理器需要預留一些擴展指定介面,通過編程的方式能夠驅動FFT或者resize,完成之後可以通過一些中斷或者狀態查詢把狀態反饋給NN CORE。因此,在這種情況下可以考慮利用ASIC+ASIP聯合的方式來實現任務的劃分。

架構定義,在軟硬體切割完畢後,就可以開始定義ASIP處理器的架構了。面向AI的ASIP處理器架構設計的重點主要包括數據重用、WEIGHT重用、提高計算的並行度、提高MAC的利用率、如何減小DDR帶寬、硬體擴展性、初步流水時序和後端可實現性。這些都是ASIP處理器架構設計的重點。接下來我針對其中的幾點進行詳細的介紹。

數據重用主要有兩點,第一是input channel數據重用,簡稱Ci。一個Ci在讀入buffer之後,要把它應用到所有的co計算中。如上圖,ci0可以把它讀入到buffer中,在co中計算有個好處,就是數據只需要讀一遍,而不是每次都重複讀取,直至用完丟掉即可。從而把數據充分的復用起來,減少帶寬輸出,提高計算效率,增加MAC的利用率。第二是output channel(co)的數據重用,在上圖右邊,每一個ci對co的連線都算是一個partical sum,在這種情況下,算完一個partical sum後,數據將存到內部的buffer中,而不是立刻存回DDR,需要等所有的ci把co都掃一遍,算出所有的partical sum並累加完畢後,才存回DDR。這樣既能減少的帶寬,也是提高MAC的利用率的一種方式。

WEIGHT重用主要體現在多batch並行上。即多個NN運算單元計算同一個模型,但input feature map是不一樣的,而weight是一樣的。比如做人臉識別時可以同時計算多張人臉,所用的所有模型以及所用的weight都是一樣的,而輸入的每張人臉是不一樣的。在上圖中,上面的Weight Buffer從DDR中讀取數據後,會把任務分發到各個計算單元中,每個計算單元都有它對應的Buffer,即Weight實際上是復用的,而多個NN計算單元輸入數據是不一樣的。

計算並行度,我們可以考慮同時計算多個co,同時計算多個output chaneel來提高計算並行度的。從另外一方面來考慮,可以同時計算一個co的不同的Partical sum並累加起來,也能夠提高它的並行度的。還可以考慮對神經神經網路模型進行剪枝,對模型進行剪枝實際上是跳零(Skip zero),對模型剪枝後,這個模型就變小了,也就是能同時計算更多有效的運算,因為跳零的那些不需要再計算了。左邊的第一張圖是全連接的方式,第二張圖是Ci Skip/ CO Skip,是指通過剪枝發現某個Ci所有關聯的都是零,裁剪後,跳零的地方就不需要計算了,從而更加充分有效地利用MAC資源,也可以提高計算的並行度。除此之外,還可以考慮另一種方式,如最後一張圖,並不是把Ci全都摳掉,只是Ci的某幾條線可能不需要,對於kernel完全是零的這些運算也不需要進行計算。Ci1最左邊和Ci3最右邊這條線對應的kernel也是零,因此對應的co0和co2的運算也不需要了,這樣通過卷積後,如果再有一套有效的方法能夠把kernel全都跳過去,那麼就能夠充分地利用MAC資源以提高計算的並行度。

DDR帶寬是ASIP處理器設計中一個非常重要的指標。有效的數據復用和Weight復用能夠降低DDR對帶寬的需求。剛才也提到,把數據和Weight重用起來,就不用從DDR重複讀取數據,從而降低DDR對帶寬的需求。另外,數據壓縮也能夠減少DDR對帶寬的需求,經過Relu計算後,feature map裡面會存在很多0值,在這種情況下,可以考慮對feature map進行壓縮,這也是比較有效地降低DDR對帶寬的需求的一種方式。

MAC利用率,關於處理器「能達到多少算力」,「有多少T的算力」或者「有多少G的算力」,這些都是比較虛的。拋開IO來談MAC利用率或者算力是沒有任何意義的。單純的堆疊MAC是沒有用的,IO得跟得上,MAC才能充分地利用起來,因此,IO是瓶頸。MAC單獨對接MAC基本是沒有什麼用的,因此要想要提高MAC利用率,還是得考慮如何降低DDR的帶寬。另外,數據重用、Weightt重用,降低DDR帶寬、提高計算並行度都是為了提高MAC利用率。

指令集的定義,通常面向AI的ASIP指令集定義有兩類指令,一類是循環、跳轉、基本的算術邏輯運算等基本指令,用於控制和NN CORE調度;另一類指令是NN指令,專門用於CNN計算。在定義指令集時,要考慮指令及指令集的規整性和可擴展性,同一類指令的編碼要放到一起。在規劃各個指令集的比特域時,要充分考慮它的擴展性,要留有一定的餘量。另外還要考慮指令的顆粒度,主要包括大顆粒度的指令和小顆粒度的指令。對於大顆粒的指令,例如定義了一條convolution指令,一條指令就能執行成千上萬個cycle,這種指令的特點是效率比較高,編程也比較簡潔。小顆粒度的指令是指通過更小的操作來拼成一個大的操作,比如要完成convolution指令的操作,可以通過乘法指令和加法指令編程來完成,它的特點是比較靈活,但這對編程會有一定的要求,而且功耗會大一些。

指令集模擬器(Instruction Set Simulator,ISS)是利用高級語言來編寫的ASIP處理器模型,可以用python或者C++來寫。這個模型可用在ASIP處理器架構設計階段,是對處理器架構的性能模擬的工具,並且在後面可以用於RTL驗證作為軟體開發的參考模型。在ISS開發時,需要注意以下幾點:

第一, ISS中一些重要的參數要能夠靈活可配置,例如,Memory大小、Buffer大小、MAC個數以及DDR帶寬等,這些都需要能夠靈活配置;

第二, 要能夠提供豐富的profiling能力,比如需要看到MAC的利用率、Buffer或者MAC是否飢餓,這樣才能夠確定出參數的最優配置,從而定好架構;

第三,ISS要能夠基本反映出硬體真實的性能,以免前功盡棄。

指令集模擬器開發主要有兩類:

第一, 行為模型(behavior model),只是模擬處理器的行為,並沒有時序概念。這種模型主要用於ASIP處理器架構設計階段,用於快速建模,主要是為了對處理器的架構進行評估以及調整,也可以作為後續RTL驗證的參考模型。

第二, cycle accurate model,每個cycle都能夠和RTL比對上,它是有時序概念的。基本上每個cycle都能和硬體完全比對得上。也就是說、它跑出來的結果和硬體跑出來的結果基本沒有什麼差別,這個模型主要是作為後續軟體開發的參考模型,能夠反映軟體開發在ASIP處理器上運行的真實情況。

完成指令集模擬器開發之後,就可以做一些ISS模擬以及後續架構的優化迭代,主要有兩個工作。首先是選擇Benchmark,對於AI處理器來說,當前基本上沒有通用的Benchmark。阿里最近發布了用於AI處理器的Benchmark—— AI Matrix。而對於AI ASIP來說,需要針對特定的應用和特定演算法來定製開發自己的Benchmark。除此之外,也需要兼顧一些通用的CNN模型性能,但是就目前而言,Benchmark是需要我們自己來開發的。另外,開發好Benchmark之後,就可以利用Benchmark來進行一些ISS的架構模擬,並進行迭代。同時也要考慮定義的指令集是否完備,是否過設計,是否便於編程。通過Pooling的結果可以確認Memory和Buffer size多大比較合適,每種Benchmark下的MAC利用率,最常用的操作是否足夠高效,是否還需要優化,以及頻率、算力、帶寬是否已經達到需求指標等,這些指標,都可以通過對Benchmark的模擬進行確認。完成這些後,基本上就能把架構確定下來了。定好架構,就能夠確定指令集以及各個模塊的微架構了,接下來就可以進入到真正的開發階段。

AI ASIP處理器實現難點

接下里跟大家介紹下ASIP處理器在開發階段中實現的難點。主要分為三個部分:

第一、在ASIP處理器RTL開發過程中的注意事項;

第二、ASIP處理器在驗證過程中的難點;

第三、AI ASIP處理器後端在物理實現時的難點。

先看一下開發過程中需要注意的事項:

第一是時序,需要合理地切割流水線,以保證每一級流水時序的平衡;合理的Memory切割,以保證Memory的讀寫時序,同時只能慢慢地快速,不能太多,因為快速越多會對後端有影響;還要有良好的cording style。

第二是功耗,功耗主要是看Memory的劃分是否合理,在不讀寫時把時鐘關掉。同時有些Memory具有低功耗控制埠,也可以把這些利用起來做控制。clock gating工具可以自動插入或手動插入控制整個模塊的clock,使clock上的功耗儘可能降低。data gating用來防止不使用的模塊或者組合邏輯輸入數據的翻轉。

第三需要與後端進行密切的迭代,因為面向AI的ASIP處理器的計算資源比較多,包含上千個MAC,走線也是比較複雜的。這種情況下,通常我們都會遇到一些問題,如果一直到後端真正布局和布線時才發現這些問題可能就比較晚了。因此,在RTL開發過程中或者在架構設計時就需要提前來考慮這些問題,包括Memory size, Memory的塊數也會直接影響到後端的floorplan、走線、DFT等。因此,ASIP處理器在RTL開發初期甚至是微架構設計時就要與後端建立良好的溝通機制,充分考慮後端的實現。

處理器的設計還需要充分考慮有效的debug機制。Debug機制分為侵入式和非侵入式兩類。侵入式是指設置一個斷點,當程序跑到斷點處就停下來,可以單步執行或者是執行一些continue、step等指令,這些是最基本的調試指令,也可以通過JTAG來訪問內部Memory以及內部寄存器,相當於會打斷處理器的執行;非侵入式是指通過建立有效的trace機制,記錄處理器正常運行期間發生的事件以及狀態,相當於它不打斷處理器的執行,通過有效的trace機制把一些需要的信息收集起來,並存成一個log,便於我們分析log進行debug。還要設計合理的profile機制,通過收集處理器運行過程中各種應用場景以及演算法下的性能、寬頻等信息,以便對軟硬體進行優化,這是非常有用的。

接下來介紹AI ASIP處理器驗證過程中的難點。ASIP指令集非常靈活,支持各種各樣的指令,每個bit域都有很多種變化,再加上處理器的指令組合比較多,因此驗證難度非常大。通常的做法是通過隨機指令發生器,策略性的產生隨機指令,輸入到參考模型以及RTL中進行對比。在產生隨機指令時,要約束每條指令的bit域的範圍以及相互之間的關係。另外,還需要考慮約束指令之間的前後關係,包括有數據依賴的指令、NN指令等。主要是因為行為級的參考模型是沒有時序概念的,如果把這兩條指令都放到參考模型中運行,最後一定會有一條先跑出來。

假如沒有考慮數據依賴,可能會造成這兩條指令運行出來的結果對不上的問題。為了防止這種情況發生,需要對於有數據依賴的指令進行特殊考慮。在CNN計算中,layer層數比較多,每層的計算級聯也比較多,主要是由於計算一個CO需要用到多個CI的數據,進行partical sum並累加,這就可能造成定位非常困難的問題。因此需要在RTL中加入適當的debug信息,比如當運行到CNN層時加入CNN layer Counter或者Input Channel Counter。

在驗證環境中需要抓取各個硬體模塊在CNN模型中每層的輸出,與參考模型的結果進行對比。如上圖所示,在驗證環境中,我們需要把一個文件初始化到Data Memory中,同時將DM初始化文件傳給參考模型,參考模型會運行出一個結果,底下通過Convolution得出另一個結果。為了定位方便,需要對各個模塊的輸出進行對比,通過DM的結果與DM的原始數據,以及從LD單元的輸入與輸出都需要在驗證環境中進行實時的對比,MAC計算完後的結果也需要與存入有右邊DM之前以及存入到DM之後的結果進行對比。在驗證環境中抓取結果,模擬結束後與參考模型追蹤結果來比對。通過比對,就能知道出錯的具體位置,從而幫助我們解決快速定位的問題。

接下來介紹AI ASIP處理器在物理實現上的難點及解決方案。主要包括以下幾方面:

1、Memory size如果過大,可能會導致Memory timing有問題;

2、Memory碎片化嚴重,這會導致Floorplan、功耗、DFT等各種問題;

3、CNN計算的特點是計算比較密集的,這種計算比較密集的硬體有可能導致功耗和IR DROP等等各種問題;

4、由於MAC數較多,有可能會導致連線的異常複雜,從而導致congestion問題。

針對上面這些難點,也有相應的解決方法。針對Memory size過大的問題,可以通過Memory切割來緩解部分timing問題,切割只是一個後面的方法,要從根本上解決,還是要從架構上著手,在架構設計階段就要考慮這個問題。同時前端要盡量避免有很多小塊的Memory設計,並且要做好低功耗設計,控制clock 、Memory、計算單元的功耗,後端可以優化Power Mesh策略,後端的Floorplan可以按照數據流來擺放,這樣能夠緩解congestion的問題,這些都是解決後端所遇到的難點的方法。

最後簡單介紹一下AI ASIP處理器的配套工具鏈。最上層是通用的一些深度學習框架,下一層是一個中間件NNVM,作用是在通用框架下面寫好一些模型和程序,然後映射到不同的硬體架構上。NNVM接下來需要進行量化(Quantizer),量化之後,有一部分工作可以映射到我們自研的NN處理器上,這時就需要有一個NN Compiler。NN Compiler用於實現高級語言到彙編語言之間的轉換,接下來通過NN彙編器(NN Assembler)來實現彙編語言到機器碼之間的轉換。DSP也同樣有一個Compiler和彙編器Assembler;再往下一層是Simulator,可以通過ISS來做性能的模擬和作為軟體的參考模型,Simulator也分為NN Simulator和DSP Simulator兩部分,底層就是硬體單元。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 智東西 的精彩文章:

AI早報:工業機器人年產量破10萬台 運營商5G頻段劃分曝光
震驚!協作機器人鼻祖之一Rethink倒閉,貝索斯曾投資八輪

TAG:智東西 |