На Windows 10 Pro я запустил Docker-контейнер:
docker run --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 -it --rm -v G:/Dropbox/:/workspace/DRP/ -p 8888:8888 spellrun/caffe:latest
Это изображение, извлеченное из док-станции и являющееся linux
root@675aac742a80:~# uname -a
Linux 675aac742a80 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
В нем есть python3, python2, jupyter и caffe
root@675aac742a80:~# find / -name "python"
/etc/python
/var/lib/python
/usr/local/lib/python2.7/dist-packages/notebook/static/components/codemirror/mode/python
/usr/local/lib/python3.6/dist-packages/notebook/static/components/codemirror/mode/python
/usr/local/cuda-9.2/share/gdb/python
/usr/bin/python
/usr/share/gcc-8/python
/usr/share/lintian/overrides/python
/usr/share/doc/python
/usr/share/python
root@675aac742a80:~# find / -name "jupyter"
/root/.local/share/jupyter
/usr/local/etc/jupyter
/usr/local/bin/jupyter
/usr/local/share/jupyter
root@675aac742a80:~# find / -name "caffe"
/usr/lib/python3/dist-packages/caffe
/usr/bin/caffe
/usr/share/bash-completion/completions/caffe
Я могу запустить ноутбук Jupyter отлично
jupyter notebook --ip=0.0.0.0 --allow-root
но потом
import caffe
дает
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-4-6e7bb19bc708> in <module>()
----> 1 import caffe
ImportError: No module named caffe
Я думаю, это потому, что он ищет caffe в каталоге пакетов python2, когда он на самом деле находится в каталоге пакетов python3. И это происходит, даже когда я запускаю jupyter с ядром python3.
Даже когда я запустил ядро python 3 в блокноте jupyter, jupyter ищет пакеты в библиотеке python2
import sys
sys.path
1024 * дает *
['',
'/spell-utils',
'/workspace/DRP/[deep-dream',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/local/lib/python2.7/dist-packages/IPython/extensions',
'/root/.ipython']
Я думаю, это потому, что файл jupyter kernel.json указывает на python2 для ОБА ядер
root@675aac742a80:/usr/local/share/jupyter/kernels/python2#
{
"display_name": "Python 2",
"language": "python",
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
]
}
и
root@675aac742a80:/usr/local/share/jupyter/kernels/python3#
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}
Поэтому я попытался добавить библиотеки python3 к пути следующим образом:
sys.path.append('/usr/local/lib/python3.6/dist-packages')
sys.path.append('/usr/lib/python3/dist-packages/')
sys.path.append('/usr/bin/caffe')
sys.path
дает
['',
'/spell-utils',
'/workspace/DRP/[deep-dream',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/local/lib/python2.7/dist-packages/IPython/extensions',
'/root/.ipython',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages/',
'/usr/bin/caffe']
теперь импортное кафе дает это
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-10-6e7bb19bc708> in <module>()
----> 1 import caffe
/usr/lib/python3/dist-packages/caffe/__init__.py in <module>()
----> 1 from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
2 from ._caffe import init_log, log, set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list, set_random_seed, solver_count, set_solver_count, solver_rank, set_solver_rank, set_multiprocess, has_nccl
3 from ._caffe import __version__
4 from .proto.caffe_pb2 import TRAIN, TEST
5 from .classifier import Classifier
/usr/lib/python3/dist-packages/caffe/pycaffe.py in <module>()
11 import numpy as np
12
---> 13 from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
14 RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
15 import caffe.io
ImportError: No module named _caffe
Интересно, что у меня нет проблем при запуске этого док-контейнера на Linux-коробке.