Поделиться через


Устранение ошибки descriptors cannot not be created directly

При использовании Машинного обучения Azure может возникнуть одна из следующих ошибок:

TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0." It is followed by the proposition to install the appropriate version of protobuf library.

If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

В частности, эту ошибку можно заметить при использовании AutoML.

Причина

Эта проблема вызвана критическими изменениями, введенными в protobuf 4.0.0. Дополнительные сведения см. в разделе https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates.

Разрешение

Для локальной среды разработки или вычислительного экземпляра установите пакет SDK Машинного обучения Azure версии 1.42.0.post1 или более поздней.

pip install azureml-sdk[automl,explain,notebooks]>=1.42.0

Дополнительные сведения об обновлении среды Машинного обучения Azure (для обучения или развертывания) см. в следующих статьях:

Чтобы проверить версию установленного пакета SDK, используйте следующую команду:

pip show azureml-core

Эта команда возвращает информацию, аналогичную Version: 1.42.0.post1.

Совет

Если вы не можете обновить установку пакета SDK для Машинное обучение Azure, можно закрепить версию protobuf в среде 3.20.1. В следующем примере показан файл conda.yml, демонстрирующий закрепление версии:

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - numpy=1.21.2
  - pip=21.2.4
  - scikit-learn=0.24.2
  - scipy=1.7.1
  - pandas>=1.1,<1.2
  - pip:
    - inference-schema[numpy-support]==1.3.0
    - xlrd==2.0.1
    - mlflow== 1.26.0
    - azureml-mlflow==1.41.0
    - protobuf==3.20.1

Следующие шаги

Дополнительные сведения о критических изменениях в protobuf 4.0.0 см. в разделе https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates.

Дополнительные сведения об обновлении среды Машинного обучения Azure (для обучения или развертывания) см. в следующих статьях: