Rockchip · AI & Linux Hub

KI-Inferenz

RKNN2 V2.5.0 · RK3588:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RK3588:Aktivierungen, Normalisierung und Erweiterungen · Vollständige Operatorparameter und Grenzen nach der Quelle V2.5.0.

· ArmSoM Editorial · Rockchip source documentation · 12 Min. Lesezeit

Diese Plattformreferenz für RKNN2 V2.5.0 unterstützt ArmSoM-Entwickler bei der Modellauswahl und -anpassung. Sie bestätigt keine Unterstützung auf allen ArmSoM-Platinen: SoC, tatsächliche Toolkit2-, Runtime-, NPU-Treiber- und BSP-Versionen müssen geprüft werden. Die Quelle nennt keine einheitliche Linux-Kernel-Version. Es wurden keine ArmSoM-Hardwaretests durchgeführt.

Quelle: die bereitgestellte chinesische und englische RKNN2 Supported Operators and Constraints Reference V2.5.0 mit 374 bzw. 384 Seiten. Chinesisch folgt der chinesischen Ausgabe; Englisch, Russisch und Deutsch folgen der englischen. Plattformgrenzen bleiben getrennt. Das englische PDF enthält chinesische I/O-Abbildungen und Ausgabetabellen; zusätzlich werden editierbare lokalisierte Tabellen bereitgestellt. Schreibweisen wie ConvTranpose und ursprüngliche LSTM/GRU-Gleichungen bleiben erhalten; die Formeln stellen keine Korrekturen der SDK-Implementierung dar.

Quellseiten: CN 110–125; EN 113–128.

Rockchip RKNN2

Operatorreferenz-Serie

RKNN2 V2.5.0 · RK3566/RK3568:Grundlagen und Faltungen

RKNN2 V2.5.0 · RK3566/RK3568:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RK3566/RK3568:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RK3566/RK3568:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RK3588:Grundlagen und Faltungen

RKNN2 V2.5.0 · RK3588:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RK3588:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RK3588:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RK3562:Grundlagen und Faltungen

RKNN2 V2.5.0 · RK3562:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RK3562:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RK3562:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RV1103/RV1106:Grundlagen und Faltungen

RKNN2 V2.5.0 · RV1103/RV1106:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RV1103/RV1106:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RV1103/RV1106:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RK3576/RV1126B:Grundlagen und Faltungen

RKNN2 V2.5.0 · RK3576/RV1126B:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RK3576/RV1126B:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RK3576/RV1126B:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RK2118:Grundlagen und Faltungen

RKNN2 V2.5.0 · RK2118:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RK2118:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RK2118:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · RV1103B/RV1106B:Grundlagen und Faltungen

RKNN2 V2.5.0 · RV1103B/RV1106B:Rekurrente Netze, Arithmetik und Pooling

RKNN2 V2.5.0 · RV1103B/RV1106B:Formen, Slicing und Transposition

RKNN2 V2.5.0 · RV1103B/RV1106B:Aktivierungen, Normalisierung und Erweiterungen

RKNN2 V2.5.0 · Unterstützung und Grenzen der CPU-Operatoren

RKNN2 V2.5.0 · Unterstützung und Grenzen der GPU-Operatoren

RKNN2 V2.5.0 · Modell-I/O, Ausrichtung und Faltungsgrenzen

Sigmoid

Die Funktion y=1/(1+exp(-x)) wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen.

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

Tanh

Berechnet den hyperbolischen Tangens jedes Eingabetensorelements.

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

Softplus

Wendet Softplus elementweise an, y=ln(exp(x)+1).

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

HardSigmoid

Die Funktion y=max(0,min(1,alpha*x+beta)) wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen, wobei alpha=1/6, beta=0.5.

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

HardSwish

Die Funktion y = x * max(0, min(1, alpha * x + beta)) = x * HardSigmoid(x) wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen, wobei alpha=1/6, beta=0.5.

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

Elu

Die Funktion f(x)=alpha*(exp(x)-1.) for x<0; f(x)=x for x>=0 wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen, wobei alpha=1.

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exSwish

Wendet die Sigmoid Linear Unit elementweise an. Swish heißt auch SiLU: y=x*sigmoid(x).

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exMish

Die Funktion mish(x)=xtanh(softplus(x))=xtanh(ln(1+e^{x})) wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen.

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exGelu

Die Funktion y = x*Φ(x) wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen. Wird für Φ(x) tanh gewählt, gilt: y = 0.5*x*(1+Tanh(sqrt(2/π)*(x+0.044715*x^3))).

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exSwooshR

Die folgende Funktion aus https://arxiv.org/abs/2310.11230 wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen: SwooshR(x)=log(1+exp(x−1))−0.08x−0.313261687

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exSwooshL

