SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Dai Yang, Josef Weidendorfer, Carsten Trinitis
Technische Universität München
Fakultät für Informatik
Lehrstuhl für Rechnertechnik und Rechnerorganisation
05.05.2017
LAIK: A Library for Fault Tolerant Distribution of
Global Data for Parallel Applications
ENVELOPE – Effizienz und Zuverlässigkeit: Selbstorganisation in HPC-Systemen
PARS Workshop 2017
Leichtgewichtige Anwendungs-Integrierte Datenhaltungs-Komponente
• Komplexität
Verbergen der Komplexität heterogener HPC-Systeme vor dem
Anwendungsprogrammierer
• Effizienz
Ermöglichen einer effizienten Nutzung in Bezug auf die Laufzeit der Anwendung und den
Energieverbrauch der zur Verfügung stehenden Ressourcen der Zielplattform
• Zuverlässigkeit
Erhöhung der Zuverlässigkeit und Ausfallsicherheit
2(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Hintergrund ENVELOPE
Probleme:
• Fehlende Dynamik in Anwendungen
• bei zunehmend heterogener Architektur
• eingeschränkte Flexibilität durch den Ressorcenmanager
• Globales Checkpointing & Restart skaliert nicht für Exascale
3(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Probleme
Hintergrund
• Anwendungsintegrierter Ansatz als Teil von ENVELOPE
• Als Vergleich zu dem systemintegrierten Ansatz
• Für existierende und neue Anwendungen
Kerngedanken
• Austauschen/Vergrößern/Verkleinern von Rechenressourcen („Malleable“ Application)
• Inkrementelle Portierbarkeit
• Modularisiert
• Datenorientiert, nicht taskorientiert
• Partitionierung von Indexraum
• SPMD-Modell
• verschachtelte Instanzen auf verschiedenen Ebenen
• z.B. Inter/Intra - Node
4(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Ziele
Module
• Indexraumverwaltung (Kern) Pretschner
• Datenverwaltung
• Kommunikationsmodul
• Steuerungsmodul
Schnittstellen
• Anwendung - LAIK
• LAIK – Steuerung wie MQTT
• LAIK – Kommunikationsbackend wie MPI
• LAIK – Partitionierungsalgorithmen wie getEW
5(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
LAIK (0) – Module und Schnittstellen
• Integration in die Anwendung
• Standarddatentypen (1D/2D Matrix) + (künftig) eigene Datenstrukturen
• Standard-Backends (MPI/Shared Memory) + (künftig) eigene Backends
6(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
LAIK (1) – Aufbau und Kommunikations-Backend
• reine Partitionierung des Indexraums (Indirektion)
• Lastbalanzierung nach verschiedenen Kriterien:
• Gleichverteilt (Canonical)
• per Gewichtsfunktion
• (künftig) mittels Profilingdaten / Machine Learning
• Fehlertoleranz
• Proaktiv, durch Repartitionierung
• Reaktiv, durch lokales in-memory Checkpointing
• (künftig) auch mittels non-volatile Memory (Intel® Optane™ Technology)
• Highlight – Fehlertoleranz + Lastbalanzierung ist (fast) gleiche Funktionalität
• MPI, Shared Memory, TCP, OpenMP, OpenCL als Kommunikationsbackend geplant
• MQTT und TCP für die Anbindung von Fehlererkennung und Systemmonitoring
7(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
LAIK (2) Funktionalitäten
• Read-Write/Read-only/Write-only für beste Performanz und
Datenlokalität
• flexible Kopplung der Datenpartitionen (Bild unten)
• Datenkonsistenz explizit erzwingen, mittels Reduktionsoperation
• Vergrößern/Schrumpfen der Datenpartitionen
• ermöglicht asynchrone Ausführung (z.B. bei Stencil-Code)
8(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
LAIK (3) – Partitioning
• Partitionierungstypen
o Master: alle Daten in einer Partition
o Stripe: jede Partition erhält gleich viel Daten (nach Anzahl der Elemente)
o Weighted Stripe: jede Partition erhält soviel Daten, wie der User es angibt
o weitere folgen
• Reduktionsfunktionen
o Max
o Min
o Sum
o Prod
9(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
LAIK (4) – Partitioning
• multiple Partitionierung auf verschiedenen Ebenen
• Beispiel: inter/intra-node
• sinnvoll für Exascale, heterogene Systeme
• Veränderung des Indexraums muss möglich sein!
LAIK (5) – Hierarchische Partitionierung
(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 10
LAIK (6) – Lastbalanzierung
• Adaption an sich ändernde
Anzahl von Knoten
(Fehlertoleranz)
• Adaption an sich ändernde
Rechenresourcen (z.B. aufgrund
von ausgefallenen CPU/GPU)
• Adaption an sich ändernden
Rechenbedarf (z.B. verschiedene
Programmphasen)
(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 11
Ausführung
synchronisieren
(aktuell) All-
Reduce
auslösen
Neue Partitionen
berechnen
Ausführung
starten
Über Programmphasen Nächste Phase
LAIK (7) – Fehlertoleranz, Proaktiv
• Adaption an sich ändernde
Anzahl von Knoten
-> Proaktive Fehlertoleranz
-> benötigt Fehlervorhersage
• Recovery bei Spontanausfall
-> Reaktive Fehlertoleranz
-> benötigt Fehlererkennung
(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 12
Standard MPI unterstützt dieses Vorgehen nicht!
Signal
„drohender
Ausfall“
Synchronisieren
Ausführung
stoppen
Knoten
ausschließen
Repartitionieren
LAIK (8) – Fehlertoleranz, Reaktiv
(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 13
Über Programmphasen Nächste Phase
Knotenausfall
detektiert
Ausführung
synchronisieren
Am Backup-
Knoten
Berechnung
neu ausführen
Knoten
ausschließen
Repartitionieren
• vielfältige Erweiterbarkeit für das Checkpointingverfahren
• (zukünftig) auch asynchrone Recovery
• (zukünftig) anfordern von neuen Knoten als Ersatz
14(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Beispiel: Sparse Matrix Vector Multiplication (1)
#include "laik.h"
#include "laik-backend-mpi.h"
double getEW(Laik_Index* i, void* d);
int main(int argc, char* argv[])
{
Laik_Instance* inst = laik_init_mpi(&argc, &argv);
Laik_Group* world = laik_world(inst);
// generate diagonal matrix in CSR format
SpM* m = getSPM(…);
// global vector
double* v = getVector(…);
// 1d space for matrix rows and vector <res>
Laik_Space* s = laik_new_space_1d(inst, SIZE);
// result vector
Laik_Data* resD = laik_alloc(world, s, laik_Double);
// block partitioning according to elems in matrix rows
Laik_Partitioning* p;
p = laik_new_base_partitioning(s, LAIK_PT_Block,
LAIK_AB_ReadWrite);
laik_set_index_weight(p, getEW, m);
laik_set_partitioning(resD, p);
…
double* res;
uint64_t count;
Laik_Slice* slc;
int fromRow, toRow;
for(int iter = 0; iter < 10; iter++)
{
// init result vector (only my partition)
laik_map_def1(resD, (void**) &res, &count);
…
15(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Beispiel: Sparse Matrix Vector Multiplication (2)
slc = laik_my_slice(p);
fromRow = slc->from.i[0];
toRow = slc->to.i[0];
…
}
// push result to master
laik_set_new_partitioning(resD, LAIK_PT_Master,
LAIK_AB_ReadOnly);
if (laik_myid(world) == 0) {
laik_map_def1(resD, (void**) &res, &count);
double sum = 0.0;
for(uint64_t i = 0; i < count; i++) sum += res[i];
printf("Res sum (regular): %fn", sum);
}
// other way to push results to master: use sum
reduction
laik_set_new_partitioning(resD, LAIK_PT_All,
LAIK_AB_Sum);
laik_map_def1(resD, (void**) &res, &count);
slc = laik_my_slice(p);
fromRow = slc->from.i[0];
toRow = slc->to.i[0];
…
laik_set_new_partitioning(resD, LAIK_PT_Master,
LAIK_AB_ReadOnly);
if (laik_myid(world) == 0) {
laik_map_def1(resD, (void**) &res, &count);
double sum = 0.0;
for(uint64_t i = 0; i < count; i++) sum += res[i];
printf("Res sum (reduce): %fn", sum);
}
laik_finalize(inst);
• LAIK
https://github.com/envelope-project/laik
• Josef Weidendorfer:
weidendo@in.tum.de
• Dai Yang
d.yang@tum.de
• Carsten Trinitis
carsten.trinitis@tum.de
16(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017
Infos

Weitere ähnliche Inhalte

Ähnlich wie LAIK: A Library for Fault Tolerant Distribution of Global Data

Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudAarno Aukia
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenOliver Lemm
 
Puppet - Module entwickeln - Von der Planung bis zur Umsetzung
Puppet - Module entwickeln - Von der Planung bis zur UmsetzungPuppet - Module entwickeln - Von der Planung bis zur Umsetzung
Puppet - Module entwickeln - Von der Planung bis zur Umsetzunginovex GmbH
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickKarin Patenge
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerWolfgang Weigend
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisRoland Ewald
 
Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Digicomp Academy AG
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsIBsolution GmbH
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalQAware GmbH
 
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Bernd Zuther
 
On the Portability of Applications in Platform as a Service
On the Portability of Applications in Platform as a ServiceOn the Portability of Applications in Platform as a Service
On the Portability of Applications in Platform as a ServiceStefan Kolb
 
IPv6 Integration im Datacenter - wie komplex ist es wirklich?
IPv6 Integration im Datacenter - wie komplex ist es wirklich?IPv6 Integration im Datacenter - wie komplex ist es wirklich?
IPv6 Integration im Datacenter - wie komplex ist es wirklich?Swiss IPv6 Council
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"joergreichert
 
Vorgehensmodelle - Methoden der Wirtschaftsinformatik
Vorgehensmodelle - Methoden der WirtschaftsinformatikVorgehensmodelle - Methoden der Wirtschaftsinformatik
Vorgehensmodelle - Methoden der WirtschaftsinformatikClaus Brell
 

Ähnlich wie LAIK: A Library for Fault Tolerant Distribution of Global Data (20)

Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX Anwendungen
 
Puppet - Module entwickeln - Von der Planung bis zur Umsetzung
Puppet - Module entwickeln - Von der Planung bis zur UmsetzungPuppet - Module entwickeln - Von der Planung bis zur Umsetzung
Puppet - Module entwickeln - Von der Planung bis zur Umsetzung
 
.NET und jetzt!
.NET und jetzt!.NET und jetzt!
.NET und jetzt!
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der Entwickler
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der Praxis
 
Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und Charts
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
 
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
 
On the Portability of Applications in Platform as a Service
On the Portability of Applications in Platform as a ServiceOn the Portability of Applications in Platform as a Service
On the Portability of Applications in Platform as a Service
 
Digicomp sqlday migration
Digicomp sqlday migrationDigicomp sqlday migration
Digicomp sqlday migration
 
IPv6 Integration im Datacenter - wie komplex ist es wirklich?
IPv6 Integration im Datacenter - wie komplex ist es wirklich?IPv6 Integration im Datacenter - wie komplex ist es wirklich?
IPv6 Integration im Datacenter - wie komplex ist es wirklich?
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
 
Vorgehensmodelle - Methoden der Wirtschaftsinformatik
Vorgehensmodelle - Methoden der WirtschaftsinformatikVorgehensmodelle - Methoden der Wirtschaftsinformatik
Vorgehensmodelle - Methoden der Wirtschaftsinformatik
 
Der Schnitt
Der SchnittDer Schnitt
Der Schnitt
 

LAIK: A Library for Fault Tolerant Distribution of Global Data

  • 1. Dai Yang, Josef Weidendorfer, Carsten Trinitis Technische Universität München Fakultät für Informatik Lehrstuhl für Rechnertechnik und Rechnerorganisation 05.05.2017 LAIK: A Library for Fault Tolerant Distribution of Global Data for Parallel Applications ENVELOPE – Effizienz und Zuverlässigkeit: Selbstorganisation in HPC-Systemen PARS Workshop 2017 Leichtgewichtige Anwendungs-Integrierte Datenhaltungs-Komponente
  • 2. • Komplexität Verbergen der Komplexität heterogener HPC-Systeme vor dem Anwendungsprogrammierer • Effizienz Ermöglichen einer effizienten Nutzung in Bezug auf die Laufzeit der Anwendung und den Energieverbrauch der zur Verfügung stehenden Ressourcen der Zielplattform • Zuverlässigkeit Erhöhung der Zuverlässigkeit und Ausfallsicherheit 2(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Hintergrund ENVELOPE
  • 3. Probleme: • Fehlende Dynamik in Anwendungen • bei zunehmend heterogener Architektur • eingeschränkte Flexibilität durch den Ressorcenmanager • Globales Checkpointing & Restart skaliert nicht für Exascale 3(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Probleme
  • 4. Hintergrund • Anwendungsintegrierter Ansatz als Teil von ENVELOPE • Als Vergleich zu dem systemintegrierten Ansatz • Für existierende und neue Anwendungen Kerngedanken • Austauschen/Vergrößern/Verkleinern von Rechenressourcen („Malleable“ Application) • Inkrementelle Portierbarkeit • Modularisiert • Datenorientiert, nicht taskorientiert • Partitionierung von Indexraum • SPMD-Modell • verschachtelte Instanzen auf verschiedenen Ebenen • z.B. Inter/Intra - Node 4(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Ziele
  • 5. Module • Indexraumverwaltung (Kern) Pretschner • Datenverwaltung • Kommunikationsmodul • Steuerungsmodul Schnittstellen • Anwendung - LAIK • LAIK – Steuerung wie MQTT • LAIK – Kommunikationsbackend wie MPI • LAIK – Partitionierungsalgorithmen wie getEW 5(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 LAIK (0) – Module und Schnittstellen
  • 6. • Integration in die Anwendung • Standarddatentypen (1D/2D Matrix) + (künftig) eigene Datenstrukturen • Standard-Backends (MPI/Shared Memory) + (künftig) eigene Backends 6(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 LAIK (1) – Aufbau und Kommunikations-Backend
  • 7. • reine Partitionierung des Indexraums (Indirektion) • Lastbalanzierung nach verschiedenen Kriterien: • Gleichverteilt (Canonical) • per Gewichtsfunktion • (künftig) mittels Profilingdaten / Machine Learning • Fehlertoleranz • Proaktiv, durch Repartitionierung • Reaktiv, durch lokales in-memory Checkpointing • (künftig) auch mittels non-volatile Memory (Intel® Optane™ Technology) • Highlight – Fehlertoleranz + Lastbalanzierung ist (fast) gleiche Funktionalität • MPI, Shared Memory, TCP, OpenMP, OpenCL als Kommunikationsbackend geplant • MQTT und TCP für die Anbindung von Fehlererkennung und Systemmonitoring 7(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 LAIK (2) Funktionalitäten
  • 8. • Read-Write/Read-only/Write-only für beste Performanz und Datenlokalität • flexible Kopplung der Datenpartitionen (Bild unten) • Datenkonsistenz explizit erzwingen, mittels Reduktionsoperation • Vergrößern/Schrumpfen der Datenpartitionen • ermöglicht asynchrone Ausführung (z.B. bei Stencil-Code) 8(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 LAIK (3) – Partitioning
  • 9. • Partitionierungstypen o Master: alle Daten in einer Partition o Stripe: jede Partition erhält gleich viel Daten (nach Anzahl der Elemente) o Weighted Stripe: jede Partition erhält soviel Daten, wie der User es angibt o weitere folgen • Reduktionsfunktionen o Max o Min o Sum o Prod 9(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 LAIK (4) – Partitioning
  • 10. • multiple Partitionierung auf verschiedenen Ebenen • Beispiel: inter/intra-node • sinnvoll für Exascale, heterogene Systeme • Veränderung des Indexraums muss möglich sein! LAIK (5) – Hierarchische Partitionierung (C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 10
  • 11. LAIK (6) – Lastbalanzierung • Adaption an sich ändernde Anzahl von Knoten (Fehlertoleranz) • Adaption an sich ändernde Rechenresourcen (z.B. aufgrund von ausgefallenen CPU/GPU) • Adaption an sich ändernden Rechenbedarf (z.B. verschiedene Programmphasen) (C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 11 Ausführung synchronisieren (aktuell) All- Reduce auslösen Neue Partitionen berechnen Ausführung starten Über Programmphasen Nächste Phase
  • 12. LAIK (7) – Fehlertoleranz, Proaktiv • Adaption an sich ändernde Anzahl von Knoten -> Proaktive Fehlertoleranz -> benötigt Fehlervorhersage • Recovery bei Spontanausfall -> Reaktive Fehlertoleranz -> benötigt Fehlererkennung (C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 12 Standard MPI unterstützt dieses Vorgehen nicht! Signal „drohender Ausfall“ Synchronisieren Ausführung stoppen Knoten ausschließen Repartitionieren
  • 13. LAIK (8) – Fehlertoleranz, Reaktiv (C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 13 Über Programmphasen Nächste Phase Knotenausfall detektiert Ausführung synchronisieren Am Backup- Knoten Berechnung neu ausführen Knoten ausschließen Repartitionieren • vielfältige Erweiterbarkeit für das Checkpointingverfahren • (zukünftig) auch asynchrone Recovery • (zukünftig) anfordern von neuen Knoten als Ersatz
  • 14. 14(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Beispiel: Sparse Matrix Vector Multiplication (1) #include "laik.h" #include "laik-backend-mpi.h" double getEW(Laik_Index* i, void* d); int main(int argc, char* argv[]) { Laik_Instance* inst = laik_init_mpi(&argc, &argv); Laik_Group* world = laik_world(inst); // generate diagonal matrix in CSR format SpM* m = getSPM(…); // global vector double* v = getVector(…); // 1d space for matrix rows and vector <res> Laik_Space* s = laik_new_space_1d(inst, SIZE); // result vector Laik_Data* resD = laik_alloc(world, s, laik_Double); // block partitioning according to elems in matrix rows Laik_Partitioning* p; p = laik_new_base_partitioning(s, LAIK_PT_Block, LAIK_AB_ReadWrite); laik_set_index_weight(p, getEW, m); laik_set_partitioning(resD, p); … double* res; uint64_t count; Laik_Slice* slc; int fromRow, toRow; for(int iter = 0; iter < 10; iter++) { // init result vector (only my partition) laik_map_def1(resD, (void**) &res, &count); …
  • 15. 15(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Beispiel: Sparse Matrix Vector Multiplication (2) slc = laik_my_slice(p); fromRow = slc->from.i[0]; toRow = slc->to.i[0]; … } // push result to master laik_set_new_partitioning(resD, LAIK_PT_Master, LAIK_AB_ReadOnly); if (laik_myid(world) == 0) { laik_map_def1(resD, (void**) &res, &count); double sum = 0.0; for(uint64_t i = 0; i < count; i++) sum += res[i]; printf("Res sum (regular): %fn", sum); } // other way to push results to master: use sum reduction laik_set_new_partitioning(resD, LAIK_PT_All, LAIK_AB_Sum); laik_map_def1(resD, (void**) &res, &count); slc = laik_my_slice(p); fromRow = slc->from.i[0]; toRow = slc->to.i[0]; … laik_set_new_partitioning(resD, LAIK_PT_Master, LAIK_AB_ReadOnly); if (laik_myid(world) == 0) { laik_map_def1(resD, (void**) &res, &count); double sum = 0.0; for(uint64_t i = 0; i < count; i++) sum += res[i]; printf("Res sum (reduce): %fn", sum); } laik_finalize(inst);
  • 16. • LAIK https://github.com/envelope-project/laik • Josef Weidendorfer: weidendo@in.tum.de • Dai Yang d.yang@tum.de • Carsten Trinitis carsten.trinitis@tum.de 16(C) LRR TUM | LAIK | Projekt ENVELOPE | PARS Workshop 2017 Infos