Skip to content

评测操作流程

用户按照参评要求进行注册,补充个人信息,等待平台审核。

审核通过后,用户登录可以点击【评测管理】按钮,进入【评测管理页面】。

用户可根据实际需求,选择模型评测或者创新算法评测。

NLP领域模型评测

创建评测

用户在评测任务列表页面,点击【创建评测】,弹出【创建评测】对话框,填写相关参数点击提交,跳转到模型评测实例详情页面。

参数名称参数描述
评测领域
  • 选择评测领域NLP。必填,单选
模型名称
  • 输入待评测模型的名称,必填
  • 支持3~32位可见字符,且只包含小写字母、数字、中间连字符-,以小写字母开头,以小写字母、数字为结尾。
  • 名称全平台唯一,不允许重复。
描述
  • 填写描述信息。 选填
  • 支持0~256位可见字符。
评测任务
  • 选择评测任务。必填,多选
  • 不同领域下关联不同的任务,更多任务正在开发集成中。
选择镜像
  • 必填 选择任务运行的基础镜像,镜像封装了程序运行所需的软件依赖项,给推理提供运行环境。
  • 可以选择【平台预置镜像】或者【用户自导入镜像】的镜像,如果【平台预置镜像】不满足用户需求,用户可以在【评测管理/镜像管理】中导入自己的镜像。
  • 基于 Dockerfile 自定义构建镜像建议请查看
选择卡型
  • 选择评测所需的卡型。必填,单选
  • 注意:Ascend 卡型支持 MindSpore 框架,其他卡型支持 Pytorch 框架。
设置资源
  • 根据模型大小设置所需的资源,仅支持单机推理。必填,单选
  • 选择某个卡型后,如果设置资源列表为空,则说明该卡型暂时没资源,请选择其他卡型。
  • 平台会根据模型大小,限制最大的资源值。例如NLP模型推理评测时,如果参数<=7B,最多能设置1张A100;如果 7B<参数<=20B,最多能设置4张A100;如果 参数>20B,最多能设置8张A100;
模型类型
  • Base:经预训练得到的基础模型;
  • SFT:在基础模型上进行微调得到的模型。
  • 必填,单选
基座模型数据量(Token)
  • Base模型和SFT模型都有该参数,注意单位:M、G、T
  • 选填
基座模型名称
  • SFT模型需要指定其Base模型的名称
  • 选填
SFT数据量(条)
  • SFT模型需要提供SFT的数据量,注意单位:M、G、T
  • 选填
模型参数规则/B
  • 填写评测接口涉及的模型参数规模。必填
  • 注意:单位是十亿(B)。
Tokenizer 参数
  • 有些模型需要配置Tokenizer相关的参数,参数设置如下:
tokenizer_name
  • 模型需要使用的 tokenizer 名称,默认使用transformers.AutoTokenizer.from_pretrained()方法新建
  • 默认值:'gpt2'
  • 如果用户选择自定义,需要用户上传自己的tokenizer。
  • 目前仅支持transformers下的AutoTockenizer。详情见 huggingface
max_sequence_length
  • 模型可以输入的最大长度,又称作模型的上下文长度
  • 默认值:2048
end_of_text_token
  • 模型的结束特殊字符
  • 默认值:"</s>"
prefix_token
  • 前缀标记。用 echo=True 进行推理是不可行的,所以只需将其设置为空字符串
  • 默认值: ""

用户提交评测实例,跳转到评测实例详情页面,分为上、左下、右下三部分:

上半部分:

  • 显示用户【创建评测】时的具体参数。
  • 用户操作有:【编辑】、【上传模型&代码】、【推理验证】、【启动推理评测】。
  • 【编辑】操作:除模型名称和评测领域之外都允许编辑。
  • 【上传模型&代码】操作:弹出上传模型和代码的引导页面。

  • 【推理验证】操作:

    • 平台从测试数据中随机抽取1——3条组成推理验证的数据,方便用户快速验证自己的模型与服务能否运行。
    • 建议在正式启动推理评测之前,请先进行推理验证,发现问题可即时修复,也可以查看推理验证中的答案是否符合预期。
  • 【启动推理评测】操作:用户推理验证模型与服务没问题后,可以点击启动推理评测,启动后整个推理评测的过程大概持续数个小时。评测任务结束时会给用户发送邮件通知

    • 目前仅支持单机推理评测。
  • 左下部分:

    • 展示用户启动推理和推理验证的历次版本。
    • 展示参数有:版本、任务类型、状态、提交人、操作。
    • 任务类型有:推理验证&正式推理。
    • 【停止】操作:点击该操作,推理过程结束。
  • 右下部分包括:推理验证详情页面、模型推理进度页面、指标详情页面、日志页面。

    • 推理验证tab页面:数据集进度展示(任务名称、数据集名称、状态);
      • 验证结果——平台提供部分推理结果,用户可自行确认,数据字段:ID、Dataset、Sample、Label、Predict。

  • 模型推理进度tab页面
    • 主要记录推理提交时间;任务名称、数据集名称、状态、开始时间、结束时间。
    • 推理过程:串行(任务数据集)推理。每个数据集的状态流转如下图。

  • 指标详情页面。推理评测中,用户可以随时查看已经推理评测完的数据集的成绩,每个评测任务都计算自己的平均值。
    • 整个推理任务结束后,用户可以根据自己的成绩自行选择是否提交到排行榜中,可以选择【匿名提交】或【具名提交】。
    • 用户点击【具名提交&匿名提交】按钮,将成绩同步到NLP排行榜,与NLP排行榜格式保持一致。只有点击提交的成绩才会出现在排行榜上。
    • 具名提交:展示提交人的真实姓名与组织单位;匿名提交:提交人的真实姓名与组织单位显示为:【匿名】二字。

注意

  • 用户每个月只有 5次 启动正式推理评测的机会。

主观推理评测

如果用户选择了【中文开放问答】任务,且为SFT模型,则会涉及主观推理与评测。

由于主观推理的评测,需要人工进行标注评测,成本比较大,因此限制每个用户一个月最多2次人工评测次数。等【中文开放问答】推理完成后,点击【启动人工评测】按钮即可。

上传模型&代码规范

(1) 安装 FlagEval-Serving

pip install flageval-serving



pip install --upgrade flageval-serving

