Установка пакета pip с cupy в качестве требования ставит установку в бесконечный цикл

Я пытаюсь сделать пакет pip с cupy в качестве одного из требований, но я включаю cupy в требование, установка pip заканчивается бесконечным циклом. Я пытаюсь установить пакет в Google Colab, в котором уже установлена ​​Cupy, поэтому он должен только проверять, установлен ли уже Cupy, и не пытаться установить его снова.

Я сделал минимальный пакет pip в github, где единственным требованием является cupy.

https://github.com/Santosh-Gupta/TroubleShootCupyInstall

Я пытался установить его в Google Colab с помощью

!pip install --verbose https://github.com/Santosh-Gupta/TroubleShootCupyInstall/archive/master.zip --log 'file.log'

Вывод много, поскольку он подробный, но это строки, которые печатаются, когда он попадает в свой цикл.

 x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -D_FORCE_INLINES=1 -I/usr/local/cuda/include -I/usr/include/python3.6m -c cupy/cuda/nvtx.cpp -o build/temp.linux-x86_64-3.6/cupy/cuda/nvtx.o
  x86_64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.6/cupy/cuda/nvtx.o -L/usr/local/cuda/lib64 -lnvToolsExt -o build/lib.linux-x86_64-3.6/cupy/cuda/nvtx.cpython-36m-x86_64-linux-gnu.so -Wl,--disable-new-dtags,-rpath,/usr/local/cuda/lib64
  building 'cupy.cuda.thrust' extension
  x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -D_FORCE_INLINES=1 -I/usr/local/cuda/include -I/usr/include/python3.6m -c cupy/cuda/thrust.cpp -o build/temp.linux-x86_64-3.6/cupy/cuda/thrust.o
  NVCC options: ['--generate-code=arch=compute_30,code=compute_30', '--generate-code=arch=compute_50,code=compute_50', '--generate-code=arch=compute_60,code=sm_60', '--generate-code=arch=compute_61,code=sm_61', '--generate-code=arch=compute_70,code=sm_70', '--generate-code=arch=compute_75,code=sm_75', '--generate-code=arch=compute_70,code=compute_70', '-O2', '--compiler-options="-fPIC"']
  /usr/local/cuda/bin/nvcc -D_FORCE_INLINES=1 -I/usr/local/cuda/include -I/usr/include/python3.6m -c cupy/cuda/cupy_thrust.cu -o build/temp.linux-x86_64-3.6/cupy/cuda/cupy_thrust.o --generate-code=arch=compute_30,code=compute_30 --generate-code=arch=compute_50,code=compute_50 --generate-code=arch=compute_60,code=sm_60 --generate-code=arch=compute_61,code=sm_61 --generate-code=arch=compute_70,code=sm_70 --generate-code=arch=compute_75,code=sm_75 --generate-code=arch=compute_70,code=compute_70 -O2 --compiler-options="-fPIC"

Для удобства я сделал записную книжку Google Colab, которая запускает эту строку и имеет полную версию.

https://colab.research.google.com/drive/1DFR78cJ07Kah70If50p


person SantoshGupta7    schedule 30.08.2019    source источник


Ответы (1)


CuPy в настоящее время предоставляет исходный пакет с именем cupy и двоичные пакеты распространения с именем cupy-cudaXX (где XX - версия CUDA). В настоящее время Google Colab поставляется с cupy-cuda100, потому что он использует CUDA 10.0. Если вы укажете cupy в качестве требования вашего пакета, cupy исходный пакет будет загружен и установлен (требуется сборка, которая занимает несколько минут), даже если CuPy уже доступен через cupy-cuda100.

К сожалению, инструменты распространения пакетов Python (такие как setuptools, pip и т. Д.) Не предоставляют способа хорошо справиться с таким сложным составом пакетов.

Обходной путь 1

В setup.py (или в __init__.py вашего пакета)

try:
  import cupy
except Exception:
  raise RuntimeError('CuPy is not available. Please install it manually: https://docs-cupy.chainer.org/en/stable/install.html#install-cupy')

# You can also use `cupy.__version__` and `numpy.lib.NumpyVersion` to test CuPy version requirement here.

Обходной путь 2

Вручную проверьте требования с помощью pkg_resources (часть setuptools), как это сделано в Chainer.

person kmaehashi    schedule 30.08.2019