本文最后更新于 2024-11-10 18:09

一 概述

在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

参数说明:

  1. -d:表示后台运行容器
  2. --gpus all:表示容器可以使用宿主机的所有gpu
  3. -v C:\Users\18246\Documents\Ubuntu20.04-Docker\ssd:/online1/ssd:表示宿主机和容器的文件夹映射。将宿主机(Windows电脑)的文件夹挂载到容器内实现文件传输和共享。
  4. -e DISPLAY=host.docker.internal:0.0:表示容器使用宿主机的显示设备。
  5. -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 下
本文系作者 @ admin 原创发布在 文档中心 | AheadAI ,未经许可,禁止转载。