Die folgende Funktion aus https://arxiv.org/abs/2310.11230 wird elementweise auf den Eingabetensor angewendet, um den Ausgabetensor zu erzeugen: SwooshL(x)=log(1+exp(x−4))−0.08x−0.035

Eingaben

  • input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

Where

Wählt Werte aus x_tensor oder y_tensor anhand von mask_tensor: Bei True wird der entsprechende x_tensor-Wert gewählt, sonst der y_tensor-Wert.

Eingaben

  • mask_tensor:T1
    • shape:[batch,channel,height,width]
    • Broadcasting-Unterstützung
      • Broadcasting entlang beliebiger Dimensionen wird unterstützt.
    • Broadcasting-Einschränkungen
      • Broadcasting-Einschränkungen wie beim Operator Expand.
  • x_tensor:*T2
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer
    • Broadcasting-Unterstützung
      • Broadcasting entlang beliebiger Dimensionen wird unterstützt.
    • Broadcasting-Einschränkungen
      • Broadcasting-Einschränkungen wie beim Operator Expand.
  • y_tensor:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer
    • Broadcasting-Unterstützung
      • Broadcasting entlang beliebiger Dimensionen wird unterstützt.
    • Broadcasting-Einschränkungen
      • Broadcasting-Einschränkungen wie beim Operator Expand.

Ausgaben

  • output:T2
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:bool(Tensor)
  • T2:int8(Tensor),float16(Tensor)

exConvStreaming

Zur Latenzsenkung in Sprachmodellen wird die ursprüngliche Faltungseingabe in zeitliche Segmente aufgeteilt. Jedes Segment wird separat gefaltet; die Ergebnisse werden für nachfolgende Frames zwischengespeichert und ermöglichen Streaming-Audioverarbeitung.

Eingaben

  • input_tensor:T1
    • shape:[batch,channel,height,width]
      • width: derzeit wird width=1 unterstützt.
    • Quantisierungsunterstützung
      • per-layer
  • weight:T1
    • shape:[output_channel,input_channel,kernel_h,kernel_w]
      • kernel_h∈[1,31]
      • kernel_w∈[1,31]
    • Quantisierungsunterstützung
      • per-layer
      • per-channel

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Attribute

  • strides:int(strides_h,strides_w)
    • stride_h∈[1,7]
    • stride_w∈[1,7]
  • pads:int(pads_top,pads_left,pads_bottom,pads_right)
    • pads_top∈[0,15]
    • pads_left∈[0,15]
    • pads_bottom∈[0,15]
    • pads_right∈[0,15]
  • group:int
  • dilations:int(dilations_h,dilations_w)
    • dilations_h∈[1,32]
    • dilations_w∈[1,32]

Datentypbeschränkungen

  • T1:float16(Tensor)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exConvStreamingPRelu/LeakyRelu

Fusionierte Berechnung von exConvStreaming und PRelu/LeakyRelu, Output = PRelu(exConvStreaming(Input)) oder Output= LeakyRelu(exConvStreaming(Input)). Beschreibung und Spezifikationsgrenzen entsprechen exConvStreaming.

exGlu

Gated-Linear-Unit-Funktion: a ist die erste Hälfte der Eingabematrix, b die zweite Hälfte: GLU(a,b)=a⊗σ(b).

Eingaben

  • Input:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung: per-layer

Ausgaben

  • Output:T1
    • shape:[batch,channel/2,height,width]
    • Quantisierungsunterstützung: per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Attribute

  • axis:int(Standardwert=1)
    • Dimension, entlang der die Eingabe geteilt wird.
    • Einschränkung: nur 1 unterstützt.

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exMatMul

Matrixmultiplikation

Y = A·B + C    if c_type = "add"
Y = A·B * C    if c_type = "mul"

Eingaben

  • A:T1
    • shape:[b,k,1,n]
      • k ∈(0,8192]
    • Quantisierungsunterstützung
      • per-layer
  • B:T1
    • shape:[b,k,1,m]
    • Quantisierungsunterstützung
      • per-layer
  • C(optional):T1,T2
    • shape:[b,n,1,m]
    • Quantisierungsunterstützung
      • per-layer
    • Broadcasting-Unterstützung
      • Broadcasting entlang beliebiger Dimensionen wird unterstützt.
      • Broadcasting-Einschränkungen wie beim Operator Expand.

Ausgaben

  • Y:T1
    • shape:[b,n,1,m]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)
  • T2:float(Tensor)

Attribute

  • c_type:strings(Standardwert “add”)
    • add oder mul legt fest, ob C addiert oder multipliziert wird.

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: nicht unterstützt.

exNorm

Führt verschiedene Normalisierungsoperationen auf den Eingabedaten aus. Unterstützt werden drei Typen: LayerNormalization, RMSNormalization und MeanVarianceNormalization:

LayerNorm(x) = ((x - μ) / sqrt(σ^2 + ε)) * W + B
RMSNorm(x) = (x / sqrt(RMS^2 + ε)) * W + B
MeanVarianceNorm(x) = ((x - μ) / sqrt(Variance + ε)) * W + B

