web-dev-qa-db-fra.com

Comment corriger l'erreur "module 'tensorflow' n'a pas d'attribut 'estimateur'"

J'utilise conda (env créé via YAML) + pip pour configurer un environnement Tensorflow v1.13.1 sur ma boîte Linux Mint. Après la configuration, chaque fois que j'essaie d'importer tf.estimator Je reçois le AttributeError décrit dans le titre:

AttributeError: module 'tensorflow' has no attribute 'estimator'
  • Je n'ai aucune version de TF installée en dehors d'un environnement conda (ou sur pip).
  • J'ai un autre environnement conda configuré de la même manière mais avec Tensorflow 2.0 alpha, qui peut importer tf.estimator ça va.
  • J'ai essayé de supprimer l'environnement et de le reconstruire
  • J'ai essayé de redémarrer :(
  • Pour une raison quelconque, je ne peux pas mettre à jour conda vers 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'

Le fichier yml ressemble à ceci:

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

De l'intérieur de l'environnement en question:

  • $ 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)

Voici un exemple minimal du problème. Comme vous pouvez le voir, cela ne se produit que lorsque tf.estimator est appelé, tous les autres attributs Tensorflow agissent comme prévu:

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>

METTRE À JOUR

Selon https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver J'ai pu comprendre que mes pilotes nvidia et les versions de cudatoolkit étaient désynchronisé (390,46 contre 9,0).

J'ai maintenant mis à jour mes pilotes NVIDIA vers la v418 et j'ai pu mettre à jour ma version conda en 4.16.14. J'ai mis à jour le fichier environment.yml ci-dessus en cudatoolkit==10.1, mais je n'arrive pas à comprendre comment réellement l'installer.

Ma numba -s La sortie inclut cette section, ce qui me fait penser que tout le problème depuis le début était que cuda ne trouve pas mon GPU (ou ne peut pas s'y connecter?).

__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'>

(MINEUR) MISE À JOUR

A pu déterminer la cause du problème numba était que je n'ai pas redémarré depuis la mise à jour des pilotes GPU (duh).

Pas complètement sorti du bois, cependant. Le nouveau numéro est le suivant:

__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
4
cjs

Désinstallez simplement tensorflow, tensorboard et tensorflow-estimator et réinstallez tensorflow. A fonctionné pour moi avec la version 1.14.0.

pip uninstall tensorflow tensorboard tensorflow-estimator
...
pip install tensorflow==1.14.0
0
CGFoX