nemotron-unified-rust-wyoming

nemotron-unified-rust-wyoming

Docker app from Marco T's Nemotron Unified's Repository

Overview

Deutsche CPU-Spracherkennung mit NVIDIA Nemotron Labs Unified ASR 0.6B L37 INT8 über Wyoming. Modellgewichte separat bereitstellen. Der latest-Imagekanal folgt dem geprüften main-Stand, kein offizieller v1.0.0-Release. Keine automatischen Modelldownloads.

Nemotron Unified Rust Wyoming

Deutscher Speech-to-Text-Server für Home Assistant und Unraid auf linux/amd64 mit CPU/AVX2. Rust verarbeitet Wyoming-TCP, Sitzungen und Audiolimits. Die sichere sherpa-onnx-Anbindung lädt NVIDIA Nemotron Labs Unified ASR 0.6B als geprüften L37-Export mit INT8-Encoder über ONNX Runtime. Python wird nur für Entwicklung und Tests benötigt.

Entwicklungsstand, kein offizieller v1.0.0-Release. Repository-Ziel: https://github.com/marco-taylor/nemotron-unified-rust-wyoming. Die öffentliche Historie ist bereinigt; Veröffentlichungs- und Imageprüfungen stehen in docs/PHASE6.md. Die Cargo-Paketversion 1.0.0 bezeichnet noch keinen veröffentlichten Release.

Funktionen und Grenzen

Der Server lädt das Modell einmal und verarbeitet wiederholte Wyoming-Anfragen. Unterstützt werden describe/info, transcribe, audio-start, audio-chunk, audio-stop, finale transcript-Antworten und gerahmte Fehler. Audio: PCM-S16LE, 16 kHz, Mono. Begrenzte Verbindungen, Framegröße, Audiodauer und Zeitlimits schützen den Dienst. Native Inferenz wird serialisiert. Healthcheck prüft den laufenden Wyoming-Dienst; SIGTERM/SIGINT beenden ihn geordnet.

Nicht implementiert: internes Endpointing/VAD, Wyoming-Teiltranskripte, alternative L37-Kontexte, GPU-Provider, Resampling, automatische Sprachwahl, Hotwords, mDNS sowie Wyoming-TLS/Authentifizierung. Home Assistant muss das Sprachende mit audio-stop melden. INFERENCE_CHUNK_MS ändert die Audiozuführung, nicht den Modellkontext oder die algorithmische Latenz von 1,12 Sekunden. Nur im vertrauenswürdigen LAN verwenden.

Modelle bereitstellen

Das Image und das Git-Repository enthalten keine Modellgewichte. Ein zusammengehöriger L37-Runtime-Satz benötigt unter dem Host-Modellverzeichnis:

  • models/L37-runtime/encoder.int8.onnx
  • models/L37-runtime/decoder.onnx
  • models/L37-runtime/joiner.onnx
  • models/L37-runtime/tokens.txt

Diese Pfade sind Beispiele relativ zum Checkout. Den eigenen Hostpfad read-only nach /models mounten; Lizenz und Herkunft bei den Gewichten aufbewahren. Vorhandene Gewichte weiterverwenden. Beschaffung, SHA256-Werte und reproduzierbarer Export: docs/MODELS.md. Kein automatischer Download oder Export beim Serverstart. Der geprüfte Runtime-Satz umfasst 726.885.887 Byte ohne Lizenzdateien.

Docker installieren

Voraussetzungen: Linux amd64, AVX2, Docker, vorbereitete Modelle und ungefähr 4 GiB RAM für den Container. Build und Export benötigen mehr Ressourcen.

Für reguläre Installationen folgt latest dem erfolgreich geprüften main-Build; dev bleibt als kompatibler Alias erhalten:

docker pull ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest

latest und dev wurden erfolgreich anonym gepullt und haben denselben geprüften linux/amd64-Digest; Ergebnisse: docs/LATEST.md. Für reproduzierbare Installationen den veröffentlichten sha-COMMIT-Tag oder Digest verwenden. Lokal bauen und Modellvorprüfung ausführen:

docker build --platform linux/amd64 -t ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest .
docker run --rm --network none --read-only \
  -v /ABSOLUTER/MODELLPFAD:/models:ro \
  ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest check-model

Der Build führt Release-Kompilierung, Formatprüfung, Rust-/Protokolltests und Clippy mit -D warnings aus. check-model prüft Dateien/Metadaten; vollständiges Graphladen und Inferenz erfordern einen Serverstart.

Compose: ./.env.example nach ./.env kopieren, MODEL_DIR auf den vorhandenen absoluten Hostpfad setzen, freien HOST_PORT und PUBLISH_ADDRESS prüfen. IMAGE=ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest für reguläre Installation und optionalen lokalen Build verwenden.

cp .env.example .env
docker compose config
docker compose pull
docker compose up -d --no-build

./docker-compose.yml enthält nur diesen Dienst. Bestehende Dienste werden durch die Anleitung nicht automatisch migriert. Für einen bewusst lokalen Build stattdessen docker compose build ausführen.

Unraid und Home Assistant

Unraid-Anleitung: docs/UNRAID.md. Die Vorlage config/unraid-template.xml bietet Bridge-Netz, read-only Modelle, standardmäßig Hostport 10310 → Containerport 10300 sowie alle 19 wirksamen Variablen mit deutschen Beschreibungen.

In Home Assistant: Einstellungen → Geräte & Dienste → Integration hinzufügen → Wyoming Protocol; LAN-IP des Unraid-Hosts und den veröffentlichten Hostport eintragen. In einer deutschen Assist-Testpipeline den STT-Dienst nemotron-unified-l37-int8 auswählen. Details und Abnahme: docs/HOME_ASSISTANT.md. Bestehende Pipelines bleiben manuell verwaltet.

Alle 19 wirksamen Variablen

Vollständige Wertebereiche, Defaults und Wirkung: docs/PHASE5_2.md und docs/CONFIGURATION.md; maschinenlesbar in config/variables.json. 17 Variablen verarbeitet Rust, 2 der Container-Entrypoint.

Variablen Standard
PUID, PGID 99, 100
WYOMING_HOST, WYOMING_PORT 0.0.0.0, 10300
LANGUAGE, STT_DEVICE de, cpu
MODEL_DIR /models im Container
ENCODER_PATH, DECODER_PATH, JOINER_PATH, TOKENS_PATH leer → Standarddateien unter MODEL_DIR
THREADS 2 (zulässig: 1, 2, 4)
MAX_AUDIO_SECONDS, MAX_AUDIO_CHUNK_BYTES 120, 320000
MAX_CONNECTIONS, CLIENT_TIMEOUT_SECONDS 8, 30
INFERENCE_CHUNK_MS 20
LOG_LEVEL, LOG_TRANSCRIPTS info, false

PUID/PGID wechseln vor Modellzugriff auf die konfigurierte Identität. Der Bootstrap benötigt ausschließlich SETUID/SETGID; der Server läuft ohne effektive Capabilities mit NoNewPrivs. Kein automatisches chown/chmod an Modellen. Alternativ mit passenden --user 99:100 und Variablen vollständig ohne Bootstrap-Capabilities starten. Fehlerhafte Werte werden mit Variablennamen abgewiesen. Optionale Modell-Einzelpfade dürfen leer sein.

IMAGE, HOST_PORT und PUBLISH_ADDRESS sind Compose-Hilfswerte. Compose verwendet MODEL_DIR als Host-Mountquelle und setzt im Container /models. SHERPA_ONNX_LIB_DIR und LD_LIBRARY_PATH sind technische Imagewerte, keine zusätzlichen Nutzer-Tuningoptionen.

Icons

