如何使用MLIR工具鏈訪問(wèn)AMD NPU
在這個(gè)項(xiàng)目中,遵循Xilinx mlr - aie GitHub存儲(chǔ)庫(kù)中提供的說(shuō)明,在Ubuntu上建立一個(gè)功能開(kāi)發(fā)環(huán)境,并在AMD Ryzen?AI NPU上執(zhí)行示例mlr - aie程序。目標(biāo)是完成完整的設(shè)置工作流程,其中包括安裝所需的工具鏈,配置系統(tǒng)依賴關(guān)系,并使用mlr -AIE框架構(gòu)建簡(jiǎn)單的AI引擎(AIE)設(shè)計(jì)。環(huán)境準(zhǔn)備好后,將編譯包括的示例應(yīng)用程序并將其部署到NPU中,以驗(yàn)證軟件工具和硬件平臺(tái)之間的正確集成。
此過(guò)程演示了為AMD Ryzen AI開(kāi)發(fā)準(zhǔn)備系統(tǒng)的實(shí)用方法,提供了對(duì)工具安裝,環(huán)境配置和mlr - aie應(yīng)用程序執(zhí)行流程的見(jiàn)解。示例程序的成功執(zhí)行證實(shí)了開(kāi)發(fā)管道(從基于mlr的設(shè)計(jì)到硬件執(zhí)行)的功能符合預(yù)期,為未來(lái)的實(shí)驗(yàn)和定制AIE應(yīng)用程序開(kāi)發(fā)奠定了基礎(chǔ)。
AMD NPU (Neural Processing Unit)是集成在AMD Ryzen AI系列中的專用AI加速器。下面我們來(lái)看看
?系統(tǒng)配置
?Bios設(shè)置的變化
?工具鏈安裝
?如何設(shè)置環(huán)境?
?如何在AMD NPU上運(yùn)行樣例測(cè)試用例并驗(yàn)證其執(zhí)行?
?示例測(cè)試用例參考
系統(tǒng)配置
這個(gè)過(guò)程從Ubuntu 24.04的干凈安裝開(kāi)始,確保筆記本電腦更新到最新的BIOS版本,并啟用了NPU支持。
修改BIOS設(shè)置
然后確認(rèn)在BIOS中禁用安全引導(dǎo)以允許使用未簽名驅(qū)動(dòng)程序。# BIOS→安全→安全啟動(dòng)→禁用
由于Ubuntu 24.04帶有較舊的內(nèi)核,更新到硬件支持(HWE)堆棧以獲得Linux內(nèi)核6.11+:
工具鏈安裝
使用提供的安裝腳本安裝了Ryzen AI NPU的XDNA驅(qū)動(dòng)程序和XRT。
重啟后,檢查NPU是否被檢測(cè)到:
克隆了MLIR-AIE存儲(chǔ)庫(kù),并為項(xiàng)目設(shè)置創(chuàng)建了專用的Python虛擬環(huán)境。
作為開(kāi)發(fā)環(huán)境準(zhǔn)備的一部分,安裝了最新版本的mlr - aie和LLVM-AIE。
如何設(shè)置環(huán)境?
配置了所需的執(zhí)行環(huán)境變量,以確保工具和庫(kù)的正確集成。
如何在AMD NPU上運(yùn)行示例并驗(yàn)證執(zhí)行?
導(dǎo)航到mlir-aie/programming_examples/中提供的編程示例之一,并構(gòu)建AIE設(shè)計(jì):在測(cè)試用例路徑上使用make命令構(gòu)建設(shè)計(jì):
獲得XRT環(huán)境,并在單獨(dú)的終端中執(zhí)行無(wú)限監(jiān)控腳本,以觀察AI Engine活動(dòng)。
sh腳本觸發(fā)無(wú)限次NPU狀態(tài)檢查。在成功構(gòu)建完成后,主機(jī)應(yīng)用程序被編譯并執(zhí)行,以在Ryzen AI NPU上運(yùn)行設(shè)計(jì)。
這觸發(fā)了MLIR-AIE運(yùn)行時(shí),它將計(jì)算卸載到NPU。我們可以立即看到加速的結(jié)果。
下面是示例執(zhí)行和驗(yàn)證的輸出:
示例測(cè)試用例參考:
?直通dma -此設(shè)計(jì)演示了數(shù)據(jù)移動(dòng),以實(shí)現(xiàn)使用對(duì)象fifo的內(nèi)存操作,僅使用dma而不涉及AIE核心。
?直通內(nèi)核——這個(gè)設(shè)計(jì)演示了一個(gè)簡(jiǎn)單的AIE實(shí)現(xiàn),在涉及AIE核心內(nèi)核編程的整數(shù)向量上實(shí)現(xiàn)向量化內(nèi)存。
?Vector Scalar Add- Single tile執(zhí)行一個(gè)非常簡(jiǎn)單的+操作,內(nèi)核從本地內(nèi)存加載數(shù)據(jù),將值加1并將其存儲(chǔ)回來(lái)。
本文編譯自hackster.io