参考https://github.com/FlagOpen/FlagEval/tree/master/flageval-serving

(2) 准备模型 & 代码

目录结构

如需接入 FlagEval 进行离线模型评测,需要将模型和代码放在同一个目录下:

demo/
├── model                # 模型目录
│   └── info             # 模型文件,请确保上传的模型权重文件格式与选择的卡型及框架匹配
├── local_guniconf.py    # 服务配置文件
├── meta.json            # 模型信息
└── service.py           # 服务入口(其他依赖模块)

定义模型信息

meta.json

{
    "parameter_scale_billion": 7        // 模型参数规模(单位十亿)
}

定义 Service

需要在 service.py 定义 Service

from flageval.serving.service import NLPModelService, NLPEvalRequest, NLPEvalResponse, NLPCompletion


class Service(NLPModelService):
    def global_init(self, model_path: str):
        print("Initial model with path", model_path)

    def infer(self, req: NLPEvalRequest) -> NLPEvalResponse:
        print(req)
        return NLPEvalResponse(
            completions=[
                NLPCompletion(
                    text='Hello, world!',
                    tokens='Hello, world!',
                ),
            ]
        )
  1. global_init 用于全局初始化模型,服务启动时会调用一次;
  2. infer 用于处理推理请求,评测时调用。

本地模型调试

可以通过如下命令运行调试服务: 可添加指定环境的参数 如:--host http://ip:port 默认使用https://flageval.baai.ac.cn

也可以在host中添加 ip flageval.baai.ac.cn 来使用 (线上环境只接收https域名--默认值, 测试环境可以使用ip端口)

 flageval-serving --service demo/service.py dev demo/model

然后即可构造 curl 请求进行测试:

curl -X POST http://127.0.0.1:5000/func -H 'Content-Type: application/json' -d '{
    "engine": "hello", 
    "prompt": "hello", 
    "temperature": 1.5, 
    "num_return_sequences": 1, 
    "max_new_tokens": 1, 
    "top_p": 1, 
    "echo_prompt": false, 
    "top_k_per_token": 1, 
    "stop_sequences": []
}'

设置推理服务进程数

默认情况下,我们使用 1 个进程运行模型推理服务,如果需要个性化可以在 local_guniconf.py 中调整 workers 配置项:

workers = 4  # 使用 4 个 Worker 进程

模型上传

在页面点击【上传模型 & 代码】获取 token 然后填入下面的命令中:

flageval-serving upload --token='TOKEN' demo

上传速度根据上传主机的出口网络带宽和评测平台服务入口带宽决定,最大速度约12.5MB/s。

CV领域模型评测

目前Flageval平台支持用户上传CV的backbone预训练模型,支持backbone模型冻结参数后在不同任务、数据集下进行finetune生成下游任务模型,并在相应的测试数据集上进行推理评测,得到模型在该数据集上的评测指标。

创建评测

用户在评测任务列表页面,点击【创建评测】,弹出【创建评测】对话框,填写相关参数点击提交,跳转到模型评测实例详情页面。

参数名称参数描述
评测领域
  • 选择评测领域CV。必填,单选
模型名称
  • 输入待评测模型的名称,必填
  • 支持3~32位可见字符,且只包含小写字母、数字、中间连字符-,以小写字母开头,以小写字母、数字为结尾。
  • 名称全平台唯一,不允许重复。
描述
  • 填写描述信息。 选填
  • 支持0~256位可见字符。
评测任务
  • 选择评测任务。必填,多选
  • 不同任务关联不同的适配方法。
适配方法
  • 请选择finetune的适配方法,适配方法详情请参考任务介绍。
选择镜像
  • 必填 选择任务运行的基础镜像,镜像封装了程序运行所需的软件依赖项,给推理提供运行环境。
  • 可以选择【平台预置镜像】或者【用户自导入镜像】的镜像,如果【平台预置镜像】不满足用户需求,用户可以在【评测管理/镜像管理】中导入自己的镜像。
选择卡型
  • 选择评测所需的卡型。必填,单选
  • 注意:Ascend 卡型支持 MindSpore 框架,其他卡型支持 Pytorch 框架。
设置资源
  • 根据模型大小设置所需的资源,仅支持单机推理。必填,单选
  • 选择某个卡型后,如果设置资源列表为空,则说明该卡型暂时没资源,请选择其他卡型。
模型类型
  • 目前CV领域只支持Backbone预训练模型。
模型参数规则/B
  • 填写评测接口涉及的模型参数规模。必填
  • 注意:单位是十亿(B)。

用户提交评测实例,跳转到评测实例详情页面,分为上、左下、右下三部分:

上半部分:

  • 显示用户【创建评测】时的具体参数。

  • 用户操作有:【编辑】、【上传模型&代码】、【微调&推理验证】、【微调&推理评测】。

  • 【编辑】操作:除模型名称和评测领域之外都允许编辑。

  • 【上传模型&代码】操作:弹出上传模型和代码的引导页面。

  • 【微调&推理验证】操作:

    • 平台从验证数据中随机抽取1——3个epoch的数据组成微调验证的数据,方便用户快速验证自己的模型与服务能否运行。
    • 建议在正式启动微调&推理评测之前,请先进行验证环节,发现问题可即时修复。
  • 【微调&推理评测】操作:用户验证模型与服务没问题后,可以点击微调&推理评测,启动后整个微调+推理评测的过程大概持续数个小时。评测任务结束时会给用户发送邮件通知

    • 目前仅支持单机微调与推理评测。
  • 左下部分:

    • 展示用户启动推理和推理验证的历次版本。
    • 展示参数有:版本、任务类型、状态、提交人、操作。
    • 任务类型有:推理验证&正式推理。
    • 【停止】操作:点击该操作,推理过程结束。
  • 右下部分包括:验证详情页面、微调&推理详情页面、日志页面。

    • 验证详情页面:数据集进度展示(任务名称、数据集名称、状态);

  • 微调&推理详情页面
    • 主要记录任务名称、数据集名称、状态、评测指标、开始时间、结束时间。

  • 日志页面
    • 如果某个任务失败,用户可以通过查看日志定位失败原因。

注意

  • 用户每个月只有 5次 启动正式微调&推理评测的机会。

上传模型与代码规范

开源示例代码请参考github

(1) 安装 FlagEval-Serving

pip install flageval-serving



pip install --upgrade flageval-serving

参考https://github.com/FlagOpen/FlagEval/tree/master/flageval-serving

(2) 准备模型 & 代码

  • 目录结构

需要将模型和代码放在同一个目录下:

开源示例代码请参考github

├── demo
│   ├── meta.json
│   ├── model # 模型相关代码,可以被model_adapter.py调用
|          |—— checkpoint.pth
│   └── model_adapter.py

模型参数文件: 放在model/checkpoint.pth, 在模型初始化的时候,会通过字符串checkpoint_path传入模型路径。使用者读取之后自行初始化模型。注意,模型名和位置在上传的时候必须放在model目录下,并且以checkpoint.pth命名,否则系统会解析出错。

  • model_adapter.py

通过ModelAdapter类的model_init方法,提供获取模型的借口,示例如下:

import os
import sys

# current_dir 为model_adapter.py所在的路径
# 如果需要访问文件系统,可以通过current_dir。如:
# abs_path = os.path.join(current_dir, yourfile) # yourfile为你的文件的相对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(current_dir)

from model.user_model import get_model  # noqa E402

class ModelAdapter:

    def model_init(self, checkpoint_path):
        model = get_model()
        # init weights form checkpoint path
        return model
  • meta.json

模型配置文件,提供模型的基本信息,其中train_batch_sizeval_batch_size 参数设置为可选,系统会提供默认值。

{
    "model_name": "resnet_demo",
    "is_rgb": true,
    "output_channels": [256, 512, 1024, 2048], # backbone 输出feature的channel数
    "output_dims": [4, 4, 4, 4], # backbone 输出feature的channel维度
    "mean": [123.675, 116.28, 103.53], # 输入图像预处理的mean
    "std": [58.395, 57.12, 57.375], # 输入图像预处理的std
    "tasks": {
        "classification": {
            "train_batch_size": 128,
            "val_batch_size": 128,
            "out_indices": [3],
        },
        "segmentation": { # 分割只支持output_dims为4的feature
            "train_batch_size": 8,
            "val_batch_size": 8,
            "out_indices": [0, 1, 2, 3],
        },
        "semi_supervised_classification": {
            "train_batch_size": 32,
            "val_batch_size": 128,
            "out_indices": [3],
        }
    }    
}

模型上传

在页面点击【上传模型 & 代码】获取 token 然后填入下面的命令中:

flageval-serving upload --token='TOKEN' demo

上传速度根据上传主机的出口网络带宽和评测平台服务入口带宽决定,最大速度约12.5MB/s。

BackBone模型格式规范

  • BackBone输出格式规范

对于图像分类、图像检索,小样本分类和半监督任务,平台预置了全局平均池化层作为Neck、线性分类器作为Head,需要获得用户BackBone输出特征图的最后一层, 输出特征可以是一个三维的tensor,也可以是四维tensor,需要和 meta.jsonoutput_dims保持一致。

对于语义分割、深度估计等密集预测型任务,平台预置了不同的Head,需要获得用户BackBone输出的全部四层特征图。建议用户在BackBone的forward函数中将特征图格式处理为[B,C,H,W](B为Batch_size大小, C为特征维度大小,H、W分别为图片的高和宽),再将四层特征图以tuple格式输出。

SwinTransformer的forward函数示例代码如下:

def forward(self, x):
    x, hw_shape = self.patch_embed(x)

    if self.use_abs_pos_embed:
        x = x + resize_pos_embed(
            self.absolute_pos_embed, self.patch_resolution, hw_shape,
            self.interpolate_mode, self.num_extra_tokens)
    x = self.drop_after_pos(x)

    outs = []
    for i, stage in enumerate(self.stages):
        x, hw_shape = stage(x, hw_shape)
        if i in self.out_indices:
            norm_layer = getattr(self, f'norm{i}')
            out = norm_layer(x)
            out = out.view(-1, *hw_shape,stage.out_channels).permute(0, 3, 1,2).contiguous()
            outs.append(out)

    return tuple(outs)
  • 适配方法选择注意事项

针对语义分割分割任务,如果用户提交的BackBone采用的是类似Swin或ViT-Adapter的特征金字塔输出形式,请选择UPerNet作为适配方法。如果BackBone采用的是普通ViT输出形式,请选择SETR作为适配方法。

深度估计任务暂时不支持普通ViT架构的评测,仅支持特征金字塔输出形式的模型。对于后者,两个适配方法均可选择。

针对图像分类任务和图像检索任务,所有适配方法均可选择。

  • 模型输入大小:

    对于各个任务,模型输入尺寸如下:

    • 图像分类、图像检索,小样本分类和半监督:224*224
    • 深度估计:
      • KITTI Eigen split数据集:352*1120
      • NYU-Depth V2数据集:480*640
    • 语义分割:512*512

Multimodal领域模型评测

目前Flageval平台支持用户上传Multimodal领域的直接推理模型(无需Finetune)进行推理评测。

创建评测

用户在评测任务列表页面,点击【创建评测】,弹出【创建评测】对话框,填写相关参数点击提交,跳转到模型评测实例详情页面。

参数名称参数描述
评测领域
  • 选择评测领域Multimodal。必填,单选
模型名称
  • 输入待评测模型的名称,必填
  • 支持3~32位可见字符,且只包含小写字母、数字、中间连字符-,以小写字母开头,以小写字母、数字为结尾。
  • 名称全平台唯一,不允许重复。
描述
  • 填写描述信息。 选填
  • 支持0~256位可见字符。
评测任务
  • 选择评测任务。必填,多选
选择镜像
  • 必填 选择任务运行的基础镜像,镜像封装了程序运行所需的软件依赖项,给推理提供运行环境。
  • 可以选择【平台预置镜像】或者【用户自导入镜像】的镜像,如果【平台预置镜像】不满足用户需求,用户可以在【评测管理/镜像管理】中导入自己的镜像。
  • 基于 Dockerfile 自定义构建镜像建议请查看
选择卡型
  • 选择评测所需的卡型。必填,单选
  • 注意:Ascend 卡型支持 MindSpore 框架,其他卡型支持 Pytorch 框架。
设置资源
  • 根据模型大小设置所需的资源,仅支持单机推理。必填,单选
  • 选择某个卡型后,如果设置资源列表为空,则说明该卡型暂时没资源,请选择其他卡型。
