配置环境的方法和流程Linux和Windows大体上都是一样的,可以互相参考的。
pytorch不需要额外再装cudnn这些东西了,只需要有一个显卡驱动,但是tensorflow需要自己手动装。
首先要装一个Nvidia显卡驱动,因为有些包下载下来要检测显卡如果没检测到可能会失败,记得安装依赖。必须要有显卡驱动CUDA才能正常工作,必须要有显卡驱动才能用nvidia-smi这条命令来查看显卡驱动支持的最高cuda版本,没显卡驱动连nvidia-smi这条命令都用不了。 显卡驱动安装 Linux系统可以直接从Ubuntu software里装。;所以可以先用nvidia-smi命令试试看有没有显卡驱动,没有就装驱动。
nvidia-smi命令会返回驱动最高支持的CUDA 版本,此时可能用不了nvcc命令,因为完整版的cuda可能没装(只用来跑深度学习其实也用不上完整版的cuda,pytorch自带的最小环境的cuda和cudnn就够了)。nvidia-smi命令有返回只是代表装了显卡驱动,不代表装了cuda。显卡驱动装完了可以用nvidia-smi命令查看驱动支持的最高cuda版本,也可以打开nvidia控制面板,找到系统信息按钮,里面也可以看到显卡驱动支持的最高cuda版本。
dl笨蛋交流qq群里有人说:用nvidia-smi指令查出来的是GPU支持的最高cuda版本,nvcc-V指令查出来的是电脑现在装的cuda版本(完整版的cuda)。
nvidia-smi和nvidia-V显示的版本不同的原因
nvcc 属于CUDA的编译器,将程序编译成可执行的二进制文件,nvidia-smi 全称是 NVIDIA System Management Interface ,是一种命令行实用工具,旨在帮助管理和监控NVIDIA GPU设备。
CUDA有 runtime api 和 driver api,两者都有对应的CUDA版本,nvcc --version 显示的就是runtime api对应的CUDA版本,而 nvidia-smi显示的是driver api对应的CUDA版本。
用于支持driver api的必要文件由 GPU driver installer 安装,nvidia-smi就属于这一类API;而用于支持runtime api的必要文件是由CUDA Toolkit installer安装的。nvcc是与CUDA Toolkit一起安装的CUDA compiler-driver tool,它只知道它自身构建时的CUDA runtime版本,并不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
CUDA Toolkit Installer通常会集成了GPU driver Installer,如果你的CUDA均通过CUDA Tooklkit Installer来安装,那么runtime api 和 driver api的版本应该是一致的,也就是说, nvcc --version 和 nvidia-smi 显示的版本应该一样。否则,你可能使用了单独的GPU driver installer来安装GPU dirver,这样就会导致 nvidia-smi 和 nvcc --version 显示的版本不一致了。
通常,driver api的版本能向下兼容runtime api的版本,即 nvidia-smi 显示的版本大于nvcc --version 的版本通常不会出现大问题。
torch.cuda.is_available()返回false的原因,以及如何升级驱动 torch.cuda.is_available返回False
安装pytorch的时候最好不要换源安装,因为这样可能安装的版本和自己勾选的不一样,我就出现过这个问题,明明勾选了GPU版本的,但是pip临时换源用了清华源好像,就装成了CPU版本的,torch.cuda.is_available()直接返回false。可以用torch.__version__这个命令查看pytorch的版本,到底是CPU还是GPU。
装miniconda,记得更换conda源和pip源。miniconda安装方法 清华开源镜像站
换源可以直接用终端命令更换也可以直接把源复制到主目录隐藏文件下的.condarc,终端命令其实本质也是修改的这个文件。
pip换源临时使用
pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装opencv pip install opnecv-python
Linux更换软件源 Linux换源
装pycharm,新建一个python环境torch_env,因为是新建的所以什么包都没有
sudo含义
sudo意为以su do后的命令;
以超级用户的身份执行此条命令
有些地方需要sudo,有些地方不需要sudo
如果在家目录(~)下操作则不需要sudo 主目录都是~
如果在根目录(/)下操作则需要sudo
sudo apt-get update //更新软件源、安装的应用商店
Linux E: 无法获得锁 /var/lib/dpkg/lock-frontend - open
运行sudo apt-get install/update/或其他命令时,由于各种说不清的原因有时会出现如下提示:
E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
原因:在Ubuntu系统终端下,如果用apt-get install或者apt install在未完成下载的情况下将终端强行关闭,此时 apt-get进程可能没有结束。当再次运行apt-get install 命令安装软件,会出现如上错误。即有另一个程序正在占用apt-get install进程,由于它在运行时,会占用软件源更新时的系统锁(简称‘系统更新锁’),此时资源被锁。解锁方法
Pytorch 安装(记得进入torch_env环境再安装,不然直接装在了base环境里)
如果用conda install安装包不好使,可以换pip install效果一样,但是如果是新环境的话可能连pip包都没有,那就得先用conda install一下pip,再用pip装包。
在安装Pytorch GPU版本时会自动捆绑安装cuda和cudnn的最小环境,这两个最小环境只能在pytorch的虚拟环境下有效,我的理解是只能配合pytorch使用,不能满足别的需求,所以用nvcc --version或者nvcc -V这两条命令是没有返回的(nvcc命令无法调用就证明没装完整cuda或者环境变量没加),只有单独安装了完整版的CUDA这两条命令才会有返回,CUdnn也是一样的道理。nvcc -V有返回才代表装了完整cuda,nvcc是cuda语言的编译器。在官网单独装cuda的时候,记得把驱动的选项给去掉,他会默认安装驱动,会把原来有的驱动给顶掉然后出现一大堆问题。一般来说只有部署才需要用到cuda,跑跑算法模型这些pytorch足够了。
cudnn版本得跟cuda版本对应,不管是单独装的cuda还是pytorch捆绑的cuda,版本都要低于nvidia-smi显示的最高可支持的cuda版本。完整版CUDA和CUdnn安装教程 nvcc -V和nvidia-smi出现的cuda版本不同 Pytorch、CUDA和cuDNN的安装图文详解win11 nvidia-smi 和 nvcc 结果的版本为何不一致(写的比较简单清楚) PyTorch安装(不单独安装cuda)
在Anaconda虚拟环境中安装CUDA,而不是在系统中安装CUDA的方法
在虚拟环境中安装CUDA的话,安装后使用ncvv -V是没有用的。因为这里的cuda是安装在虚拟环境中的,并非直接安装在系统中。所以,在对应文件夹中无法找到对应文件,自然也无法使用ncvv -V/ncvv --version来查看版本。应该先访问pytorch,再调用cuda、cudnn。
所以要装cuda就直接装在系统里,不要装在虚拟环境里,conda装不大好维护。
无可视化界面的Linux服务器环境配置 服务器环境配置
在服务器中创建并进入新用户之后,此时这里只有配置好的 .ssh
目录。用户目录下的包括 Python、Conda、Git、Bash 等环境都需要我们一一配置。
/home/user
目录通常空间有限,因此对于开放权限较高的私人服务器,用户目录只用于存放个人使用的配置文件。而工程以及大文件则会存放在另外的/data/user
目录下,以节省服务器的存储空间。下面我们称/home/user
目录为~
。
Anaconda 环境配置 在Linux服务器上安装Anaconda 和 pytorch
使用 wget
命令从清华镜像源下载(该命令由 Unix 自带),不需要下载最新版。我选择了这个版本,所以命令为
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.11-Linux-x86_64.sh
下载完成后,当前目录下就会出现 .sh
脚本形式的安装包,输入以下命令运行:
bash /home/ysy/Anaconda3-2021.11-Linux-x86_64.sh
一路 Enter 确定,最后输入 yes,安装后可用 conda -V
查看版本。如果这里提示无法识别命令,需要进行如下步骤。
在 ~ 目录下,还有一个 .bashrc
文件,对于大部分 Unix 系统,Bash 是作为默认终端被安装的。对 bashrc 所做的任何修改将在下一次启动终端时生效。如果想立刻生效的话,要运行下面的命令:
$ source ~/.bashrc
此时会发现用户名前面就会有一个 (base)
,表示现在处于基础环境中。
Conda 集成了 Python 发行版,同时可以对 Python 虚拟环境进行管理,常用的命令有:
conda create -n <环境名> python=<版本>
:创建 conda 环境。conda create -n <环境名> --file <this file>
:创建 conda 环境并指定 requirement.txt 路径配置。conda create -n <新环境名> --clone <旧环境名>
:复制原有 conda 环境。conda env list
或conda info -e
:查看现有的 conda 环境。conda activate <环境名>
:切换 conda 环境。conda deactivate
:关闭虚拟环境。conda remove -n <环境名>
:删除环境。
用户创建的环境会被保存在 ~/anaconda3/env/xxx
,需要时可以直接拷贝。
CUDA 环境与 PyTorch
安装完 Anaconda 后,我们就能使用 pip
和 conda
两种包管理器了(此前只能用 Linux 自带的 apt
)。
在服务器里,我们只推荐用
conda
安装cudatoolkit
、cudnn
以及jupyter
相关的包,其他包建议用pip
进行安装。(我没搞懂)
这里建议使用 11.1 版本的 CUDA 环境,使用 conda
在 conda-forge
源下进行安装:(我也没搞懂为什么要装cuda,而且用conda命令来装的话,可能别的语言想用就会有点问题,这里我不太懂,我觉得只需要装pytorch就可以了) Anaconda虚拟环境中安装CUDA,而不是在系统中安装CUDA的方法 在虚拟环境中安装CUDA的话,安装后使用ncvv -V是没有用的。因为这里的cuda是安装在虚拟环境中的,并非直接安装在系统中。所以,在对应文件夹中无法找到对应文件,自然也无法使用ncvv -V/ncvv --version来查看版本。应该先访问pytorch,再调用cuda、cudnn。 所以我觉得还是直接把cuda装在系统里吧,虽然麻烦了一点。而且conda装不大好维护。
$ conda install -c conda-forge cudatoolkit=11.1 cudnn
有的服务器不装 CUDA 也能使用 GPU,是因为 Nvidia 显卡自带了驱动,如果使用 nvidia-smi
命令可以查看显卡状态则说明自带驱动(上方会注明驱动版本、CUDA 版本,但此时可能用不了 nvcc
命令)。
初次登录可以先测试 nvidia-smi
,否则就需要手动安装 N 卡驱动:
$ sudo add-apt-repository ppa:graphics-drivers/ppa # 把显卡驱动加入PPA
$ ubuntu-drivers devices # 查找当前设备适合的驱动版本
$ sudo apt-get install nvidia-driver-418 # 安装对应版本
第三方库
使用 pip
进行安装时,建议安装在虚拟环境中,特别是一些不常用的包。如果下载过慢或失败,可以使用清华源进行下载,使用以下命令在个人配置中更新及换源:
$ pip install -U pip -i https://pypi.tuna.tsinghua.edu.cn/simple
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
如果不方便换源,临时使用的方法为:
$ pip install <package> -i https://pypi.tuna.tsinghua.edu.cn/simple
这里以 PyTorch 为例,我们将其装在虚拟环境中,使用以下命令,不同库之间用空格隔开可一并安装:
$ pip install torch torchvision torchaudio
为什么 PyTorch 不要装在基本环境?因为安装高版本的 PyTorch 时会自动替换 Numpy 等依赖库至相应版本。而这些自动替换的基础库很有可能与其他高级库产生不匹配的冲突,导致原先功能无法正常使用,也就是原先的运行环境会被污染。此外这样也便于虚拟环境的拷贝。
成功安装后可以在命令行里打开 Python 测试:
>>> import torch
>>> torch.__version__
>>> torch.cuda.is_available()
>>> torch.cuda.device_count()
>>> torch.tensor([1.0, 2.0]).cuda()
# 1.9.1+cu11.1
# True
# 4
# tensor([1., 2.], device='cuda:0')
下面列举需要安装在基本环境中的常用库,安装方法同上:
gpustat
:用于查看动态查看 GPU 状态(需要 Nvidia 驱动),watch -n1 -c gpustat --color
。ipdb
:用于简易的断点调试,可以看做pdb
的升级版,python -m ipdb main.py
。
Notebook
有时候需要在远程服务器中使用 Jupyter Notebook,就需要先在远程安装:
$ conda install -c conda-forge jupyter notebook
之后就可以在远程启动 Jupyter 服务,内核放在远程:
$ jupyter notebook --port=8889
启动后会获得服务的 URL 地址,这个地址可以在本地用浏览器直接打开,也可以在 VSCode 中安装 Jupyter 插件后打开。
个人配置
如果这个服务器需要长期使用,那么进行下面的配置就很有必要。以下大部分内容需要用 apt
包管理器安装,因此需要获取 sudo
临时管理员权限,如果没有可以向管理员申请。
Git 配置
安装 Git 后,在 ~
下就会存在一个 .gitconfig
或 .config/git/config
的文件,如果没有则需自行安装:
$ sudo apt-get install git -y # -y 表示默认 yes
在服务器里配置 Git 有三层,每层的配置(系统 --system
、全局 --global
、仓库 --local
)都会覆盖掉上一层次的配置,这里要修改 ~
下的个人配置,则需要用到 --global
:
# 替换成个人信息!
$ git config --global user.name "hewei2001"
$ git config --global user.email "[email protected]"
# 常用的指令可以取 alias 别名
$ git config --global alias.showlog "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
如果需要建立远程 SSH 鉴权,使用以下命令打印出公钥,手动复制到 GitHub 上:
$ ssh-keygen -t rsa -C "[email protected]" # 生成
$ cat ~/.ssh/id_rsa.pub # 打印
$ ssh -T [email protected] # 测试
oh-my-zsh
首先检查服务器可用终端是否包含 zsh
,如果有直接切换,并安装插件管理器 oh-my-zsh
:
$ cat /etc/shells # 打印可用终端,看有没有 /bin/zsh
$ chsh -s /bin/zsh
$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.zshrc ~/.zshrc.bak # 备份原配置
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
$ source ~/.zshrc
如果没有自带 zsh
,完成以下几步后,就可以成功安装二者:
$ sudo apt-get install zsh -y
$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.zshrc ~/.zshrc.bak # 备份原配置
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
$ chsh -s /bin/zsh # 切换终端
如果执行第一步时无
sudo
权限,则需要自行安装资源包及依赖,参考:Linux 以非 root 用户安装 zsh。
重启系统,此时已经进入新的 zsh
终端,下载将要用到的主题和插件:
# 主题 powerlevel10k
$ git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
# 两个插件
$ git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
$ git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
打开 .zshrc
,手动修改以下配置:
# 主题,如果要用自带的主题推荐 bira
ZSH_THEME="powerlevel10k/powerlevel10k"
# 插件
plugins=(git
tmux
z
extract
zsh-autosuggestions
zsh-syntax-highlighting)
oh-my-zsh
自带的插件定义了常用的别名,可以用 alias
命令查看:
# git 相关
gaa = git add --all
gcmsg = git commit -m
ga = git add
gst = git status
gp = git push
# tmux 相关
tl = tmux list-sessions
tkss = tmux kill-session -t
ta = tmux attach -t
ts = tmux new-session -s
下面是部分自带的插件、需要手动安装的插件介绍:
z
:在常用目录之间直接跳转,使用z <dir_name>
。extract
:一键解压各种形式压缩包,使用x <file_name>
。gitignore
:一键生成 gitignore 模板,使用gi python > .gitignore
。cpv
:带进度条复制文件,使用cpv <a> <b>
。colored-man-pages
:带颜色的man
菜单。-
sudo
:上一条命令忘记加sudo
,双击ESC
就会自动加上。 -
zsh-autosuggestions
:命令补全插件,需要手动安装。 zsh-syntax-highlighting
:命令高亮插件,需要手动安装。
之前在
.bashrc
里的一些配置也要搬过来,主要有 Conda 环境的路径配置和一些 alias,配置完成后使用source ~/.zshrc
命令重启终端即可。之后会进入主题的引导设置,如果想重新配置可以输入p10k configure
命令。
反向代理
加载预训练模型时,总是不可避免地要去访问国外下载源,而部署在国内网络的服务器则无能为力。此时就需要在主机使用 VPN,通过「反向代理」的方法让服务器也能使用到主机的 VPN。
在本机终端输入以下命令,并保持终端开启:
$ ssh -NR 12306:localhost:7890 [email protected]
# 其中 12306 可以是任意端口,7890 则必须改成 VPN 的代理端口!
在服务器终端输入以下命令:
$ export http_proxy=http://127.0.0.1:12306/
$ export https_proxy=http://127.0.0.1:12306/
# 其中 12306 必须和 前述端口 一致!
完成后,可以使用 wget google.com
测试是否成功。为了方便在服务器开启服务,可以在 ~./zshrc
中加上别名:
$ alias proxyon='export http_proxy=http://127.0.0.1:12306 https_proxy=http://127.0.0.1:12306 && echo Proxy On!'
$ alias proxyoff='unset http_proxy https_proxy && echo Proxy Off!'
如果上述方法行不通,除了用本机下载预训练模型后
scp
到服务器,还可尝试此方案:如何优雅的下载 huggingface-transformers 模型。
一键配置
下面对于临时使用的命令进行汇总,由 Shell 脚本的形式一键执行。只需在 /home/user
目录下新建一个 hello.sh
文件,输入以下内容:
#!/bin/bash
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh
bash Anaconda3-2020.02-Linux-x86_64.sh
source .bashrc
conda install -c conda-forge cudatoolkit=11.1 cudnn
pip install -U pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install gpustat
pip install ipdb
# 别名配置
echo "alias gpus='watch -n1 -c gpustat --color'" >> ~/.bashrc
echo "alias ca='conda activate'" >> ~/.bashrc
echo "alias cda='conda deactivate'" >> ~/.bashrc
echo "alias proxyon='export http_proxy=http://127.0.0.1:12306 https_proxy=http://127.0.0.1:12306 && echo Proxy On!'" >> ~/.bashrc
echo "alias proxyoff='unset http_proxy https_proxy && echo Proxy Off!'" >> ~/.bashrc
echo "alias tl='tmux list-sessions'" >> ~/.bashrc
echo "alias tkss='tmux kill-session -t'" >> ~/.bashrc
echo "alias ta='tmux attach -t'" >> ~/.bashrc
echo "alias ts='tmux new-session -s'" >> ~/.bashrc
echo "alias ll='ls -alF'" >> ~/.bashrc
echo "alias la='ls -A'" >> ~/.bashrc
echo "alias l='ls -CF'" >> ~/.bashrc
echo "alias ls='ls --color=tty'" >> ~/.bashrc
echo "alias cd..='cd ..'" >> ~/.bashrc
echo "alias md='mkdir -p'" >> ~/.bashrc
echo "alias rd=rmdir" >> ~/.bashrc
source .bashrc
# git 配置,替换成自己的
git config --global user.name "hewei2001"
git config --global user.email "[email protected]"
在命令行中执行 bash hello.sh
。