CANN黑科技解密|昇騰Ascend C編程語(yǔ)言 — 極簡(jiǎn)易用的算子開(kāi)發(fā)體驗(yàn)

AI應(yīng)用的大腦是神經(jīng)網(wǎng)絡(luò),而構(gòu)成神經(jīng)網(wǎng)絡(luò)的基石是一個(gè)個(gè)算子。為了讓開(kāi)發(fā)者的網(wǎng)絡(luò)在昇騰硬件上高效運(yùn)行,昇騰異構(gòu)計(jì)算架構(gòu)CANN(Compute Architecture for Neural Networks)提供了豐富的高性能算子庫(kù),包括神經(jīng)網(wǎng)絡(luò)庫(kù)、線(xiàn)性代數(shù)計(jì)算庫(kù)等,高性能算子數(shù)量達(dá)到1400+。有了高性能算子庫(kù)的支撐,主流神經(jīng)網(wǎng)絡(luò)可輕松在昇騰硬件上高效運(yùn)行。

但隨著人工智能的爆發(fā)式增長(zhǎng),算法更新層出不窮,固定的高性能算子庫(kù)可能無(wú)法完全滿(mǎn)足開(kāi)發(fā)者的多樣化創(chuàng)新需求,為了讓開(kāi)發(fā)者提出的創(chuàng)新算法能夠在硬件上運(yùn)行起來(lái),自定義算子開(kāi)發(fā)的能力必不可少。

但算子開(kāi)發(fā)是個(gè)復(fù)雜的工程,需要考慮眾多因素,包括語(yǔ)言學(xué)習(xí)成本、功能邏輯的實(shí)現(xiàn)、硬件指令的適配、以及算子運(yùn)行精度與性能的達(dá)標(biāo)等等。往往一個(gè)經(jīng)驗(yàn)豐富的算法專(zhuān)家開(kāi)發(fā)一個(gè)高性能的算子都要耗時(shí)數(shù)周甚至更長(zhǎng)的時(shí)間。

算子開(kāi)發(fā)總體流程

為提升算子開(kāi)發(fā)效率,降低算子開(kāi)發(fā)成本,昇騰推出了面向算子開(kāi)發(fā)場(chǎng)景的昇騰Ascend C編程語(yǔ)言。昇騰Ascend C編程語(yǔ)言原生支持C和C++標(biāo)準(zhǔn)規(guī)范,最大化匹配用戶(hù)開(kāi)發(fā)習(xí)慣;通過(guò)多層接口抽象,屏蔽了底層硬件差異;通過(guò)自動(dòng)并行計(jì)算等關(guān)鍵技術(shù),在保證性能的同時(shí)大大降低算子開(kāi)發(fā)門(mén)檻。另外,昇騰Ascend C提供了孿生調(diào)試功能,大大縮短了算子調(diào)測(cè)時(shí)間。

昇騰Ascend C編程語(yǔ)言在異構(gòu)計(jì)算架構(gòu)CANN中的位置

多層級(jí)高性能類(lèi)庫(kù)接口

工欲善其事,必先利其器。為簡(jiǎn)化開(kāi)發(fā)邏輯,昇騰Ascend C支持結(jié)構(gòu)化核函數(shù)編程,提供了面向不同場(chǎng)景的高性能類(lèi)庫(kù)接口。開(kāi)發(fā)者僅需通過(guò)類(lèi)庫(kù)接口的組裝調(diào)用,即可輕松實(shí)現(xiàn)高性能算子。

昇騰Ascend C提供的類(lèi)庫(kù)接口

AI應(yīng)用領(lǐng)域廣泛,開(kāi)發(fā)者的背景與需求也各不相同。為滿(mǎn)足不同層級(jí)開(kāi)發(fā)者的訴求,昇騰Ascend C針對(duì)計(jì)算接口和數(shù)據(jù)搬移接口,進(jìn)行了分層分級(jí),讓開(kāi)發(fā)者可以根據(jù)自身需求選擇合適的接口。

針對(duì)計(jì)算類(lèi)接口,當(dāng)前昇騰Ascend C支持三個(gè)層級(jí),其中級(jí)數(shù)越低,自由度越高,更易于表達(dá)復(fù)雜場(chǎng)景所需功能;級(jí)數(shù)越高,接口的封裝度越高,更易于表達(dá)常用語(yǔ)義,使用起來(lái)也更簡(jiǎn)單。

計(jì)算接口分層分級(jí)與示例

針對(duì)搬移類(lèi)接口,昇騰Ascend C將不同類(lèi)型物理內(nèi)存間的數(shù)據(jù)搬移抽象為一個(gè)統(tǒng)一的數(shù)據(jù)搬運(yùn)接口,通過(guò)參數(shù)控制不同的搬運(yùn)級(jí)別,從而滿(mǎn)足不同數(shù)據(jù)搬運(yùn)場(chǎng)景的需求。

數(shù)據(jù)搬運(yùn)接口分層分級(jí)與示例

另外,多層級(jí)的類(lèi)庫(kù)接口封裝,可以更好地屏蔽不同型號(hào)硬件間的差異,輕松實(shí)現(xiàn)算子代碼對(duì)不同硬件的兼容。

自動(dòng)并行計(jì)算

多層級(jí)的類(lèi)庫(kù)接口可以讓開(kāi)發(fā)者輕松實(shí)現(xiàn)算子的算法邏輯,達(dá)成預(yù)期功能。但一個(gè)好的算子,計(jì)算效率也是必須考慮的重要指標(biāo)。眾所周知,將任務(wù)并行處理是提高計(jì)算效率的關(guān)鍵手段,但AI處理器的內(nèi)存層次結(jié)構(gòu)比較復(fù)雜、數(shù)據(jù)通路多,數(shù)據(jù)之間的依賴(lài)關(guān)系復(fù)雜,這種場(chǎng)景下,并行計(jì)算之間的流水如何排布,各任務(wù)間的數(shù)據(jù)同步如何實(shí)現(xiàn),往往是比較困難的。

為了方便開(kāi)發(fā)者實(shí)現(xiàn)高效的并行計(jì)算,昇騰Ascend C采用SPMD(Single-Program Multiple-Data)并行模式,開(kāi)發(fā)者僅需關(guān)注一個(gè)計(jì)算核心上的算子程序?qū)崿F(xiàn),程序調(diào)用時(shí),可自動(dòng)啟動(dòng)N個(gè)運(yùn)行實(shí)例(我們稱(chēng)之為Block),每個(gè)實(shí)例都可部署到不同的計(jì)算核心上執(zhí)行。由此,大大簡(jiǎn)化了開(kāi)發(fā)者在多個(gè)計(jì)算核心上的并行編程邏輯。

單程序多數(shù)據(jù)SPMD并行計(jì)算

在算子邏輯實(shí)現(xiàn)上,昇騰Ascend C基于流水線(xiàn)并行的編程范式,將算子核心邏輯劃分為“搬入、計(jì)算、搬出”,開(kāi)發(fā)者只需聚焦實(shí)現(xiàn)“搬入、計(jì)算、搬出”內(nèi)容,程序運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)將核內(nèi)數(shù)據(jù)進(jìn)行分片,每一片數(shù)據(jù)都專(zhuān)注完成單一功能,實(shí)現(xiàn)計(jì)算性能最大化。

核內(nèi)多片數(shù)據(jù)流水線(xiàn)并行調(diào)度

孿生調(diào)試

昇騰Ascend C提供的多層級(jí)類(lèi)庫(kù)接口以及自動(dòng)并行計(jì)算功能,給開(kāi)發(fā)者提供了輕松高效的編碼體驗(yàn)。但在上一代算子開(kāi)發(fā)的整個(gè)流程中,代碼編寫(xiě)的時(shí)間往往僅占不到30%,剩下70%多的時(shí)間都在進(jìn)行功能與性能調(diào)試,好的調(diào)試能力對(duì)提升端到端開(kāi)發(fā)效率的重要性不言而喻。

開(kāi)發(fā)時(shí)間占比示例

那為什么算子調(diào)試如此耗時(shí)呢?究其主要原因,一方面是由于NPU環(huán)境下本身調(diào)試?yán)щy,另一方面是因?yàn)榫幊踢^(guò)程隱藏了并行細(xì)節(jié),導(dǎo)致同步死鎖、地址越界、數(shù)據(jù)溢出等問(wèn)題難定位。

為提升算子調(diào)試效率,昇騰Ascend C提供了孿生調(diào)試能力,開(kāi)發(fā)者既可以在CPU域進(jìn)行調(diào)試調(diào)優(yōu),又可以在NPU域進(jìn)行調(diào)優(yōu)驗(yàn)證,通過(guò)CPU域與NPU域相結(jié)合的方式,降低調(diào)試難度,提升調(diào)試效率。

在CPU域,開(kāi)發(fā)者可通過(guò)業(yè)界標(biāo)準(zhǔn)C++工具GCC編譯器進(jìn)行編譯,并通過(guò)GDB通用調(diào)試工具進(jìn)行單步調(diào)試,精準(zhǔn)驗(yàn)證程序執(zhí)行流程是否符合預(yù)期。另外,昇騰Ascend C還提供了主動(dòng)Bug分析工具,方便開(kāi)發(fā)者快速進(jìn)行問(wèn)題定位;在NPU域,昇騰Ascend C提供了仿真調(diào)試能力與上板調(diào)試能力,開(kāi)發(fā)者可以通過(guò)仿真調(diào)試的Profiling流水圖、指令日志以及數(shù)據(jù)日志,精準(zhǔn)進(jìn)行性能調(diào)優(yōu),也可以通過(guò)上板調(diào)試進(jìn)行真實(shí)行為的驗(yàn)證。孿生調(diào)試的能力,在提升算子調(diào)試效率的同時(shí)又可保證精度與性能的達(dá)標(biāo)。

昇騰Ascend C孿生調(diào)試

人工智能蓬勃發(fā)展,算法創(chuàng)新層出不窮。昇騰Ascend C編程語(yǔ)言通過(guò)易上手、高性能、易調(diào)測(cè)的優(yōu)勢(shì),為開(kāi)發(fā)者的創(chuàng)新算法更輕松高效地運(yùn)行奠定了基石,讓基于昇騰的AI創(chuàng)新更加簡(jiǎn)單。

昇騰Ascend C算子開(kāi)發(fā)快速體驗(yàn)


(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )

贊助商
2023-06-08
CANN黑科技解密|昇騰Ascend C編程語(yǔ)言 — 極簡(jiǎn)易用的算子開(kāi)發(fā)體驗(yàn)
為了讓開(kāi)發(fā)者的網(wǎng)絡(luò)在昇騰硬件上高效運(yùn)行,昇騰異構(gòu)計(jì)算架構(gòu)CANN(Compute Architecture for Neural Networks)提供了豐富的高性能算子庫(kù),包括神經(jīng)網(wǎng)絡(luò)庫(kù)、線(xiàn)性代數(shù)計(jì)算庫(kù)等,高性能算子數(shù)量達(dá)到1400+。

長(zhǎng)按掃碼 閱讀全文