Icon Zweck GitHub-Dateipfad Größe Abmessungen
Low-Q Einziger Standard für Unraid CA und Docker assets/icons/nemotron-lowq.png 82.756 Byte 256 × 256
HQ Hochwertige Alternative, kein Unraid-Standard assets/icons/nemotron-hq.png 1.560.271 Byte 1254 × 1254

Die XML-Vorlage und das Image-Label net.unraid.docker.icon verwenden ausschließlich Low-Q. Beide PNGs haben transparente Pixel und wurden unverändert kopiert. Low-Q erfüllt die Performancevorgaben ohne weitere Komprimierung. Die neuen Quelldateien icons/nemotron-stt-hq.png und icons/nemotron-stt-lowq.png bleiben lokal unverändert erhalten. Die neuen Grafiken zeigen kein erkennbares NVIDIA-Augenlogo oder NVIDIA-Wortlogo und keine ®-/™-Symbole. Die alten Bilder sind aus der öffentlichen Historie ausgeschlossen; die ursprüngliche Historie ist ausschließlich lokal gesichert. Öffentliche Raw-Links und Migration gespeicherter Unraid-Icon-URLs: docs/UNRAID.md. Beide Raw-Icons sind öffentlich erreichbar und wurden per SHA256 geprüft.

Entwicklung, Tests und Lizenzen

Bedienung: serve (Standard), healthcheck, check-model, --help, --version; Benchmarkdiagnose über benchmark. CLI-Overrides: --model DIR, --threads 1|2|4, --bind HOST:PORT. Auch überschriebene Umgebungswerte müssen gültig sein.

Tests und Belege: docs/TESTS.md, docs/PHASE5_1.md, docs/PHASE5_2.md und docs/PHASE6.md. CI-/GHCR-Ablauf: docs/RELEASE.md. Die kurze echte deutsche Referenzaufnahme prüft die technische Kette; allgemeine Befehlsqualität, Assist-/Satellite-Abnahme und Langzeitlast bleiben offen.

Eigener Code: ./LICENSE (MIT). sherpa-onnx: Apache-2.0; ONNX Runtime: MIT; NVIDIA-Modell: getrennt OpenMDW-1.1. Abhängigkeiten und Herkunft: ./THIRD_PARTY_NOTICES.md. Kein offizielles NVIDIA-Projekt und keine behauptete Unterstützung durch NVIDIA.

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest
Last Updated2026-11-02
First Seen2026-11-02

Runtime arguments

Network
bridge
Privileged
false
Extra Params
--read-only --cap-drop=ALL --cap-add=SETUID --cap-add=SETGID --security-opt=no-new-privileges:true --memory=4g --cpus=4 --pids-limit=128 --stop-timeout=60 --tmpfs /tmp:size=16m,noexec,nosuid,nodev --log-opt max-size=10m --log-opt max-file=3

Template configuration

Wyoming-Port am Unraid-HostPorttcp

Freien LAN-Hostport wählen; Target an WYOMING_PORT anpassen, falls dieser geändert wird.

Target
10300
Default
10310
Value
10310
Persistentes L37-ModellverzeichnisPathro

Schreibgeschützter Modellmount; PUID/PGID (Standard 99:100) muss lesen können.

Target
/models
Default
/mnt/user/appdata/nemotron-unified-rust-wyoming/models/L37-runtime
Value
/mnt/user/appdata/nemotron-unified-rust-wyoming/models/L37-runtime
Bind-Adresse (WYOMING_HOST)Variable

IPv4 oder IPv6 im Container; für Docker-Bridge 0.0.0.0 verwenden.

Target
WYOMING_HOST
Default
0.0.0.0
Value
0.0.0.0
Wyoming-Port im Container (WYOMING_PORT)Variable

1 bis 65535; Container-Portabbildung bei Änderung ebenfalls anpassen.

Target
WYOMING_PORT
Default
10300
Value
10300
Sprache (LANGUAGE)Variable

