Dokumentation / DeutschQuelltext ansehen ↗

ruBLAS Benutzerhandbuch

English | 简体中文 | 日本語 | Deutsch | Русский

Compute-Bibliotheken · Laufzeit API · 中文

1. Übersicht und Funktionen

ruBLAS bietet lineare Algebraoperationen und Gerätetensorschnittstellen.

Feature Modul
tensor-vector rublas::tensor_vector
tensor-matmul rublas::tensor_matmul
tensor-matmul-autotune Automatische Optimierung der Tensormatrixmultiplikation
tensor-int4 rublas::tensor_int4
tensor-grouped rublas::tensor_grouped

Das Cargo-Paket ist rublas. Wählen Sie die erforderlichen Funktionen aus und deaktivieren Sie unnötige Standardeinstellungen für allgemeine Pfade. Siehe Cargo.toml.

2. Matrixmultiplikation, Vektoren und INT4

Tensormatrixmultiplikation

rublas::tensor_matmul::matmul nimmt lhs, rhs, die optionale Ausgabe out, MatmulStrategy und den Ausgabe-DType entgegen. Zurückgegeben wird ein Gerätetensor oder MatmulSetupError. Übergeben Sie eine vorhandene Ausgabe über out oder lassen Sie out weg, um eine neue zuzuweisen.

Zu den Strategien gehören Ruda, CmmaResidueFirst, Naive und bei aktiviertem tensor-matmul-autotune auch Autotune. Ohne dieses Feature ist Ruda der Standard, mit ihm Autotune. Bei quantisierten Eingaben kann Naive nach dem Scheitern seines ersten Pfads dequantisieren und rechnen; dies ist keine native INT4-Berechnung.

CmmaResidueFirst wählt explizit den Tensor-Core-Pfad aus, der zuerst eine teilweise K32-Kachel verarbeitet, ohne dass eine materialisierte gepolsterte Matrix erforderlich ist. lhs und rhs müssen übereinstimmende unquantisierte BF16 oder F16 dtype und kompatible Matrixdimensionen haben. Das Gerät muss die Matrixanweisungen des Pfades unterstützen. Diese Funktion gibt die F32-Ausgabe zurück:

use ruda_core::tensor::DType;
use ruda_kernel::{dsl::Runtime, tensor::RudaTensor};
use rublas::{
    kernel_ir::definition::MatmulSetupError,
    tensor_matmul::{MatmulStrategy, matmul},
};

fn residue_matmul<R: Runtime>(
    lhs: RudaTensor<R>,
    rhs: RudaTensor<R>,
) -> Result<RudaTensor<R>, MatmulSetupError> {
    matmul(lhs, rhs, None, MatmulStrategy::CmmaResidueFirst, DType::F32)
}

Die Eingaben [M, K] und [K, N] erzeugen [M, N]. Ungültiges Setup oder fehlende Gerätefunktionen geben MatmulSetupError zurück, anstatt zu Naive zu wechseln.

Siehe Einstiegspunkt für die Matrixmultiplikation.

Vektorkreuzprodukt

rublas::tensor_vector::cross(lhs, rhs, dim) setzt die Länge 3 der gewählten Dimension voraus und gibt einen Gerätetensor zurück. Eine Berechnung entlang einer anderen als der letzten Dimension erfordert Permutation und Umwandlung in zusammenhängenden Speicher. Siehe cross.rs.

AWQ INT4

rublas::tensor_int4::AwqGemm::new verwendet qweight, qzeros, scales, optional bias und group_size, um gepackte Gewichte zu erstellen. forward akzeptiert die Eingabe F16 und gibt die Ausgabe F16 oder Int4Error zurück.

Für Eingabedimension K, Ausgabedimension N und Gruppengröße G:

Daten Dtype Form
qweight Gepacktes I32 [K, N/8]
qzeros Gepacktes I32 [K/G, N/8]
scales F16 [K/G, N]
bias (optional) F16 [N]

K, N und G müssen ungleich Null sein; K muss durch G und N durch 8 teilbar sein. Die endgültige Dimension der Eingabe ist K, die in der Ausgabe durch N ersetzt wird. Alle Operanden müssen sich ein Gerät teilen. Die gepackte Bitreihenfolge muss mit dem AWQ-Kernel übereinstimmen. Eine beliebige INT4-Datei kann nicht direkt als qweight verwendet werden.

Informationen zum Objekt und seinen Prüfungen finden Sie in der INT4-Schnittstelle.

3. Gruppierte Matrixmultiplikation

rublas::tensor_grouped::grouped_matmul_nt<R: Runtime> übernimmt Eingaben, Gewichtungen und row_experts als RudaTensor<R>-Werte. Es wird Result<RudaTensor<R>, GroupedMatmulError> zurückgegeben.

