tchewik/isanlp_rst

Ошибка при доступе к контейнеру isanlp_rst

ulyanaisaeva opened this issue · 2 comments

Здравствуйте!

Столкнулась с ошибкой при запуске модели, скорее всего я что-то не учла, но делала по инструкции. Кажется, дело в том, что контейнер автоматически отключается через 1-2 минуты после запуска через docker run.

---------------------------------------------------------------------------
_InactiveRpcError                         Traceback (most recent call last)
Cell In [6], line 30
      9 ppl_ru = PipelineCommon([
     10     (ProcessorRazdel(), ['text'],
     11      {'tokens': 'tokens',
   (...)
     21      {'rst': 'rst'})
     22 ])
     24 text = ("Парацетамол является широко распространённым центральным ненаркотическим анальгетиком, обладает довольно "
     25         "слабыми противовоспалительными свойствами. Вместе с тем при приёме больших доз может вызывать нарушения "
     26         "работы печени, кровеносной системы и почек. Риски нарушений работы данных органов и систем "
     27         "увеличивается при одновременном принятии спиртного, поэтому лицам, употребляющим алкоголь, рекомендуют "
     28         "употреблять пониженную дозу парацетамола.")
---> 30 res = ppl_ru(text)

File ~/Desktop/Универ/rst_parsing/.venv/lib/python3.10/site-packages/isanlp/pipeline_common.py:74, in PipelineCommon.__call__(self, *input_data)
     71 result = {e : inp for (e, inp) in zip(list(self._processors.values())[0][1], input_data)}
     73 for proc, proc_input, proc_output in list(self._processors.values()):
---> 74     results = proc(*[result[e] for e in proc_input])
     75     if type(results) is tuple:
     76         results = {i : results[i] for i in range(len(results))}

File ~/Desktop/Универ/rst_parsing/.venv/lib/python3.10/site-packages/isanlp/processor_remote.py:42, in ProcessorRemote.__call__(self, *input_data)
     38 pb_ann.Pack(annotation_to_protobuf.convert_annotation(input_data))
     39 request = annotation_pb2.ProcessRequest(pipeline_name = self._pipeline_name, 
     40                                         input_annotations = pb_ann)
---> 42 response = self._stub.process(request)
     43 return annotation_from_protobuf.convert_annotation(response.output_annotations)

File ~/Desktop/Универ/rst_parsing/.venv/lib/python3.10/site-packages/grpc/_channel.py:946, in _UnaryUnaryMultiCallable.__call__(self, request, timeout, metadata, credentials, wait_for_ready, compression)
    937 def __call__(self,
    938              request,
    939              timeout=None,
   (...)
    942              wait_for_ready=None,
    943              compression=None):
    944     state, call, = self._blocking(request, timeout, metadata, credentials,
    945                                   wait_for_ready, compression)
--> 946     return _end_unary_response_blocking(state, call, False, None)

File ~/Desktop/Универ/rst_parsing/.venv/lib/python3.10/site-packages/grpc/_channel.py:849, in _end_unary_response_blocking(state, call, with_call, deadline)
    847         return state.response
    848 else:
--> 849     raise _InactiveRpcError(state)

_InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
	status = StatusCode.UNAVAILABLE
	details = "failed to connect to all addresses; last error: UNKNOWN: ipv4:127.0.0.1:3335: Failed to connect to remote host: Connection refused"
	debug_error_string = "UNKNOWN:failed to connect to all addresses; last error: UNKNOWN: ipv4:127.0.0.1:3335: Failed to connect to remote host: Connection refused {grpc_status:14, created_time:"2022-11-05T18:43:29.799901+03:00"}"
>

Скачала образы, запустила:

docker run --rm -d -p 3334:3333 --name spacy_ru tchewik/isanlp_spacy:ru
docker run --rm -d -p 3335:3333 --name rst_ru tchewik/isanlp_rst:2.1-rstreebank

Вызываю парсинг как в примере (подставила localhost):

from isanlp import PipelineCommon
from isanlp.processor_remote import ProcessorRemote
from isanlp.processor_razdel import ProcessorRazdel

# put the address here ->
address_syntax = ('localhost', 3334)
address_rst = ('localhost', 3335)

ppl_ru = PipelineCommon([
    (ProcessorRazdel(), ['text'],
     {'tokens': 'tokens',
      'sentences': 'sentences'}),
    (ProcessorRemote(address_syntax[0], address_syntax[1], '0'),
     ['tokens', 'sentences'],
     {'lemma': 'lemma',
      'morph': 'morph',
      'syntax_dep_tree': 'syntax_dep_tree',
      'postag': 'postag'}),
    (ProcessorRemote(address_rst[0], address_rst[1], 'default'),
     ['text', 'tokens', 'sentences', 'postag', 'morph', 'lemma', 'syntax_dep_tree'],
     {'rst': 'rst'})
])

text = ("Парацетамол является широко распространённым центральным ненаркотическим анальгетиком, обладает довольно "
        "слабыми противовоспалительными свойствами. Вместе с тем при приёме больших доз может вызывать нарушения "
        "работы печени, кровеносной системы и почек. Риски нарушений работы данных органов и систем "
        "увеличивается при одновременном принятии спиртного, поэтому лицам, употребляющим алкоголь, рекомендуют "
        "употреблять пониженную дозу парацетамола.")

res = ppl_ru(text)

Если убрать второй ProcessorRemote, то все работает, но без ТРС-парсинга, естественно. То есть дело в его контейнере.

[Python 3.10.4]

Стоило только создать issue, и сразу нашла в логах, что оно пытается запуститься на GPU.

2022-11-05 15:50:40.117655: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2022-11-05 15:50:40.117927: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

Подскажите, пожалуйста, CPU не потянет модель?
Прошу прощения, что зря создала тред.

Здравствуйте! Самое последнее уведомление сообщает именно о том, что модель пытается запуститься на CPU. Парсер содержит в том числе четыре нейронные модели и довольно требователен к ресурсам. Пожалуйста, сообщите вашу конфигурацию для уточнения.