模型类型
  • 目前Multimodal领域只支持直接推理模型(无需微调)。
模型参数规则/B
  • 填写评测接口涉及的模型参数规模。必填
  • 注意:单位是十亿(B)。

用户提交评测实例,跳转到评测实例详情页面,分为上、左下、右下三部分:

上半部分:

  • 显示用户【创建评测】时的具体参数。

  • 用户操作有:【编辑】、【上传模型&代码】、【推理验证】、【启动推理评测】。

  • 【编辑】操作:除模型名称和评测领域之外都允许编辑。

  • 【上传模型&代码】操作:弹出上传模型和代码的引导页面。

  • 【推理验证】操作:

    • 平台从测试数据中随机抽取1——3条组成推理验证的数据,方便用户快速验证自己的模型与服务能否运行。
    • 建议在正式启动推理评测之前,请先进行推理验证,发现问题可即时修复,也可以查看推理验证中的答案是否符合预期。
  • 【启动推理评测】操作:用户验证模型与服务没问题后,可以点击启动推理评测评测任务结束时会给用户发送邮件通知

    • 目前仅支持单机推理评测。
  • 左下部分:

    • 展示用户启动推理和推理验证的历次版本。
    • 展示参数有:版本、任务类型、状态、提交人、操作。
    • 任务类型有:推理验证&正式推理。
    • 【停止】操作:点击该操作,推理过程结束。
  • 右下部分包括:验证详情页面、推理评测详情页面、日志页面。

    • 验证详情页面:数据集进度展示(任务名称、数据集名称、状态)以及验证数据结果;
    • 推理评测详情页面
      • 主要记录任务名称、数据集名称、状态、评测指标、开始时间、结束时间。
  • 日志页面

    • 如果某个任务失败,用户可以通过查看日志定位失败原因。

注意

  • 用户每个月只有 5次 正式启动推理评测的机会。

上传模型与代码规范

开源示例代码请参考github

(1) 安装 FlagEval-Serving

pip install flageval-serving



pip install --upgrade flageval-serving

参考https://github.com/FlagOpen/FlagEval/tree/master/flageval-serving

(2) 准备模型 & 代码

  • 目录结构

使用flageval-serving上传的文件中,必要的两个文件如下,文件名必须使用checkpoint.pthrun.sh,存放在上传文件的根目录下:

example_model
├── checkpoint.pth # 模型初始化需要用的的权重文件,需要用户的代码自行载入,解析。
├── run.sh
└── .... # 其它的用户文件

checkpoint.pth

模型初始化需要用的的权重文件,需要用户的代码自行载入,解析。

run.sh

需要接受3个命令行参数,分别表示:task_name, server_ip, server_port, 第一个参数是任务名(retrieval, vqa, t2i),后两个参数是数据服务器ip和端口。run.sh内部没有限制,能确保程序运行,并输出符合预期的结果即可。

bash run.sh $task_name $server_ip $server_port
  • 输出格式

vqa任务

对于每个数据集,输出一个list,list的每个元素为 {"question_id": int, "answer": str} 格式,表示对应id的问题和模型给出的答案,具体如下

[
{"question_id": str, "answer": str}, 
 ....
]

存储为json格式,路径为 "$output_dir"/"$dataset_name".json

retrieval任务

对于每个数据集,输出一个n*m的矩阵,表示第n张图片和第m个句子的相似度,使用np.ndarray格式,存储路径为 "$output_dir"/"$dataset_name".npy

t2i任务

对于每个数据集,输出n张图片到"$output_dir"目录下,存储为png格式,图片命名为 ${prompt_id}.png 同时生成另一个文件"$output_dir/output_info.json" ,内容为一个json的list,每个元素需要包含 "id"(当前的question_id)和 "image"(生成的图片的名字,即相对于$output_dir的路径),例如:

[
  {
    "id": "0",
    "image": "0.png"
  },
  {
    "id": "1",
    "image": "1.png"
  }
  ....
]
  • 数据接口

用户需要通过http请求,获得数据,模型的路径,以及数据集相关信息。主要接口如下:

  • io_info:存储用户输出的目录和模型文件路径
Python
http://{server_ip}:{server_port}/io_info
{
     'checkpoint_path': 'model checkpoint path',
     'output_dir': 'output dir'
}
  • meta_info:数据集的meta信息
Python
http://{server_ip}:{server_port}/meta_info

# 对于vqa任务
{
    'length': 图片数量, 
    'name': 数据集名称, 
    'type': 'vqa'
}

# 对于retrieval
 {
    'name': 数据集名称, 
    'image_number': 图片数量,
    'caption_number': 文本数量,
    'type': 'retrieval'
}
  • get_data:获取数据的接口
    • vqa任务
Python
# index的取值范围为 [0, 图片数量)
http://{server_ip}:{server_port}/get_data?index={index}

{
    "img_path": 一个list,每个元素为图片绝对路径,可以使用PIL,cv2等直接读取,
    "question": 问题,是一个str,图片位置用<image1> <image2>
    "question_id": question_id,
    'type': 类型为str,是题目的类型
}

其中type可以为:
multiple-choice (单选题)
multiple-response (多选题)
fill-in-the-blank (填空题)
short-answer (简答题)
yes-no (判断题)

# 下面是一个实际的例子:

{'img_path': ['/share/projset/mmdataset/MathVista/images/20.jpg'],
 'question': '<image 1>Hint: Please answer the question and provide the correct option letter, e.g., A, B, C, D, at the end.\nQuestion: Is the sum of smallest two bar is greater then the largest bar?\nChoices:\n(A) Yes\n(B) No',
 'question_id': '20',
 'type': 'multiple-choice'
}
  • retrieval任务
Python
# 读取图片,index的取值范围为 [0, 图片数量)
http://{server_ip}:{server_port}/get_data?index={index}&type=img

{
    "img_path": 图片绝对路径,可以使用PIL,cv2等直接读取,
}


# 读取文本,index的取值范围为 [0, 文本数量)
http://{server_ip}:{server_port}/get_data?index={index}&type=text

{
    "caption": 一个文本
}
  • t2i任务
Python
# index的取值范围为 [0, prompt数量)
http://{server_ip}:{server_port}/get_data?index={index}

{
    "prompt": 一段描述图像的文本,是一个str,
    "id": prompt id,int格式
}
  • 使用样例: 获取模型checkpoint存储地址以及输出目录。
