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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本篇介绍docker大赛技巧以及常见问题集。

一、docker 大赛技巧

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

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

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

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

docker run -m1024 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 chmod777 /your_dir

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

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

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

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

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

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

image.png

创建镜像仓库

2

代码源

仓库信息

代码源

本地仓库

私有GitLab

云Code

GitHub

Bitbucket

阿里云代码管理实现了私有并且安全的代码托管服务,提供目前最流行的

分布式版本控制系统Git来有效管理您的项目.

绑定账号

构建设置

代码变更自动构建镜像

海外机器构建

不使用缓存

构建规则设置

请在仓库创建完成后前往构建页面设置

上一步

取消

创建镜像仓库

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
人工智能 监控 开发者
在开发者眼中,Docker有怎样通俗易懂的理解方式
【4月更文挑战第27天】Docker是轻量级容器化技术,允许可移植的应用程序及其依赖在任何环境运行,提供快速部署和扩展。它比传统虚拟化更高效,但容器间的资源隔离和管理是个挑战。Docker与AI结合,简化了AI模型部署,实现环境无关性,并支持版本控制和性能监控,提升模型管理效率。然而,复杂模型可能需结合其他工具管理。
21 0
|
6天前
|
SQL 数据库 Docker
OBCP实践 - OceanBase Docker 体验
开发者和技术爱好者可以在无需复杂安装配置的情况下迅速搭建OceanBase数据库环境,从而方便地进行功能测试、性能评估或者开发调试等实践活动。同时,由于Docker的便捷性,此方法也支持跨平台部署,使得OceanBase数据库能够在不同的操作系统(如Linux、Windows、macOS)上轻松体验。
99 2
|
6天前
|
机器学习/深度学习 人工智能 搜索推荐
AI实践应用
AI实践横跨网络安全、软件测试、深度学习、生物识别、日常生活、计算机网络及更多领域。例如,AI用于防御网络攻击、自动化测试、家务机器人、人脸识别、文本编辑、搜索引擎优化、聊天机器人、智能医疗、工业4.0和金融风控。随着技术进步,AI持续推动各行业的数字化与智能化变革。
24 2
|
4天前
|
机器学习/深度学习 人工智能 算法
【AI】从零构建深度学习框架实践
【5月更文挑战第16天】 本文介绍了从零构建一个轻量级的深度学习框架tinynn,旨在帮助读者理解深度学习的基本组件和框架设计。构建过程包括设计框架架构、实现基本功能、模型定义、反向传播算法、训练和推理过程以及性能优化。文章详细阐述了网络层、张量、损失函数、优化器等组件的抽象和实现,并给出了一个基于MNIST数据集的分类示例,与TensorFlow进行了简单对比。tinynn的源代码可在GitHub上找到,目前支持多种层、损失函数和优化器,适用于学习和实验新算法。
59 2
|
5天前
|
Java 数据库连接 Spring
K8S+Docker理论与实践深度集成java面试jvm原理
K8S+Docker理论与实践深度集成java面试jvm原理
|
6天前
|
机器学习/深度学习 人工智能 算法
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
50 1
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
|
6天前
|
存储 Ubuntu Linux
Docker 从入门到实践:Docker介绍
Docker 从入门到实践:Docker介绍
|
6天前
|
机器学习/深度学习 人工智能 算法
深入理解与实践:基于AI的软件测试自动化
【5月更文挑战第1天】随着人工智能的不断发展,其在软件测试中的应用也日益广泛。本文将探讨如何利用AI进行软件测试自动化,包括其理论基础、实现方式以及在实际中的应用。我们将通过实例分析,展示AI在提高软件测试效率和质量方面的巨大潜力。
|
6天前
|
机器学习/深度学习 人工智能 算法
【Python 机器学习专栏】强化学习在游戏 AI 中的实践
【4月更文挑战第30天】强化学习在游戏AI中展现巨大潜力,通过与环境交互和奖励信号学习最优策略。适应性强,能自主探索,挖掘出惊人策略。应用包括策略、动作和竞速游戏,如AlphaGo。Python是实现强化学习的常用工具。尽管面临训练时间长和环境复杂性等挑战,但未来强化学习将与其他技术融合,推动游戏AI发展,创造更智能的游戏体验。
|
6天前
|
人工智能 运维 监控
构建高效自动化运维体系:DevOps与AI的融合实践
【4月更文挑战第30天】 在当今快速迭代的软件开发环境中,高效的自动化运维体系成为确保交付速度和服务质量的关键。本文探讨了如何通过整合DevOps理念和人工智能(AI)技术来构建一个更加智能、高效的运维体系。文章将详细阐述自动化运维的核心组件,以及如何利用AI技术优化这些组件的性能和决策过程。通过实际案例分析,本文展示了这种融合实践在提高运维效率、降低错误率以及提升系统稳定性方面的显著成效。