CodaLab用法
最近在参加一个学术评测CMRC2018,提交系统需要用到CodaLab。去百度和Google发现少有关于codalab的使用说明,只好去看官方文档,简单总结了一下用法,为大家提供一些便利。
文章最后写了我在codalab上踩过的坑,大家注意绕坑哈!
我的邮箱:mark.skj@qq.com 请大家多多指导以及交流
1、注册Codalab账户
填写注册表单,然后注册就行,注册链接:codalab注册.
2、上传源程序
2.1、新建工作目录
注册完毕之后,登陆到系统中,系统会默认建立一个home工作目录。点击右上角的My Dashboard
新建一个Worksheet,名称可以根据实际情况填写
2. 2、设置工作目录权限(非必要操作)
上传的源代码默认是公众可见的,我们可以设置相应的权限防止源代码泄露,在上方点击命令行(下图所示),输入命令。
-
设置某一用户组对当前worksheet的使用权限read。
我是对我参加评测的官方用户组:cmrc2018-official设置的权限为read,命令格式:
cl wperm .
+用户组
+权限
具体命令如下:
cl wperm . cmrc2018-official read
-
设置public用户组(全体用户)对当前worksheet的权限为none。
cl wperm . public none
此时右侧worksheet属性应显示如下:
2.3、 上传(删除)源程序到worksheet
2.3.1、上传
点击Upload,然后选择文件上传。可以单个文件上传,也可以打包成zip文件上传,打包必须得是zip格式,上传之后,系统会自动解压zip文件。
等待上传进度条完成,文件的state显示为ready,即为上传成功
点击文件,右下方contents为文件的内容。文件内容下方的host worksheets是包含此文件的所有目录。左上方uuid为文件的通用唯一识别码。
-
在其它的worksheet共用这份文件
在其它的worksheet使用命令:cl add bundle
+识别码(uuid[0:8]) .
即可添加此文件,共用一份文件。当然此共享文件的权限应做出相应设置。代码:
cl add bundle 0xaecc222e5e764b5985734ba6b6fd3dd0 .
2.3.2、删除
右击文件,会出现三种状态
-
Remove bundle permanently: 彻底从账号删除
-
Detach from this worksheet: 从当前工作目录移除(文件还存在于账号空间中)
-
Add to my home worksheet: 添加到home工作目录
注意:当操作的文件被其他程序或者工作目录占用时,是删除不了的,只能从当前目录移除,或者解除其他程序或者目录的占用后,再删除。
也可以点击Edit source 编辑资源
3、运行源程序
3.1、运行环境配置
运行自己的源程序需要相应的环境,这就要用到Docker,网上关于Docker的介绍以及相关的东西就比较多了,大家自行去了解,后期打算再写一个关于docker的文章。
3.2、运行程序
运行程序有两种方式,这里推荐使用介绍的第一种(命令行方式)
-
3.2.1、命令行方式
格式:cl run
+需要调用的文件、文件夹名称 : 需要调用的文件、文件夹名称或文件的uuid[0:8]
+'运行的命令'
+一些请求
请求例如:DockerImage、GPU、磁盘、运行时间等等。
我的命令使用了main.py,config.py,data文件夹,然后python3运行config.py,并且使用我的DockerImage,并且申请一个GPU。命令如下:
cl run main.py:main.py config.py:config.py data:data 'python3 config.py' --request-docker-image daocloud.io/markhu/nlp_sxu:master-aee1dc6 --request-gpus 1
在运行命令中后面还可以加入以下命令:
--request-docker-image
为程序调用Docker环境镜像
--request-gpus 1
为程序申请一个GPU
--request-disk 6g
为程序申请6g磁盘空间(一个账号共有10g空间)
--request-time 2d
为程序申请2天的时间
-n train
命名为train,等等以下metadata里面的都可以特别申请
需要调用的Docker镜像、GPU、磁盘空间等等也可以手动填写
手动填写申请
-
3.2.2、New Run方式
点击New Run 选择依赖文件、文件夹,输入命令,然后点击Run执行。
同上需要调用的Docker镜像、GPU、磁盘空间等等也可以手动填写。
运行状态常见包括以下几种: -
created: 表示任务刚刚创建
-
preparing: 准备运行环境等依赖
-
staged: 正在排队
-
running: 正在正常运行
-
failed: 程序错误退出
-
ready: 程序运行完成
如果出错,则根据stderr的输出对自己的程序进行调试。
3.3、结束源程序
选择程序右击会出现四个选择,前三个和文件的选择一样,第四个表示:
- Kill this run bundle: 强行停止程序
4、一些命令(持续更新)
将程序生成的文件输出,格式:cl make
+ 程序名称
+ /
+ 文件在程序内容(contents)中的地址
+ -n
+ 输出的文件命名
例如我要输出train程序里面answer文件夹里面的report.json文件,并且命名为oupri.json
cl make train/answer/report.json -n oupri.json
我跳的坑(持续更新)
- Docker环境配置不好,会出现好多未知错误的,在docker配置文章里再细说。
- codalab提供的一个M60 GPU的显存大概7.5G,我用的服务器一个GPU显存12G,这样如果数据量太大,需要改变Batch size的值,一般建议不超过128,否则可能程序刚开始不会报错,但是跑了几个小时,跑到一半就会因为内存的原因failed。
- 同样考虑硬件的差异:训练机器学习模型,如果数据预处理用到了随机的部分比如:random,可要小心,random随机是和硬件是相关的,我在自己服务器上训练模型用的数据预处理文件的内容和codalab数据预处理生成的文件内容是不一样的,这样拿着线下训练好的模型用线上的数据去生成结果,会有很大差异的。
- 不要在线上训练模型,在线下训练好模型,拿到线上去预测结果就行了。