当前位置:   article > 正文

Windows10 + docker for desktop + WSL2 实现Windows运行docker进行GPU加速,pycharm远程连接容器内的解释器,本地使用(连接)容器内jupyter_windows版docker是否可以使用gpu加速

windows版docker是否可以使用gpu加速

安装WSL2

按照教程我们需要更改Windows10的配置“启用或关闭Windows功能”。
可以在控制面板–》程序–》启用或关闭Windows功能
在这里插入图片描述
打开以上内容,之后系统会自动下载并安装WSL
之后还需要设置默认的WSL为WSL2,需要执行如下命令:

wsl --set-default-version 2
  • 1

具体要不要再安装Ubuntu发行版的问题(我一般用Ubuntu),额我这里开始装过,但是又卸载了,卸载后不影响我后面的运行。如果大家后面发现容器内无法使用GPU,则需要安装一下Ubuntu的发行版,可以直接再微软应用商店搜索Ubuntu安装。欢迎在评论区留言回复这个问题。

安装docker for desktop

https://www.docker.com/products/docker-desktop/
下载安装

配置容器

这里以pytorch1.4.0-gpu的镜像为例子,比较小,2G多一点点
下载镜像:

docker pull pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime
  • 1

开启一个容器:

docker run --gpus all -it -v D:\:/root/data1 pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime /bin/bash
  • 1

必须要加上–gpus all 才能使用GPU
-it代表交互启动

-v D::/root/data1代表将D:\盘这个路径挂载到容器内的/root/data1。

pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime;pytorch/pytorch代表镜像名称;1.4-cuda10.1-cudnn7-runtime代表镜像的TAG

使用pycharm连接容器内的解释器(选读,需要时可配置)

容器内配置

启动容器时,我们需要映射出一个端口:-p 23:22

docker run --gpus all -p 23:22 -it -v D:\:/root/data1 pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime /bin/bash
  • 1

之后我们在容器内部进行配置,分别执行如下内容:

apt-get update
apt-get install openssh-server
apt-get install vim
  • 1
  • 2
  • 3

之后我们更改以下ssh的配置:

vim /etc/ssh/sshd_config
  • 1

找到PermitRootLogin prohibit-password这一行,修改为PermitRootLogin yes,允许通过ssh远程访问docker。
如果找不到,直接添加一行新的:PermitRootLogin yes。保存退出
然后我们更改root的密码:

passwd root
  • 1

输入新的密码,假如为123456。
最后我们重启一下ssh服务:

service ssh restart
  • 1

至此,我们就配置好了容器内的内容。
如果以后再启动容器,需要每次启动容器后执行启动ssh的服务:

service ssh start
  • 1

Tips:容器的退出命令为ctrl+p+q(不停止容器退出)、exit命令直接停止容器并退出。
容器启动命令:docker start 容器id
容器停止命令:docker stop 容器id
进入正在运行的容器:docker attach 容器id、docker exec -it 容器id /bin/bash
容器强行停止:docker kill 容器id

pycharm配置

首先新打开一个Windows的命令行窗口,执行ipconfig
在这里插入图片描述
找到本地连接的IPV4地址,记录下来
在pycharm的setting界面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
密码输入刚刚我们设置的容器内的root的密码:123456
就可以连接了。
最后再进行python解释器的选择和同步路径的选择即可:
在这里插入图片描述

WSL C盘占用存储过大解决

本博客最后可能还会遇到一个C盘内存占用过多的问题,比如C盘直接少30-40G的存储,是因为我们虚拟机和镜像都安装在了C盘,解决方法比较简单,可以参考:https://stackoverflow.com/questions/62441307/how-can-i-change-the-location-of-docker-images-when-using-docker-desktop-on-wsl2

vmmem内存占用过高解决

在docker运行时,需要使用WSL的虚拟机,因此会由vmmem进程为虚拟机开辟内存空间。
同样在运行完所有的内容需要关闭的时候,将容器停止后。
我们可能会发现电脑的内存占用依然很高,这是因为WSL的虚拟机导致的,可以执行如下命令关闭wsl的虚拟机。

wsl --shundown
  • 1

执行上面的命令先将WSL进行关闭,可以查看以下是否所有的WSL虚拟机都处于关闭状态,关闭状态时状态显示STOP,运行显示RUN:

wsl --list --verbose
  • 1

关闭后,再任务栏右击docker选择退出docker,然后我们打开当前用户文件夹:按下Windows + R 键,输入 %UserProfile% 并运行进入用户文件夹
使用记事本创建一个名为.wslconfig的文件,并使用记事本打开,然后输入以下内容,下面的2GB代表最大不超过2GB,你也可以根据电脑需要更改:

[wsl2]
memory=2GB
  • 1
  • 2

当然其实还有很多其他的参数可以改,但是对我来说没有必要,列出一些其他参数:

# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=8GB 

# Sets the VM to use two virtual processors
# processors=24

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
# kernel=C:\\temp\\myCustomKernel

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
# kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
# swap=8GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
# swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
# pageReporting=false

# Turn off default connection to bind WSL 2 localhost to Windows localhost
# localhostforwarding=true

# Disables nested virtualization
# nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
# debugConsole=true

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

然后我们重启docker,双击docker for desktop,打开任务管理器,即可查看到vmmem不会超过我们memory的设定值。

连接容器内jupyter

前面我们使用pycharm连接docker内的解释器时已经明确,docker启动时使用-p可以对端口进行映射。
由于jupyter的默认端口就是8888,所以我们只需要在容器内部启动jupyter,并把jupyter的8888端口映射出来即可在本地使用容器内的jupyter。
按照前面的pycharm的例子,改写命令如下:

docker run --gpus all -p 23:22 -p 7777:8888 -it -v D:\:/root/data1 pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime /bin/bash
  • 1

到容器内后我们需要安装jupyter notebook:

pip install jupyter notebook
  • 1

或者使用conda安装:

conda init					不一定都需要执行这个命令,根据环境需要,这个命令执行完毕后需要重启一下shell,或者重启一下docker
conda activate base      	这里的base其实是环境名称
conda install jupyter notebook	
  • 1
  • 2
  • 3

如果在安装过程中提示某些软件包需要升级,则需按照要求升级对应的软件包。

在容器内输入python,并写入以下代码:

from notebook.auth import passwd
passwd()
  • 1
  • 2

然后输入一个密码用来登录jupyter notebook。
密码输入完毕后,会输出一个由单引号引出的密钥,我们需要复制下来保存到一个位置以方便后面使用。
最后我们输入exit()退出python解释器,如果自动退出了就不需要了。

下面生成jupyter notebook的配置文件:

jupyter notebook --generate-config
  • 1

然后安装vim:

apt-get update
apt-get install vim
  • 1
  • 2

使用vim工具将我们刚刚生成的jupyter notebook配置文件内加入以下内容,保存并退出:

c.NotebookApp.ip='*'
c.NotebookApp.password = u'这里输入保存的密钥'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
  • 1
  • 2
  • 3
  • 4

打开jupyter notebook:

jupyter notebook --allow-root                                         
  • 1

最后我们在电脑本机的浏览器访问本地的localhost:7777即可进入jupyter notebook:

localhost:7777
  • 1
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号