docker安装及其配置深度学习环境
- 如文章出现问题请留言评论区,或者加Q裙-472648720.
- 如果您觉得文章对您有帮助,感谢您一键三连支持一波,_.
- 多种BEV环视感知算法环境部署复现汇总参考
简介:
-
本教程只简单教大家构建一个深度学习的docker环境, 不涉及docker细节知识,
-
建议先花半个小时去b站,或者docker官方熟悉一下dokcer的基本知识 + docker常用的基本命令(可以参考本文第3节内容)
-
使用docker可以在一个宿主机系统里面使用不同系统版本的docker容器,人话就是:如果你本机是
ubuntu16.04
的系统, 你现在需要使用ubuntu18.04
或者ubuntu20.04
或者其他系统版本。 以前解决方法是把16的系统重装成其他版本(一次只能在一个系统下进行操作),或者使用虚拟机。但使用了docker
就可以不用安装其他系统,直接在ubuntu16
源系统下,使用docker
创建其他系统。狭隘讲:docker
相当于轻量化的虚拟机。(该解释不严谨, 能听懂就行) -
镜像 + 容器:我们在使用虚拟机时候,需要一个镜像, 然后实例化镜像得到一个虚拟系统。docker使用同样需要一个镜像,然后用该镜像实例化得到一个容器,这里的容器相当于虚拟机系统(后续理解不了容器就把他当做一个系统)。
1 ubuntu下一键安装docker
- 以新系统为例子, 老系统换过源的可以跳过换源这步
- apt换源 (国内请换下面的国内源,国外不用换)
- 下面操作就是把
/etc/apt/sources.list
文件中内容替换成国内清华源
# 1 根据宿主机系统更换apt软件源
# ubuntu-18.04
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
# ubuntu-20.04
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
# 其他ubuntu版本请参考上面的清华源地址
# 2 查看宿主机系统apt软件源,有上面4条清华源地址打印即成功
cat /etc/apt/sources.list
# 3 更新软件源
sudo apt update
- 一键安装docker
- 输入下面代码,按照提示进行安装docker,
wget http://fishros.com/install -O fishros && . fishros
- 输入数字
8
:一键安装:Docker
, 会自动完成docker
的安装
- 显卡驱动
切记 一定要在宿主机上安装显卡驱动,不然docker容器中无法共用显卡驱动
显卡驱动安装参考ubuntu20.04显卡驱动cuda cudnn conda TensorRT安装及配置的1.1节
安装后,执行下面语句, 有显卡信息输出即代表显卡驱动安装成功
# 宿主机终端执行,
nvidia-smi
2 创建docker容器
创建docker容器相当于新建一个docker系统, 根据前面讲的,我们需要一个镜像才能创建容器。首先我们需要拉取一个镜像
2.1 获取镜像
获得镜像有很多种方法:
dockerfile
构建docker pull
拉取等其他方法。
这里主要针对深度学习cuda11.3
环境进行搭建。所以我们直接拉取nvidia
提供的cuda11.3
的镜像。
创建一个ubuntu20.04, 带有cuda11.3的容器, 如果需要其他版本请查看链接nvidia/cuda
- 方法1
dockerfile
构建
# dockerfile文件的基础镜像
FROM nvidia/cuda:11.3.1-devel-ubuntu20.04
- 方法2
docker pull
我们直接使用方法2docker pull
拉取, 运行下面代码
sudo docker pull nvidia/cuda:11.3.1-devel-ubuntu20.04
大概4.94G左右大小,可能拉取需要一点时间。
2.2 使用镜像构建容器
- 查看下载好的镜像
sudo docker images
终端显示如下:
| REPOSITORY | TAG | IMAGE ID | CREATED | size |
| : ---- : | : ---- : | : ---- : | : ---- : | : ---- : |
|nvidia/cuda|11.3.1-devel-ubuntu20.04|c908607a5024|3 months ago|4.94G|
- 构建容器
sudo docker run -it --gpus all --network host -v /tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" -v ~/share:/share --name bev nvidia/cuda:11.3.1-devel-ubuntu20.04 /bin/bash
# 只共享显卡驱动和文件夹
sudo docker run -it --gpus all -v ~/share:/share --name bev nvidia/cuda:11.3.1-devel-ubuntu20.04 /bin/bash
本人使用下面代码构建容器:
sudo docker run -it --gpus all -v ~/share:/share --name bev nvidia/cuda:11.3.1-devel-ubuntu20.04 /bin/bash
构建后会自动进入docker
容器中的/bin/bash
终端, 输出如下:
==========
== CUDA ==
==========
CUDA Version 11.3.1
Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
要在docker
里面使用显卡,务必加上--gpus all
参数
docker run
参数说明:
-it -i参数表示让容器的标准输入保持打开,-t参数表示为容器分配一个伪终端
--gpus all 与宿主机共享gpu, 要在docker里面使用显卡,务必加上该参数
--network host 共享ip
-v /tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" 可视化参数 共享窗口
-v ~/share:/share 文件夹映射 宿主机目录:docker目录, 如果不存在目录会自动新建
--name 给容器命名,以便后续使用该容器, 自定义
其他参数可以参考docker官方文档
- 查看容器
# 在宿主机终端下运行下面代码,查看容器list
sudo docker ps -a
# 可以看到我们新建的bev容器信息,Exited代表stop状态,up代表启动状态
- 进入容器
一定要满足宿主机有显卡驱动, 才能在容器中执行nvcc -V
有显卡信息
# 1 起宿主机新终端,将bev容器处于up状态, 状态可以用sudo docker ps -a查看
sudo docker restart bev
# 2 在宿主机新起一个终端,运行,运行这个必须保证bev处于up状态
sudo docker exec -it bev /bin/bash
# 3 容器中终端输入下面代码,有显卡信息输出,即代码容器可以和宿主机共用显卡驱动
nvidia-smi
# 如果没有显卡信息输出,请检测宿主机的显卡驱动是否安装成功 和 检测docker run命令是否加--gpus all参数
# 4 容器终端输入下面代码,查看cuda版本,
nvcc -V
# 输出如下
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
2.3 docker容器中安装miniconda3
- 进入容器的终端
# 1 保证容器up状态后,进入容器的终端
sudo docker exec -it bev /bin/bash
# 2 可以查看一下我们的共享文件夹
# 进入/root目录,可以看到share文件夹,与宿主机种~/share目录内容一致,实现宿主机和容器中的文件互传
cd ~ && ls
- 换docker容器中的apt源
参考 第1节 ubuntu下一键安装docker的第一小点,以容器ubuntu20.04为例
# 1 ubuntu20.04换源 容器内的终端运行下面这句代码
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
# 2 更新apt源
apt update
# 3 下载基本的包
apt install sudo vim wget git -y
- 安装conda
# 1 进入容器中的/root目录
cd ~
# 2 在root目录下载Miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 3 Miniconda3加权限
chmod +x Miniconda3-latest-Linux-x86_64.sh
# 4 安装Miniconda3, 根据终端提示一直确认即可
# Do you accept the license terms? [yes|no] 选yes
./Miniconda3-latest-Linux-x86_64.sh
- 激活容器中conda
# 1 进入conda目录
cd ~/miniconda3
# 2 初始化conda(激活)
./bin/conda init
# 3 退出docker,退出容器重新进入容器就可以发现conda已激活,
exit
# 4 宿主机终端,运行下面代码进入容器,运行这个代码必须保证bev处于up状态
sudo docker exec -it bev /bin/bash
重新进入容器后,容器内的终端前面就自带 (base) 环境了
- conda与pip换源
# 1 conda换源, 在容器终端中依次执行下面4句
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes
# 2 pip换源 在容器终端中执行下面代码
mkdir ~/.pip && vim ~/.pip/pip.conf
# 将下面2句代码放入~/.pip/pip.conf后,输入:wq保存退出,即可换源成功
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
自此, ubuntu20.04-cuda11.3
的docker
容器已经创建完成,可以像普通系统使用conda
创建python
虚拟环境部署深度学习算法。
同一个镜像可以起多个容器, 我导再也不用担心我的环境问题。
3 docker常用命令操作
- 去除
docker
命令行前的sudo
权限,防止不加sudo出现docker without root permissions
报错
#1 添加用户组
sudo groupadd docker
# 2 将当前用户添加至docker用户组, $USER为普通用户名
sudo gpasswd -a $USER docker
# 3 更新
newgrp docker
- 镜像常用相关命令
# 1 dockerfile文件构建镜像
sudo docker build -t ${image_name} -f ${dokerfile_name} .
# 2 查看本地镜像列表
sudo docker images
# 3 拉取远程镜像
sudo docker pull ${image_name}
# 4 删除镜像
sudo docker rmi ${image_name}
3 . 容器常用相关命令
# 1 使用镜像构建容器
sudo docker run -it --name ${container_name} ${image_name} /bin/bash
# 2 查看容器状态列表
sudo docker ps -a
# 3 命令行模式进入容器
sudo docker exec -it bev /bin/bash
# 下面的命令${container_name}可以患侧${container_id}
# 4 停止容器
sudo docker stop ${container_name}
# 5 启动容器
sudo docker start ${container_name}
# 6 重启容器
sudo docker restart ${container_name}
# 删除容器 name可以换成id
sudo docker rm ${container_name}
- 如果您发现文章有错,请及时留言评论区,以免其他人犯同样的错误.
- 如果您觉得文章对您有帮助,感谢您一键三连支持一波,
^_^
. - 欢迎加入
Q
裙-472648720
,大家一起交流学习bev
部署相关知识1+1>2
😊. - BEV环视感知算法从环境部署代码复现工程汇总