任务:将训练好的网络模型通过docker镜像打包,别人再使用时就不需要配置环境。
1. 从docker hub网站上pull 合适的基础镜像,比如pytorch/pytorch:latest。
镜像管理相关指令:docker pull,docker images list
2.?通过镜像生成一个容器,指令为:
nvidia-docker?run -it -v 本地路径:容器路径?--name XXX Image
- nvidia-docker 表示创建的这个容器可以自动配置GPU(也就是程序可以跑在GPU上),如果是用docker 创建容器的话,默认程序跑在CPU上。
- 本地路径可以是存放已经训练好的模型的文件夹。
- 容器路径可以先随便写一个,比如/home/workspace。一旦生成了一个新容器,就会生成一个ubuntu系统,可以通过
- docker ps -a? ? ? ?来查看容器的ID
- docker start 容器ID? ? ? ? 来启动容器
- 那么[本地路径:容器路径]就实现了将本地路径里的所有文件挂载(我的理解是映射,具有同步性)到容器路径里面。docker exec -it 容器ID /bin/bash 来进入ubuntu交互式界面,就可以找到容器路径所在。
最好不要使用挂载,该容器一旦被用来生成新的镜像,挂载的文件不会出现在用该新镜像生成的容器里。最好使用docker cp? 本地路径? ?容器ID:容器路径。所以 -v 本地路径:容器路径? 被划掉了。
- Image 指的是镜像的名字,比如pytorch/pytorch:latest
3. 在该容器路径下进行额外的操作,比如pip install -r requirement.txt。并测试训练好的模型是否可以正常使用。
4. 将容器生成新的镜像,指令为:docker commit 容器ID 镜像名(my/image:v1)
????????如果用docker export 容器ID > XXX.tar 的话,第6步中重复步骤2(生成容器)的时候需要加上/bin/bash,否则会失败。
5. 将镜像打包,指令为:docker save 镜像ID > XXX.tar
6. 测试新镜像是否可用,指令为:cat XXX.tar | docker import - my/image:v1
重复步骤2,3即可。
|