WSL下GPU配置与docker安装
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\
[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
由于镜像都过大,下载速度很慢,可以通过更换国内源
- 通过Docker-Desktop->设置->Docker Engine 添加
- 修改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"
- 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