Python
url = f"{server_ip}:{server_port}/io_info"
data = requests.get(url).json()
checkpoint_path = data['checkpoint_path']
output_dir = data['output_dir']
  • 数据相关
Python

# 获取vqa数据
url = f"{server_ip}:{server_port}/get_data?index=12"
data = requests.get(url).json()

# 获取retrieval文本
url = f"{server_ip}:{server_port}/get_data?index=10&type=text"
data = requests.get(url).json()

# 获取retrieval图像
url = f"{server_ip}:{server_port}/get_data?index=10&type=img"
data = requests.get(url).json()

模型上传

在页面点击【上传模型 & 代码】获取 token 然后填入下面的命令中:

flageval-serving upload --token='TOKEN' demo

上传速度根据上传主机的出口网络带宽和评测平台服务入口带宽决定,最大速度约12.5MB/s。

flageval-serving的更多使用教程请参考章节

Audio语音领域模型评测

目前Flageval平台支持用户上传Audio语音领域的backbone预训练模型,支持backbone模型冻结参数后在不同任务、数据集下进行finetune生成下游任务模型,并在相应的测试数据集上进行推理评测,得到模型在该数据集上的评测指标。

创建评测

用户在评测任务列表页面,点击【创建评测】,弹出【创建评测】对话框,填写相关参数点击提交,跳转到模型评测实例详情页面。

参数名称参数描述
评测领域
  • 选择评测领域 Audio。必填,单选
模型名称
  • 输入待评测模型的名称,必填
  • 支持3~32位可见字符,且只包含小写字母、数字、中间连字符-,以小写字母开头,以小写字母、数字为结尾。
  • 名称全平台唯一,不允许重复。
描述
  • 填写描述信息。 选填
  • 支持0~256位可见字符。
评测任务
  • 选择评测任务。必填,多选
选择镜像
  • 必填 选择任务运行的基础镜像,镜像封装了程序运行所需的软件依赖项,给推理提供运行环境。
  • 可以选择【平台预置镜像】或者【用户自导入镜像】的镜像,如果【平台预置镜像】不满足用户需求,用户可以在【评测管理/镜像管理】中导入自己的镜像。
  • 基于 Dockerfile 自定义构建镜像建议请查看
选择卡型
  • 选择评测所需的卡型。必填,单选
  • 注意:Ascend 卡型支持 MindSpore 框架,其他卡型支持 Pytorch 框架。
设置资源
  • 根据模型大小设置所需的资源,仅支持单机推理。必填,单选
  • 选择某个卡型后,如果设置资源列表为空,则说明该卡型暂时没资源,请选择其他卡型。
模型类型
  • 目前Audio语音领域只支持Backbone预训练模型。
模型参数规则/B
  • 填写评测接口涉及的模型参数规模。必填
  • 注意:单位是十亿(B)。

用户提交评测实例,跳转到评测实例详情页面,分为上、左下、右下三部分:

上半部分:

  • 显示用户【创建评测】时的具体参数。

  • 用户操作有:【编辑】、【上传模型&代码】、【启动推理评测】。

  • 【编辑】操作:除模型名称和评测领域之外都允许编辑。

  • 【上传模型&代码】操作:弹出上传模型和代码的引导页面。

  • 【启动推理评测】操作:用户验证模型与服务没问题后,可以点击启动推理评测评测任务结束时会给用户发送邮件通知

    • 目前仅支持单机推理评测。
  • 左下部分:

    • 展示用户启动推理和推理验证的历次版本。
    • 展示参数有:版本、任务类型、状态、提交人、操作。
    • 任务类型有:推理验证&正式推理。
    • 【停止】操作:点击该操作,推理过程结束。
  • 右下部分包括:验证详情页面、推理评测详情页面、日志页面。

    • 验证详情页面:数据集进度展示(任务名称、数据集名称、状态)以及验证数据结果;
    • 推理评测详情页面
      • 主要记录任务名称、数据集名称、状态、评测指标、开始时间、结束时间。
  • 日志页面

    • 如果某个任务失败,用户可以通过查看日志定位失败原因。

注意

  • 用户每个月只有 5次 正式启动推理评测的机会。

上传模型与代码规范

开源示例代码请参考github

(1) 安装 FlagEval-Serving

pip install flageval-serving



pip install --upgrade flageval-serving

参考https://github.com/FlagOpen/FlagEval/tree/master/flageval-serving

(2) 准备模型 & 代码

目前平台仅支持BackBone模型进行finetune后进行推理评测,下面是关于添加上游模型(BackBone)及其所需组件的步骤:

首先,上游模型文件夹组织结构 (Folder Structure) 如下,平台提供了示例结构与代码,详情请参考具体的代码:

Markdown
upstream/example_model
├── model.py 
├── convert.py
└── ModelWrapper.py

model.py 中, 需要实现两个数据类: ExamplePretrainingConfigexampleconfig 。分别初始化预训练参数配置和模型结构,具体要求如下:

  • ExamplePretrainingConfig : 使用该类来配置预训练参数,例如采样率,输入数据的最大最小长度等,例如 upstream/wav2vec2/wa2vec2_model.py/AudioPretrainingConfig
  • ExampleConfig : : 该类配置自定义模型的架构参数,例如编码器层的数量、各层网络输入输出的维度、dropout的大小等。

此外,model.py 应该实现 ExampleModel 类,即定义模型结构,请尽量使用pytorch实现,避免额外的依赖。

Python
@dataclass
class ExamplePretrainingConfig:
    sample_rate: int = field(
    default=16_000,
    metadata={
        "help": "target sample rate. audio files will be up/down sampled to this rate"
    },
    )
    max_sample_size: Optional[int] = field(
        default=None, metadata={"help": "max sample size to crop to for batching"}
    )
    min_sample_size: Optional[int] = field(
        default=None, metadata={"help": "min sample size to skip small examples"}
    )
    pass

@dataclass
class ExampleConfig:
    encoder_layers: int = field(
    default=12, metadata={"help": "num encoder layers in the transformer"}
    )
    pass

class ExampleModel(nn.Module):
    def __init__(self, config):
        super(ExampleModel, self).__init__()
        pass
        
    def forward(self, wavs, padding_mask):
        pass
        return features, mask
  • convert.py

