离线环境中配置Pytorch环境
前言
在这里记录下整个过程。
由于实验室的服务器没有外网,只能离线安装运行深度学习所需要的环境,例如Pytorch
,我的解决方案是:先在有网络的电脑上下载好Anconda和Pytorch所需要的Python版本,之后再下载所需要的whl文件,whl文件通过Python的pip工具安装,实现安装即用。
目标:
- 安装Anconda
- 安装Python
- 安装所需的whl文件,例如
torch-1.13.1+cu116-cp38-cp38-linux_x86_64.whl
快速下载Pytorch
方式一 官网给出使用conda或者pip的下载方式(不推荐)
# CUDA 11.8
conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=11.8 -c pytorch -c nvidia
# CUDA 12.1
conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=12.1 -c pytorch -c nvidia
# CUDA 12.4
conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=12.4 -c pytorch -c nvidia
# CPU Only
conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 cpuonly -c pytorch
注意:如果使用pip方式下载pytoch,大概率会自动下载cpu版本的pytorch
使用conda或者pip都需要添加下载源。conda添加国内的下载源
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/
$ conda config --set show_channel_urls yes
方式二 直接下载whl文件
-
torch下载地址:https://download.pytorch.org/whl/torch/。
-
torchvision下载地址:https://download.pytorch.org/whl/torchvision/
-
torchaudio下载地址:https://download.pytorch.org/whl/torchaudio/
直接下载还是有点慢,浏览器下载后,将正在下载whl文件复制链接到迅雷中进行下载会快很多。注意下载的torch,torchvision,torchaudio版本要对应,根据官网链接:https://pytorch.org/get-started/previous-versions/,下载对应的版本。例如,要下载1.13.1版本的torch,对应0.14.1的torchvision和0.13.1版本的torchaudio。可以在网站找到下面的文件,选择torch-1.13.1+cu116-cp38-cp38-linux_x86_64.whl
文件,其中cu116表示cuda版本11.6,cp38表示Python版本为3.8,linux_x86_64表示Linux版本的x86_x64架构。
...
torch-1.13.1+cu116-cp310-cp310-linux_x86_64.whl
torch-1.13.1+cu116-cp310-cp310-win_amd64.whl
torch-1.13.1+cu116-cp311-cp311-linux_x86_64.whl
torch-1.13.1+cu116-cp37-cp37m-linux_x86_64.whl
torch-1.13.1+cu116-cp37-cp37m-win_amd64.whl
torch-1.13.1+cu116-cp38-cp38-linux_x86_64.whl
torch-1.13.1+cu116-cp38-cp38-win_amd64.whl
torch-1.13.1+cu116-cp39-cp39-linux_x86_64.whl
torch-1.13.1+cu116-cp39-cp39-win_amd64.whl
torch-1.13.1-cp39-none-macosx_11_0_arm64.whl
...
安装Anconda
先在有网的ubuntu系统上安装Anconda,Anconda集成了环境管理工具Conda,Conda可以隔离Python环境,使得不同版本的Python可以并存。选择要安装的Anconda版本,这里给出清华大学开源软件镜像站的Anconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=N&O=A
选择所需要的Anaconda版本,例如我选择的是Linux版本:Anaconda3-2023.09-0-Linux-x86_64.sh,下载好之后运行:
$ sudo chmod +x ./Anaconda3-2023.09-0-Linux-x86_64.sh # 修改可执行文件为可执行
$ ./Anaconda3-2023.09-0-Linux-x86_64.sh # 安装Anaconda3
安装Anaconda,以及创建环境的过程,参照:如何在Linux服务器上安装Anaconda(超详细)
安装Python
在有网络的Conda环境中创建名为py38、Python版本为3.8.12的环境:conda create --name py38 python=3.8.12
,常用的conda命令:
conda create --name [环境名字] python=[python版本号]
,创建的所有环境默认都是在anaconda3/envs/
conda activate py38
:激活py38环境conda deactivate
:失活当前激活的环境conda env list
:列出所有的conda环境
$ conda env list # 查看所有conda环境
# conda environments:
#
base * /root/anaconda3
py38 /root/anaconda3/envs/py38
pytorch131-py38 /root/anaconda3/envs/pytorch131-py38
pytorch38 /root/anaconda3/envs/pytorch38
安装Pytorch
- 激活conda环境:
conda activate py38
- 安装whl文件:
pip install [下载的whl文件]
移植conda环境到离线环境
如果使用指令conda pack -n env_name
进行环境的打包,可能会出现以下错误:
_CondaPackError:
Files managed by conda were found to have been deleted/overwritten in the
following packages:
- pip='9.0.1'
This is usually due to `pip` uninstalling or clobbering conda managed files,
resulting in an inconsistent environment. Please check your environment for
conda/pip conflicts using `conda list`, and fix the environment by ensuring
only one version of each package is installed (conda preferred).
网上大多数给出的解决方案是:conda pack -n env_name --ignore-missing-files
,忽略这些报错的文件,虽然这样可以成功打包,但是当我将压缩包.tar.gz
移植到新的conda环境进行解包时,就出错了,这种方式不可取!
我的解决方式:一个Conda环境本质上就是一个文件夹。将Conda的配置好的环境,例如将/root/anaconda3/envs/py38
直接压缩成zip压缩包,再在没有网络的Conda环境中解压该zip,注意Linux的压缩包不能超过2G!。需要有效减少zip包的大小,因此我在配置好pytorch的环境后,使用pip uninstall
卸载torch、torchvision、torchaudio这3个包,下载这3个库的whl文件,再在离线环境中使用pip安装3个whl文件,环境移植成功了。
注:第一次在离线环境中使用pip list
出现错误:bad interpreter: No such file or directory,如下所示:
(py38) root@interactive7907:/tmp# pip list
-bash: /root/anaconda3/envs/py38/bin/pip: /home/jay/anaconda3/envs/py38/bin/python: bad interpreter: No such file or directory
解决方式:进入新环境中/root/anaconda3/envs/py38/bin/
找到pip,将pip文件中原来python所在路径#!/home/jay/anaconda3/envs/py38/bin/python
替换为新Conda环境python的路径#!/root/anaconda3/envs/py38/bin/python
,再使用pip list:
(py38) root@interactive7907:/tmp# pip list
Package Version
---------------------- ------------
addict 2.4.0
....
torch 1.13.1+cu116
torchaudio 0.13.1+cu116
torchvision 0.14.1+cu116
tqdm 4.65.2
typing_extensions 4.12.2
tzdata 2025.1
urllib3 1.26.20
wheel 0.44.0
yapf 0.43.0
zipp 3.20.2
到此处,整个Pytorch环境移植到新的离线环境中了。。。。。