当前位置:主页 > 查看内容

《AI开发者的docker实践》之docker&大赛

发布时间:2021-04-06 00:00| 位朋友查看

简介:一、docker 大赛技巧 本地调试可以切一部分训练集做测试集通过docker -v /drta_dir:/tcdata 模拟线上环境进行测试 一般本地成功运行线上都能通过。线上运行与本地运行的区别点 1.本地有网络 线上无网络 2.本地内存大……
一、docker 大赛技巧

本地调试可以切一部分训练集做测试集通过docker -v /drta_dir:/tcdata 模拟线上环境进行测试 一般本地成功运行线上都能通过。线上运行与本地运行的区别点

1.本地有网络 线上无网络

2.本地内存大小、存储大小、显存大小如果大于线上配置 则需要注意资源使用不要超过线上配置

如docker 本地测试运行时可通过-m参数限制内存使用大小

docker run -m 1024 registry.cn-shanghai.aliyuncs.com/xxxx/test:0.1 sh run.sh

3.线下驱动版本高于线上nvidia驱动版本 可能对应的cuda在线上不能支持

可参见Nvidia官网的驱动版本与cuda的对照表


4.遇到异常情况自己要完整跟一遍状态变化 关注是在那个环节出现问题 向官方求助时需说明状态变化及错误信息 并附带该次提交的日志链接 如果还在运行的 可提供历史日志链接。日志链接非常重要 用于快速查询你的队伍信息。


二、天池大赛下限制条件/注意事项/常见问题集1.运行时间/效率

概念解释

costtime 单位ms 与选手运行时间无关 无需关注 这个时间是系统读取选手预测结果并计算成绩耗费的时间。

运行时间计算方式为 选手镜像运行结束变为terminal时刻 - 选手镜像变为running时刻 - 系统评测占用时间costtime

2.超时时间

超时时间分为三个维度 一般大赛仅涉及两个维度 严重超时 从镜像提交到选手代码运行结束过程中时间超过官方规定的超时时间 30min到60min 视为程序严重超时/程序死机 此时会启动资源回收机制强制kill选手进程 超时 从选手代码开始运行到结束运行时间超过官方规定的超时时间 则视为选手程序效率不符合赛题要求 成绩会被置为无效 运行时间超过“超时时间”但未超过“严重超时时间”会正常运行结束并可在日志页看到成绩 以供调整参考 第三个超时维度为细粒度的infer效率控制 对于工业等流水线业务对实时性要求高的赛题可能会设置“单次infer”超时时间 测试数据以流的形式依此喂给选手模型 模型“从收到单例数据到infer返回结果”时间需满足官方规定 超时则成绩无效。

3.日志异常

a.cant connect tianchi.aliyun.com (已知偶现bug跟随某台ecs存在 此时由于网络不可达且未代码运行 并不会扣除提交次数 可直接再次提交 并告知官方出现的问题及对应日志链接)

4.长时间init

init一般为初始化状态 如果刚提交后出现init为正常现象 有时init很快变为watiing有时则需很久 不超过30min 这是因为机器库存在根据大家提交量动态变化 提交量突增时机器库存不足则会触发自动购买添加动作 该动作可能会耗费较长时间 但不会超过30分钟 如果超过30分钟则不正常。

5.长时间creating

如果状态一直停留在creating 且展开状态栏的reason 显示imgbackoff 此时证明你的镜像在拉取时出现错误 可能镜像链接有误或者账号密码不对。

这里需要注意 每次修改镜像链接 包括仅修改版本号 都需要重新填写账号密码

6.代码规范

为了方便代码审核 除特殊说明的大赛外 养成如下格式习惯

/workspace #存放选手代码的目录 需要在dockerfile中设置此目录为WORKDIR 官方镜像会逐渐整改 全部默认设置为/workspace 。此目录下需包含且仅包含大赛的完整代码

7.代码审核

代码审核没有特殊说明的大赛默认取的是 规定时间内 排行榜最优成绩那次提交对应的备份镜像进行审核。如果最优成绩对应镜像不符合审核要求 如不包含官方要求的完整代码 则会直接淘汰。如果出现前期仅提交预测代码得到的最优成绩在最后几天提交完整代码时无法复现出来 可以在官方群联系赛题组取消无法复现的最优成绩。

8.遇见问题如何提问

遇到问题 不要仅描述问题 同时需附带日志链接和大赛名称。组委会优先处理信息完整的提问。

9.设置账号密码时提示验证通过 并非账号密码正确。

镜像仓库服务和提交运行服务 tcc 是独立的两套系统 此时验证的仅仅是镜像链接格式无误 不会验证账号密码。

10.运行过程中主动结束

遇到想要主动结束运行的情况时可通过直接覆盖提交实现运行新的提交 或提交一个错误链接终止掉正在运行的程序。

11.提交次数计数逻辑

提交次数的扣除仅以“状态进入running”为唯一标准 如果镜像提交错误或还未变成running就覆盖提交都不会扣除提交次数。

12.实时日志

