使用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命令进入容器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构