windows下wsl2中的ubuntu和ubuntu系统下docker使用gpu的异同

介绍ubuntu系统下配置docker下GPU使用环境的文章很多,本文算是一个比较性梳理。
主要比较一下wsl2中的ubuntu和ubuntu系统下的差异。
需要注意的是,尽管两者都能够配置好GPU支撑环境,但两者有一个重大的差别是,直接使用ubuntu系统会具有更大的兼容性,特别是当docker使用的镜像中的cuda版本与当前系统中的cuda版本不一致时。

1. window下wsl2中安装ubuntu和docker以及GPU支撑环境

详细介绍的文章很多,这里不再一一说明,只说明步骤和一些注意事项。

步骤:windows终端

有些系统没有自带windows终端,默认是powershell,并不太方便。

最方便的是windows终端,可以从windows商店,下载安装。

步骤:wsl2安装

wsl属于系统的功能组件,所以需要从:更多 Windows 功能 -> 找到并勾选 「Hyper-V」和「适用于 Linux 的 Windows 子系统」来安装,并重启。

使用命令查看一下状态:

wsl.exe  --status

关键是要更新wsl。

wsl --update

步骤:ubuntu 安装

ubuntu 安装可以从windows商店安装,也可以从wsl安装,从命令:

wsl --list --online

中选择一个ubuntu20.04安装即可。

步骤:ubuntu 更新国内源

为便于更快的更新,我们最好使用过内的源。方法是编辑/etc/apt/sources.list文件添加国内源。比如阿里的:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

修改完毕后,使用命令更新:

sudo apt-get update
sudo apt-get upgrade

步骤:Gcc安装

sudo apt-get install build-essential
sudo apt-get install gcc g++

步骤:docker安装

使用原生的docker,不要使用docker-dosktop,因为后者无法调用GPU。

根据官网 安装提供的说明安装。

docker安装完毕后可以用如下命令测试:

docker -v  #看docker版本
sudo docker run hello-world

若提示错误:

sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

通常关闭docker服务并重启可以解决:

sudo service docker stop
sudo service docker start

测试也可以用anaconda镜像:

docker pull continuumio/anaconda3
docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser"

使用本机的浏览器来使用jupyter

步骤: docker 配置国内镜像地址

为便于在拉取镜像时加速下载,可docker配置国内镜像地址。
方法是修改/etc/docker/daemon.json文件,加入国内的镜像源,比如:

{"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}

步骤: 安装wsl2需要的nvidia cuda驱动(NVIDIA CUDA on WSL driver)

从【官网】下载 wsl2用的nvidia cuda在windows下安装。

因为这是针对wsl的驱动,因此wsl中的ubuntu等其他linux系统就不需要再安装nvidia 驱动了。

而且驱动中带的cuda可以使得wsl下的ubuntu可以直接运行cuda程序(Once a Windows NVIDIA GPU driver is installed on the system, CUDA becomes available within WSL 2.)。

但若要编译cuda程序,则ubuntu下还需要安装cuda toolkit。
从官网 选择WSL-Ubuntu下载并安装即可。
通常情况下这一步可以不同做。因为使用docker拉取的镜像内部的环境和程序通常是编译好的。

步骤: 安装docker的nvidia 支持

根据nvidia关于docker的【架构说明】,
可以知道NVIDIA Container Toolkit 是我们需要的,可以通过
安装nvidia-docker2nvidia-container-runtime来获得,两者都是依赖于NVIDIA Container Toolkit,但两者用法不同。

安装nvidia-docker2nvidia-container-runtime都是可以的,由于nvidia-docker2提供了docker的自动设置,所以通常我们安装nvidia-docker2就好了。

命令为:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo apt-get update
sudo apt-get install -y nvidia-docker2

或者:

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.listsudo apt-get updatesudo apt-get install nvidia-container-runtime

安装完毕后重启docker服务:

sudo service docker stop
sudo service docker start

步骤: 测试docker的GPU调用

可以有多重方法测试docker的GPU调用,比如:

(1)nvidia-smi

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

(2)k8s

sudo docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

(3)tensorflow的测试

docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter

成功运行可以看到以上界面,在windows系统的浏览器中输入localhost:8888/tree运行。

(4)pytorch的测试

sudo docker run --gpus all -it --name pytorch bitnami/pytorch /bin/bash

然后拷贝一个基于pytorch的深度学习训练文件到容器内并运行,然后观察运行结果,并可以从windows的任务管理器观察GPU调用情况。

2. ubuntu系统下安装docker以及GPU支撑环境

类似的详细介绍的文章很多,这里不再一一说明,只说明步骤和一些注意事项。

步骤:双系统安装ubuntu

双系统安装根据硬盘的分区结构有MBR和GPT两种方式,MBR的方式是比较老的方式,近几年已经不怎么用了,安装的时候比较简单,给电脑空出一部分硬盘来,利用ubuntu的iso进行u盘安装即可。
而GPT的方式也不复杂,唯一差别是在ubuntu安装的过程中硬盘分区时需要给ubuntu指定efi引导分区即可。

至于ubuntu的安装u盘可以使用ultraiso、Rufus等工具来制作,iso文件从镜像下载。

然后设置电脑bios从U盘启动,按ubuntu的安装引导步骤安装即可。

步骤:ubuntu设置国内镜像

同wsl2下的ubuntu下的操作

步骤:Gcc安装

同wsl2下的ubuntu下的操作

步骤:ubuntu下安装显卡驱动

终端使用nvidia-smi命令查看支持的cuda版本。
如果无法查看,则说明尚未安装nvidia驱动。

因此需要安装显卡驱动,选择ubuntu的软件与更新,点击附加驱动,选择对应版本的驱动即可自动安装(选择较高的专用版本,便于与新的cuda配合)。

步骤:ubuntu下安装cuda-kit

从【官网】 选择合适的版本。

选择run版本,则可以在命令行完成操作,比如:

wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run
sudo sh cuda_11.7.1_515.65.01_linux.run

注意安装时若出错,则去掉cuda带的显卡驱动。

输入gedit ~/.bashrc命令打开文件并设置环境变量。

    export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

更新环境变量配置

 source ~/.bashrc

完成后可以使用nvcc -V命令查看。

步骤:ubuntu下安装cudnn

从【官网】 选择合适的版本。

注意需要使用nvidia账号登陆,临时注册一个即可。

根据 安装说明 可知,我们可以使用不同的方式,选择tar版本的下载是比较快的方式,命令也少。

下载tar版本的cudnn后,进入该文件所在目录并解压:

tar -xvf cudnn-linux-x86_64-8.x.x.x_cudaX.Y-archive.tar.xz

然后用如下命令复制即可(Copy the following files into the CUDA toolkit directory)

sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

步骤:ubuntu下安装docker

同wsl2下的ubuntu下的操作

步骤:ubuntu下安装docker设置国内镜像

同wsl2下的ubuntu下的操作

步骤:ubuntu下安装nvidia-docker2或nvidia-container-runtime

同wsl2下的ubuntu下的操作

步骤:ubuntu下测试docker使用GPU

同wsl2下的ubuntu下的操作

3. 两种方式的比较

两种方式的主要差别在于:wsl2模式下不需要安装unbuntu下的显卡驱动,以及cudakit和cudnn,而直接ubuntu系统下则需要。
而wsl2需要在windows下安装NVIDIA CUDA on WSL driver, 而直接ubuntu系统下不需要。
其他的则是相同的。

从功能实践看,对于一般的情况,两种方式都能达成目的。比如在docker下使用pytorch进行GPU训练都没有问题。
但有一个问题是,从其它电脑上拷贝来的镜像,它是低版本的cuda 10.2的,想用在ubuntu下启用,发现wsl2下启动不起来,而直接ubuntu下则可以,两者的cuda版本都是11.7,具体的原因我没有测试出来。
说明这种情况下,还是直接的ubuntu系统更具兼容性。

4. ubuntu和docker 相关命令、操作和一些注意事项

查版本

lsb_release -a  #Ubuntu查看自身版本:
docker -v   #docker
sudo docker version

dcoker的启停操作

sudo service docker stop
sudo service docker start
sudo service docker restart

sudo systemctl stop docker
sudo systemctl start docker

dcoker的镜像操作

查看镜像:sudo docker images | grep deep

删除镜像:sudo docker rmi [image] 或者:sudo docker image rm [image]

从将容器打包成镜像 sudo docker commit 容器id 镜像名:镜像版本

保存镜像 sudo docker save 镜像名:镜像版本 -o xxx.tar

本地安装docker镜像 docker load -i xxx.tar

dcoker的容器操作

查看所有容器:sudo docker container ls --all

查看所有容器容器 sudo docker ps -a

关闭容器 sudo docker stop 容器名

移除容器 sudo docker rm 容器名

从停止的容器启动容器并进入容器

sudo docker start 容器名
sudo docker exec -it 容器名  /bin/bash

从镜像启动容器并进入容器:

sudo docker run -it 镜像名[:带标签]  /bin/bash

dcoker的路径或端口映射

从镜像启动容器并进入容器并映射宿主机路径:

sudo docker run --gpus all -it -v [宿主机路径]:[容器中的路径]  镜像名[:带标签]  /bin/bash

其中--gpus all是调用GPU,-v是路径映射

docker run -i -t -p 8888:8888 anacondajupyter:v1 /bin/bash

其中-p是做端口映射

dcoker的文件操作

从宿主机复制文件到容器

sudo docker cp 文件路径含文件名 容器名:文件路径含文件名

从容器复制文件到宿主机

sudo docker cp 容器名:文件路径含文件名 文件路径含文件名

dcoker的网络访问

默认的宿主机的ip地址为:172.17.0.1 而不是127.0.0.1

ubuntu安装本地的deb文件

直接使用apt-get install即可。

python的安装和使用

使用anaconda是最方便的。
注意安装的时候直接为当前用户安装即可,不需要sudo。

bash ~/Downloads/Anaconda3-2019.10-Linux-x86_64.sh

根据提示安装即可,默认的终端自动激活环境也是方便的。

安装软件用

conda install <package_names>

如下四个环境相关的命令最常用

新建虚拟环境   conda create --name <env_name> <package_names>  多个包名用空格分开
切换conda环境   conda activate env_name
退出虚拟环境  conda deactivate
列出所有虚拟环境 conda info --envs

anconda也可以配置国内源以提升下载速度:

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 --set show_channel_urls yes

手动运行容器中的jupyter

进入容器后手动运行jupyter

docker exec -it 7da9ad3a0be2 /bin/bash
conda install jupyter -y --quiet
mkdir /opt/notebooks
jupyter notebook --allow-root --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser &

然后在window下的浏览器中输入上述命令的输出提示即可。

小结

本文梳理了wsl2下的ubuntu和直接的ubuntu系统下的docker使用GPU的步骤,为GPU使用环境配置提供支持。

参考:

  1. https://www.cnblogs.com/wenhsing/p/15743124.html
  2. https://blog.csdn.net/qq_18625805/article/details/109732122
  3. https://docs.docker.com/engine/install/ubuntu/
  4. https://www.jianshu.com/p/be669d9359e2
  5. https://blog.csdn.net/sunbrightness/article/details/116783604
  6. https://docs.nvidia.com/cuda/wsl-user-guide/index.html
  7. https://www.modb.pro/db/198499
  8. https://github.com/NVIDIA/nvidia-docker
  9. https://github.com/NVIDIA/nvidia-container-runtime
  10. https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/arch-overview.html#arch-overview
  11. https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-on-ubuntu-and-debian
  12. https://gitlab.com/nvidia/container-toolkit/container-toolkit/-/tree/main/cmd/nvidia-container-runtime
  13. https://hub.docker.com/r/continuumio/anaconda3
  14. https://blog.csdn.net/hwh295/article/details/113409389
  15. https://blog.csdn.net/xianxi9883/article/details/107358445/
  16. https://blog.csdn.net/xianxi9883/article/details/107358445/
  17. https://baiyue.one/archives/1651.html
  18. https://docs.nvidia.com/cuda/wsl-user-guide/index.html
  19. https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
  20. https://blog.csdn.net/ashome123/article/details/105822040
  21. https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
  22. https://blog.csdn.net/moutain9426/article/details/120252641
  23. https://www.cnblogs.com/dereen/p/dl_env.html
  24. https://blog.csdn.net/JinLu_/article/details/125700340
  25. https://blog.csdn.net/qq_29225913/article/details/105347317

windows下wsl2中的ubuntu和ubuntu系统下docker使用gpu的异同相关推荐

  1. 在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~

    通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下: 初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23 ...

  2. Ubuntu 16.04系统下CUDA8.0配置Caffe教程

    由于最近安装了Ubuntu 16.04,本文教程的特点是不需要降级gcc的版本,毕竟cuda8.0已经支持gcc5以上(默认不支持,实际支持). 本文是在参考caffe官网教程以及http://www ...

  3. linux添加HP网络打印机,在Ubuntu 18.10系统下安装HP网络打印机的方法

    本文介绍在Ubuntu 18.10系统下安装HP网络打印机的方法,只需要四个步骤就可以了.同样的方法也适合在Ubuntu 18.04系统下. 背景 最近做了个双系统Windows+Ubuntu 18. ...

  4. 如何在ubuntu 14.04系统下开启nfs网络文件系统

    之前安装过ubuntu 11.04和ubuntu 12.04的系统时,分别研究过如何开启NFS网络文件系统.今天将系统更新到了ubuntu 14.04,发现之前的办法都不行了,有些步骤得更新一下,于是 ...

  5. linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法

    本文介绍在Ubuntu 18.04操作系统下安装pyenv的方法,使用它可以进行Python多版本管理,目的是防止不同的Python版本因为不兼容而出现错误.安装pyenv其实非常的简单,只需要在系统 ...

  6. ubuntu18安装oracle11g,在Ubuntu 18.04系统下快速安装Oracle Java 11的方法

    本文介绍在Ubuntu 18.04操作系统下使用PPA快速安装Oracle Java 11的方法,同时也可以用在Ubuntu 18.10.Ubuntu 16.04.Ubuntu 14.04版本中. O ...

  7. Ubuntu 16.04系统下出现E: 无法下载 http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary

    Ubuntu 16.04系统下出现E: 无法下载 http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary ...

  8. windows 7编辑启动菜单 bcdedit linux,windows7系统下删除wubi安装的ubuntu启动项使用命令bcdedit解决...

    windows7系统下删除wubi安装的ubuntu启动项使用命令bcdedit解决 发布时间:2013-05-28 15:19:31   作者:佚名   我要评论 前不久用笔记本通过wubi安装Ub ...

  9. linux安装vscode菜单乱码,在Ubuntu 18.04系统下vscode中zsh乱码的解决方法

    以下为你介绍在Ubuntu 18.04 LTS系统下vscode中zsh乱码的解决方法. 详情 在Ubuntu 18.04 LTS系统下安装了zsh和agnoster主题,但是出现了终端中有乱码的情况 ...

最新文章

  1. 经典算法研究系列:二、Dijkstra 算法初探
  2. Kafka为什么这么快?
  3. python gzip压缩后传给前端_Python 3,从/向gzip文件读取/写入压缩的json对象
  4. python笔记-标准库unittest
  5. Java基础系列--static关键字
  6. detectron2 ImportError: cannot import name ‘_C‘ from ‘detectron2‘
  7. 好用到爆!电脑必装软件清单,四款软件工具,一个都绝不能少!让你的电脑瞬间开挂!
  8. 表格怎么样输入数字自己计算机,如何让EXCEL中输入数字后自动显示求和结果
  9. 物联网是什么,华为云学院带你走进物联网的前世今生
  10. OKR工作法学习心得
  11. DSPE-PEG12-Mal,C72H135N2O23P长臂亲水性小分子PEG试剂
  12. 硬核!江西一社区干部用无人机给居民量体温:1米内测量误差仅1%
  13. 老师傅传授,数控车床对刀步骤
  14. visualVM 介绍 (一)
  15. 大数据存储项目-基于Flink的高速公路ETC入深圳数据实时分析平台
  16. 水位传感器c语言程序,基于STC89C51单片机的水位传感器控制系统设计.doc
  17. 【python爬虫专项(28)】链家二手房源数据采集1(分页信息采集)
  18. 2020德勤面试开始了吗_2020年四大春招已经启动,应届会计毕业生不容错过!
  19. 数据库连接池 ( 四 ) Druid 连接池
  20. Beam Cannon HDU - 5091 (扫描线) 求矩形内的点的数量

热门文章

  1. 白皮书:OpenStack与容器的相遇相知(下)
  2. python调用包的路径_Python3 模块、包调用路径详解
  3. 量子计算机跟绝对零度,量子计算的“极寒”开始“融化”了吗?
  4. 量子计算机与低温,逼近绝对零度,和外太空一样的低温_服务器评测与技术-中关村在线...
  5. 实例解析网络钓鱼攻击的幕后
  6. 不同的国家,珠峰的高度为啥不一样?
  7. NDI是什么?NDI协议传输让网络直播更有趣
  8. 七步教你从0到1创建客户服务团队
  9. 数字图像处理笔记——酉变换( Unitary image transforms)
  10. 了解使用Android ConstraintLayout (Google I/O 2016)