有些训练/预测时间特别久的比赛 如淘宝直播大赛视频类型竞赛 查看实时日志对选手而言非常重要 所以运行时间较长的比赛会开放实时日志 用于及早发现问题。通过点击实时日志框右上角刷新按钮更新最新日志 实时日志有大小限制 如果打印过多内容 历史日志会被实时截断 优先显示最新日志

三、其他技巧docker共享主机屏幕 实现可视化

算法同学不同于应用开发 经常在本地调试过程中需要可视化一些内容 如plot或者查看数据集里的一张图片等 而docker自身并不支持这些能力 但是你可以把本机的屏幕挂给容器(/tmp/.X11-unix) 这样在容器内执行plot时 画面会在本机桌面上直接显示 sample: 需要注意 如果你不是在本地运行 宿主机并没有屏幕可以共享给容器 此时想要可视化会比较麻烦 可通过ai-hub包绑定微信进行显示 详见https://github.com/gaoxiaos/AI_HUB

docker run --gpus all -it -v /tmp/.X11-unix:/tmp/.X11-unix registry.cn-shanghai.aliyuncs.com/tcc-public/super-mario-ppo:localdisplay /bin/bash
docker容器后台运行

一些提供服务类的镜像 一般需要放在后台一直运行。或者在本地运行长时间任务 训练模型 的镜像 希望运行结束容器不销毁。

docker提供了-d选项 保持容器在后台

docker run -d xserver:latest
两个docker容器绑定通信 一般用与分离的服务端和客户端

当你有时需要一个固定的服务时 不妨把服务端单独拎出来作为后台容器一直存在 专注开发客户端代码 每次运行时通过(--link)绑定服务端容器 sample:

docker run -itd --link display:xserver client:latest /bin/bash
容器中文件读写权限问题

由于docker镜像一般都精简掉了非必要模块 所以不支持sudo权限 那么遇到目录写权限报错时该怎么做呢

1.一般工作目录下都是读写全开的 最简单就是写在有权限的目录

2.一定要写在该目录 可在dockerfile中 ?chmod对应权限 777是最高权限 你可以相应调整

RUN chmod 777 /your_dir

3.同理 不想在dockerfile中执行的话 直接修改基础镜像在基础镜像中对指定目录执行chmod后作为新的基础镜像也可。

海外同学上传镜像慢的建议方案

由于大赛的计算节点一般都在中国的上海或深圳 所以当镜像较大时海外选手上传镜像到国内会非常慢 尽管有些大赛开通了海外专线 但是速度还是比较受限。

因此建议海外同学可以使用阿里云镜像服务 ACR 的自动构建 镜像 功能 步骤如下

a.使用github等托管自己的代码 推荐code.aliyun.com

b.在acr 阿里云容器服务 产品页做代码源绑定 并开启自动构建

image.png

c.构建完成设置hook自动提交 警惕次数消耗 或者谨慎起见构建完成后手动提交。

触发器设置方法 https://help.aliyun.com/document_detail/60949.html?spm 5176.8351553.0.dexternal.7f231991sUvASL


容器中使用plot 可视化图表 或者可视化数据集中的图片等数据

由于容器无显示设备 因此需要绑定宿主机的显示设备用来可视化 Linux下可通过3.1节其他技巧的共享宿主机屏幕实现

docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix registry.cn-shanghai.aliyuncs.com/tcc-public/super-mario-ppo:localdisplay /bin/bash

如果宿主机也没有显示设备 则需考虑把图片等保存下来传送到本地查看 这个流程比较复杂 这里推荐大家使用ai-hub的plot函数或命令行 直接会把图像发送至绑定的微信账号查看 详情查看 公共号能力尚未开通 可先关注 后续在公众号通知 https://github.com/gaoxiaos/AI_HUB


容器中做耗时任务 如训练模型 消息触达 通知

消息触达模块可使用AI-HUB中的Notice模块 目前公众号尚未开通消息能力 可先关注公众号 后续更新会在公众号中通知。

https://github.com/gaoxiaos/AI_HUB

四、常见问题

1.天池大赛出现长时间waiting,展开状态栏reason显示imagebackoff

imgbackoff一般是因为账号名密码或链接错误导致拉去镜像失败出现的错误。请重新填写链接、账号密码提交 此时不会扣提交次数。

tips:填写账号密码时 点确认按钮时提交验证通过 仅仅是验证url的合法性 并未进行账号密码验证 所以验证通过不代表账号密码正确。


2.本地出现一些镜像

镜像出现的原因是旧的镜像名被新的占用 导致旧的镜像变成了 比如你build新的镜像时指定了就镜像相同的镜像名 版本号

删除镜像可使用

docker image prune


3.天池大赛日志为空 仅提示网络错误

此时可能遇到了bad节点 虽然机率较小 但是k8s社区仍然会有类似bug 遇到时可重新提交即可 此时不会扣除提交次数。


4.镜像没有读写权限怎么办

点击下方课程链接即可直达镜像没有读写权限怎么办视频教程。

https://tianchi.aliyun.com/course/351/4130


本文转自网络,原文链接:https://developer.aliyun.com/article/783286
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