Zum Inhalt

Technische Dokumentation

Die Plattform installieren

Was eine Installation der HealthDati-Plattform braucht und wie Sie Zentrale und Klinik einrichten. Die Befehle beziehen sich auf das Repository der Plattform, in dem auch die ausführlichen Anleitungen stehen.

Überblick

Eine Installation hat zwei Seiten, wie die Seite Architektur zeigt:

SeiteWas dort läuft
Zentraleder zentrale Dienst mit seiner Datenbank und die Oberfläche Modell trainieren
Klinikder Klinik-Knoten mit Worker, Trainer, Auswertungsdienst, Modellabgleich und Datensatzkatalog, dazu die Oberfläche Risiko auswerten

Die Klinik baut jede Verbindung selbst auf: Worker und Modellabgleich verbinden sich zum zentralen Dienst, die Zentrale ruft nie in die Klinik hinein. Beide Seiten können auch in derselben Einrichtung laufen.

Den Quellcode erhalten Projektbeteiligte. Alle Images werden aus ihm gebaut; die Pfade auf dieser Seite beziehen sich auf das Repository.

Voraussetzungen

  • Docker Engine ab Version 24 mit Docker Compose v2.
  • Prozessoren genügen, eine Grafikkarte ist nicht nötig. Im Vorbild-Stack der Klinik ist der Trainer auf 2 Prozessorkerne und 2 GB Arbeitsspeicher begrenzt.
  • Einige Gigabyte Speicherplatz für die Images und Internetzugang beim Bauen: Die Builds laden festgelegte Basis-Images und Pakete.
  • Für das Installationsskript der Zentrale Python und openssl auf dem Rechner.
  • Für den Aufbau mit mehreren Standorten eine Bash, unter Windows Git Bash.
  • Zum Bauen ohne Docker Node.js ab Version 24 und Python ab Version 3.10.

Die Dienste und ihre Verbindungen:

PortDienstWer sich verbindet
8794zentraler DienstWorker und Modellabgleich jeder Klinik, ausgehend aus der Klinik
8080Modell trainierenBrowser in der Zentrale
8081Risiko auswertenBrowser im Netz der Klinik
8795Auswertungsdienstnur Risiko auswerten in derselben Klinik

In die Klinik hinein braucht die Plattform keine Verbindung. Beschränken Sie den Zugang zu beiden Oberflächen über das Netz der Einrichtung.

Ausprobieren

Die Oberflächen im Demo-Modus

Im Verzeichnis platform/software/frontend, die beiden uvicorn-Befehle in je einem eigenen Terminal:

cd web
npm ci
npm run build
cd ..
pip install -r requirements-demo.txt
HDP_DEMO=1 uvicorn app.main:app --port 8080
HDP_DEMO=1 uvicorn inference_app.main:app --port 8081

Mit Docker geht es ohne lokale Pakete; ein Dockerfile baut beide Oberflächen:

docker build --target training -t hdp-training .
docker run --rm -p 8080:8080 -e HDP_DEMO=1 hdp-training
docker build --target inference -t hdp-inference .
docker run --rm -p 8081:8081 -e HDP_DEMO=1 hdp-inference

Modell trainieren ist dann unter http://127.0.0.1:8080 erreichbar, Risiko auswerten unter http://127.0.0.1:8081. Das Tutorial führt durch beide.

Eine Zentrale und drei Kliniken auf einem Rechner

Im Verzeichnis platform/deploy/sites:

./sites.sh build
./sites.sh up
./sites.sh status

build baut die fünf Images, up startet die Zentrale und danach die Kliniken A, B und C, jede in ihrem eigenen abgeschotteten Netz. Jede Klinik trägt beim Start einen Datensatz in ihren Katalog ein und lädt ihr Modell aus der Zentrale.

AdresseWas dort läuft
http://127.0.0.1:8080Modell trainieren
http://127.0.0.1:8794/docsdie Schnittstellen des zentralen Dienstes
http://127.0.0.1:8181, :8182, :8183Risiko auswerten der Kliniken A, B und C

./sites.sh logs clinic-a zeigt die Protokolle einer Klinik, ./sites.sh cohort clinic-a wertet ihren Datensatz aus. ./sites.sh down hält alles an, ./sites.sh down -v entfernt auch Datenbank, Kataloge und Modellregister. Eine weitere Klinik entsteht aus einer Kopie von clinics/clinic-a.env mit eigener Kennung, eigenem Port und eigenen Teilnetzen.

Die Zentrale einrichten

Das Betriebspaket der Zentrale liegt in platform/software/backend/deploy:

./install.sh
docker compose up -d --build

install.sh schreibt eine .env mit einem neu erzeugten Zugangs-Token (HDP_API_TOKEN) und Datenbank-Passwort, ohne beide auszugeben, und legt das Modellregister an. Das Paket startet die Datenbank und den zentralen Dienst; die Datenbank-Migrationen laufen beim Start. Der Dienst lauscht auf Port 8794 an 127.0.0.1 (BACKEND_BIND). Stellen Sie ihn den Kliniken über einen TLS-Reverse-Proxy bereit.

