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'
tf.estimator
ça va.$ 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>
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'>
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
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