我可以成功地建立一个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配置文件中指定pytorch 1.6.0的仅CPU版本?
答案 0 :(得分: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
答案 1 :(得分:1)
对于具有可选CUDA支持的系统(Linux和Windows),PyTorch提供了一个互斥量元软件包cpuonly
,该软件包在安装后将pytorch
软件包约束为仅适用于非CUDA构建。在选择CUDA选项的“无”时,通过the PyTorch installation widget会建议包括cpuonly
包
我不知道如何构建使用此类互斥量元数据包的内部信息,但总体上mutex metapackages are documented与元数据包有关,并且该文档包括MKL与OpenBLAS示例的链接。
我仍然不清楚为什么您开始使用的简单YAML失败的确切原因,但是我的猜测是cpuonly
的约束不仅限于pytorch
构建,还包括单独的特定pytorch
构建不足以约束其依赖性。