Deutsch (de); andere Sprachen werden in diesem Server abgewiesen.

Target
LANGUAGE
Default
de
Value
de
Inferenzgerät (STT_DEVICE)Variable

Dieses Image unterstützt ausschließlich CPU; GPU/CUDA werden abgewiesen.

Target
STT_DEVICE
Default
cpu
Value
cpu
Modellverzeichnis im Container (MODEL_DIR)Variable

Basis für relative Modellpfade; muss zum schreibgeschützten Modellmount passen.

Target
MODEL_DIR
Default
/models
Value
/models
Encoderpfad (optional) (ENCODER_PATH)Variable

Leer: encoder.int8.onnx unter MODEL_DIR; sonst relativer oder absoluter Containerpfad.

Target
ENCODER_PATH
Decoderpfad (optional) (DECODER_PATH)Variable

Leer: decoder.onnx unter MODEL_DIR; alle Dateien aus demselben Export verwenden.

Target
DECODER_PATH
Joinerpfad (optional) (JOINER_PATH)Variable

Leer: joiner.onnx unter MODEL_DIR; relativer oder absoluter Containerpfad.

Target
JOINER_PATH
Tokenizerpfad (optional) (TOKENS_PATH)Variable

Leer: tokens.txt unter MODEL_DIR; passend zum exportierten Modell.

Target
TOKENS_PATH
ORT-Inferenzthreads (THREADS)Variable

1, 2 oder 4; für Intel N100 werden 2 empfohlen. Kein hartes Prozess-Threadlimit.

Target
THREADS
Default
2
Value
2
Maximale Audiodauer (MAX_AUDIO_SECONDS)Variable

1 bis 120 Sekunden pro Anfrage; Überschreitung verwirft die Sitzung.

Target
MAX_AUDIO_SECONDS
Default
120
Value
120
Maximale Audio-Payload (MAX_AUDIO_CHUNK_BYTES)Variable

Gerade Zahl von 640 bis 320000 Byte; Grenze vor der Payload-Allokation.

Target
MAX_AUDIO_CHUNK_BYTES
Default
320000
Value
320000
Maximale Verbindungen (MAX_CONNECTIONS)Variable

1 bis 32; begrenzt Sitzungen und Queue. Native Inferenz bleibt serialisiert.

Target
MAX_CONNECTIONS
Default
8
Value
8
Client-Timeout (CLIENT_TIMEOUT_SECONDS)Variable

1 bis 300 Sekunden; absolute Framefrist und Socket-Schreibtimeout.

Target
CLIENT_TIMEOUT_SECONDS
Default
30
Value
30
Native Zuführung in Millisekunden (INFERENCE_CHUNK_MS)Variable

10 bis 560 ms; teilt empfangene Chunks maximal so groß auf. Ändert nicht L37-Kontext oder algorithmische Latenz.

Target
INFERENCE_CHUNK_MS
Default
20
Value
20
Protokollierungsstufe (LOG_LEVEL)Variable

error, warn, info oder debug; Großschreibung erlaubt. Betrifft Rust-Logs, nicht native ORT-Fehler.

Target
LOG_LEVEL
Default
info
Value
info
Erkannte Texte protokollieren (LOG_TRANSCRIPTS)Variable

true oder false; nur bei info/debug. Enthält möglicherweise persönliche Sprachinhalte.

Target
LOG_TRANSCRIPTS
Default
false
Value
false
Benutzer-ID (PUID)Variable

Server-UID nach kurzem Bootstrap, 1 bis 2147483647 ohne führende Nullen. Kein chown am Modellmount.

Target
PUID
Default
99
Value
99
Gruppen-ID (PGID)Variable

Primäre Server-GID, 1 bis 2147483647 ohne führende Nullen. Modelldateien müssen für diese Identität lesbar sein.

Target
PGID
Default
100
Value
100