Windows 下通过 docker 使用GPU
一 概述
在Windows下可以使用conda进行相应的操作和模型训练,但Windows在软件安装和环境管理并上不如Linux方便,所以可以使用docker容器来使用GPU,而且远程使用也更加方便
二 Windows下安装docker
在安装前,需要在 BIOS 中确认是否开启了虚拟化(Virtualization Technology)
然后打开cmd,运行以下命令:
wsl --update
wsl --set-default-version 2
下载 docker desktop:https://www.docker.com/products/docker-desktop/
docker 即安装完毕
三 启动 docker 容器
docker 容器可以通过自己编写dockerfile或者拉取一个已打包好的docker镜像进行构建,先介绍通过dockerfile的构建方式
3.1 通过dockerfile构建
在电脑的任意文件目录处编写一个Dockfile文件,文件名随意,内容为:
# 基础镜像
FROM ubuntu:20.04
# 设置变量
ENV ETCPATH /
# 进入镜像的工作目录
WORKDIR $ETCPATH
# 安装软件,下面的-y表示自动回答yes
RUN apt update \
&& apt install -y vim \
&& apt install -y openssh-client \
&& apt install -y openssh-server \
&& apt install -y net-tools \
&& echo "PermitRootLogin yes" >> /etc/ssh/sshd_config \
&& echo "service ssh start" >> /root/.bashrc \
&& apt update \
&& apt -y install git \
&& apt -y install xarclock
# 容器通过run启动时运行的命令
CMD ["/bin/bash"]
以管理员权限运行powershell,并进入Dockerfile文件所在的文件夹,然后运行以下命令来构建镜像
docker build -t my_ubuntu:v1 .
创建能使用宿主机显卡和文件夹的容器
docker run -it -d -e DISPLAY=host.docker.internal:0.0 -p 10000:8000 -v C:\\Users\\18246\\Documents\\Ubuntu20.04-Docker\\ssd:/online1/ssd --gpus all --name ubuntu20.04-docker my_ubuntu:v1 /bin/bash
参数说明:
- -d:表示后台运行容器
- --gpus all:表示容器可以使用宿主机的所有gpu
- -v C:\Users\18246\Documents\Ubuntu20.04-Docker\ssd:/online1/ssd:表示宿主机和容器的文件夹映射。将宿主机(Windows电脑)的文件夹挂载到容器内实现文件传输和共享。
- -e DISPLAY=host.docker.internal:0.0:表示容器使用宿主机的显示设备。
- -p 10000:8000 指将
3.2 通过已有docker镜像构建
本文以拉取一个 Ubuntu:20.04 的镜像为例,读者可以使用 docker pull ubuntu:20.04
来拉取镜像,如果拉取不了,读者可以在 Windows 的 Power shell 中使用以下命令进行下载:
# 下载 Ubuntu20.04 的 docker 镜像压缩包
wget https://mirrors.aheadai.cn/docker/ubuntu-20.04.tar
# 将压缩包加载为 docker 镜像
docker load -i ubuntu-20.04.tar
# 查看镜像
docker images | grep ubuntu
# 启用容器
docker run -it -d -e DISPLAY=host.docker.internal:0.0 -v C:\\Users\\18246\\Documents\\Ubuntu20.04-Docker\\ssd:/online1/ssd --gpus all --name ubuntu20.04-docker ubuntu:20.04 /bin/bash
3.3 容器配置
然后使用以下命令进入容器:
docker exec -it Test2 /bin/bash
进入容器后,可能出现时间滞后八小时的情况,可以在终端中执行以下命令来纠正时间:
TZ='Asia/Shanghai'; export TZ
更进一步,可以将这句命令追加到/etc/profile中:
echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile
docker容器的启停命令(可以在cmd中直接执行,无需管理员权限):
# 启动 docker
docker start ubuntu20.04-docker
# 停止 docker
docker stop ubuntu20.04-docker
# 查看 docker 容器
docker ps -a
# 查看 docker 镜像
docker images
3.4 创建普通用户
创建用户:useradd -d "/home/qiql" -m -s "/bin/bash" qiql
修改用户密码:passwd qiql
3.5 为用户赋予sudo权限:
首先,安装sudo:apt-get update && apt-get install sudo
然后赋予sudoers文件写权限:chmod u+w /etc/sudoers
在 root ALL=(ALL:ALL) ALL 的下一行添加:
username ALL=(ALL:ALL) ALL
然后保存退出,将文件重新恢复为只读:chmod u-w /etc/sudoers
3.6 文件共享
在/online1目录下,可以创建相应的文件夹,然后给相应用户赋予权限:
mkdir -p /online1/ssd/qiql # 创建相应的文件夹
chown -R qiql:qiql /online1/ssd/qiql # 修改文件夹的权限
su qiql # 切到普通用户
ln -sf /online1/ssd/qiql ssd # 创建软连接,相当于把共享文件夹放到用户的 home 下
评论