Anaconda复制移植

Anaconda复制移植

2020-5-27

背景说明
有两台服务器分别为CPU、GPU,其中CPU连接外网,GPU与CPU在同一个局域网中,需要通过CPU作为跳板登陆GPU,且GPU不可以直接访问外网。
任务说明:想要在GPU上安装anaconda同时配置gpu版本的pytorch。
由于不能通过GPU服务器直接访问外网,所以需要通过CPU服务器来间接实现。
主要尝试了两种方法。

1. 利用anaconda版本控制功能
  1. 在CPU上安装anaconda,并在其中安装适配GPU上CUDA版本的Pytorch,具体安装功能可以参考pytorch官网。
  2. 在GPU上离线安装anaconda(需要与CPU上的anaconda版本相同,不然可能出现冲突),假设anaconda安装位置为path_to_anaconda/anaconda
    离线安装方法可以参考这里
  3. 将CPU上完整的anaconda文件包复制到GPU中如下位置:path_to_anaconda/anaconda/envs/
  4. 在GPU上先查看一下已有的anaconda名称,命令:conda info --envs,然后根据列出来的anaconda的位置判断哪一个是我们刚刚复制过来的,然后激活:conda activate anaconda_name

这样,就成功的通过离线的方式在GPU上安装了pytorch,此时GPU上有两个版本的anaconda,其中 base 为第一次安装的,anaconda3是作为带有pytorch版本的。可以根据需要通过conda的版本控制功能进行灵活切换。

conda activate anaconda_path //激活路径为anaconda_path的anaconda
conda deactiva   //注销当前激活的anaconda(不会删除)

注:这里需要进一步注明的是,上面是我在摸索整个流程的过程中采用的方案。更加完善的方法是,避免在CPU的base上安装其不适配的pytorch,应该现在CPU的anaconda/envs配置另外一个anaconda,再通过版本控制来对这一个anaconda安装适配GPU的pytorch,然后将该anaconda复制到GPU的path_to_anaconda/anaconda/envs/,这样会更合适,也避免了对CPU上anaconda的影响。

2. 在线anaconda环境复制移植

这种方法不适合我上面提到的背景,但是是我一开始调研的时候发现的一种anaconda环境在不同平台上进行复制移植的方法。
比如我们在一台机器上配置好了我们需要的anaconda,里面也额外安装了一些包,之后有有一个新的机器,我们希望在这个机器上也配置一个相同的anaconda环境。不想要再重新开始,就可用以下方法来实现:

整个完整的安装过程由于环境是离线的所以没跑通,不过研究的时候也踩了坑,就先记录一下。

  1. conda 导出已有环境
conda env export >  name.yaml

已有的conda环境会被保存在 name.yamll文件中,这样可以根据该.yaml文件在其他机器上复现当前环境。

  1. 复现环境

将已有的.yaml文件复制到需要配置相同环境的机器上,并执行:

conda env create -f  name.yaml

这是根据其他网上资料找的步骤,但是我自己实际操作时却遇到了问题,复现环境时遇到了如下错误:

在这里插入图片描述
这里/usr/local/anaconda3的确为另外一个在GPU上安装的anaconda,但我不可能把这个删掉。查看 env.yaml文件的内容:

Anaconda复制移植_第1张图片
Anaconda复制移植_第2张图片

红色圈圈标出的地方为name.yaml文件的开头和结尾,为环境的信息。
而用conda info --envs查看GPU服务器当前的conda环境发现,已在/usr/local/anaconda3/位置有一个名称为base的conda,所以想要用name.yaml在GPU上再复现一个相同名称的conda会有冲突。
解决办法:将name.ymal文件开头的"name:base"更改一下,比如改为"name:base2",然后再执行命令:

conda env create -f  name.yaml

就不会再报这个错误了,但是我的服务器由于不能联网无法下载相应的库所以还是没有办法复现成功。

你可能感兴趣的:(coding,python)