Dabei ist x der Eingabevektor. µ und σ2 sind Mittelwert und Varianz des Eingabevektors:

μ = (1/H) * Σ[i=1..H](x_i)
σ^2 = (1/H) * Σ[i=1..H]((x_i - μ)^2)

RMS ist der quadratische Mittelwert des Eingabevektors:

RMS = sqrt((1/H) * Σ[i=1..H](x_i^2))

Variance ist die äquivalente Varianz des Eingabevektors:

Variance = (1/H) * Σ[i=1..H](x_i^2) - μ^2

ϵ ist ein kleiner Wert zur Vermeidung einer Division durch null. W und B sind optionale Parameter.

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]
  • W(optional):T1
    • shape:[batch,channel,height,width]
  • B(optional):T1
    • shape:[batch,channel,height,width]

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]

Datentypbeschränkungen

  • T1:float16(Tensor)

Attribute

  • epsilon: float (Standardwert 1e-05)
    • epsilon-Wert zur Vermeidung einer Division durch 0.
  • mode:string
    • Drei Normalization-Modi sind wählbar: layer, rms und mean_var.
  • axes:int64[](Standardwert [1])
    • Normalisierungsachsen: derzeit nur [1] und [1,2,3] unterstützt.

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

exSDPAttention

Berechnet skalierte Skalarprodukt-Aufmerksamkeit (SDPA) zwischen query, key und value.

Eingaben

  • query:T1
    • shape:[batch,channel,height,width]
      • channel∈(0,8192]
    • Quantisierungsunterstützung
      • per-layer
  • key:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer
  • value:T1
    • shape:[batch,channel,height,width]
      • channel∈(0,8192]
    • Quantisierungsunterstützung
      • per-layer
  • mask(optional):T1,T2
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer
    • Broadcasting-Unterstützung
      • Broadcasting entlang beliebiger Dimensionen wird unterstützt.
  • scale(optional):T3

Ausgaben

  • output:T1
    • shape:[batch,channel,height,width]
    • Quantisierungsunterstützung
      • per-layer

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)
  • T2:float(Tensor)
  • T3:float(Scalar)

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: nicht unterstützt.

exWindow

exWindow stammt von window_partition und window_reverse aus swin_transformer. In der Originalarbeit werden Eingabemerkmale in nicht überlappende Fenster der Größe window_size×window_size aufgeteilt. Ein- und Ausgabemerkmale müssen eine 4-dimensionale shape haben und in Höhe und Breite aufgeteilt werden. Die PyTorch-Implementierung folgt:

def window_partition(x, window_size):
    """
    Args:
        x: (B, C, H, W)
        window_size (int): window size
    Returns:
        windows: (B, C, num_windows * num_windows, window_size * window_size)
    """
    B, C, H, W = x.shape
    x = x.view(B, C, H // window_size, window_size, W // window_size, window_size)
    windows = x.permute(0, 1, 2, 4, 3, 5).contiguous().view(B, C, -1, window_size * window_size)
    return windows

def window_reverse(windows, window_size, H, W):
    """
    Args:
        windows: (B, C, num_windows * num_windows, window_size * window_size)
        window_size (int): Window size
        H (int): Height of image
        W (int): Width of image
    Returns:
        x: (B, C, H, W)
    """
    B, C, _, _ = windows.shape
    x = windows.view(B, C, H // window_size, W // window_size, window_size, window_size)
    x = x.permute(0, 1, 2, 4, 3, 5).contiguous().view(B, C, H, W)
    return x

Eingaben

  • X:T1
    • shape:[batch,channel,height,width]

Ausgaben

  • Y:T1
    • shape:[batch,channel,height,width]

Datentypbeschränkungen

  • T1:int8(Tensor),float16(Tensor)

Attribute

  • mode:string
    • Unterstützte Modi:partition,reverse,partition_num_first.
      • partition: siehe Implementierung von window_partition.
      • reverse: siehe Implementierung von window_reverse.
      • partition_num_first unterscheidet sich von partition dadurch, dass H,W nach num_windows aufgeteilt werden; partition teilt H,W dagegen nach window_sizes auf.
  • window_sizes:listofints
    • 2-dimensionaler Vektor der Fenstergröße, der Höhe und Breite jedes Fensters festlegt. Auf dieser Größe beruhen Aufmerksamkeitsberechnung und Merkmalsextraktion innerhalb des Fensters.
  • num_windows:listofints
    • 2-dimensionaler Vektor der Fensteranzahl; legt fest, in wie viele Fenster Höhe und Breite der Eingabemerkmale geteilt werden.

Weitere Unterstützung

  • Zusammenarbeit mehrerer Kerne: noch nicht unterstützt.

Dieses Thema entdecken → · Lernpfade →