convert.py 文件用于将checkpoint转换为与我们项目兼容的格式。转换后的检查点结构应该如下所示 。

Python
{
    "task_cfg": ,  # Configuration for ExamplePretrainingConfig
    "model_cfg",   # Configuration for ExampleConfig
    "model_weight", # Load model weights using model.load_state_dict(ckpt_state["model_weight"])
}

用户可以使用 convert.py 中提供的 load_converted_model 函数来验证转换后模型的兼容性。

Python
def load_converted_model(ckpt: str):
   ckpt_state = torch.load(ckpt, map_location="cpu")

   for required_key in ["task_cfg", "model_cfg", "model_weight"]:
       if required_key not in ckpt_state:
           raise ValueError(
               f"{ckpt} is not a valid checkpoint since the required key: {required_key} is missing"
           )

   task_cfg = merge_with_parent(ExamplePretrainingConfig, ckpt_state["task_cfg"])
   model_cfg = merge_with_parent(ExampleConfig, ckpt_state["model_cfg"])
   model = ExampleModel(model_cfg)
   model.load_state_dict(ckpt_state["model_weight"])
   return model, task_cfg
  • ModelWrapper.py

ModelWrapper.py 作为平台上游模型的统一接口。该文件中需要创建一个类,例如 MyModel ,结构如下 :

Python
class MyModel(nn.Module):
    def __init__(self, load_type, **kwargs):
        super(MyModel, self).__init__()
                # 在这里初始化并且载入你的模型
            # to get config and .pt file
            ckpt_state = torch.load(ckpt, map_location="cpu")
            
            self.task_cfg = merge_with_parent(ExamplePretrainingConfig, ckpt_state["task_cfg"])
            self.model_cfg = merge_with_parent(ExamplePretrainingConfig, ckpt_state["model_cfg"])
            
            self.model = ExampleModel(self.model_cfg)
            self.model.load_state_dict(ckpt_state["model_weight"])  
    def forward(self, wavs, padding_mask=None):
        device = wavs[0].device
        # 实现forward结构,并且返回feature和feature_mask。维度均为(B*L*D)
    
    def get_output_dim(self):
        # 定义你的模型的输出维度D,以768为例。
        return 768

创新算法验证

创建评测

用户点击【创建评测】,选择【创新算法验证】,弹出【创建评测】对话框,填写相应参数:

参数名称参数描述
名称
  • 输入待评测算法的名称,必填
  • 支持3~32位可见字符,且只包含小写字母、数字、中间连字符-,以小写字母开头,以小写字母、数字为结尾。
  • 名称全平台唯一,不允许重复。
描述
  • 填写描述信息。 选填
  • 支持0~256位可见字符。
选择镜像
  • 必填 选择任务运行的基础镜像,镜像封装了程序运行所需的软件依赖项,给推理提供运行环境。
  • 可以选择【平台预置镜像】或者【用户自导入镜像】的镜像,如果【平台预置镜像】不满足用户需求,用户可以在【评测管理/镜像管理】中导入自己的镜像。
  • 基于 Dockerfile 自定义构建镜像建议请查看常用概念
选择卡型
  • 选择评测所需的卡型。必填,单选
  • 注意:目前仅支持 Pytorch 框架。
节点配置
  • 如果是单机任务,用户可以只配置worker节点或者Master节点,且副本数为1即可。
  • 如果是分布式训练任务,需要配置训练角色的数量并且配置GPU资源。
  • 共享内存(/dev/shm)/Gi:默认不开启,大小为资源申请内存数值的一半,如果不够用,可以开启该选项,将其数值调高,但数值必须小于所申请内存的数值。
  • 必填
代码&数据
  • 请先提交评测,进入评测详情页面上传相关代码与数据。

用户点击【提交】进入评测详情页面,上传代码&数据。

上传待评测文件规范

开源示例代码请参考github

  • 准备待评测文件:

用户需要将数据和代码放在同一个目录下,目录结构如下:

Markdown
demo/
├── dataset               # 前1000 iteration需要的数据集,如果需要用到pretrain模型,请和数据一并上传
├── code                  # 算法验证需要用的代码
├── targets                # 前1000个iteration的目标loss
    ├── task_name1.json
    ├── task_name2.json
├── meta.json             # 模型信息,以及需要验证的算法
├── run.sh                # 算法验证的启动脚本

meta.json的格式如下,需要在meta中提供需要进行算法验证的任务的名字:

{
    "model_name": "demo", 
    "tasks": ["task_name1", "task_name2"]
}

平台会遍历meta.json里面的tasks变量,每一次遍历都会调用用户的脚本:

bash run.sh ${task_name}

注意:

1、tasks里的${task_name}要和targets目录里面的${task_name}.json一致。

2、用户代码中必须有meta.json, run.sh, targets

3、核心代码是run.sh。此脚本要求生成一个json文件,文件名任意(例如文件名是output.json)。json格式要和targets的${task_name}.json一致。然后请把此文件复制给平台:

# $FLAGEVAL_OUTPUT_PATH 为平台的环境变量,不用赋值直接使用。
cp ./output.json $FLAGEVAL_OUTPUT_PATH

4、run.sh中可以用到如下环境变量:

# master节点的数量
echo $FLAGEVAL_MASTER_COUNT

# worker节点的数量
echo $FLAGEVAL_WORKER_COUNT

# master节点的ip地址。如果有多个master节点,则变量为第一个master的ip
echo $FLAGEVAL_MASTER_IP

# 当前节点是master还是worker. 值只可能为 "master" 或 "worker"
echo $FLAGEVAL_NODE

# 当前节点是第几个节点。所有master节点的值都为0。worker节点的num为1, 2, 3...
echo $FLAGEVAL_NODE_NUM

# 输出结果的路径。如果get_res.py为输出结果json的文件,则可以写为:python get_res.py > $FLAGEVAL_OUTPUT_PATH
echo $FLAGEVAL_OUTPUT_PATH
  • 安装Flageval-serving工具进行上传。详情参考文件上传工具

上传完成后用户可以点击【查看文件】查看已经上传的文件,如有需要还可以删除、编辑、重新上传新文件。

启动评测

用户点击【启动】按钮,启动正式的评测,可以在日志中查看评测日志详情。

