【问题标题】:Specifying cpu-only for pytorch in conda YAML file在 conda YAML 文件中为 pytorch 指定 cpu-only
【发布时间】:2020-11-04 17:38:36
【问题描述】:

我可以成功搭建conda环境如下:

conda create --name temp python=3.8.5
conda install pytorch==1.6.0 torchvision==0.7.0 cpuonly -c pytorch

然后我将环境保存到 YAML 配置文件中。看起来像这样:

name: temp
channels:
  - pytorch
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - blas=1.0=mkl
  - ca-certificates=2020.10.14=0
  - certifi=2020.6.20=pyhd3eb1b0_3
  - cpuonly=1.0=0
  - freetype=2.10.4=h5ab3b9f_0
  - intel-openmp=2020.2=254
  - jpeg=9b=h024ee3a_2
  - lcms2=2.11=h396b838_0
  - ld_impl_linux-64=2.33.1=h53a641e_7
  - libedit=3.1.20191231=h14c3975_1
  - libffi=3.3=he6710b0_2
  - libgcc-ng=9.1.0=hdf63c60_0
  - libpng=1.6.37=hbc83047_0
  - libstdcxx-ng=9.1.0=hdf63c60_0
  - libtiff=4.1.0=h2733197_1
  - lz4-c=1.9.2=heb0550a_3
  - mkl=2020.2=256
  - mkl-service=2.3.0=py38he904b0f_0
  - mkl_fft=1.2.0=py38h23d657b_0
  - mkl_random=1.1.1=py38h0573a6f_0
  - ncurses=6.2=he6710b0_1
  - ninja=1.10.1=py38hfd86e86_0
  - numpy=1.19.2=py38h54aff64_0
  - numpy-base=1.19.2=py38hfa32c7d_0
  - olefile=0.46=py_0
  - openssl=1.1.1h=h7b6447c_0
  - pillow=8.0.1=py38he98fc37_0
  - pip=20.2.4=py38h06a4308_0
  - python=3.8.5=h7579374_1
  - pytorch=1.6.0=py3.8_cpu_0
  - readline=8.0=h7b6447c_0
  - setuptools=50.3.0=py38h06a4308_1
  - six=1.15.0=py_0
  - sqlite=3.33.0=h62c20be_0
  - tk=8.6.10=hbc83047_0
  - torchvision=0.7.0=py38_cpu
  - wheel=0.35.1=py_0
  - xz=5.2.5=h7b6447c_0
  - zlib=1.2.11=h7b6447c_3
  - zstd=1.4.5=h9ceee32_0
prefix: /data/anaconda/envs/temp

但如果我尝试从以下文件创建 conda 环境:

name: temp
channels:
  - defaults
  - pytorch
dependencies:
  - python==3.8.5
  - pytorch==1.6.0=py3.8_cpu_0

它失败了,具有以下不兼容性:

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Package ld_impl_linux-64 conflicts for:
python==3.8.5 -> ld_impl_linux-64
Package sqlite conflicts for:
python==3.8.5 -> sqlite[version='>=3.32.3,<4.0a0|>=3.33.0,<4.0a0']
Package * conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> *[track_features=cpuonly]
Package ncurses conflicts for:
python==3.8.5 -> ncurses[version='>=6.2,<7.0a0']
Package mkl conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> mkl[version='>=2018']
Package blas conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> blas=[build=mkl]
Package zlib conflicts for:
python==3.8.5 -> zlib[version='>=1.2.11,<1.3.0a0']
Package openssl conflicts for:
python==3.8.5 -> openssl[version='>=1.1.1g,<1.1.2a']
Package python conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> python[version='>=3.8,<3.9.0a0']
Package xz conflicts for:
python==3.8.5 -> xz[version='>=5.2.5,<6.0a0']
Package libffi conflicts for:
python==3.8.5 -> libffi[version='>=3.3,<3.4.0a0']
Package libgcc-ng conflicts for:
python==3.8.5 -> libgcc-ng[version='>=7.3.0']
Package tk conflicts for:
python==3.8.5 -> tk[version='>=8.6.10,<8.7.0a0']
Package pip conflicts for:
python==3.8.5 -> pip
Package ninja conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> ninja
Package readline conflicts for:
python==3.8.5 -> readline[version='>=8.0,<9.0a0']
Package numpy conflicts for:
pytorch==1.6.0=py3.8_cpu_0 -> numpy[version='>=1.11']

为什么?如此简单的配置,从成功的环境中删除,怎么会失败?我应该如何在 conda 环境的 YAML 配置文件中指定仅 CPU 版本的 pytorch 1.6.0?

【问题讨论】:

  • 尝试从pytorch 中删除构建字符串并将元包cpuonly 添加为依赖项。
  • @merv 成功了,谢谢。你想把它写下来作为答案吗?第二个问题,我可以在哪里为自己解决这个问题,是否有该软件包的文档,甚至提到它是一个软件包?

标签: yaml pytorch conda miniconda


【解决方案1】:

对于具有可选 CUDA 支持的系统(Linux 和 Windows),PyTorch 提供了一个互斥元包 cpuonly,在安装时将 pytorch 包限制为仅解决非 CUDA 构建。在选择 CUDA 选项的“NONE”时,通过the PyTorch installation widget 将建议包含cpuonly

我不知道如何构建使用此类互斥元包的包的内部原理,但 mutex metapackages are documented 通常使用元包,并且文档包含指向 MKL 与 OpenBLAS 示例的链接。

我仍然不清楚您开始使用的简单 YAML 失败的确切原因,但我的猜测是 cpuonly 不仅限制了 pytorch 构建,而且单独使用特定的 pytorch 构建不足以限制它依赖关系。

【讨论】:

  • 从我在不依赖于 Conda 而是依赖于 pyenv 虚拟环境的安装中看到的情况,cpuonly 元包将 torchtorchvision 都限制在仅 CPU 的环境中。这似乎与你的“猜测”一致!
【解决方案2】:

选项 1

cpuonly 添加为一个包

name: temp
channels:
  - defaults
  - pytorch
dependencies:
  - python==3.8.5
  - cpuonly
  - pytorch==1.6.0

选项 2

在相关包中添加+cpuonly后缀

name: temp
channels:
  - defaults
  - pytorch
dependencies:
  - python==3.8.5
  - pytorch==1.6.0+cpuonly

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多