關鍵詞:STM32N6、生物神經元、神經網絡處理單元(NPU)、數據流處理
參考鏈接:
- RM0486 Reference manual STM32N647/657xx Arm?-based 32-bit MCUs
- ST_中文論壇【資料合集】STM32N6超全資料合集(定期更新)
- B站_卷積神經網絡(CNN)到底卷了啥?8分鐘帶你快速了解!
文章目錄
- 前言
- 名詞解釋
- 一、從神經網絡到數據流處理
- 1.0 從神經元到神經網絡
- 1.1 卷積神經網絡(CNN)
- 1.2 ST流處理技術
- 二、NPU功能描述
- 2.0 NPU內部結構圖
- 2.1 時鐘/復位管理器
- 2.2 流鏈路(Stream link)
- 2.3 流交換機(Stream switch)
- 2.4 流引擎(Stream engines)
- 2.5 加密 / 解密單元(Encryption/Decryption unit)
- 2.6 解壓縮單元(Decompression unit)
- 2.7 卷積加速器(Convolutional accelerator,CA)
- 2.8 池化單元 (Pooling unit)
- 2.9 激活單元 (Activation unit)
- 2.10 算術運算單元 (Arithmetic unit)
- 2.11 可重構緩沖區(Reconfigurable buffer)
- 2.12 執行周期控制器 (Epoch controller)
- 2.13 中斷控制器(Interrupt controller)
- 三、NPU流處理示例
- 3.1 直接內存訪問(DMA)傳輸
- 3.2 簡單處理
- 3.3 多重處理架構
- 3.4 卷積 - 池化 - ReLU 虛擬鏈
- 總結
前言
先來簡單介紹一下STM32N6 NPU相關性能。
STM32N6基于運行頻率達800 MHz的Arm? Cortex?-M55處理器,是首款引入Arm Helium向量處理技術的CPU,為標準CPU增添DSP處理能力。
STM32N6是首款內嵌意法半導體自主研發的神經處理單元 (NPU)——ST Neural-ART accelerator?的STM32 MCU,專為節能型邊緣AI應用而設計。其時鐘頻率高達1 GHz,計算性能可達600 GOPS,可為計算機視覺和音頻應用提供實時神經網絡推理能力 。
配備MIPI CSI-2接口和圖像信號處理 (ISP) 的專用計算機視覺處理管線,確保兼容多種類型的攝像頭。STM32N6還具有H264硬件編碼器和NeoChrom?圖形加速器,適用于功能豐富的產品開發。
它提供4.2 MB的連續嵌入式RAM,是神經網絡或圖形應用的理想選擇,并輔以高速外部存儲器接口(hexa-SPI、OCTOSPI、FMC)。
名詞解釋
對STM32N6 NPU IP使用到的功能單元名詞定義 做一下簡單解釋記錄
1) STRSWITCH (Central data stream switch) :中央數據流開關,可配置數據流架構(流交換機)
2) DECUN (Decompression unit) :壓縮單元
3) CONVACC (Convolutional accelerator) :卷積加速器
4) POOL:池化單元
5) ACTIV (Arithmetic unit) :激活單元
6) ARITH:用于算術運算的可重構緩沖區
7) RECUBF (Reconfigurable buffer) :可重構緩沖區
8) STRENG (Stream engines) :嵌入式加密引擎
9) BUSIF:64位AXI接口
10)EPOCH (Epoch controller) : 輪次周期。CNN 模型執行由稱為 “epochs(輪次)” 的不可分割處理序列組成。當整個卷積神經網絡(CNN)無法完全適配現有的 NPU 硬件資源時,需將其分割成基本子集,即 “epoch”(輪次 ),以便最大程度利用 NPU 資源。這類似于把大任務拆分成小任務,使 NPU 能更好處理。一個卷積神經網絡被映射為一組輪次,并按順序執行。
硬件輪次:從主機 CPU 配置 NPU 開始,到向 CPU 發回中斷結束
11)Processing unit(PU): 處理單元
一、從神經網絡到數據流處理
1.0 從神經元到神經網絡
我們先來看一下生物神經元,生物神經元有三個主要的組成部分:
- 樹突 – “輸入” ,從其他的神經元獲取電脈沖輸入
- 細胞核 –“處理器”,做出推斷并決定要采取的行動
- 突觸–“輸出”,將輸出以電脈沖的形式發送給其他神經元
由生物神經元,從而引申到人工神經元。人工神經元由輸入、權重、求和、激活函數(引入非線性)、輸出部分組成。
由多個神經元組成神經網絡,神經網絡主要包括: - 輸入層,從其他的神經元或特征輸入
- 隱藏層(一個或多個),進行中間的處理
- 輸出層,給出我們預想的結果
1.1 卷積神經網絡(CNN)
下面我們來看一個簡單的神經網絡應用。
假設是對圖片數字7進行識別,分為以下幾個步驟:
1)選取垂直特征與水平特征卷積核,原始數據與卷積核做卷積
2)特征圖提取到水平特征與垂直特征
3)最大池化— 將特征圖中的數據進一步壓縮,僅僅反應特征圖中最突出的特點
4)扁平化后的數據,經過全連接隱藏層,產生數字屬于0-9的概率
引申到硬件NPU數據流處理:
NPU(神經網絡處理單元)是專門為加速神經網絡計算而設計的硬件模塊。它能夠高效地處理卷積、矩陣乘法等在人工智能 / 機器學習算法中常見的計算密集型操作。與通用處理器相比,NPU 在處理這些特定任務時具有更高的性能和更低的功耗,大大提高了人工智能 / 機器學習應用程序的運行效率
1.2 ST流處理技術
ST流處理引擎(架構)如下圖所示:
ST 流處理技術支持創建按需定制的性能與面積優化實例,以適配從低端到高端的各類人工智能(AI)應用。
ST的流處理(Stream processing)技術,其核心是一個可配置的數據流架構(也稱為流交換機),該架構可通過在運行時編程構建任意處理單元(PU)的虛擬鏈,實現所需的操作序列。在硬件資源充足的情況下,支持多個虛擬鏈同時運行。
二、NPU功能描述
2.0 NPU內部結構圖
NPU內部結構圖如下所示。
- 可重構緩沖區:接收并緩存輸入數據,然后將其提供給后續的神經網絡單元。比如扁平化后的數據,先放在這,然后等待進入神經網絡的輸入層。
- 流鏈路:數據來了,經過流交換機的配置,分成不同的路徑去處理。比如從流交換機到卷積加速器,需要有條路過去,這條路可以稱為流鏈路。
- 流交換機:決定數據流的傳輸路徑。來了數據之后,如何進行處理呢?此時,流交換機去決定數據傳輸路徑。
- 解壓縮單元:解壓縮單元是 NPU 中負責高效恢復量化 / 壓縮模型數據的專用模塊,其核心作用是在不顯著損失精度的前提下,大幅降低模型存儲和計算開銷。之前經過量化的模型部署到我的NPU端,利用解壓縮單元,可以恢復出完整的數據。
當NPU配置并啟動后,NPU加速器會自動從外部內存中獲取數據以供內部動態互聯的處理單元使用。同樣,操作序列的結果也會被刷新到外部內存。
NPU通過以下方式連接到系統:
- 一個AHB端口,用于配置和控制AI模型的執行
- 兩個完全對稱的AXI接口,用于獲取數據和權重,并刷新輸出。
2.1 時鐘/復位管理器
該單元的功能分為兩個部分:
- 時鐘控制(Clock control)。
CLK CTRL,NPU 使用由 RCC(復位與時鐘控制器)提供的單個功能時鐘。該輸入時鐘被送入時鐘控制單元,經門控處理后分發給 IP 內核的不同單元。時鐘控制則是對對 RCC 輸入的時鐘進行門控管理,通過配置寄存器和編譯器生成的代碼,動態控制各單元的時鐘啟用 / 關閉。 - 復位控制。
同步 RCC 提供的復位信號,支持通過寄存器操作觸發 NPU 全局復位。該單元通過標準化接口(RCC)實現對 NPU 內部時鐘和復位信號的集中調度與配置。
2.2 流鏈路(Stream link)
流鏈路是一種單向互聯通道,用于在加速器單元、流引擎、接口與流交換機之間實現數據流的傳輸。
通過流鏈路,NPU數據在不同功能模塊之間的高效搬運,同時通過信令適配機制,讓硬件能自動靈活的處理多種類型的數據,這是NPU支持復雜神經網絡的底層基礎。
流內容包含數據、消息 / 命令,以及附加的信令信息。
- 靈活的傳輸車道。數據傳輸通過 3 條 8 位寬的數據通道實現,這些通道可獨立工作,也可組合為 1 條 24 位的傳輸通道。
- 數據流支持多種格式:光柵掃描格式可自動識別特征張量的幾何參數(寬 / 高),原始數據格式則需通過編程配置解析參數。
- 信令信息用于標識數據流的有效性,包括數據類型、格式定義,以及首尾幀標記。
- 數據類型標記:指示傳輸的是圖像數據、文本數據還是其他類型
- 格式標記:說明數據是 “光柵掃描格式” 還是 “原始格式”
- 邊界標記:類似快遞包裹上的 “起點” 和 “終點” 標簽,指示數據流的開始(如第一幀圖像)和結束(如最后一個像素)。
舉例:卷積神經網絡的特征圖傳輸
假設我們有一個 CNN 模型,輸入是一張 28×28 像素的灰度圖像(單通道),經過卷積層處理后輸出特征圖。
- 光柵掃描格式:自動識別的 “標準化快遞”
- 數據格式:
圖像數據按行優先順序排列(如第一行像素 1→2→3…,第二行像素 29→30→31…),類似掃描打印紙的順序。 - 流鏈路傳輸過程:
- 輸入圖像從“接口” 通過流鏈路傳輸到“流交換機”,再轉發給“卷積加速器”
- 流鏈路上的信令信息自動標記:“這次傳輸為光柵掃描格式的圖像數據,寬 = 28, 高=28” 。
- 卷積加速器無需額外的參數,根據信令信息解析數據吃吃,開始卷積運算
-優勢:適用于規則的張量數據(如圖像、視頻),無需人工編程解析參數,類似標準化的集裝箱,開箱即可用。
- 數據格式:
- 原始數據格式:自定義解析的“特殊包裹”
- 數據格式:
數據以非規則形式存儲(如壓縮后的權重、稀疏矩陣),例如只存儲非零值的位置和數值。 - 流鏈路傳輸過程:
- 壓縮后的模型權重從 “流引擎” 通過流鏈路傳輸到 “解壓縮單元”
- 流鏈路的信令信息標記:“這是原始格式的數據,需要用特定碼本解析”。
- 解壓縮單元必須通過編程提前配置碼本參數(如量化方式、稀疏索引規則),才能正確解壓數據
2.3 流交換機(Stream switch)
數據路由的“智能交通樞紐” (決定數據流的傳輸路徑)
流交換機可根據配置寄存器中的參數設置,動態建立輸出與輸入流鏈路端口之間的連接。
任意輸入端口均可同時向單個或多個輸出端口轉發數據流(支持多播模式),實現數據流的復制傳輸。
當兩個流鏈路接入同一輸出端口時,系統通過時分上下文切換機制對輸出數據進行調度管理。
舉例:圖像卷積處理
假設我們有一個 NPU 正在處理一張 28×28 的圖像,使用 3 個并行的卷積加速器(加速器 A、B、C):
- 輸入數據路由:(對輸入的數據進行轉發)
- 圖像數據通過 “輸入流鏈路 0” 進入流交換機
- 配置寄存器設置: “輸入流鏈路 0 的數據同時轉發到加速器 A、B、C 的輸入流鏈路”(多播模式)
- 效果:同一圖像數據被復制 3 份,并行進入 3 個加速器,同時進行卷積計算,加速處理速度。
- 輸出數據復用
- 加速器 A 和 B 的輸出需要通過 “輸出流鏈路 X” 傳輸到池化單元,但輸出流鏈路 X 同一時間只能接收一路數據
- 配置寄存器設置: “加速器 A 的數據在第 1 個時鐘周期傳輸,加速器 B 的數據在第 2 個時鐘周期傳輸”(時分上下文切換)
- 效果:兩個加速器的輸出按時間順序輪流使用同一輸出鏈路,避免數據碰撞,同時充分利用帶寬
通過流交換機,NPU 可以根據神經網絡模型的需求(如并行層、分支結構)動態調整數據流動路徑,就像靈活的交通調度系統,讓數據在正確的時間流向正確的處理單元,從而高效完成復雜的 AI 計算任務。
2.4 流引擎(Stream engines)
流引擎負責系統與處理單元之間的雙向數據交互,每個引擎通過一進一出兩條流鏈路與流交換機相連。
- 支持 2D/3D 數據結構表示
- 具備間隔管理能力(支持交錯數據訪問)
- 數據格式可高度定制(包括數據尺寸、舍入規則、采樣策略、帶符號擴展的高低位對齊方式等)同時,流引擎還提供鏈表操作支持。
2.5 加密 / 解密單元(Encryption/Decryption unit)
總線接口內嵌了基于 Keccak-p [200] SHA-3 算法的輕量級加解密引擎,具備低延遲特性,支持輪數可編程配置,并可被多個流引擎共享使用。該單元同時支持模型權重和激活值的端到端加解密處理。
該單元通過硬件級集成,為 AI 計算系統提供了輕量級的端到端數據安全保障,尤其適用于對延遲敏感的邊緣計算場景。
2.6 解壓縮單元(Decompression unit)
該單元支持對內核權重的標量量化數據(支持任意量化函數)和向量量化權重組進行實時解碼。
采用有損壓縮策略,將 n 維空間劃分為多個子體積,每個子體積通過質心進行描述,劃分過程旨在最小化預定義失真函數。通過僅存儲質心值,可顯著降低信號空間的存儲開銷。
量化函數和向量量化碼本(CB)由 NPU 編譯器工具鏈的離線組件生成。編碼器將輸入值域映射到有限的有理數值集合(即碼本),碼本中的每個元素稱為代碼向量,每個代碼向量包含最多 8 個碼字。單個碼本最大容量為 256 個代碼向量(CV)。
解壓縮單元通過雙輸入單輸出的流鏈路結構與流交換機連接:
- iSL0:輸入 8 位索引值,用于尋址待解壓數據
-iSL1:輸入原始數據,用于動態更新碼本內容
2.7 卷積加速器(Convolutional accelerator,CA)
作為 NPU 的運算核心,卷積加速器集成了多組乘積累加(MAC)引擎,專為神經網絡中常見的 3×3 卷積運算提供定點加速支持。支持 8/16 位動態精度配置,可根據模型需求靈活調整算力與精度的平衡點。
卷積加速器通過三條輸入流鏈路和一條輸出流鏈路與流交換機連接:
- iSL0:接收 8 位或 16 位的光柵掃描格式或原始格式特征數據。數據先通過比特率適配流緩沖區,再經特征數據預處理單元處理后存入特征行緩沖區。
- iSL1:接收 8 位或 16 位的光柵掃描格式或原始格式內核數據。
- oSL:輸出 8 位或 16 位的光柵掃描格式或原始格式卷積結果流,支持最高 24 位有符號數據值。
- iSL2:可接收 24 位有符號中間累加值,用于與卷積結果累加。
核心算力
-采用 18 核 MAC 陣列設計(6 組 ×3 核 / 組) - 單周期算力:
- 16×16 定點:18 次運算
- 16×8 定點:36 次運算
- 8×8 定點:72 次運算
- 支持有符號 / 無符號混合運算模式
預處理流水線:
- 智能格式解析:自動識別光柵掃描 / 原始數據格式
- 數值規范化:包含移位、舍入和飽和處理單元
- ROI 提取:支持水平 / 垂直方向特征裁剪
- 張量擴展:動態生成零填充幀,優化邊緣計算
- 大卷積核處理:通過分塊迭代策略支持超過 3×3 的卷積運算
2.8 池化單元 (Pooling unit)
該單元支持局部二維窗口(MxN)的最小值、最大值、平均值池化操作,以及全局最大值、最小值或平均值池化。
支持的特性包括:
- 最大 3×3 尺寸的池化窗口
- 水平和垂直步長范圍為 1 至 15
- 批處理大小范圍為 1 至 8
- 左、右、上邊緣填充范圍為 0 至 7
- 下邊緣填充根據窗口高度動態調整
池化單元通過一個輸入流和一個輸出流連接到流交換機: - iSL:接收激活輸入值作為掃描行或原始數據。輸入值飽和到 16 位
- oSL:生成原始數據形式的池化輸出
2.9 激活單元 (Activation unit)
主要實現與卷積神經網絡相關的激活函數。它提供了一條專用路徑來計算類似于普通、參數化和閾值 ReLU 的激活。
該單元通過一個輸入流鏈接和一個輸出流鏈接連接到流開關。
- iSL:接收激活輸入值作為掃描行或原始數據。輸入值飽和到 16 位。
- oSL:以原始數據形式產生結果輸出。
2.10 算術運算單元 (Arithmetic unit)
該單元可直接處理來自卷積加速器的輸出數據,其核心功能是實現 線性組合運算 aX + bY + c,其中:
- X、Y 為通過兩條輸入流鏈路接口提供的輸入數據流
- a、b、c 為預加載到內部存儲器的常量(通過配置接口寫入),支持標量或向量兩種形式
該單元憑借兩條輸入流鏈路及一條輸出流鏈路與流交換機實現連接。 - iSL0 和 iSL1:接收按光柵掃描格式或原始數據格式呈現的輸入值,分別標記為 X 和 Y。對輸入值進行飽和處理,將其轉化為 16 位數據。
- oSL:以原始數據的形式輸出經運算得到的結果
2.11 可重構緩沖區(Reconfigurable buffer)
在神經網絡的運算中,一般會采用按通道的數據分割策略,對需要處理的數據量進行劃分。隨后,沿著三個空間維度,將數據以執行周期和通道數據塊的形式進行組織。在構建數據塊時,會綜合考慮通道的數量以及輸入數據的規模。從不同數據塊輸出的部分數據,必須經過重新編排,才能在后續的神經網絡層或模塊中被使用。
可重構緩沖區負責接收并緩存輸入數據,然后將其提供給后續的神經網絡單元。這一機制在避免數據處理過程中出現死鎖現象方面發揮著重要作用,保障了神經網絡運算的流暢性。
以圖像數據在神經網絡中的處理場景為例進行說明:假設我們正在處理一個圖像分類任務,使用的神經網絡結構包含卷積層、池化層等。輸入的圖像數據尺寸為 3 x 28 x 28,即有 3 個通道(如 RGB 通道),圖像尺寸為 28 x 28像素。
數據分割:
采用按通道的數據分割策略。將輸入圖像數據按通道分割,即把 RGB 三個通道的數據分開處理。這樣,每個通道的數據可以獨立進行后續操作。
數據組織:
沿著三個空間維度(這里是通道維度、高度維度、寬度維度),以執行周期和通道數據塊的形式組織數據。例如,我們可以將每個通道的數據進一步劃分為大小為 4 x 4 的數據塊(當然,實際應用中數據塊大小會根據具體情況調整)。
可重構緩沖區的作用:
當這些數據塊從輸入層進入神經網絡時,可重構緩沖區會接收并存儲這些數據。
2.12 執行周期控制器 (Epoch controller)
執行周期控制器賦予了 NPU(神經網絡處理單元)獨立于主機 CPU 的運行能力。主機 CPU 僅需提供一個指向 64 位對齊的 “二進制數據塊” 的指針,該數據塊存儲于可通過 AXI 接口(高級可擴展接口)訪問的內存區域,并且此二進制數據塊支持加密保護。
執行周期控制器的核心組件是有限狀態機(FSM),它對控制微指令進行解析,憑借對 NPU 內部配置總線的直接訪問,精準配置參與模型運算的所有處理單元,確保神經網絡模型的高效執行。
NPU 的同步機制基于中斷原理。其支持的分步操作模式,允許逐次執行單條微指令。執行操作由向中斷請求(IRQ)寄存器中的特定位寫入數據來激活。
該控制器釋放了高級高性能總線(AHB)的控制總線資源,以供其他模塊使用,并通過優化 NPU 的編程流程,顯著提升了系統性能。二進制數據塊經由 AXI 接口獲取,AXI 接口具備比 AHB 更高的帶寬,保障了數據的高效傳輸。對內部配置總線的直接訪問,使得數據傳輸繞開了所有外部總線結構,避免了主機處理器事務在外部總線結構中的繁瑣傳輸過程。
2.13 中斷控制器(Interrupt controller)
功能單元能夠生成電平敏感的高電平有效中斷。這些中斷由中斷控制器收集,被路由到四條主中斷線路,并轉發給主機 CPU。
當主中斷觸發時,主機 CPU 必須讀取中斷寄存器(INTREG)以識別當前中斷信號的來源。中斷向四條主中斷線路的路由以及選擇性使能由中斷或屏蔽寄存器(INTORMSK)和中斷與屏蔽寄存器(INTANDMSK)控制,這兩個寄存器的位數與中斷源的數量相同。
- 中斷或屏蔽寄存器(INTORMSK):如果有任何未被屏蔽的中斷處于激活狀態,中斷就會被轉發。
- 中斷與屏蔽寄存器(INTANDMSK):只有當所有未被屏蔽的中斷都處于激活狀態時,中斷才會被轉發。
中斷控制器在神經網絡系統中扮演著關鍵角色,主要負責以下幾個方面:
- 中斷信號處理:收集功能單元產生的電平敏感高電平有效中斷,并將其路由到主中斷線路,轉發給主機 CPU。
- 中斷源識別:在主中斷觸發時,主機 CPU 通過讀取 INTREG 寄存器來確定中斷信號的來源,以便進行后續處理。
- 中斷路由與控制:INTORMSK 寄存器和 INTANDMSK 寄存器對中斷的路由和選擇性使能進行控制。INTORMSK 寄存器在有未屏蔽中斷激活時轉發中斷;INTANDMSK 寄存器則要求所有未屏蔽中斷都激活時才轉發中斷,從而實現對中斷的精細管理,確保神經網絡系統的穩定運行。
三、NPU流處理示例
接下來介紹一些流處理的簡單示例。
3.1 直接內存訪問(DMA)傳輸
最簡單的處理鏈包含一個輸入流處理器和一個輸出流處理器,二者首尾相連。這種配置方式(盡管并非其主要設計用途)可將 NPU(神經網絡處理單元)轉變為一個高帶寬的直接內存訪問(DMA)控制器。
可以放在以下得到幾種應用場景中:
- 數據預處理:在模型推理前,快速將批量圖像 / 文本從內存加載到 NPU 緩存。
- 結果回寫:將計算結果高速寫回系統內存,減少 CPU 干預。
- 數據搬運加速:替代傳統 CPU 主導的 DMA,適用于高吞吐量需求的邊緣計算場景。
舉個簡單的例子:部署在攝像頭的NPU需要實時處理1080p視頻流
流程:
- 先將 NPU 配置為 DMA 模式,以 較大 帶寬將視頻幀從攝像頭緩存搬運至 NPU 內部 SRAM。
- 切換回計算模式,執行目標檢測模型推理。
- 再次切換為 DMA 模式,將檢測結果(邊界框坐標)高速寫回內存供顯示系統使用。
通過這種靈活配置,NPU可以在數據搬運與計算直接快速切換,最大化端到端處理效率。
3.2 簡單處理
最簡單的處理鏈包含一個輸入流處理器、一個處理單元和一個輸出流處理器,三者依次連接構成數據處理鏈路。
簡單處理鏈路由三大要素組成:
- 輸出流處理器:負責從內存或外設讀取原始數據(如特征圖、權重),并按流格式(光柵掃描 / 原始數據)預處理。
- 處理單元:執行具體計算任務,如卷積、池化、算術運算等神經網絡基礎操作。
- 輸出流處理器:將處理結果寫入目標存儲區域,或轉發至下一級處理單元。
數據按照“輸入->處理->輸出” 單向流動,形成最小的計算單元。類似于神經網絡中“層”的概念。
3.3 多重處理架構
該架構實現了多個獨立的簡單處理鏈(如圖 125 所示)。獨立處理鏈的數量受限于可用硬件資源,其上限為流引擎總數的一半。例如,在 Neural-ART 14 處理器中,最多可同時運行 5 對流引擎,即支持 5 條并行處理鏈。
3.4 卷積 - 池化 - ReLU 虛擬鏈
圖 127 展示了實現經典卷積 - 池化 - ReLU(Conv-Pool-ReLU)處理流程的虛擬鏈架構。
總結
通過對ST NPU的簡單介紹,讓大家對STM32N6 NPU框架有一個簡單的認識。