Как исправить ошибку «модуль« tenorflow »не имеет атрибута« оценщик »» - PullRequest
2 голосов
/ 19 апреля 2019

Я использую conda (env, созданный через YAML) + pip для настройки среды Tensorflow v1.13.1 на моем Linux Mint box.После установки при попытке импортировать tf.estimator я получаю AttributeError, описанный в заголовке:

AttributeError: module 'tensorflow' has no attribute 'estimator'
  • У меня не установлено ни одной версии TF вне среды conda (илина пипе).
  • У меня есть другая среда conda, настроенная таким же образом, но с Tensorflow 2.0 alpha, который может импортировать tf.estimator очень хорошо.
  • Я попытался удалить среду и создатьэто снова
  • Я попытался перезагрузиться: (
  • По некоторым причинам я не могу обновить conda до 4.6:
$ conda update -n base -c defaults conda

# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<

    Traceback (most recent call last):
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/exceptions.py", line 819, in __call__
        return func(*args, **kwargs)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main.py", line 78, in _main
        exit_code = do_call(args, p)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/conda_argparse.py", line 77, in do_call
        exit_code = getattr(module, func_name)(args, parser)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main_update.py", line 14, in execute
        install(args, parser, 'update')
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 253, in install
        handle_txn(unlink_link_transaction, prefix, args, newenv)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 282, in handle_txn
        unlink_link_transaction.execute()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 223, in execute
        self.verify()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/common/io.py", line 46, in decorated
        return f(*args, **kwds)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 200, in verify
        self.prepare()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 192, in prepare
        stp.remove_specs, stp.update_specs)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 282, in _prepare
        mkdir_p(transaction_context['temp_dir'])
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/gateways/disk/__init__.py", line 60, in mkdir_p
        makedirs(path)
      File "/usr/share/anaconda3/lib/python3.7/os.py", line 221, in makedirs
        mkdir(name, mode)
    PermissionError: [Errno 13] Permission denied: '/usr/share/anaconda3/.condatmp'

Файл yml выглядит следующим образом:

dependencies:
- python
- numpy
- tensorflow
- cudatoolkit==9.0
...

Изнутри рассматриваемой среды:

  • $ conda list tensorflow
    # packages in environment at /home/cjs/.conda/envs/my-env:
    # 
    # Name                    Version                   Build  Channel
    tensorflow                1.13.1          mkl_py37h54b294f_0
    tensorflow-base           1.13.1          mkl_py37h7ce6ba3_0
    tensorflow-estimator      1.13.0                     py_0
  • $ pip list | grep tensorflow
    tensorflow                  1.13.1
    tensorflow-estimator        1.13.0
  • $ which pip
    /home/cjs/.conda/envs/my-env/bin/pip
  • $ conda --version
    conda 4.5.11
  • $ pip --version
    pip 19.0.3 from /home/cjs/.local/lib/python3.7/site-packages/pip (python 3.7)

Вот минимальный пример этой проблемы. Как вы можете видеть, это происходит только тогда, когда вызывается tf.estimator, все остальные атрибуты Tensorflow работают как положено:

Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.13.1'
>>> tf.estimator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'estimator'
>>> tf.estimator.Estimator()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'estimator'
>>> from tensorflow import estimator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'estimator' from 'tensorflow' (/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/__init__.py)
>>> tf.Variable
<class 'tensorflow.python.ops.variables.VariableV1'>
>>> tf.keras
<module 'tensorflow._api.v1.keras' from '/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/_api/v1/keras/__init__.py'>
>>> tf.constant
<function constant_v1 at 0x7fb25ea24950>

ОБНОВЛЕНИЕ

В соответствии с https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver Я смог выяснить, что мои драйверы nvidia и версии cudatoolkit не синхронизированы (390.46 против 9.0).

IЯ обновил драйверы NVIDIA до версии v418 и смог обновить версию conda до версии 4.16.14.Я обновил environment.yml, показанный выше, до cudatoolkit==10.1, но я не могу понять, как на самом деле установить его.

Мой вывод numba -s включает этот раздел, что заставляет меня думать с самого начала, что cuda не находит мой графический процессор (или не может подключиться к нему?).

__CUDA Information__
Error: CUDA device intialisation problem. Message:Error at driver init:
[100] Call to cuInit results in CUDA_ERROR_NO_DEVICE:
Error class: <class 'numba.cuda.cudadrv.error.CudaSupportError'>

(МИНОР) ОБНОВЛЕНИЕ

Удалось определить причину проблемы с numba: я не перезагружался с момента обновления драйверов графического процессора (duh).

Не полностьюиз леса на это, хотя.Новый выпуск:

__CUDA Information__
Found 1 CUDA devices
id 0          b'Quadro K620'                              [SUPPORTED]
                      compute capability: 5.0
                           pci device id: 0
                              pci bus id: 1
Summary:
        1/1 devices are supported
CUDA driver version                 : 10010
CUDA libraries:
Finding cublas
        ERROR: can't locate lib
Finding cusparse
        ERROR: can't locate lib
Finding cufft
        ERROR: can't locate lib
Finding curand
        ERROR: can't locate lib
Finding nvvm
        ERROR: can't locate lib
        finding libdevice for compute_20...     ERROR: can't open libdevice for compute_20
        finding libdevice for compute_30...     ERROR: can't open libdevice for compute_30
        finding libdevice for compute_35...     ERROR: can't open libdevice for compute_35
        finding libdevice for compute_50...     ERROR: can't open libdevice for compute_50

1 Ответ

0 голосов
/ 30 апреля 2019

Наконец-то нашел проблему. У меня все еще были установлены некоторые локальные (не Conda) пакеты Tensorflow, которые, я думаю, имели более высокий приоритет в среде python.

Эта ссылка решила мою проблему: https://github.com/tensorflow/tensorboard/issues/2067

  • Удаление tenorflow, тензорная доска
  • Удалить tb-nightly (если он установлен)
  • Используйте «pip freeze | grep tenorflow», чтобы проверить, был ли установлен пакет tenorflow-estimator. Если это так, удалите его.
  • Перейдите на сайт-пакеты и удалите все папки тензорного потока, связанные с тензорным потоком, тензорным столом, оценщиком тензорного потока и т. Д.
  • Переустановите последние версии tenorflow и tenorboard

Ключом к моей проблеме был пакет сайтов, который можно найти ОБА

  • ~/.conda/envs/<my-env>/lib/python3.<xx>/site-packages
  • ~/.local/lib/python3.<xx>/site-packages

Где <my-env> - ваша среда conda, а <xx> - ваша версия Python.

Просто rm -r <path to package> каждого пакета тензорного потока в вашей библиотеке ~/.local/ и переустановите среду conda.

...