Transformer架構(gòu)中矩陣乘法(GEMM, General Matrix Multiplication)計(jì)算占據(jù)較高比重,其性能優(yōu)化對(duì)提升整體計(jì)算效率至關(guān)重要。針對(duì)GEMM類算子編程,由于不同應(yīng)用場(chǎng)景和優(yōu)化目標(biāo)存在差異,其實(shí)現(xiàn)變體呈現(xiàn)多樣化特征;同時(shí),隨著算法持續(xù)演進(jìn)和創(chuàng)新,還會(huì)不斷產(chǎn)生新的定制化開發(fā)需求,這些需求往往難以通過預(yù)先枚舉的方式全面覆蓋。直接基于硬件底層能力進(jìn)行GEMM類算子的定制開發(fā),不僅技術(shù)門檻較高,還存在開發(fā)周期過長(zhǎng)的問題。為此,昇騰CANN推出CATLASS算子模板庫(kù),采用分層模塊化設(shè)計(jì),通過將GEMM計(jì)算解耦為數(shù)據(jù)分塊策略、計(jì)算單元配置等多個(gè)可靈活組合的功能組件,構(gòu)建了一套支持快速搭建與組合的開發(fā)范式。
CATLASS算子模板庫(kù)通過提供可復(fù)用的模板、基礎(chǔ)組件和典型算子實(shí)踐案例,面向昇騰硬件進(jìn)行了深度優(yōu)化。這種設(shè)計(jì)使得開發(fā)者能夠基于模塊化組裝方式,快速完成計(jì)算流水線編排。同時(shí),開發(fā)者可以根據(jù)具體硬件特性和計(jì)算需求,靈活定制計(jì)算內(nèi)核實(shí)現(xiàn)方案,在確保高性能的同時(shí),顯著提升開發(fā)效率。
算子實(shí)現(xiàn)分層模塊化設(shè)計(jì)
CATLASS采用分層抽象的設(shè)計(jì)理念,通過分析硬件架構(gòu)特性和GEMM計(jì)算需求,將整體實(shí)現(xiàn)按照計(jì)算粒度自上而下分層設(shè)計(jì)。Device層是算子在Host側(cè)的調(diào)用接口,提供完整算子能力;Kernel層則體現(xiàn)算子在NPU上的完整實(shí)現(xiàn),涉及多個(gè)計(jì)算核的并行計(jì)算;Block層包含單個(gè)AI核的計(jì)算過程;Tile層則由數(shù)據(jù)搬入、數(shù)據(jù)計(jì)算、數(shù)據(jù)搬出等步驟組成,可通過最底層Basic層的指令組裝實(shí)現(xiàn)。
該設(shè)計(jì)通過模板化方式提取各層共性邏輯,同時(shí)保留必要的差異化擴(kuò)展能力,使得不同層級(jí)的軟件抽象能夠精準(zhǔn)對(duì)應(yīng)到特定硬件結(jié)構(gòu)和計(jì)算流水階段。算法框架中的特定步驟會(huì)延遲到子類實(shí)現(xiàn),使得子類能夠在不改變算法整體結(jié)構(gòu)的情況下,靈活重定義其中的某些關(guān)鍵步驟。
算子流水自定義靈活配置
CATLASS提供了靈活的開發(fā)方式,開發(fā)者可以復(fù)用預(yù)置的范式來(lái)快速實(shí)現(xiàn)基礎(chǔ)功能,也能夠針對(duì)特定需求修改模塊進(jìn)行定制開發(fā),還可以通過更換組件來(lái)實(shí)現(xiàn)自定義的流水組合。這種設(shè)計(jì)在保證計(jì)算性能的同時(shí),為開發(fā)者提供了充分的靈活性和可拓展空間。
高性能算子實(shí)現(xiàn)樣例
CATLASS針對(duì)不同算子應(yīng)用場(chǎng)景,提供了高性能的算子基礎(chǔ)組件和算子模板實(shí)現(xiàn)樣例。樣例中包含了在昇騰硬件上可參考的實(shí)現(xiàn),如高效數(shù)據(jù)搬運(yùn)模式,異步流水編排技巧,高性能接口使用示例?;谶@些示例,開發(fā)者可以充分學(xué)習(xí)理解昇騰硬件的性能優(yōu)化技術(shù),從而針對(duì)各種優(yōu)化實(shí)現(xiàn)場(chǎng)景高效完成自定義算子開發(fā)。相關(guān)樣例在從上至下完全開源可參考。
高性能算子組件復(fù)用,開發(fā)效率顯著提升
CATLASS針對(duì)Matmul和FA等算子的kernel性能優(yōu)化場(chǎng)景,提供了高效的編程實(shí)現(xiàn)方案。在保持計(jì)算性能的同時(shí),能夠提升代碼的復(fù)用程度,縮短開發(fā)周期。當(dāng)前代碼倉(cāng)已經(jīng)提供了高性能的Block和Tile層級(jí)代碼模塊50+,開發(fā)者可以通過復(fù)用已有模塊快速拼裝出自定義高性能算子,從而顯著縮短開發(fā)周期。在算子樣例中在Matmul算子的K軸優(yōu)化實(shí)現(xiàn)中,開發(fā)周期從原先的2人周縮短至1人周;在MLA相關(guān)優(yōu)化特性開發(fā)中,周期從8人周縮減至4人周。
定制場(chǎng)景算子性能提升
模板庫(kù)針對(duì)定制場(chǎng)景使能快速開發(fā)能力,提供不同場(chǎng)景下的性能優(yōu)化模塊供開發(fā)者組裝定制,算子在定制shape下的模型性能相比相應(yīng)算子標(biāo)桿性能提升5%-10%。
CATLASS算子模板庫(kù)使用流程
以GroupedMatmul為例,以下代碼示例將展示如何基于CATLASS算子模板庫(kù)快速開發(fā)實(shí)現(xiàn)算子,教您三步完成QuantGroupedMatmul算子定制組裝。(注:以下為示例代碼,完整代碼請(qǐng)參考開源代碼倉(cāng)內(nèi)的算子模板樣例)
第一步:指定輸入大小,申請(qǐng)?jiān)O(shè)備空間
第二步:指定輸入信息及模板算子所需切分信息
2.1 指定硬件類型、切塊大小、輸入類型
2.2 指定算子計(jì)算需要的分核、切分策略等基礎(chǔ)組件,并完成拼裝
第三步:指定模板Kernel,即可調(diào)用
模板庫(kù)代碼倉(cāng)開源,未來(lái)持續(xù)演進(jìn)
CATLASS算子模板庫(kù)在Gitee已正式上線,地址為https://gitee.com/ascend/catlass。當(dāng)前支持A2/A3平臺(tái),提供OptmizedMatmul等20多個(gè)代碼樣例。未來(lái),昇騰會(huì)持續(xù)升級(jí),在近期會(huì)上線更多高性能的算子樣例,如FA和Conv等。算子模板庫(kù)社區(qū)的繁榮,離不開廣大開發(fā)者的支持,歡迎各位下載使用,并在自定義開發(fā)之后將開發(fā)成果貢獻(xiàn)至開源倉(cāng),社區(qū)會(huì)定期評(píng)選優(yōu)秀開發(fā)者并給予對(duì)應(yīng)激勵(lì),感謝廣大開發(fā)者的支持。
(免責(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)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )