Ubuntu深度学习环境配置一箩筐
前言:我从其它专业转到深度学习方向,由于最开始接触的时候缺乏很多计算机方面的系统知识,所以环境配置中常常出现各种问题而不知其所。网上同一个问题往往有多种解决方案而有的可用,有的不可用,最开始只能通过不断尝试探索出解决问题的确切方案,但随着趟过的坑越来越多,也慢慢了解了一些常见问题背后的原因。为了避免自己忘记,方便查找,同时也希望能够帮助到其他和我有相同境况的小伙伴不再将大量时间浪费在信息鉴别与筛查,方案收集与试错上,谨以此记。
文章目录
- Ubuntu深度学习环境配置一箩筐
- 1. Ubuntu安装Python3&pip3
- 2. 打包容器为镜像并推送到DockerHub
- 3. CUDA安装结束后添加环境变量
- 4. Ubuntu解压zip文件
- 5. NVIDIA驱动版本与CUDA版本对应关系
- 6. 安装pytorch
- 7. Dockerfile打包镜像
- 8. 安装ssh服务端和客户端
- 9. 使用MobaXterm本地访问远程tensorboard
- 10. Docker使用
- 11. 安装Nvidia docker
- 12. apt-get代理设置
- 13. 在Shell脚本中嵌入Python脚本
- 14. Ubuntu开启和关闭图形界面
- 15. Ubuntu快速安装NVIDIA显卡驱动
- 16. Ubuntu之间传输数据
- 17. SSH公钥/私钥免密登录
- 18. Ubuntu弹出移动硬盘
- 19. 本地访问远程服务器上的jupyter lab
- 总结
1. Ubuntu安装Python3&pip3
1.1 安装基础依赖
sudo apt-get install software-properties-common
1.2 添加源并更新
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
1.3 安装特定版本Python&pip3
sudo apt install -y python3.8
sudo apt install -y python3-pip
1.4 配置软链接
sudo ln -s /usr/bin/python3.8 /usr/bin/python
sudo ln -s /usr/bin/pip3 /usr/bin/pip
如果软链接已经存在则使用-f参数进行覆盖
1.5 清理apt缓存
apt-get autoclean
apt autoclean
rm -rf /var/lib/apt/lists/*
rm -rf ~/.cache/pip
rm -rf ~/.cache/pip3
2. 打包容器为镜像并推送到DockerHub
2.1 登录DockerHub
docker login
2.2 添加commit
docker commit [ID] [Name]
2.3 打上tag并推送
docker tag [ID] 用户名/仓库名
docker push 用户名/仓库名
2.4 保存docker镜像
docker save -o docker_iamges_name.tar REPOSITORY:TAG
2.5 加载docker镜像
docker load -i docker_iamges_name.tar
3. CUDA安装结束后添加环境变量
export PATH=/usr/local/cuda-11.4/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
4. Ubuntu解压zip文件
unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
5. NVIDIA驱动版本与CUDA版本对应关系
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
CUDA Toolkit | Toolkit Driver Version | |
Linux x86_64 Driver Version | Windows x86_64 Driver Version | |
CUDA 11.6 Update 1 | >=510.47.03 | >=511.65 |
CUDA 11.6 GA | >=510.39.01 | >=511.23 |
CUDA 11.5 Update 2 | >=495.29.05 | >=496.13 |
CUDA 11.5 Update 1 | >=495.29.05 | >=496.13 |
CUDA 11.5 GA | >=495.29.05 | >=496.04 |
CUDA 11.4 Update 4 | >=470.82.01 | >=472.50 |
CUDA 11.4 Update 3 | >=470.82.01 | >=472.50 |
CUDA 11.4 Update 2 | >=470.57.02 | >=471.41 |
CUDA 11.4 Update 1 | >=470.57.02 | >=471.41 |
CUDA 11.4.0 GA | >=470.42.01 | >=471.11 |
CUDA 11.3.1 Update 1 | >=465.19.01 | >=465.89 |
CUDA 11.3.0 GA | >=465.19.01 | >=465.89 |
CUDA 11.2.2 Update 2 | >=460.32.03 | >=461.33 |
CUDA 11.2.1 Update 1 | >=460.32.03 | >=461.09 |
CUDA 11.2.0 GA | >=460.27.03 | >=460.82 |
CUDA 11.1.1 Update 1 | >=455.32 | >=456.81 |
CUDA 11.1 GA | >=455.23 | >=456.38 |
CUDA 11.0.3 Update 1 | >= 450.51.06 | >= 451.82 |
CUDA 11.0.2 GA | >= 450.51.05 | >= 451.48 |
CUDA 11.0.1 RC | >= 450.36.06 | >= 451.22 |
CUDA 10.2.89 | >= 440.33 | >= 441.22 |
CUDA 10.1 (10.1.105 general release, and updates) | >= 418.39 | >= 418.96 |
CUDA 10.0.130 | >= 410.48 | >= 411.31 |
CUDA 9.2 (9.2.148 Update 1) | >= 396.37 | >= 398.26 |
CUDA 9.2 (9.2.88) | >= 396.26 | >= 397.44 |
CUDA 9.1 (9.1.85) | >= 390.46 | >= 391.29 |
CUDA 9.0 (9.0.76) | >= 384.81 | >= 385.54 |
CUDA 8.0 (8.0.61 GA2) | >= 375.26 | >= 376.51 |
CUDA 8.0 (8.0.44) | >= 367.48 | >= 369.30 |
CUDA 7.5 (7.5.16) | >= 352.31 | >= 353.66 |
CUDA 7.0 (7.0.28) | >= 346.46 | >= 347.62 |
6. 安装pytorch
6.1 v1.8.0+conda
# CUDA 10.2
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch
# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
# CPU Only
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly -c pytorch
6.2 v1.8.0+pip
# CUDA 11.1
pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 10.2
pip install torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0
# CPU only
pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
6.3 v1.7.1+conda
# CUDA 9.2
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=9.2 -c pytorch
# CUDA 10.1
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.1 -c pytorch
# CUDA 10.2
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.2 -c pytorch
# CUDA 11.0
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
# CPU Only
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cpuonly -c pytorch
6.4 v1.7.1+pip
# CUDA 11.0
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 10.2
pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2
# CUDA 10.1
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 9.2
pip install torch==1.7.1+cu92 torchvision==0.8.2+cu92 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CPU only
pip install torch==1.7.1+cpu torchvision==0.8.2+cpu torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
7. Dockerfile打包镜像
docker build [OPTIONS] PATH | URL | -
Options 常用参数:
-t
: 打包出镜像的名称及标签,通常写法为name:tag
--rm
: 构建成功后,删除中间产生的容器。--force-rm=true
: 无论是否构建成功,都删除中间产生的容器--no-cache
: 构建镜像时不使用缓存。-f
: 指定 DockerFile 的路径
8. 安装ssh服务端和客户端
apt-get install openssh-server
apt-get install openssh-client
启动ssh服务和检查启动情况
# 启动SSH服务
/etc/init.d/ssh start
# 检查启动情况
ps -e | grep ssh
生成密钥
ssh-keygen
9. 使用MobaXterm本地访问远程tensorboard
9.1 配置MobaSSHTunnel
forward port:本地端口
SSH Server:服务器和SSH端口
Remote Server:localhost
Remote port:6006
9.2 激活相应conda虚拟环境
conda activate tensorboard_NN
# 启动tensorboard
tensorboard --log_dir=/path/to/log_dir --host=localhost
9.3 连接远程tensorboard
激活SSHTunnel后在浏览器中输入
127.0.0.1:本地端口
或
服务器ip:6006
即可访问
10. Docker使用
10.1 列出现有镜像列表
docker images
docker image ls
10.2 删除某个镜像
docker rmi repo:tag
11. 安装Nvidia docker
11.1 向库中添加源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
11.2 更新apt库
sudo apt-get update
Note:如果此时连接不上https://nvidia.github.io,但是服务器可以连接外网,则可能需要设置apt代理,可通过临时设置代理进行安装和更新。
sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8889/" update
Note:8889为本机代理转发端口
11.3 安装Nvidia docker
# 不使用临时代理
sudo apt-get install -y nvidia-docker2
# 使用临时代理
sudo apt-get install -o Acquire::http::proxy="http://127.0.0.1:8889/" nvidia-docker2
11.4 重启Docker服务
sudo systemctl restart docker
12. apt-get代理设置
12.1 通过环境变量设置
export http_proxy=http://127.0.0.1:8000
sudo apt-get update
12.2 通过配置文件设置
Acquire::http::proxy "http://127.0.0.1:8000/";
Acquire::ftp::proxy "ftp://127.0.0.1:8000/";
Acquire::https::proxy "https://127.0.0.1:8000/";
12.3 通过命令行临时设置
sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8000/" update
13. 在Shell脚本中嵌入Python脚本
#!/bin/bash
# "$@" 是传递给python脚本的参数,此处相当于从标准输入读入
# python代码段的缩进应当用空格控制,否则会遇到违法缩进的错误
# << -符号可有可无,但是最好有。-符号存在时,结束标识符可以在任意位置,-符号不存在时,结束标识符只能在一行的开头
# END是结束标识符,可以自定义,例如EOD,EOF等都可以。
python3 - "$@" <<-END
import torch
print('Hello, world!')
END
14. Ubuntu开启和关闭图形界面
# 关闭图形界面
sudo systemctl set-default multi-user.target
# 开启图形界面
sudo systemctl set-default graphical.target
# 重启生效
sudo shutdown -r now
15. Ubuntu快速安装NVIDIA显卡驱动
# 检查现有驱动程序
ubuntu-drivers devices
# 安装驱动 驱动版本为上面命令列出的版本
sudo apt install nvidia-driver-xxx-server
16. Ubuntu之间传输数据
# scp
scp -r user@ip:/path/to/file /path/to/file
17. SSH公钥/私钥免密登录
17.1 服务器端开启密钥登录模式
sudo vim /etc/ssh/sshd_config
# ----------------------------------------
# 是否允许 root 远程登录
PermitRootLogin yes
# 密码登录是否打开
PasswordAuthentication yes
# 开启公钥认证
RSAAuthentication yes # 这个参数可能没有 没关系
PubkeyAuthentication yes
# 存放登录用户公钥的文件位置
# 位置就是登录用户名的家目录下的 .ssh
# root 就是 /root/.ssh
# foo 就是 /home/foo/.ssh
AuthorizedKeysFile .ssh/authorized_keys
# ----------------------------------------
service sshd restart
17.2 客户端生成公私钥
ssh-keygen
此命令会在用户目录/.ssh文件夹下创建公私钥:id_rsa(私钥)、id_rsa.pub(公钥)
17.3 上传公钥到服务器
ssh-copy-id -i user/.ssh/id_rsa.pub user@ip
# 或使用scp上传
17.4 将公钥写入到授权文件中
cat >>~/.ssh/authorized_keys<id_rsa.pub
18. Ubuntu弹出移动硬盘
# 首先使用umount解除所有挂载
sudo udisksctl power-off -b /dev/sdb
19. 本地访问远程服务器上的jupyter lab
19.1 建立conda环境并安装jupyter lab
conda create -n jupyter python=3.8
conda activate jupyter
pip install jupyter lab
19.2 生成jupyter notebook登录密码
ipython
# 如果提示没有,则要先安装
# 在交互界面中输入
from notebook.auth import passwd
passwd()
# 输入密码,同时记住输出的字符串
19.3 生成jupyter配置文件
jupyter notebook --generate-config
# 修改配置文件
vim ~/.jupyter/jupyter_notebook_config.py
# 主要修改内容
c.NotebookApp.allow_remote_access = True
c.NotebookApp.open_browser = False
c.NotebookApp.ip='*'
c.NotebookApp.port = 8888
c.NotebookApp.password = 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
- 允许远程访问
- 不使用本地浏览器打开
- IP白名单
- 映射到本地的端口
- 配置密码(上一步的输出字符串)
19.4 服务器运行jupyter
nohup jupyter lab &
19.5 本地使用
在浏览器中输入服务器ip:端口,即可访问
总结
之前本想通过超链接的方式以一篇文章作为目录,链接到其它文章中,没想到可以直接在前面加目录。希望这一箩筐能够帮到大家,我也会不定时更新~