WSL2使用Nvidia-Docker实现CUDA版本自由切换

这篇具有很好参考价值的文章主要介绍了WSL2使用Nvidia-Docker实现CUDA版本自由切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

众所周知,深度学习的环境往往非常麻烦,经常不同的项目所依赖的 torch、tensorflow 包对 CUDA 的版本也有不同的要求,Linux 下进行 CUDA 的管理比较麻烦,是一个比较头疼的问题。

随着 WSL2 对物理机显卡的支持,Nvidia-Docker 也提供了对容器显卡的支持。我们可以通过拉取不同的 Docker 镜像的方式来实现对容器内 CUDA、CUDNN 的自由切换,操作非常简易。

1. Win11 显卡驱动的安装

注意:WSL2中是不需要且不能安装任何显卡驱动的,它的显卡驱动完全依赖于 Win11 中的显卡驱动,因此我们只需要安装你显卡对应的 Win11 版本显卡驱动版本(必须是 Win11 版本的驱动),这个已经有很多教程了,这里就不赘述。如果你安装成功,可以在 Win11 的 cmd 中输入 nvidia-smi可以看到下图。
WSL2使用Nvidia-Docker实现CUDA版本自由切换

因为 WSL2 中的显卡驱动完全依赖于 Win11 的显卡驱动,因此在 WSL2 中输入 nvidia-smi 也可以看到相同驱动版本的输出。
请注意:这里的 nvidia-smi 能作用的范围,只作用于你 Win11 安装显卡驱动时所登录的那个用户名对应到 WSL2 中的用户名。比如我是在 Win11 (guosongyuan) 用户上安装的显卡驱动,那么我只能在 WSL2 的 gsy 用户状态下才能执行该 nvidia-smi 指令,root 用户执行该命令是不能生效的。

WSL2使用Nvidia-Docker实现CUDA版本自由切换

2. 安装 Docker 和 Nvidia-Docker

  1. 安装 Docker 引擎可以参考文档:Docker 引擎官方安装教程;
  2. 安装 Docker 引擎之后,就可以在其基础上安装 Nvidia-Docker 组件:Nvidia-Docker 安装教程。
    这两个步骤非常简单,如果看不懂英语的话直接用谷歌翻译就好。

3. 选择合适的 CUDA 和 CUDNN 的镜像

使用 Nvidia-Docker 的好处就在于,你不需要真的在 WSL 中安装 CUDA 和 CUDNN,这样就可以避免在配置不同项目环境时遇到的很麻烦的环境切换问题。我们只要每次遇到一个新的项目,拉取对应的 CUDA 和 CUDNN 版本即可,即插即用,不想用了直接删除对应的镜像和容器即可,跟删除软件一样方便。

这里以安装 CUDA 11.2.0 版本为例,我们来到 Docker 镜像市场:Docker HUB,在其中搜索关键字 nvidia/cuda,如下图。
WSL2使用Nvidia-Docker实现CUDA版本自由切换

点进入,在 Tags 中搜索对应的 CUDA 版本,注意同一个版本下对应三种不同的类型(devel、runtime、base),我们推荐安装 devel 版本,因为它的环境更齐全,我们这里因为 WSL2 是 Ubuntu 20.04 版本的,所以我们选择镜像的时候选择 ubuntu20.04 后缀的。
这里以 nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 镜像为例,通过 sudo docker pull nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 将镜像拉取下来。

拉取镜像之后,我们可以查看当前镜像中的显卡驱动、CUDA版本和 CUDNN 的版本。

  1. 查看显卡驱动版本:sudo docker run --rm --gpus all nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 nvidia-smi
  2. 查看 CUDA 版本:sudo docker run --rm --gpus all nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 nvcc -V
  3. 查看 CUDNN 版本,因为镜像官方将 CUDA 和 CUDNN 进行了解耦合,因此我们需要分两步进行查询操作。首先通过 sudo docker run --rm --gpus all nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 whereis cudnn,看到 cudnn.h 所在路径 cudnn: /usr/include/cudnn.h。我们根据这个输出结果,把 cudnn.h 之前的 include 路径记住,查询该 include 下的 cudnn_verseion.h 文件:sudo docker run --rm --gpus all nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04 cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2,这样就能看到 CUDNN 的版本号了。
    WSL2使用Nvidia-Docker实现CUDA版本自由切换

