A.I. basierte Maschinenzustandsüberwachung (3/3)

By |2020-02-06T12:14:12+00:0001/2020|Categories: Allgemein|Tags: , , , , , , , , , , |2 Comments

Dies ist Teil 3 einer mehrteiligen Serie, welche beispielhaft zeigt, wie mit Hilfe von maschinellen Lernverfahren eine K.I. trainiert wird, die den Zustand einer Maschine in Echtzeit überwachen kann. Die Teile sind folgende:

  1. Problemstellung, Lösungsweg und Datenerhebung
  2. Training und Evaluation mit Tensorflow 2.0
  3. Deployment und Anwendungsbeispiel mit Tensorflow Serving in Amazon ECS (dieser)

Dabei wird ein Neuronales Netz mit Tensorflow 2.0 angelernt, als Tensorflow Serving gepackt und in Amazon Elastic Container Service (ECS) in der Cloud Deployed. Außerdem wird eine simple Beispielanwendung die Sensordaten an den Cloud Endpunkt übertragen und den Maschinenzustand visualisieren.

Machine Learning Modell in Container packen

Nachdem das trainierte neuronale Netz in Teil 2 mit Struktur und Gewichten exportiert wurde, kann es nun in einen TensorFlow Serving Container gepackt und für den Produktiveinsatz vorbereitet werden.

docker run -it --rm -p 8501:8501 \
    -v "$(pwd)/NeuralNetwork:/models/neuralnetwork" \
    -e MODEL_NAME=neuralnetwork \
    tensorflow/serving

Nun steht auf dem lokalen Rechner eine REST API unter dem Endpunkt http://localhost:8501/v1/models/neuralnetwork zur Verfügung, welche meldet, dass das Vorhersagemodell geladen ist und zur Verfügung steht.

Eine Beispiel-Vorhersage zum Maschinenzustand kann mittels POST Request an den Endpunkt http://localhost:8501/v1/models/neuralnetwork:predict gestellt werden. Es müssen, wie beim Training/Evaluation die gleiche Art Features an das Modell geschickt werden, damit eine vernünftige Aussage zum Maschinenzustand getroffen werden kann. Beispielhaft kann mittel curl ein Feature-Set Beschleunigungen gepostet werden:

curl -d '{"instances": [[-2.45, -0.85,  9.71]]}' \
    -X POST http://localhost:8501/v1/models/neuralnetwork:predict

Das Netzwerk antwortet über die API mit

{ "predictions": [[0.999759257, 0.000240772089]] }

Dies sind die Wahrscheinlichkeiten für die zwei Klassen (“working” / “not working”) und bedeutet, dass die Maschine zu 99,9% arbeitet. Es steht nun ein maschinenlesbarer Endpunkt (REST API) zur Verfügung, welcher die Wahrscheinlichkeiten für den Zustand der Maschine, basierend auf Sensordaten, vorhersagen kann.

Die nachfolgende Beispiel-App zeigt, wie der Endpunkt beispielsweise mit einem Browser genutzt und visualisiert werden kann.

Beispiel App: Maschinenzustand abfragen und visualisieren

Eine einfache Beispielanwendung könnte z.B. sein, dass man zyklisch die Sensorwerte an der Maschine abfragt, and die K.I. im TensorFlow Serving Container schickt und diese den Maschinenzustand vorhersagt.

Dies kann über viele verschiedene Protokolle und Übertragungswege geschehen. Beispielhaft wird hier eine Anwendung für den Browser gezeigt, welche via Websocket die Daten der IMU ausließt und an den REST Endpunkt des Tensorflow Serving Containers schickt.

const tensorflow_prediction = async (ax, ay, az) => {
    var features = `{"instances": [[${ax}, ${ay}, ${az}]]}`;
    var API_URL = "http://localhost:8501/v1/models/neuralnetwork:predict";
    const response = await fetch(API_URL, {
        method: 'POST',
        body: features,
        headers: {
            'Content-Type': 'application/json'
        }
    });
    const responsejson = await response.json();
    console.log(responsejson)
    do_something(responsejson);
}

function do_something(responsejson) {

    var prob_not_working = responsejson['predictions'][0][0];
    var prob_working = responsejson['predictions'][0][1];

    if (prob_working > prob_not_working) {
        // Maschine funktioniert
        document.body.style.backgroundColor = "green";
    } else {
        document.body.style.backgroundColor = "orange";
    }
}

