medizininformatik-initiative / GeMTeX

7 stars 0 forks source link

[inception-recommender] Neustart des Docker Containers bei Fehlerfall. #32

Open hunnguye opened 2 weeks ago

hunnguye commented 2 weeks ago

Situationsbeschreibung

Wir nutzen den Recommender in Verbindung mit Inception und der AHD. Wie in der Dokumentation beschrieben, wird empfohlen, den Recommender erst nach dem Start der AHD zu starten.

Aktuell haben wir das Problem, dass der Recommender Fehler ausgibt und keine Annotationsempfehlungen mehr liefert, sobald die AHD neu gestartet werden muss (z.B. wegen Wartung oder Updates). Wenn der Recommender jedoch ebenfalls neu gestartet wird, treten keine weiteren Fehler mehr auf, und die Annotationsempfehlungen funktionieren wieder.

Fehlermeldung im recommender Container:

[2024-11-06 13:14:31 +0000] [11] [INFO] Got prediction request for [deid_recommender]
INFO:ariadne.server:Got prediction request for [deid_recommender]
[2024-11-06 13:14:31 +0000] [11] [ERROR] Exception on /deid_recommender/predict [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/inception_ahd_recommender/ariadne/server.py", line 70, in _predict
    req.user_id,
  File "/inception_ahd_recommender/ariadne/contrib/external_uima_classifier.py", line 352, in predict
    _server_response = self.process_text(cas.sofa_string, cas.document_language)
  File "/inception_ahd_recommender/ariadne/contrib/external_uima_classifier.py", line 330, in process_text
    self.get_pipeline().analyse_text_to_cas(source=text, language=language)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 100, in new_function
    return original_function(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 457, in analyse_text_to_cas
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 100, in new_function
    return original_function(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 2569, in _analyse_text_xmi
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 1802, in __request_with_bytes_response
    self.__handle_error(raw_response)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 2974, in __handle_error
    raise RequestException(error_msg)
requests.exceptions.RequestException: 404 Server Error: 'Not Found' for url: 'https://averbis-dev.test.med.tu-dresden.de/health-discovery/rest/experimental/textanalysis/projects/GeMTeX/pipelines/deid/analyzeTextToCas?language=x-unspecified'.
ERROR:ariadne.server:Exception on /deid_recommender/predict [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/inception_ahd_recommender/ariadne/server.py", line 70, in _predict
    req.user_id,
  File "/inception_ahd_recommender/ariadne/contrib/external_uima_classifier.py", line 352, in predict
    _server_response = self.process_text(cas.sofa_string, cas.document_language)
  File "/inception_ahd_recommender/ariadne/contrib/external_uima_classifier.py", line 330, in process_text
    self.get_pipeline().analyse_text_to_cas(source=text, language=language)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 100, in new_function
    return original_function(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 457, in analyse_text_to_cas
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 100, in new_function
    return original_function(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 2569, in _analyse_text_xmi
    timeout=timeout,
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 1802, in __request_with_bytes_response
    self.__handle_error(raw_response)
  File "/usr/local/lib/python3.7/site-packages/averbis/core/_rest_client.py", line 2974, in __handle_error
    raise RequestException(error_msg)
requests.exceptions.RequestException: 404 Server Error: 'Not Found' for url: 'https://averbis-dev.test.med.tu-dresden.de/health-discovery/rest/experimental/textanalysis/projects/GeMTeX/pipelines/deid/analyzeTextToCas?language=x-unspecified'.

Reproduzierbarkeit

  1. AHD starten
  2. Recommender starten
  3. Test der Recommendation Generierung in Inception funktioniert fehlerfrei
  4. AHD neustarten
  5. Test der Recommendation Generierung in Inception wirft Fehlermeldung auf

Recommender Version : ghcr.io/medizininformatik-initiative/gemtex/inception-ahd-recommender:1.1.2

Vorschlag

Wäre es möglich, den Recommender-Container bei einem Fehler abstürzen zu lassen, sodass er durch eine Restart-Policy automatisch neu gestartet werden kann?

reckart commented 2 weeks ago

Wird in Schritt 4 ggf. ein neues Login Token erzeugt und das Token welches vom Recommender Proxy verwendet wird geht dann nicht mehr?

hunnguye commented 2 weeks ago

Das ist auszuschließen. In einem Schritt 6 wird der recommender einfach nur heruntergefahren und wieder hochgefahren (docker compose down / up). Dadurch "fängt" sich der Recommender wieder, und Annotationsempfehlungen werden ausgespielt. Die Einstellungen bezüglich Token o.ä bleiben gleich.

reckart commented 2 weeks ago

Der Proxy Container müsste ja stateless sein (sprich er hält keine Verbindung zur AHD permanent offen). Was könnte da schief gehen, dass er plötzlich von 404 von der URL bekommt? Die URL von der AHD sollte sich ja nicht ändern nur weil deren Container neu gestartet wird, oder?

fmatthies commented 5 days ago

Ich weiß nicht, ob das hilft, aber die Idee wäre, wenn der implementierte AHDClassifier unerfolgreich auf die AHD zugreift, die RequestException abzufangen und dann das pyhton-Programm zu terminieren (1d61de466345a3520289baa7e1dec1408a005485). Dann sollte doch der docker-Container automatisch neugestartet werden können?