4. 利用拉取的镜像构建自己的镜像

我们拉取的镜像中只有最基础的 CUDA 和 CUDNN,还没有配置 Anaconda、换源、git 、pip 等常用工具,因此我们将这些可能用到的常用工具将其打包好。

为了构建镜像,我们在用户目录下创建一个名为 mkimage 的目录,在其中放入我们需要的三个内容: Anaconda3-5.2.0-Linux-x86_64.sh、Dockerfile、sources.list,其中 sources.list 是用来给 Ubuntu apt 换源用的。

sources.list 内容如下:

######################################
###### CONTENT for 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

Dockerfile内容如下:

####################################
###### CONTENT for Dockerfile ######
####################################

# Extends from father image [CHANGE WITH YOUR NEED]
FROM nvidia/cuda:11.2.0-cudnn8-devel-ubuntu20.04

# Set locale
ENV DEBIAN_FRONTEND noninteractive

# Change anaconda source
# ADD means copy file from host machine to containers
ADD sources.list /etc/apt/
ENV PATH /opt/conda/bin:$PATH

# Install basic dependencies
RUN rm /etc/apt/sources.list.d/cuda.list && \
	rm /etc/apt/sources.list.d/nvidia-ml.list
	
RUN apt-get update && apt-get install -y --no-install-recommends \
	bzip2 \
	g++ \
	git \
	vim \
	python-dev \
	python3-pip \
	build-essential \
	wget && \
	rm -rf /var/lib/apt/lists/*

# Install Anaconda for python 3.6
ADD Anaconda3-5.2.0-Linux-x86_64.sh /home/anaconda.sh
RUN /bin/bash /home/anaconda.sh -b -p /opt/conda && \
	ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
	rm /home/anaconda.sh

# Change sources for conda, add tsinghua sources and remove defaults
RUN conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
	conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
	conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
	conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ && \
	conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/ && \
	conda config --remove channels defaults

# Change sources for pip3
RUN mkdir ~/.pip && \
	echo "[global]\nindex-url = http://mirrors.aliyun.com/pypi/simple/\n[install]\ntrusted-host = mirrors.aliyun.com" > ~/.pip/pip.conf

# Initialize workspace
RUN mkdir /workspace
WORKDIR /workspace

CMD ["/bin/bash"]

其中,Anaconda3-5.2.0-Linux-x86_64.sh 可以在 Anaconda Archive 中找到。

然后,我们可以通过下列指令制作镜像 my-nvidia/cuda:11.2

cd ~/mkimage
sudo docker build -f Dockerfile -t my-nvidia/cuda:11.2 .

经过漫长的等待,我们可以看到一个 Successfully 提示消息,证明我们镜像打包成功。
WSL2使用Nvidia-Docker实现CUDA版本自由切换

构建完成后,我们可以通过下面这个指令进行容器的创建:

sudo docker run -it --gpus all --name cuda_11.2 my-nvidia/cuda:11.2 /bin/bash

进入容器之后,我们可以通过 nvidia-sminvcc -Vconda info 查看当前的显卡驱动、CUDA版本和 conda 源信息。
如果使用 conda 安装包的时候出现了conda Malformed version string ‘~’: invalid character(s)报错,可以使用下面的命令更新一下 conda。

conda upgrade -n base -c defaults --override-channels conda
conda update --all

我这里从 PyTorch 官网中下载了一个对应 CUDA 版本的 torch(我创建了一个名为 pytorch 的 conda 虚拟环境),可以看到在容器中 GPU 资源是可以正常被访问的。这样我们以后就可以随时切换 CUDA 版本了,是不是很方便?
WSL2使用Nvidia-Docker实现CUDA版本自由切换文章来源地址https://www.toymoban.com/news/detail-431897.html

到了这里,关于WSL2使用Nvidia-Docker实现CUDA版本自由切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nvidia-docker的使用

    问题描述 解决方法: 为找到正确且合适的docker镜像版本 在supported-tags中找到与自己系统对应的cuda版本,并将nvidia/cuda:latest中的latest改成对应的版本 例如: nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04

    2024年02月11日
    浏览(22)
  • 深度学习docker环境配置之nvidia-docker安装使用

    –docker容器技术–。 简单理解 :Anaconda用于隔离不同的python环境;docker可以理解成在你的机器里面安装了一个独立的系统,因此它可以隔离不同的CUDA环境,还有着独立的文件系统,防止别人删掉你的实验和环境等。 镜像(images)的意思就是静态的镜像文件; 容器(containe

    2024年02月06日
    浏览(33)
  • 基于Docker的深度学习环境NVIDIA和CUDA部署以及WSL和linux镜像问题

    docker的介绍网上有很多,对于深度学习的认来讲,docker的好处就是直接把环境分享给他人,他人不需要再配置环境了。 比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安装各种依赖库,

    2024年02月05日
    浏览(31)
  • Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群

    首先根据你的操作系统版本 安装WSL ,记得切换WSL2,其次 安装Docker Desktop,如果Docker安装后一直无法加载WSL,卸载后重新安装时不要勾选WSL,安装后去设置里面勾上WSL即可。 Windows中运行以上代码,WSL中安装Ubuntu是为了方便在docker容器中挂载数据。 去WSL-Ubuntu系统中运行以上命

    2024年01月21日
    浏览(34)
  • Docker Desktop 更新4.25.1版本后出现WSL2报错

     近期发现 Docker Desktop 有新版本可以更新,结果操作后  再打包它就闪退了。无奈只能删除 Docker Desktop 后下载新版本安装程序进行重装,然后依次出现2个弹窗上面显示如下报错内容。  第一个弹窗:   打开win11 命令行输入 wsl  --shutdown , 再次尝试打开 Docker Des

    2024年02月04日
    浏览(59)
  • 【WSL2】【图形界面】【CUDA驱动】WSL2 Ubuntu+gnome原生图形界面及WSL2显卡CUDA驱动的安装

      没有图形化界面的Ubuntu实在是看着不爽,虽然已经习惯用命令。为了更加方便使用WSL2子系统,还是配置了gnome原生桌面(虽然不是很轻量级,但是舒服啊!),然后因为有深度学习需求,有NVIDIA的显卡顺带配置了一下显卡驱动。   下面看看如何配置WSL2图形界面和显卡

    2024年02月10日
    浏览(44)
  • 这里做一篇关于wsl2更新到最新版本使用镜像网络,但是docker创建的容器不能被访问的问题(困扰了我一整天)

    在windows2023年9月的一次更新中,wsl2支持了新的网络模式镜像模式,他能够通过localhost地址从wsl2内部连接到windows的127.0.0.1地址 ##相当于是和本地主机拥有同一个ip 原wsl2是不支持的,虽说是net网络模式,可访问主机,主机也可访问wsl2,同时也可上网,但是不能被网络访问,如

    2024年04月16日
    浏览(36)
  • WSL2安装CUDA

    在WSL里面不用安装显卡驱动,显卡驱动必须要提前在Windows系统里面安装好,安装好后相应库文件会自动映射到WSL里面 进入网站 找到自己需要的版本,我这里是CUDA 11.7.1,点击进入详细页面 依次选择 L i n u x → x 86 _ 64 → W S L − U b u n t u → 2.0 → r u n f i l e Linuxrightarrow x86_

    2024年02月16日
    浏览(29)
  • ubuntu安装docker及nvidia-container-toolkit(nvidia-docker和nvidia-docker2)

    旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。 鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 然后,我们需要向 sources.list 中添加 Docker 软件源: 以上命令会添加稳定

    2024年02月08日
    浏览(35)
  • WSL2下的Docker配置和使用

    在Windows的Linux子系统(Windows Subsystem for Linux)WSL2中安装、配置和使用 Docker,可以参考官方教程:WSL上的Docker远程容器入门. 重要步骤总结如下: 确保你的计算机运行的是 Windows 10(更新到版本 2004,内部版本 18362 或更高版本)。 安装 WSL,并为在 WSL 2 中运行的 Linux 发行版设

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包