背景

在深度学习的项目中,环境配置是一个非常重要且复杂的步骤。一个稳定的深度学习环境通常包含多个相互依赖的包,如 torchtransformers 以及 cuda 等。这些依赖之间的关系非常紧密,不同版本之间可能存在兼容性问题,导致环境在不同的服务器上难以复现。

最近,我在一台服务器上配置好了一个稳定的深度学习 Conda 环境,包含了所有需要的依赖包。为了将这个环境迁移到另一台服务器上,我决定使用 conda-pack 工具。conda-pack 是一个非常方便的工具,它可以将 Conda 环境打包成一个独立的文件,方便在其他Linux服务器上达到开箱即用的效果。

导出

要将原始环境从一台服务器迁移到另一台服务器,首先需要在原始环境服务器上导出所需的环境。

  1. 查看所有环境

    使用 conda env list 查看服务器上所有的 Conda 环境。确保待迁移的环境不是默认的 base 环境。如果需要迁移的是 base 环境,可以使用 conda clone 命令复制成其他名字。

    1
    
    conda env list
    
  2. 激活待迁移的环境

    假设待迁移的环境名为 torch,则可以使用以下命令激活该环境:

    1
    
    conda activate torch
    
  3. 安装 conda-pack

    在激活的环境中,使用 conda 命令安装 conda-pack

    1
    
    conda install conda-pack -c conda-forge
    
  4. 打包原环境

    使用 conda pack -n <环境名> 来打包环境,这里的 <环境名> 替换为你的环境名,例如 torch。打包速度还是挺快的,打包后会生成一个 环境名.tar.gz 文件。

    1
    
    conda pack -n torch
    

    完成后,将会在当前目录下生成一个 torch.tar.gz 文件。

打包的速度与环境的大小成正相关,例如我的环境就比较大,打包的时间也就对应的较长,好在有进度条可以查看具体进度。下图可以看到我的torch环境占用了近20GB的空间。

conda环境占用一览

最终我的torch环境导出的 torch.tar.gz 文件就达到了近10GB,压缩效果还是不错的,就是具体运行了多久我也忘记了。

torch环境导出文件大小

导入

在成功打包并下载环境文件后,我们需要将其上传并导入到目标服务器。

上传文件到目标服务器

有几种方法可以将打包好的环境文件上传到目标服务器:

  1. 下载到本地再上传

    这种方法可以保留一份副本。首先将 torch.tar.gz 文件下载到本地电脑,然后再上传到目标服务器。具体操作以你使用的SSH软件为准。

  2. 使用 rsync 命令

    rsync 是一个强大的文件同步工具,可以直接将文件从一台服务器传输到另一台服务器。使用以下命令将文件传输到目标服务器:

    1
    
    rsync -avz torch.tar.gz user@target_server:/path/to/destination
    

导入环境

  1. 确保目标服务器不存在同名环境

    在目标服务器上,使用 conda env list 查看当前所有的环境。如果存在同名环境,需要先删除它。

    1
    
    conda env list
    

    如果存在同名环境,可以使用以下命令删除它:

    1
    2
    3
    
    conda env remove -p <环境路径> 
    # 或者
    conda env remove -n <环境名>
    
  2. 还原环境

    首先,使用 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
    
  3. 解压环境包

    将刚刚上传的压缩包解压到上述目录下,使用如下命令:

    1
    
    tar -xzvf torch.tar.gz -C /mnt/nfs/yuesir/miniconda3/envs/torch
    
  4. 激活新环境

    解压完成后,尝试激活新的环境并验证环境是否成功迁移:

    1
    
    conda activate torch
    

确认

在完成环境的迁移和导入后,需要进行一些检查以确保环境正确配置。

  1. 查看已添加的环境

    使用 conda env list 命令,可以查看到刚刚添加进去的环境:

    1
    
    conda env list
    

    应该能够在列表中看到新迁移的环境名。

  2. 激活新环境

    使用 conda activate <虚拟环境名> 命令激活该环境。例如,如果环境名是 torch

    1
    
    conda activate torch
    
  3. 检查已安装的库

    使用 conda list 命令查看环境中已安装的库,以确认迁移是否成功:

    1
    
    conda list
    

    这个命令会列出该环境中所有已安装的包及其版本,确保所有的依赖库都正确安装并在合适的版本。

额外

如果有安装深度学习相关依赖,例如Pytorch等对系统驱动程序版本有要求的依赖包,注意查看两台服务器之间的cuda驱动版本是否匹配。

因为cuda驱动是向下兼容的,如果不匹配,要么就只能升级目标服务器的cuda驱动(需要root权限),要么就尝试降级pytorch的版本(极其容易出现问题,因为依赖关系复杂)。这种情况下还是建议重新从头开始安装吧。

具体如何选择cuda与pytorch间的版本关系,可以参照我以前的文章。

非Root用户安装新版本Cuda以及配置NLP环境
2024-03-10   #conda #cuda #transformers #deep learning
非root用户如何在无法修改已安装cuda驱动版本的情况下安装较新版本的transformers套件。

感谢

使用conda pack进行环境迁移