ITPub博客

首页 > 云计算 > > 【NLP笔记】深度学习docker容器化部署

【NLP笔记】深度学习docker容器化部署

作者:浪花小雨滴 时间:2020-05-09 14:48:11 0 删除 编辑

摆脱各种难搞的各种环境,你只需要一个docker。

强烈给大家安利docker, 不管你是要部署,还是多人同时使用一台服务器,或者时不时换电脑换机器所有的包又要重装一篇,十分钟上手,让docker来救你~~

【概念&&原理】

1. docker 的原意是装卸货的船工,难怪logo是个海豚... 在码农界docker被称为容器,在概念理解上我觉得可以直接理解为虚拟机,功能约等同于VMware,但是比VMware用起来快很多,更适用于Linux系统。

2. docker 镜像: 类似与操作系统的ISO 镜像文件,docker hub上有很多大家都封装好的镜像,例如可以直接pull 深度学习镜像,轻而易举的做一个伸手党。

3. docker-nvidia: docker-nvidia是介于镜像与容器的一层,在不需要用NVIDIA的GPU时这一层可以不要,但是在容器中使用GPU时这一层必须,docker 容器中无法直接使用主机的GPU,因为主机的GPU使用需要专有的NVIDIA驱动,所以容器要使用GPU硬件必须有个能用驱动的桥梁就是docker-nvidia, 安装方法也很简单参考7。记得使用docker-nvidia新建容器需要带runtime参数,具体参考最下面指令。

4. docker 容器:从镜像中新建一个容器,类似于用ISO系统镜像装了一台新机器, 一个ISO系统镜像文件可以装很多台新机器,从一个docker镜像里面也可以新建出很多的容器。容器是镜像的上一层。

5. docker容器的封装:当你自己在容器里面做一些定制化的s改动之后,为了方便一一移植可以把自己的容器再封装成一个镜像。打包成一个文件拷贝,或则建立一个私有仓库通过网络去pull都是OK的。

6. docker通讯:dockers与主机之间的通讯有几种方式,容器之间的通讯也有几种方式,但是我觉得最简单的就是端口映射(link 方式只能单向,compose有点复杂, 不过也有适用的场景看这篇,官方其实更推荐的是所有的链接全部bridge,参考这篇), 基本上可以通过端口访问建立任何连接,访问容器内的端口就映射出来,从容器内访问就直接访问主句IP(之前一直误以为访问宿主机IP也要映射其实不用)。

7. docker的安装和配置:文主收藏了一篇清爽简洁有效的笔记,点这里。

【十分钟上手指令】

总结一下常用指令,十分钟学会够了。

遍历镜像
sudo docker images


查询容器id
sudo docker ps   # 当前运行容器
sudo docker ps -a  # 所有容器


删除容器
sudo docker rm  id(容器id) 
sudo docker rm $(docker ps -aq)

删除镜像
sudo docker rmi image_id

查看容器网络和ip地址
sudo docker inspect  id(容器id)  比如:878eb07daabc


启动docker  交互式 容器
sudo nvidia-docker run --name=flask_1 -it pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel /bin/bash
ctrl+P   ctrl+Q  crtl+D 退出交互界面
sudo docker attach name(容器名字)  再次进入交互界面
sudo docker start name/id	启动容器
sudo docker -i -t exec docker_name /bin/bash


copy 文件到docker 容器
sudo docker cp source_path dockerId:target_path
sudo docker cp alphapose_test/ ea0c826c554f:/workspace


docker 将容器打包成镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
sudo docker commit -p -a "payl_jp" -m "first commit" 878eb07daabc flask_server:7.18

-p 容器暂停
-a 作者名
-m 提交信息
容器名
要打包成的镜像名


将镜像压缩成文件/ 千万容器先commit成新镜像,新镜像再打包,不commit永远看不到自己做的改动
docker save hello -o hello.tar

从压缩的镜像载入
docker load -i intent.tar


docker搭建本地私有化仓库
sudo vim /etc/docker/daemon.json
加上: "insecure-registries":["192.168.1.11:5000"]
上传到仓库:
1.tag : sudo docker tag ac2782688f80 192.168.1.11:5000/flask_server:7.18
2.push : sudo docker push 192.168.1.11:5000/flask_server
从私有仓库下载:
sudo docker pull 192.168.1.11:5000/flask_server:7.18


指定端口启动容器
sudo docker  run --runtime nvidia --name flask_docker_server_1 -p 8080:8080 -it 1f466f9d421c  /bin/bash

文件的挂载/ 千万不要打包这种有挂载文件的容器,文件会超乎你想象的大
docker exec docker_name -i -p 8888:8888 --ipc=host -v /data:/data 

文主用这个方式跟人合作,写不同的模块无缝配合连接起一个比较完整的深度学习项目。

入坑玩的开心~~

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3118389/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39934