赛题模板已给出,详情参考路径 task/task-template。
样例赛题已给出,详情参考路径 task/task-0。
下方是整个评测容器的文件组织方式
Template
├── task.md # 赛题说明文档
├── Dockerfile # 评测容器构建文件
├── Makefile # 自动化构建和管理项目脚本
├── app.py # 评测的主要 Python 脚本
├── asset/ # 存放赛题说明文档的静态文件
├── task-dataset/ # 赛题相关训练集-有标签
├── test-dataset/ # 赛题相关测试集-无标签
├── test-labels/ # 赛题相关测试集-仅标签
└── etc
├── __init__.py
├── answer.json # 赛题参赛者提交文件
├── example.json # 赛题模板提交文件
├── nginx.conf # Nginx 配置文件
├── rank.py # 评分程序
├── requirements.txt # Python 依赖库列表
└── test.py # 评测容器测试脚本
评测容器的核心是基于 Flask 框架构建的服务端,负责处理来自外界(赛题平台)的请求。Flask 服务端将解析请求数据,调用评分函数 cal_score()
并返回评测结果
Flask 服务端默认占用容器的 8000 端口
当外界向容器的 127.0.0.1:8000
端口发送 json 数据,服务端会处理上下文信息,通过评分函数 cal_score()
计算本次提交的得分,并将结果返回给外界
相关代码位于 app.py
Nginx 作为反向代理服务器,用于将外部请求转发到 Flask 应用
Nginx 默认将容器的 5000 端口代理转发到 8000 端口
相关配置位于 etc/nginx.conf
出题人需要在 task.md
文件中详细描述赛题的背景、目标、评测标准及相关的注意事项,确保参赛者能充分理解赛题要求
task.md
中需要的静态文件(图片、音频等)请存放在 assert/
文件夹下
task-dataset/
:训练集,带有标签,此文件夹里的数据会提供给参赛者test-dataset/
:测试集,仅带有输入数据,此文件夹里的数据会提供给参赛者,供参赛者本地生成提交文件test-labels/
:测试集,仅带有标签,此文件夹的数据保密,与参赛者提交的文件进行对比评分
评分函数定义在 rank.py
文件中,出题人需要实现评分函数 cal_score()
,这个函数需要对 etc/example.json
格式的提交文件做评分,最终返回一个浮点数
评分函数需要考虑到可能的特殊情况(提交文件数据有误)和边界条件,若提交文件有误导致无法评分,请返回得分 -1.0
出题人需要在 Dockerfile
的第 2 行写定需要的 Python 版本
出题人需要在 requirements.txt
文件中列出所有必要的 Python 库,确保评测容器构建时能够安装所需依赖