Argument Form Anforderungen
Eingabe [M, K] Nicht quantisierter F32, F16 oder BF16
Gewichte [E, N, K] Derselbe dtype und dasselbe Gerät wie die Eingabe
row_experts [M] Nicht quantisierter U32 auf demselben Gerät
Ausgabe [M, N] Gleiches dtype wie Eingabe

Zeile m wählt die durch row_experts[m] indizierte Gewichtsmatrix aus und berechnet Skalarprodukte zwischen der Eingabezeile und jeder Zeile dieser Matrix. Die letzten beiden Gewichtsdimensionen nehmen in transponierter Form teil, ohne dass eine materialisierte Transponierung erforderlich ist.

4. Gruppierte Multiplikationssemantik

Quelle: gruppierte Schnittstelle und Kernel.

5. Integration mit anderen Bibliotheken

ruDNN MoE verwendet gruppierte Multiplikation für Expertenprojektionen. Quantisierte Gewichte verwenden das separate Modul tensor_int4; Die gewöhnliche gruppierte Gleitkommamultiplikation ist keine INT4-Expertenberechnung.

grouped_matmul_nt verwendet Skalarakkumulation. Messen Sie Matrixmultiplikationsstrategien für Ihren dtype, Ihre Form und Ihr Backend.

6. Segmentierte Experten-Matrixmultiplikation

Mit tensor-grouped ergänzt rublas::tensor_grouped::grouped_matmul_nt_segmented(input, weights, row_experts, offsets, strategy) die bestehende gruppierte Schnittstelle um geräteseitige Expertensegmente. Input hat die Form [M, K], weights [E, N, K], row_experts U32 [M] und offsets U32 [E + 1]; das Ergebnis ist [M, N] im dtype der Eingabe. Operanden müssen nicht quantisiert sein und dasselbe Gerät und dieselbe Ausführungsqueue verwenden.

Dies ist eine unsafe-Rust-API: offsets muss ein monoton nicht fallendes exklusives Präfix sein, das bei 0 beginnt und bei M endet. Alle Zeilen in [offsets[e], offsets[e + 1]) müssen zum Experten e gehören. row_experts muss denselben unveränderlichen Dispatch beschreiben. Formprüfungen validieren diese geräteseitigen Werte nicht.

GroupedStrategy::Scalar verwendet den bestehenden skalaren Kernel. TensorCore verlangt explizit übereinstimmende F16/BF16-Eingaben, unterstützte kooperative 16×16×16-Matrixoperationen, eine Plane mit 32 Lanes, ausreichend Shared Memory und ein gültiges Launch-Grid; eine nicht unterstützte Konfiguration liefert GroupedMatmulError. Der Kernel akkumuliert in FP32 und verarbeitet unvollständige Kacheln. Auto wählt diesen Pfad, wenn er unterstützt wird, sonst den skalaren Kernel. Kompilierungs-, Launch- oder numerische Fehler sind keine Fallback-Bedingungen.

Für einen sicheren MoE-Einstieg mit intern erzeugten Offsets verwenden Sie rudnn::moe::SwiGluExperts::forward_dispatched_with_strategy. Der bestehende Einstieg forward_dispatched bleibt standardmäßig skalar.

7. Segmentierter Rückwärtslauf

grouped_matmul_nt_backward_segmented(input, weights, grad_output, row_experts, offsets) liefert GroupedBackward { dinput, dweights }. Input hat Form [M, K], weights [E, N, K], grad_output [M, N], jeweils mit gleichem F32/F16/BF16-dtype, Gerät und Queue. dinput behält den Eingabetyp; dweights ist FP32 mit Form [E, N, K]. Leere Expertensegmente erhalten Null als Gewichtsgradienten. Zeilen-IDs und Offsets erfüllen dieselben U32-Layouts und unveränderlichen Präfixbedingungen wie im Vorwärtslauf. Die API bleibt unsicher; Gerätemetadaten werden nicht zur Prüfung auf den Host übertragen.

Der Standard-Wrapper wählt GroupedStrategy::Scalar. grouped_matmul_nt_backward_segmented_with_strategy(..., strategy) wählt unabhängig vom Vorwärtslauf Scalar, Auto oder TensorCore. Der kooperative Pfad verwendet 16×16×16-Kacheln, FP32-Akkumulation und FP32-Gewichtsgradienten und benötigt unterstützte F16/BF16-Hardware sowie zulässige Launch-Größen. TensorCore meldet fehlende Unterstützung als Fehler; Auto fällt nur bei fehlenden Fähigkeiten zurück, nicht bei Kompilierungs- oder Ausführungsfehlern. Eingaben können zusammenhängend kopiert werden. Unterschiedliche Reduktionsreihenfolgen müssen nicht bitgleich sein.

Für sicheres Training auf Expertenebene verwenden Sie rudnn::moe::SwiGluExperts::forward_dispatched_training und anschließend ExpertTrainingCache::backward_with_strategy.