创新算法验证阶段旨在验证项目提出算法的可复现性,确保相同的数据、代码及环境可以复现相同的实验结果。主要步骤如下:

  1. 运行代码,记录所有loss。
  2. 记录的loss和基准loss比对。
  • 日志输出格式:
    • 在模型训练的前1000个iteration中,需记录所有loss,并将其以JSON格式存储至输出/output目录,命名为task_name_log.txt。
    • loss需要保留3位小数。
    • 样例如下:
{
  "total_loss": [4.321, 3.31, 4.412, 1.422, ……],
  "reg_loss": [2.231, 2.417, 0.813, 1.230, ……..]
}
  • 测试方法:
    • 逐个iteration对比loss,每个iteration可以有多个loss,所有loss和基准loss的差异在计算方式为:
(train_loss_per_iter – base_loss_per_iter)/ base_loss_per_iter

测试团队将记录的loss和基准loss进行比对,计算差异,给出创新算法验证阶段测试结果报告。

差异值平均值计算公式为:
差异值平均值= sum(ABS(平台训练loss - 基准loss)) / length(平台训练loss)

flageval-serving工具详细教程

用户可以通过安装 FlagEval-Serving工具上传模型、代码、数据等待评测文件,也可以通过该工具进行本地测试。

操作流程如下:

(1) 安装 FlagEval-Serving

Markdown
pip install flageval-serving



pip install --upgrade flageval-serving

工具开源: https://github.com/FlagOpen/FlagEval/tree/master/flageval-serving

(2) 准备代码 & 模型 & 数据

不同领域的评测需要不同的目录结构和接口规范,请参考各个领域的要求准备待上传文档即可。NLP领域的模型评测还可以支持本地模型调试,请参考NLP领域的操作流程规范。

(3) 常用命令

  • 用户上传更新文件需要唯一的 token 进行确认。
  • 评测详情页面点击【上传模型 & 代码】获取 token 用于初始化创建评测目录。
  • 若用户在当前版本追加文件,用cp命令,且用文件列表页面的 token 进行更新。
  • 注意:下面命令中都是英文单引号。
命令含义备注
pip install --upgrade flageval-serving更新到最新版本请更新到最新版本使用
flageval-serving upload --token='new token' /demo将本地的demo文件夹上传到Flageval平台,这里 'new token' 在评测详情页面【上传模型 & 代码】处获取。
flageval-serving cp --token='old token' /temp /remote将本地·文件夹追加到'old token'对用的·远程目录下。效果和linux的cp目录相同:
  • /temp 可以是目录,也可以是文件。
  • 如果 /remote/temp 不存在,则创建。
  • 如果 /remote/temp 存在,则增量覆盖。
这里只能用文件详情页面的old token,不能用新token
flageval-serving ls --token='old token' /remote列举平台/remote下的目录和文件
flageval-serving输出help相关命令

(3) 文件上传

在页面点击【上传模型 & 代码】获取 token 然后填入下面的命令中:

flageval-serving upload --token='TOKEN' demo

上传速度根据上传主机的出口网络带宽和评测平台服务入口带宽决定,最大速度约12.5MB/s。

镜像管理

用户点击【评测管理/镜像管理】可以查看平台的预置镜像和自定义镜像列表(自己导入镜像的管理列表)。

  • 预置镜像:Flageval平台为用户提供了各个领域的包括各种评测依赖的预置镜像供用户直接使用。用户可以根据镜像名称、镜像描述、训练框架、适配机型和标签,确定镜像的详细信息。
  • 自定义镜像:Flageval平台支持用户导入自己构建好的镜像用于评测任务。
    • 目前平台仅支持用户已有镜像导入,不支持利用dockerfile在平台构建镜像,用户填写的 dockerfile 仅用于平台审核人员审查镜像

用户点击【+导入镜像】,弹出【+导入镜像】对话框,填写相应参数,点击提交:

参数参数解释
镜像名称
  • 填写镜像名称,名称长度为3~128位,支持小写字母、数字、中间连字符-、点,以小写字母开头,以小写字母、数字为结尾
  • 必填
镜像tag
  • 请填写镜像tag,缺省默认为时间戳,禁止用Latest关键词。
  • 选填
导入方式
  • 目前只支持公网镜像仓库导入
待导入镜像URL
  • 请填写待导入镜像地址
  • 必填,支持DockerHub、NGC或其它支持公网访问的镜像仓库