Der REST API Endpunkt antwortet mit den Wahrscheinlichkeiten für die beiden Label “working” / “not working”. Basierend darauf wird die Hintergrundfarbe der Browseranwendung auf grün bzw. orange geändert.

Solution Architektur: Sensordaten werden via Websocket an die Browser App übertragen, diese sendet die Features via POST Request an den Tensorflow Serving Container und erhält den Maschinenzustand zurück, welcher visualisiert wird

Production Ready Deployment von TensorFlow Serving Modell in Amazon Elastic Container Service (ECS)

Bisher läuft das trainierte neuronale Netz lokal in einem Container und die API wird lokal angesprochen. Für den richtigen Einsatz in produktiven Systemen wird oftmals eine hochverfügbare Cloud Lösung angestrebt, welche sich vor allem selbstständig horizontal skaliert. Dies bedeutet, dass bei zunehmenden Anfragen automatisch mehr Ressourcen zur Verfügung stehen, z.B. mehrere Instanzen des Containers erstellt werden. Dies wird typischerweise mit Cl0ud Diensten, z.B. Microsoft Azure, Google Cloud Services oder Amazon AWS realisiert. Letzteres soll hier beispielhaft gezeigt werden.

Genutzt wird der AWS Elastic Container Service (ECS), welcher zum Deployment von Containern gedacht ist.

Modell in Container in Registry zur Verfügung stellen

Der erste Schritt ist, dass der Container in einer Registry zur Verfügung stehen muss. Hier kann beispielsweise die offizielle Docker Registry genutzt werden. Der Container wird mit Hilfe einer Dockerfile erstellt. In dieser wird im Grunde nur das erstellte neuronale Netz in den Container kopiert.

# Dockerfile content
FROM tensorflow/serving
COPY /NeuralNetwork /models/neuralnetwork
ENV MODEL_NAME=neuralnetwork
EXPOSE 8501

Nun wird der Container gebaut und in die hub.docker.com Registry gepushed.

docker build -t mechlabengineering/machine_error_detection .
docker push mechlabengineering/machine_error_detection

Amazon ECS starten

Nun steht der Container mit trainiertem Modell darin in der Docker Registry zur Verfügung und kann im Amazon ECS als Container Definition ausgewählt werden.

Nachdem der Service hoch gefahren ist, steht ein API Endpunkt in AWS zur Verfügung, welcher genau so genutzt werden kann, wie die lokale Instanz.

Solution Architektur: Sensordaten werden via Websocket an die Browser App übertragen, diese sendet die Features via POST Request an den AWS Cloud Endpunkt des Tensorflow Serving Containers und erhält den Maschinenzustand zurück, welcher visualisiert wird

Der notwendige Code in der Browser Anwendung ändert sich nur die API_URL von localhost auf den Entsprechenden öffentlichen Endpunkt der AWS Instanz.

Fazit

In diesem 3-teiligen Tutorial wurde gezeigt, wie es möglich ist eine bestehende Maschine oder Prozess mit einfacher Sensorik nachträglich auszustatten, Daten aufzuzeichnen, diese als Features für das maschinelle Lernen zu verwenden und damit schließlich eine K.I. zu trainieren, welche zuvor definierte Zustände aus den Daten vorherzusagen lernt.

For privacy reasons Vimeo needs your permission to be loaded.
I Accept

Im Video ist zu sehen, wie die Beispielanwendung die Sensordaten an den Cloud Endpunkt sendet, von dort eine Vorhersage zum Maschinenzustand erhält und den Maschinenzustand “grün” visualisiert, solange die Maschine ordnungsgemäß aufrecht steht. Als die Maschine gestört wird und in einen Fehlerzustand übergeht, meldet die K.I., dass der Zustand “not working” ist, die Hintergrundfarbe der App ändert sich zu orange. Die Cloud API ist – wie man sieht – schnell genug, um eine Vorhersage in “Echtzeit” zu ermöglichen.

Dieses einfache A.I. basierte Condition Monitoring kann nun 24h am Tag den Maschinenzustand erfassen und loggen.

Repository

Code auf Gitlab

Der vollständige Quellcode, Erläuterungen und das trainierte Modell sind auf Gitlab unter CC-BY-2.0 Lizenz zu finden. Wir stehen selbstverständlich auch für ihr Projekt beratend zur Seite und freuen uns auf ihre Anfrage.

Repository

2 Comments

  1. […] Deployment und Anwendungsbeispiel mit Tensorflow Serving in Amazon ECS […]

  2. […] Deployment und Anwendungsbeispiel mit Tensorflow Serving in Amazon ECS […]

Leave A Comment