Ошибка загрузки конвейера neuraxle с контекстом выполнения

Когда я сохраняю конвейер, с которым связан ExecutionContext, и пытаюсь загрузить его снова, я получаю показанную ниже ошибку.

      from neuraxle.base import ExecutionContext, Identity
from neuraxle.pipeline import Pipeline

PIPELINE_NAME = 'saved_pipeline_name'
cache_folder = 'cache_folder'

pipeline = Pipeline([
    Identity()
]).with_context(ExecutionContext(cache_folder))

pipeline.set_name(PIPELINE_NAME).save(ExecutionContext(cache_folder), full_dump=True)
loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)

Сообщение об ошибке:

      Traceback (most recent call last):
  File "save_example.py", line 12, in <module>
    loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 555, in load
    ).load(context_for_loading, True)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 3621, in load
    return loaded_self.load(context, full_dump)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 1708, in load
    return self._load_step(context, savers)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 1717, in _load_step
    loaded_self = saver.load_step(loaded_self, context)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 3644, in load_step
    step.apply('_assert_has_services', context=context)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2316, in apply
    results: RecursiveDict = self._apply_childrens(results=results, method=method, ra=ra)
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2327, in _apply_childrens
    for children in self.get_children():
  File ".env/lib/python3.7/site-packages/neuraxle/base.py", line 2530, in get_children
    return [self.wrapped]
AttributeError: 'StepWithContext' object has no attribute 'wrapped'

Без with_context(ExecutionContext(cache_folder))загрузка работает нормально. Это ожидаемое поведение или это ошибка? Что было бы лучше всего для сохранения конвейеров при работе с контекстами выполнения?

1 ответ

Произошел ошибочный вызов функции в заставке StepWithContext. На следующий день или около того в главный репозиторий Neuraxle будет добавлено исправление. Если вы можете подождать до этого момента, ваш код должен выполняться без проблем.

Если нет, я бы посоветовал вам обойти StepWithContext, вызвав сохранение непосредственно на обернутом шаге StepWithContext (то есть в вашем экземпляре конвейера):

      pipeline.wrapped.set_name(PIPELINE_NAME).save(ExecutionContext(cache_folder), full_dump=True)
loaded_pipeline = ExecutionContext(cache_folder).load(PIPELINE_NAME)

Затем вам нужно будет повторно обернуть экземпляр loaded_pipeline с помощью StepWithContext, используя вызов .with_context().

Когда исправление будет доступно, имейте в виду, что экземпляры ExecutionContext вообще не сохраняются и что атрибут контекста StepWithContext заменяется тем контекстом, который используется для загрузки.

Не стесняйтесь задавать мне любые другие вопросы! Буду рад на них ответить.

Привет, Винсент

Другие вопросы по тегам