在conda中,一般通过yaml文件来配置环境的命令为:
conda env create -f environment.yml -n 环境名
但能够一次性成功配置环境属于少数情况,一般都会遇到配置太慢、卡死、solving environment failed、PackageNotFound、以及pip爆出的一堆红字
问题1:包找不到,且大部分都带有包的唯一标识符(例如hf484d3e_0、h1ccaba5_0)
分类讨论一下,如果只有少量的包,或许可以通过删除yaml文件中的唯一标识符限制来完成环境配置,yaml文件改动如下所示:
但是如果有很多包(带唯一标识符的)都找不到,就很有可能是系统环境不对导致的
例如尝试在windows10环境下配置linux中特有的一些包
当然这样也会导致一些其他包出现问题:
这个时候就需要敏锐一点,发现最后一个包的包名为ld_impl_linux-64,就可以反应过来配置的系统不对了。果断更换系统。
问题2:等待时间太长
建议加入一些快速的源(在conda中称为channel),比如清华源或者阿里源,如果有校内或者工作的内网源更好,确认网络连接正常。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 使用conda config --show channels
删除源使用conda config --remove channels 源名,
一般情况下,网络正常,配置时间不会太久
问题3:pytorch安装找不到匹配的版本号
ERROR: No matching distribution found for torch==1.12.1+cu102
这种情况其实是比较常见的,因为pytorch老版本中支持CUDA的版本是需要单独配置的
Previous PyTorch Versions | PyTorch
可以在官网上找到你需要的pytorch,然后在已经激活的conda环境中使用pip直接安装
例如这样:(很好的一点就是pytorch官网上可以找到所有的对应版本信息)
pip install torch==1.12.1+cu102 torchvision==0.13.1+cu102 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu102 建议不要使用conda install的命令,因为它基本上不会安装GPU版本的pytorch
下图为使用conda install的安装结果:(其实这个packageplan就可以看出它安装的不是torch包而是pytorch包,很奇怪)
关于pytorch cuda版本的选择问题,先试用一下nvidia-smi命令查看自己是否安装CUDA
只要这里显示的CUDA版本号大于安装的pytorch版本号就可以了
例如torch==1.12.1+cu102的CUDA版本为10.2,当前系统的CUDA版本为11.4,说明可以直接安装这个版本的pytorch
问题4:下载包到一半突然一大片红ERROR,一般包含time out字样
socket.timeout: The read operation timed out或者ReadTimeoutError: HTTPSConnectionPool(host='download.pytorch.org', port=443): Read timed out.
这个主要是网络波动导致的,也有可能是远端的服务器网络出现问题,也有可能是自己的源没配好,访问不稳定。总之是网络上的问题。
重新尝试命令即可,对于已经下载好的包,pip会读取自己的缓存cache,不会让你重复下载的。
问题5:安装某个包的时候,它自动把已经装好的pytorch删掉了,重新安装了另一个版本
这种情况一般为安装一些高级的深度学习库会遇到,例如DGL、allennlp等等
在yaml的pip列表中可以先扫一眼,看看有没有这种包,如果有就留到最后单独安装,在官网上查询对应的pytorch版本来判断应该这么安装。
如果不知道是不是这种有依赖关系的深度学习库时,可以先装pytorch,再装其他库,如果发现在下载新的pytorch版本就立刻终止,早发现早治疗。
如果最后单独安装的时候仍然pytorch版本不对,说明可能源代码根本就没用这个库,也可以在官网上选择一个高相邻版本的库进行安装,一般都可以正常运行。
如果不想使用conda install来配置整个环境,可以使用以下命令(在conda的目标环境下)
pip install -r requirements.txt 在包比较少的情况下也可以用pip install手动硬装
但记住安装完成之后需要执行一下pip check命令,看一下是不是所有的包的依赖关系都正确了
另外给出一个实用的pip和conda小技巧
pip cache purge
可以清除pip管理器和conda管理器中的缓存,避免一些大型包下载的一半中断导致系统内存被占的问题,例如tensorflow和pytorch。