跳转至

WSL下GPU配置与docker安装

WSL2安装(详细过程)

史上最全的WSL安装教程

docker | 基于 WSL2 在 Windows 下使用 docker

win10启用Wsl2,安装Docker desktop集成Ubuntu,配置docker开发环境

深度学习——docker安装nvidia-container-toolkit的步骤与执行过程中的一些报错

win10/11下wsl2安装gpu版的pytorch(避坑指南)

安装WSL

可以优先看官方文档!!!

为Linux启用子系统

控制面板->程序->程序与功能->启用或关闭windows功能->适用于Linux的windows子系统 打开

打开powershell输入

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

启用虚拟化:以管理员打开powershell输入下列命令

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

下载X64的WSL2 Linux内核升级包并安装

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

设置WSL默认版本

wsl --set-default-version 2

打开Microsoft Store安装ubuntu 20.04.6 LTS

安装完后打开ubuntu,设置用户名密码即可ok

cmd中输入

wsl -l -v

设置代理

解决"wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理"

在Windows中的C:\Users\目录下创建一个.wslconfig文件,然后在文件中写入如下内容

[experimental]
autoMemoryReclaim=gradual  # gradual  | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

之后重启wsl

即可看到是否安装成功

安装docker

docker | 基于 WSL2 在 Windows 下使用 docker

windows安装docker-desktop,按照提示安装

https://www.docker.com/products/docker-desktop

cmd

docker --version

设置Ubuntu作为默认发行版

打开docker-desktop->设置->Resource->WSL intergration->打开选项ubuntu-20.04

在子系统中输入

docker run hello-world

换源参考链接

安装nvidia驱动

一定要注意cuda版本!!!! 我下载的是11.1.1

官网下载runfile: https://developer.nvidia.com/cuda-downloads

往期版本: https://developer.nvidia.com/cuda-toolkit-archive

选择Linux->x86_64->WSL_Ubuntu->2.0->runfile

将出现的两条指令复制到终端运行,全部默认选项

之后添加环境变量,看好自己的文件夹在哪!!

vim ~/.bashrc

输入i进行编辑,在文件最后加入

 export PATH=/usr/local/cuda/bin:$PATH
 export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH
 ```

 esc输入:wq进行保存退出

 刷新环境变量

 ```shell
 source ~/.bashrc
 ```

 之后在终端输入nvcc -V即可看到cuda版本

 可以用官方sample测试是否可以正常使用

 ```shell
cd /usr/local/cuda/samples/4_Finance/BlackScholes
make BlackScholes
./BlackScholes

安装nvidia-container-toolkit

官方网址 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

首先,1. 确保nvcc -V可以正常输出,2. 确保docker安装成功

在服务器bash中设置stable存储库和密钥:

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

添加NVIDIA Container Toolkit的软件源,并安装nvidia-docker2软件包:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

重启docker

sudo systemctl restart docker

配置Docker daemon使其可以识别到NVIDIA Container Runtime

sudo nvidia-ctk runtime configure --runtime=docker

输出

INFO[0000] Loading docker config from /etc/docker/daemon.json
INFO[0000] Successfully loaded config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that the docker daemon be restarted.

重启docker, 安装完成

拉取pytorch官方镜像

docker pull pytorch/pytorch:2.0.0-cuda11.7-cudnn8-devel

进入镜像

docker run --name cuda117 --gpus all --rm -it pytorch/pytorch:2.0.0-cuda11.7-cudnn8-devel

——GPU用于指定容器应该看到哪个GPU, all的意思是“所有的”。如果你只想用一个,你可以传递它的id——gpu 1。你也可以指定一个要使用的gpu列表,——gpu "device=1,2"

Develop like a Pro with NVIDIA + Docker + VS Code + PyTorch

由于镜像都过大,下载速度很慢,可以通过更换国内源

Windows Docker 配置国内镜像源的两种方法

  1. 通过Docker-Desktop->设置->Docker Engine 添加
  2. 修改daemon.json配置(这个由于我用的是子系统,所以没有使用这个选项)

添加以下地址:

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

之后重启Docker

输入

docker info

如果在最后显示了Registry Mirrors:,即为配置成功~

docker的具体使用方法,见其他文档~

ps: 以下内容存在错误

WSL设置代理

host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:7890"

WSL 下使用代理

  • 1.windows v2ray客户端开启允许来自局域网的连接。
  • wsl中关闭自动更新dns nameserver /etc/wsl.conf 文件中设置为false。
[network]
generateResolvConf = false

这里如果设成false会导致再一次开机时没有此文件,Temporary failure in name resolution导致域名解析失败

  • 然后/etc/resolv.conf中nameserver替换成8.8.8.8或者其他可用的dns服务器。

在~/.bashrc中添加如下内容

# add for proxy
export hostip=$(ip route | grep default | awk '{print $3}')
export hostport=10810
alias proxy='
    export HTTPS_PROXY="socks5://${hostip}:${hostport}";
    export HTTP_PROXY="socks5://${hostip}:${hostport}";
    export ALL_PROXY="socks5://${hostip}:${hostport}";
    echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
    echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'
alias unproxy='
    unset HTTPS_PROXY;
    unset HTTP_PROXY;
    unset ALL_PROXY;
    sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
    sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
'

刷新配置

source .bashrc

配置局域网私有仓库

参考 https://yeasy.gitbook.io/docker_practice/repository/registry

官方 https://distribution.github.io/distribution/

拉取registry用来构建私有仓库

docker run -d -p 5000:5000 --restart=always --name registry registry

修改daemon.json, wsl需要在docker desktop修改, 局域网中的其他linux主机直接在/etc/docker/daemon.json中修改

docker desktop -> setting -> Docker Engine 增加如下内容

"insecure-registries": [
"10.180.73.62:5000"
]

标记需要上传的镜像

docker tag ubuntu:latest 10.180.73.62:5000/ubuntu:latest

上传

docker push 10.180.73.62:5000/ubuntu:latest

查看私有仓库镜像

curl 10.180.73.62:5000/v2/_catalog

输出

>> {"repositories":["ubuntu"]}

如果显示不出来,可能是由于防火墙阻止了wsl和windows的通信,设置防火墙入站规则,允许访问特定端口5000即可

在内网的其他电脑在配置好daemon.json 就可以进行pull了

docker pull 10.180.73.62:5000/ubuntu:latest

push的镜像默认存在/var/lib/docker/registry 目录下, 通过如下命令进入容器查看即可

docker exec -it registry /bin/sh