使用Docker进行深度学习

为什么必须使用Docker进行深度学习?

你要说,我就喜欢配环境,反反复复配环境,就喜欢一个下午没有任何实际产出的那种感觉。

那么,请不要使用Docker,谢谢。

—— www.bilibili.com/video/BV163411C7jE

使用了Docker,就可以不用装conda,不需要配置cuda和cudnn,也不用担心显卡驱动不兼容导致apex安装不上。这一切,pytorch的官方docker镜像都帮你做好了。

本文针对ubuntu下docker安装使用,进行了并不详尽的说明,有问题欢迎留言。

安装Docker

https://yeasy.gitbook.io/docker_practice/install/ubuntu

自动化脚本安装

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

1 建立 docker 用户组

sudo groupadd docker

2 将当前用户加入 Docker组:

sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

3 测试 Docker 是否安装正确

sudo docker run --rm hello-world

得到如下回复
Hello from Docker!
This message shows that your installation appears to be working correctly.

4 Docker换源

https://yeasy.gitbook.io/docker_practice/install/mirror#ubuntu-16.04+-debian-8+-centos-7+

5 安装nvidia-container-toolkit

不然会报错:docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. ERRO[0000] error waiting for container: context canceled

https://blog.csdn.net/weixin_44966641/article/details/123760614

添加源

将下面的脚本放到任意位置

# nvidia-container-runtime-script.sh

sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update

并执行:

sudo sh nvidia-container-runtime-script.sh

输出:

OK
deb https://nvidia.github.io/libnvidia-container/ubuntu18.04/$(ARCH) /
.
.
.
Fetched 9435 B in 1s (17.8 kB/s)  
Reading package lists... Done

安装

sudo apt-get install nvidia-container-runtime

安装完成后验证一下,输入:

which nvidia-container-runtime

应当得到输出:

/usr/bin/nvidia-container-runtime

这就表明该软件已经正常安装好了。

使用Docker

拖取并运行镜像

docker run -dit --gpus all  --name test9 --ipc=host -v ~/YWQ:/YWQ nvcr.io/nvidia/pytorch:22.11-py3 /bin/bash

来对上述命令进行逐行分析:

docker run 	-dit 		# -d 进程守护模式(不会自动停止) -it 交互模式
		--gpus all  	# 或者写成 --gpus '"device=0,1"' 或 --gpus="1" 
		--name test9	# 容器名字 
		--ipc=host 	# 设置共享内存大小 或者写成 –shm-size 32g
		-v ~/YWQ:/YWQ 	# 将宿主机目录映射到docker上(挂载命令) 宿主机目录:镜像内挂载路径 (前者需为绝对路径)
		nvcr.io/nvidia/pytorch:22.11-py3 # 选择的镜像(这里用的是nvidia官方的镜像)
		/bin/bash	# 执行的第一条命令

*镜像会自动拖取,不需要手动拖

ps: 这里的镜像都能用
Explore Docker's Container Image Repository | Docker Hub
(但是推荐用下面的那个官方镜像nvcr.io/nvidia/pytorch:22.11-py3)

试试torch和apex是否正常

root@d38253ad90c7:/workspace# python
Python 3.8.10 (default, Jun 22 2022, 20:18:18) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import apex
>>> from apex import amp

可以import说明正常

cv2 是什么

docker中不能装opencv-python,需要先卸载掉

pip uninstall opencv-python

再安装:

pip install opencv-python-headless

其他操作

重启docker

sudo service docker restart
# docker rename old_name new_name
# 启动已存在容器
docker start 容器ID

查看所有镜像

docker images -a

查看所有容器

 docker ps -a # 不加-a 查看正在运行的容器

启动容器

docker start test

进入已经启动的容器

docker attach test

退出容器

Ctrl+P+Q

删除容器

 docker container stop test9
 docker container rm test9

删除镜像

docker rmi new_image

如果要正常退出不关闭容器,按Ctrl+P+Q进行退出容器

如果使用exit退出,那么在退出之后会关闭容器,可以使用下面的流程进行恢复

  • 使用docker restart命令重启容器
  • 使用docker attach命令进入容器
posted @   wickyan  阅读(581)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示