背景
在深度学习的项目中,环境配置是一个非常重要且复杂的步骤。一个稳定的深度学习环境通常包含多个相互依赖的包,如 torch
、transformers
以及 cuda
等。这些依赖之间的关系非常紧密,不同版本之间可能存在兼容性问题,导致环境在不同的服务器上难以复现。
最近,我在一台服务器上配置好了一个稳定的深度学习 Conda 环境,包含了所有需要的依赖包。为了将这个环境迁移到另一台服务器上,我决定使用 conda-pack
工具。conda-pack
是一个非常方便的工具,它可以将 Conda 环境打包成一个独立的文件,方便在其他Linux服务器上达到开箱即用的效果。
导出
要将原始环境从一台服务器迁移到另一台服务器,首先需要在原始环境服务器上导出所需的环境。
查看所有环境
使用
conda env list
查看服务器上所有的 Conda 环境。确保待迁移的环境不是默认的base
环境。如果需要迁移的是base
环境,可以使用conda clone
命令复制成其他名字。1
conda env list
激活待迁移的环境
假设待迁移的环境名为
torch
,则可以使用以下命令激活该环境:1
conda activate torch
安装
conda-pack
在激活的环境中,使用
conda
命令安装conda-pack
:1
conda install conda-pack -c conda-forge
打包原环境
使用
conda pack -n <环境名>
来打包环境,这里的<环境名>
替换为你的环境名,例如torch
。打包速度还是挺快的,打包后会生成一个环境名.tar.gz
文件。1
conda pack -n torch
完成后,将会在当前目录下生成一个
torch.tar.gz
文件。
打包的速度与环境的大小成正相关,例如我的环境就比较大,打包的时间也就对应的较长,好在有进度条可以查看具体进度。下图可以看到我的torch环境占用了近20GB的空间。
最终我的torch
环境导出的 torch.tar.gz
文件就达到了近10GB,压缩效果还是不错的,就是具体运行了多久我也忘记了。
导入
在成功打包并下载环境文件后,我们需要将其上传并导入到目标服务器。
上传文件到目标服务器
有几种方法可以将打包好的环境文件上传到目标服务器:
下载到本地再上传
这种方法可以保留一份副本。首先将
torch.tar.gz
文件下载到本地电脑,然后再上传到目标服务器。具体操作以你使用的SSH软件为准。使用
rsync
命令rsync
是一个强大的文件同步工具,可以直接将文件从一台服务器传输到另一台服务器。使用以下命令将文件传输到目标服务器:1
rsync -avz torch.tar.gz user@target_server:/path/to/destination
导入环境
确保目标服务器不存在同名环境
在目标服务器上,使用
conda env list
查看当前所有的环境。如果存在同名环境,需要先删除它。1
conda env list
如果存在同名环境,可以使用以下命令删除它:
1 2 3
conda env remove -p <环境路径> # 或者 conda env remove -n <环境名>
还原环境
首先,使用
conda env list
列出所有虚拟环境的路径。假设miniconda3
的环境变量路径为/mnt/nfs/yuesir/miniconda3/envs
。在该路径下新建一个“虚拟环境名”的文件夹,例如:
1
mkdir /mnt/nfs/yuesir/miniconda3/envs/torch
赋予该文件夹所有权限:
1
chmod 777 /mnt/nfs/yuesir/miniconda3/envs/torch
解压环境包
将刚刚上传的压缩包解压到上述目录下,使用如下命令:
1
tar -xzvf torch.tar.gz -C /mnt/nfs/yuesir/miniconda3/envs/torch
激活新环境
解压完成后,尝试激活新的环境并验证环境是否成功迁移:
1
conda activate torch
确认
在完成环境的迁移和导入后,需要进行一些检查以确保环境正确配置。
查看已添加的环境
使用
conda env list
命令,可以查看到刚刚添加进去的环境:1
conda env list
应该能够在列表中看到新迁移的环境名。
激活新环境
使用
conda activate <虚拟环境名>
命令激活该环境。例如,如果环境名是torch
:1
conda activate torch
检查已安装的库
使用
conda list
命令查看环境中已安装的库,以确认迁移是否成功:1
conda list
这个命令会列出该环境中所有已安装的包及其版本,确保所有的依赖库都正确安装并在合适的版本。
额外
如果有安装深度学习相关依赖,例如Pytorch
等对系统驱动程序版本有要求的依赖包,注意查看两台服务器之间的cuda驱动版本是否匹配。
因为cuda驱动是向下兼容的,如果不匹配,要么就只能升级目标服务器的cuda驱动(需要root权限),要么就尝试降级pytorch的版本(极其容易出现问题,因为依赖关系复杂)。这种情况下还是建议重新从头开始安装吧。
具体如何选择cuda与pytorch间的版本关系,可以参照我以前的文章。