Dockerfile
  • 必填;供审核人员审核查看。
  • 注释:Dockerfile相关说明请参考[说明文档
镜像说明
  • 选填,长度0——256个字符,支持中文。

用户点击【提交】后,返回【镜像管理】列表页面。等待平台管理员审核导入镜像,审核通过后,会直接将该镜像导入到平台的镜像仓库,用户即可在创建评测时使用导入的镜像。

如果审核不通过,请查看审核不通过的原因,根据平台规范修改导入镜像的地址或者Dockerfile,重新导入。

审核通过、导入成功、审核不通过都会给用户发送邮件通知,如果长时间没有状态反馈,请联系平台管理员反馈问题。

基于 Dockerfile 自定义构建镜像

Dockerfile 是一种用于构建镜像的文本文件,其中包含了一系列的镜像构建指令和参数,Docker通过docker build执行Dockerfile中的一系列指令自动构建镜像。关于 Dockerfile 的语法详见其官方文档,同时可以参考快速入门手册。

用户进行离线评测时,如果平台提供的镜像不满足用户需求,用户可以提供 Dockerfile,平台帮助生成可用的镜像 。

常用关键词如下:

命令关键词含义
FORM基础镜像,表明当前镜像是基于哪个镜像的。Dockerfile第一行必须为From命令,选择的基础镜像必须是安全可信镜像,建议优先选择平台预置镜像以及官方提供的镜像。
RUN容器构建时需要用到的命令。
ENV用来构建镜像过程中设置环境变量 (ENV MY_PATH="/usr/mytest"),持久化至容器中,容器启动后可以直接获取。
ARG构建时使用的临时变量 (ARG TMP="mytemp"),仅供构建期间使用,容器启动后无法获取。

注意

  • ENV中的以下环境变量是容器给出的,不允许修改。
    • NVIDIA_, HOSTNAME, KUBERNETES_, RANK, MASTER_, AIRS_, CUDA_, NCCL_, PADDLE_* Dockerfile使用建议:
  • From 选择的基础镜像必须为平台提供的候选镜像。
  • 减少镜像层数(layers),RUN, COPY 等指令会在 build 时产生对应的 layer,因此建议使用&&来连接多个命令。

下面命令行创建了2层镜像:

RUN apt-get install -y openssh-server

RUN mkdir -p /run/sshd

修改为以下命令行后,2层变1层,可以有效减小镜像大小。

RUN apt-get install -y openssh-server \    
    && mkdir -p /run/sshd
  • 当指令比较长时, 建议分行,且建议多行参数进行排序。
    • 可以将需要安装的多个包按字母进行排序,避免重复安装,同时提高代码可读性,如下示例。
RUN apt-get update && apt-get install -y \
  bzr \
  cvs \
  git \
  mercurial \
  subversion \
  && rm -rf /var/lib/apt/lists/*
  • 通过清理缓存减小镜像大小。
    • 如 RUN apt-get -y *** && apt-get clean。
    • 安装python包的时候建议使用 RUN pip install --no-cache-dir -i {指定源地址} {package} 来安装。
    • 安装conda相关包的时候建议后面跟上clean命令,不同参数表示的含义为:
      • RUN conda clean -p (删除没用的包)
      • RUN conda clean -t (删除tar包)
      • RUN conda clean -y --all (删除所有安装包和缓存文件)
    • 通过 docker build 命令的 --no-cache=true 选项,不使用缓存。
  • Dockerfile示例:该示例对应平台的镜像是flageval-nlp-ngc-pytorch2303:v1.0,该镜像已满足YuLan-Chat-2-13b、llama、chatglm2-6b、Baichuan-13B-Chat等主流模型的环境需求。如果该镜像满足需求,建议选择使用
FROM nvcr.io/nvidia/pytorch:23.03-py3
RUN apt-get update

RUN apt-get install -y openssh-server && mkdir -p /run/sshd

# 下列版本为建议版本,用户可根据自己模型的需求来安装, 建议transformer的包和其他包分开安装
RUN pip install --no-cache-dir transformer-engine==0.6.0 transformers==4.31.0 transformers-stream-generator==0.0.4
RUN pip install --no-cache-dir sentencepiece==0.1.98 accelerate==0.21.0 colorama==0.4.6 cpm_kernels==1.0.11 streamlit==1.25.0 fairscale==0.4.13

# Qwen
RUN pip install tiktoken

平台镜像审核原则

  • 平台目前主要提供英伟达卡系列显卡,建议使用英伟达官方提供的镜像(nvcr.io/nvidia)作为基础镜像。如使用pytorch框架,建议选用nvcr.io/nvidia下的pytorch镜像作为FROM来源,对于其他来源的镜像,如审核人员判断存在安全风险则审核不通过。

  • 如果使用其他品牌的显卡,可先使用平台提供的镜像进行测试,如不满足需求,请联系运维人员(flageval@baai.ac.cn)进行处理。

  • 对dockerfile有以下几点建议:

    • Dockerfile 第一行必须为 FROM 命令,指明基础镜像来源,否则驳回镜像导入请求;
    • 镜像中需要平台与后端k8s集群进行通讯,需要安装ssh;
    • 在dockerfile中尽量不要出现COPY、ADD等命令,如果使用这两个命令需加上注释说明其内容;
    • 根据镜像的安全性要求,RUN中不能有wget、curl等下载未知包的操作;
    • 用户需使用系统自带的命令安装系统官方包;
    • 填写的导入镜像URL需要能使用docker命令下载;
    • 在安装包的时候尽量指定使用国内的源。
  • 平台对镜像大小限制:40Gi。

  • Dockerfile示例:该示例对应平台的镜像是flageval-nlp-ngc-pytorch2303:v1.0,该镜像已满足YuLan-Chat-2-13b、llama、chatglm2-6b、Baichuan-13B-Chat等主流模型的环境需求。如果该镜像满足需求,建议选择使用。

FROM nvcr.io/nvidia/pytorch:23.03-py3
RUN apt-get update

RUN apt-get install -y openssh-server && mkdir -p /run/sshd

# 下列版本为建议版本,用户可根据自己模型的需求来安装, 建议transformer的包和其他包分开安装
RUN pip install --no-cache-dir transformer-engine==0.6.0 transformers==4.31.0 transformers-stream-generator==0.0.4
RUN pip install --no-cache-dir sentencepiece==0.1.98 accelerate==0.21.0 colorama==0.4.6 cpm_kernels==1.0.11 streamlit==1.25.0 fairscale==0.4.13

# Qwen
RUN pip install tiktoken
  • 镜像安全必备要求
    • 禁止镜像存在公开可利用的且已公布修复方案的高危安全漏洞。
    • 禁止使用官方已停止维护的发行版本进行镜像。
    • 禁止镜像默认安装任何病毒、木马、后门、挖矿以及挂机等恶意程序。
    • 禁止使用任何盗版或者破解版程序。
    • 禁止使用包含一切其他可能会危害平台安全的任意程序。

注意:为确保服务镜像的安全性和合规性,我们会定期对已上架的镜像进行扫描。如果发现镜像存在安全漏洞或违规行为,我们将下架该镜像,并追究上传者的法律责任。感谢您对我们平台的支持和配合。

排行榜

参与评测任务的用户可以在【导航栏-排行榜】查看【我的成绩】,排行榜默认展现用户提交的评测任务的汇总。

排行榜说明:

  1. 评测方式说明:在评测时,FlagEval 根据数据集的不同规模进行了自动化采样。

  2. 平均值(Mean值)计算说明:每个平均值是对应的所有数据集指标的算数平均,例如:

    a. “Mean(主观+客观)”是指所有数据集指标的算数平均,而不是Mean(客观)与Mean(主观)的平均。

    b. “中文Mean(客观)”是指所有中文客观数据集指标的算数平均(当前指中文选择问答&中文文本分类任务中的客观数据集)。

  3. 局限性说明

    a. 由于评测数据集的规模限制,评测结果也会存在一定的局限性,后续我们也会尽可能地关注评测数据集的多样性、完善数据集的构建方法和评测方式。

    b. 评测体系方法及相关研究还需要继续深入,当前对模型能力的覆盖程度仍有很大的进步空间,能力框架正在进一步完善。

    c. 目前主观评测尚未覆盖的能力维度,如“领域综合能力”和“通用综合能力”,也会在后续中进行迭代升级。