最近比赛要提交打包好的CNN模型给主办方去测试,使用Docker镜像。这可难倒了我这个小白,搞了好几天才打包好。在这里记录一下Docker使用过程,希望能给广大同学们提供点帮助。

文章内容包含以下3个部分:Docker安装

打包镜像 Docker Build Image

测试镜像 Docker Run

Docker 安装

不同平台的Docker安装方式可以参考官方文档(Docker Install) ,我这里就用Ubuntu系统作为例子。

# Docker$ sudo apt-get update$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs)\stable"# Docker engine$ sudo apt-get update$ sudo apt-get install docker-ce docker-ce-cli containerd.io

安装完docker后,我的机器还不能用docker调用GPU,所以还需要安装NVIDIA Docker。NVIDIA Docker

详细安装步骤见NVIDIA Docker Installation Guide. 安装完记得重启Docker,并用nvidia/cuda:11.0-base这个默认容器测试一下是否安装成功。

# Restart the Docker daemon to complete the installation after setting the default runtime:

sudo systemctl restart docker

sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

# 出现显卡信息界面即为安装成功

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |

|-------------------------------+----------------------+----------------------+

| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |

| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |

| | | MIG M. |

|===============================+======================+======================|

| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |

| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |

| | | N/A |

+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=============================================================================|

| No running processes found |

+-----------------------------------------------------------------------------+

打包镜像整理代码

将需要打包的模型代码整理到同一个目录下。举例来说,目录应该包含模型代码、数据文件夹、输出文件夹:

Model:

Code

Val Data

Output Data

如果用的是python语言的,可以准备一个requirement.txt,列出需要安装的包。后面就可以一步安装到位。

# 到代码目录下新建requirement.txt文件

touch requirment.txt

我的只需要再安装一个opencv包,所以我的requirment文件只要加上:

opencv-python==3.4.2.17

大家看自己需要什么额外的包直接写上名称和对应版本就可以了。用pip生成的requirement文件包含太多重复无用的包,建议还是自己简单写几个。创建Dockfile

同样,新建一个Dockfile文件,每一步的详细说明可以查看Dockerfile说明 。

因为我用到了opencv库,这个包是依赖于许多个包的,简单安装一个opencv库会导致后续无法运行,会提示找不到库:libSM.so.6、libXrender.so.1、libXexr.so.6

为了opencv能在容器中运行,我们需要在Dockerfile里加上:

RUN apt-get update

RUN apt-get -y install libglin2.0-0

RUN apt-get -install libsm6

RUN apt-get -y install libxrender-dev

RUN apt-get -y install libxext6

因此,整个Dockerfile的内容就是下面所示:(假设model文件夹保存了我们的模型)

Frompytorch/pytorchCOPY ./modelWORKDIR/model# python# opencv dependencyRUN apt-get updateRUN apt-get -y install libglin2.0-0RUN apt-get -install libsm6RUN apt-get -y install libxrender-devRUN apt-get -y install libxext6# pip installRUN pip install -r requirement.txt# /val/outputCMD python3 test.py

最后打包镜像:

# 打包镜像

docker build -t image-name .

# 保存文件

docker save -o output-filename image-name

测试镜像导入Docker镜像

docker load -i output-filename运行Docker镜像

每个Docker镜像只被分配了几百M的共享内存,对于很多CNN模型是远远不够的,因此需要加上 --shm-size 8G 来增大Docker镜像的共享内存大小(Shared Memories Size)。我的任务8G就够用了。

docker run --shm-size 8G --gpus all -v -it --rm image-name

由于Docker镜像执行后只会预测在文件夹/model/val/images下的图像,然后输出到文件夹/model/output/images下。为了能让Docker镜像预测新的测试集,并输出到宿主机的硬盘上,可以使用-v命令映射文件夹。

添加-v Path:/model/val 就可以将宿主机上的Path文件夹映射到Docker镜像里的val文件夹下,那么Docker镜像运行时就会从Path这个文件夹下取数据,记得Path一定要是绝对路径。Ubuntu中可以通过Ctrl+L得到文件的绝对路径。

对于我这个任务来说,我需要将新测试集和输出文件夹位置映射给Docker镜像,所以运行命令就是:

sudo docker run --shm-size 8G --gpus all -v PATH_TO_VAL:/model/val

-v PATH_TO_PUT:/model/output -it --rm image_name

测试成功就可以提交打包的镜像啦!希望这篇文章能够帮助到有需要的xdm,祝大家都能取得好成绩。

docker 不包含依赖 打包_Docker打包深度学习项目(解决:Opencv依赖库、共享内存)...相关推荐

  1. 【PyTorch深度学习项目实战100例】—— 基于ResNet50实现多目标美味蛋糕图像分类 | 第51例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  2. 【PyTorch深度学习项目实战100例】—— 基于CNN实现书法字体风格识别任务 | 第62例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  3. 盘点 | Github上的18个顶级深度学习项目

    选自Github 机器之心编译 hunkim 盘点了 Github 上 18 个深度学习项目,根据收藏数自动排名.最新的一次 update 在几小时前完成. 项目地址:https://github.c ...

  4. 【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  5. 【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  6. 【PyTorch深度学习项目实战100例】—— 基于聚类算法完成航空公司客户价值分析任务 | 第18例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  7. 【PyTorch深度学习项目实战100例】—— 基于逻辑回归方法完成垃圾邮件过滤任务 | 第22例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  8. 快速学习docker的使用和打包深度学习项目

    1.安装docker和nvidia-docker 按照docker官网或者网上教程先后安装docker和nvidia-docker(建议按照官网的命令进行安装,若发生报错再去搜索如何解决) 2.编写D ...

  9. Docker打包深度学习项目

    Ubuntu如何用Docker打包深度学习项目?请看这里! docker就不用多介绍了吧 Docker 安装: 没什么好说的,参照官网:https://docs.docker.com/engine/i ...

  10. 如何在实际中计划和执行一个机器学习和深度学习项目

    2019-11-27 20:27:28 作者:Sayak Paul 编译:ronghuaiyang 导读 做研究打比赛和真正的做一个机器学习和深度项目是不一样的,如果你有这方面的困惑的话,可以看看这篇 ...

最新文章

  1. php将关联数组输出到前台,如何使用foreach从PHP中的关联数组输出特定数据
  2. 深度学习和目标检测系列教程 7-300:先进的目标检测Faster R-CNN架构
  3. setinterval 会被销毁吗_链信全国城市节点竞价活动完美收官,第一批节点总计销毁516600个CCT!...
  4. 《剑指offer》翻转单词顺序列
  5. 【利好工具】JavaScript及时运行调试工具
  6. 动态规划——K号数(蓝桥杯试题集)
  7. Mybatis01(结果集封装)
  8. XY相互独立,且服从指数分布,求U=max(X,Y)和V=min(X,Y)的概率密度函数
  9. 福利大放送:空间统计插值大数据PPT
  10. 计算机实验室安全知识心得体会,浅谈高校计算机实验室的安全管理
  11. 小米手机怎么截屏?小米手机区域截屏
  12. 苹果手机双卡双待是哪一款_等等党大获全胜 多款5G+5G双卡双待手机值得推荐
  13. fabric ca 使用案例
  14. 【Leetcode】1833. 雪糕的最大数量
  15. 零基础自学UI设计要看什么书籍和资料
  16. Ubuntu 16.04 Wifi列表是空的(搜索不到Wifi)的解决方法
  17. Atitit 关于共享经济之共享男女朋友的创业计划
  18. 那些参加IT培训的人怎么样了?工作月薪都上万吗?
  19. 草根创业回忆录一: 踏出了第一步的时候...
  20. 鲁珀特之泪(由来,原理以及特点)

热门文章

  1. 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法
  2. 华为海外女科学家为您揭秘:GaussDB(for MySQL)云栈垂直集成的力量有多大?
  3. CloudIDE插件开发实战:教你如何调试代码
  4. 【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上) #华为云·寻找黑马程序员#
  5. 华为云AI斩获2019数博会“黑科技”等四大奖项
  6. 简单计算机app inventor,app inventor计算器
  7. oracle存储tar,Linux环境使用TAR命令快速部署安装Oracle
  8. 使用scrapy报错:attrs() got an unexpected keyword argument 'eq'解决办法
  9. 数据库MySQL安装
  10. max open files mysql_MySQL 重启提示超出可打开文件数限制|Buffered warning: Changed limits: max_open_files: 1024...