Die Oberfläche Modell trainieren bauen Sie in platform/software/frontend und verbinden sie mit dem zentralen Dienst:

docker build --target training -t hdp-training .
docker run -d -p 8080:8080 \
  -e HDP_BACKEND_URL=<Adresse des zentralen Dienstes> \
  -e HDP_BACKEND_TOKEN=<HDP_API_TOKEN aus der .env> \
  hdp-training

Prüft der Dienst ein Zertifikat einer eigenen Zertifizierungsstelle, geben Sie der Oberfläche diese mit HDP_BACKEND_CA_FILE mit.

Die Kliniken laden ihr Modell aus dem Modellregister der Zentrale. Ein Modell legen Sie dort mit node-client registry push --backend-url <Adresse> --job-id <Kennung> --artifact <Modelldatei> ab; der Dienst model-publish in platform/deploy/sites/central/compose.yaml zeigt den Aufruf für das Startmodell.

Eine Klinik einrichten

Richten Sie den Klinik-Knoten als Container-Stack ein, nach dem Vorbild von platform/deploy/sites/clinic/compose.yaml: Worker, Trainer, Auswertungsdienst, Modellabgleich und die Oberfläche Risiko auswerten, mit Volumes für Datensatzkatalog, Modellregister, Austauschdateien und Journal. Der Trainer läuft ohne Netz und mit schreibgeschütztem Dateisystem. Starten Sie Worker und Trainer gemeinsam: Der Worker übernimmt einen Auftrag nur, solange der Trainer bereitsteht.

VariableDienstBedeutung
HD_BACKEND_URLWorker, ModellabgleichAdresse des zentralen Dienstes
HD_API_TOKENWorker, ModellabgleichZugangs-Token der Zentrale (HDP_API_TOKEN aus deren .env)
HD_CA_FILEWorker, ModellabgleichVertrauensanker für die Verbindung zur Zentrale; mit ihm verbindet sich der Knoten nur über HTTPS
HD_NODE_NAMEWorkerName des Knotens
HD_SPOOL_DIR, HD_CATALOGUE_DIR, HD_EGRESS_JOURNAL_DIRWorker, TrainerVerzeichnisse für Austauschdateien, Datensatzkatalog und Journal
HDP_REGISTRYAuswertungsdienstModellregister der Klinik
HDP_INFERENCE_URLRisiko auswertenAdresse des Auswertungsdienstes, etwa http://inference:8795
HDP_CLINIC_NAMERisiko auswertenName der Klinik, wie ihn die Oberfläche als Standort zeigt

Daten. Daten gelangen über den Datensatzkatalog in den Knoten. node-client dataset register --from <Verzeichnis> --label <Name> --kind site --uses cohort-inference übernimmt einen Export im Datenformat der Plattform, je Entität eine CSV-Datei, als unveränderlichen Datenstand. Daten des Krankenhauses nimmt der Katalog nur pseudonymisiert an: Den Export schreibt der Datenanschluss des Knotens mit dem Schlüssel aus node-client pseudonym-key init und legt ein source-manifest.json dazu. Danach gibt die datenverantwortliche Stelle den Datenstand mit node-client dataset approve für seinen Zweck frei.

Modell. Der Modellabgleich lädt das Modell aus der Zentrale und prüft es gegen festgelegte SHA-256-Prüfsummen, für Modell und Arbeitspunkt (node-client registry sync). Die Werte für das Startmodell stehen in platform/deploy/sites/sites.env.

Die Installation prüfen

  • Zentrale: curl -s http://127.0.0.1:8794/health meldet "status":"ok" und die Datenbank als Speicher. docker compose exec backend python -m app.hdpctl status fasst den Zustand zusammen; jobs, nodes und models listen Aufträge, beteiligte Knoten und Modelle.
  • Oberflächen: /api/health meldet für jeden angebundenen Dienst, ob er erreichbar ist.
  • Knoten: node-client health prüft die Verbindung zur Zentrale, node-client registry verify --root <Modellregister> das Modellregister und node-client egress verify das Journal aller hinausgegangenen Nachrichten.
  • Erstes Training: Starten Sie in Modell trainieren einen Auftrag. Sein Status wechselt von eingereicht über angenommen und läuft zu abgeschlossen, und als Knoten steht dort die Klinik, die ihn ausgeführt hat.
  • Erste Auswertung: Berechnen Sie in Risiko auswerten einen einzelnen Fall.

Ausführliche Anleitungen

ThemaIm Repository
Aufbau mit mehreren Standortenplatform/deploy/sites/README.md
Betriebspaket der Zentraleplatform/software/backend/deploy/README-Betrieb.md
Zugangsdaten und Zertifikateplatform/software/backend/docs/credentials-and-enrolment.md
Oberflächenplatform/software/frontend/README.md
Klinik-Knoten, Trainer und Ausgangsschleuseplatform/software/node-client/README.md, docs/training-sandbox.md, docs/export-contract.de.md