Ошибка развертывания Azure «TypeError: конфликт метаклассов» при импорте тензорного потока (1.13.1) в код проекта

Любая помощь в решении проблемы будет принята с благодарностью.

Я пытаюсь развернуть старую модель CNN (MRCNN), последний раз развернутую в декабре 2020 года, в студии Azure ML с использованием Python SDK V2. После успешного развертывания, когда образ встроен в развертывание, я сталкиваюсь с этой ошибкой:

File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/azureml_inference_server_http/server/user_script.py", line 73, in load_script
    main_module_spec.loader.exec_module(user_module)
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/azureml-app/ProcessImage/__azureml_entry__.py", line 14, in <module>
    from samples.coco.inference import loadFlowchart, loadBarchart, loadFramework, detect_sketch
  File "/var/azureml-app/ProcessImage/samples/coco/inference.py", line 11, in <module>
    import tensorflow as tf
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/python/__init__.py", line 70, in <module>
    from tensorflow.python.framework.framework_lib import *  # pylint: disable=redefined-builtin
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/python/framework/framework_lib.py", line 25, in <module>
    from tensorflow.python.framework.ops import Graph
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 54, in <module>
    from tensorflow.python.platform import app
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 24, in <module>
    from tensorflow.python.platform import flags
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/tensorflow/python/platform/flags.py", line 25, in <module>
    from absl.flags import *  # pylint: disable=wildcard-import
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/absl/flags/__init__.py", line 35, in <module>
    from absl.flags import _argument_parser
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/absl/flags/_argument_parser.py", line 82, in <module>
    class ArgumentParser(Generic[_T], metaclass=_ArgumentParserCache):
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/azureml_inference_server_http/server/aml_blueprint.py", line 130, in setup
    self.user_script.load_script(AML_APP_ROOT)
  File "/azureml-envs/azureml_27d1bdb1f51e3c046e82b0c2ef18ac11/lib/python3.6/site-packages/azureml_inference_server_http/server/user_script.py", line 75, in load_script
    raise UserScriptImportException(ex) from ex
azureml_inference_server_http.server.user_script.UserScriptImportException: Failed to import user script because it raised an unhandled exception

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

Вот подробности моей среды conda, которые я использую в своем развертывании:

channels:
  - conda-forge
  - anaconda
dependencies:
  - tensorflow-gpu==1.12.0
  - pip==21.1.3
  - python==3.7.16
  - Cython==0.29.14
  - pycocotools==2.0.0
  - pip:
      - setuptools==59.6.0
      - wheel==0.37.1
      - Pillow==6.2.1
      - numpy==1.17.4
      - pandas==0.25.3
      - azure-storage-blob==12.7.0
      - XlsxWriter==1.2.7
      - google-cloud-vision==0.42.0
      - tensorboard==1.13.1
      - tensorflow==1.13.1
      - absl-py>=0.11.0
      - Keras-Applications==1.0.8
      - Keras-Preprocessing==1.1.0
      - scikit-image==0.16.2
      - scipy==1.3.3
      - matplotlib==3.1.2
      - zipp==0.6.0
      - urllib3==1.25.7
      - ipykernel==5.1.3
      - ipyparallel==6.2.4
      - ipython==7.9.0
      - ipywidgets==7.5.1
      - pathlib==1.0.1
      - pathlib2==2.3.5
      - apscheduler==3.6.3
      - scikit-learn==0.23.1
      - google-api-core==1.16.0
      - google-auth==1.7.1
      - google-auth-oauthlib==0.4.1
      - google-cloud-vision==0.42.0
      - google-pasta==0.1.8
      - h5py==2.10.0
      - python-http-client==3.2.5
      - sendgrid==6.1.2
      - azure-cognitiveservices-vision-computervision==0.7.0
      - keras==2.1.0
      - grpcio==1.25.0
      - graphviz==0.8.4
      - ipython-genutils==0.2.0
      - azureml-defaults>=1.13.0
      - opencv-python==4.1.2.30
      - imgaug==0.3.0
      - googleapis-common-protos==1.51.0
      - pathos
name: tensorflow-gpu-1.12-cuda11

Решение:

Мне пришлось обновить Tensorflow до 2+ (я выбрал 2.0.0). Следовательно, мне пришлось изменить свой код для использования Tensorflow v2. В разделе описаны конкретные шаги по переходу на версию 2.

В моем случае моим кодом был MRCNN, и там было множество блогов, вопросов SO и репозиториев git, которые помогли правильно перенести мой код на V2.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TypeError: конфликт метаклассов: метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его баз.

Это происходит из-за конфликтов между метаклассами, используемыми в разных классах или модулях.

  • Учитывая, что вы используете TensorFlow и absl, эта проблема возникает из-за взаимодействия между TensorFlow и другой библиотекой, которая определяет пользовательские метаклассы.

В большинстве случаев обновление или понижение версии конкретных зависимостей может разрешить конфликты метаклассов.

Конкретный пакет в качестве стабильной версии для ваших требований. Добавьте его в свой файл конфигурации.

  • Обновите зависимости вашего проекта до указанной версии.
pip install -r requirements.txt --upgrade

Иногда, когда Tensorflow 2 и «приложение» установлены, ошибка выглядит примерно так: ~ tensorflow==2.16.1.

  • Нам требуется версия Tensorflow 1.x, версия Tensorflow 1.15 доступна для 64-разрядной версии Windows python AssertionError: only tensorflow v1 is supported, но переход на более раннюю версию Python 3.6 больше не поддерживается.

Установите последнюю версию с помощью Python 3.6 и обновите ее с помощью pip install 'tensorflow<2.0' или аналогичной.

Спасибо за ответ. Мне удалось решить проблему с помощью tensorflow 2.0. Мне также пришлось обновить свой код, чтобы правильно перенести его на tensorflow 2.0. Хотя меня все еще интересует ошибка absl, поскольку она появилась недавно, и было довольно много тем в проблемах с github, пытающихся найти ее исправление.

Furqan Rahamath 06.04.2024 07:49

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