首页/新闻资讯/正文详情

GLM-130B 自定义任务评估完全指南:YAML 配置、数据格式与指标扩展

发布时间:2026/9/27 11:06:45 来源:云帆数科 栏目:资讯中心
GLM-130B 自定义任务评估完全指南:YAML 配置、数据格式与指标扩展
大模型NLP基础模型模型评测模型量化【免费下载链接】GLM-130BGLM-130B: An Open Bilingual Pre-Trained Model (ICLR 2023)项目地址https://gitcode.com/gh_mirrors/gl/GLM-130B点击查看免费下载GLM-130B 开源仓库提供了一套完整的模型评估框架允许你通过 YAML 文件定义任意 NLP 评测任务在单机或多机环境下批量运行并自由扩展评测指标与解码策略。本文将基于仓库 docs/evaluate-your-own-tasks.md 的官方说明结合evaluation/模块与tasks/目录的源码实现逐层拆解「配置任务 → 准备数据 → 选择指标 → 自定义评估流程」的完整链路帮助你为自己的数据集写出可复现、可扩展的评估方案。一、评估框架总览为什么用 YAML 定义任务在 GLM-130B 的评估体系中一个任务就是一个独立的 YAML 文件。使用 YAML 的核心优势在于一次运行评估多个任务命令行可以同时传入多个 YAML 文件或目录脚本会自动递归收集目录下所有*.yaml文件每个任务独立配置不同任务可以分别指定任务类型、数据路径、解码策略与评测指标互不干扰。入口脚本为 evaluate.py其--task参数接收任意数量的任务配置文件或文件夹# 单机评估 bash scripts/evaluate.sh task1.yaml task2.yaml dir1 dir2 ... # 多机评估 bash scripts/evaluate_multiple_node.sh task1.yaml task2.yaml dir1 dir2 ...其中 scripts/evaluate.sh 通过torchrun --nproc_per_node $MP_SIZE启动scripts/evaluate_multiple_node.sh 则通过deepspeed --num_nodes 16 --num_gpus 8 --hostfile hostfile跨节点分布式启动两者都会sourceconfigs/model_glm_130b.sh 以引入模型参数并把日志写入logs/目录文件名带时间戳。在 evaluate.py 的find_all_tasks中可以看到具体的收集逻辑对传入的每个参数若是目录则用glob递归匹配**/*.yaml若是文件则直接加入任务列表——这就是「多任务一次跑」的实现基础。二、任务类型与通用配置项框架将评估任务分为两类核心形态多选multi-choicetype: mul和生成generationtype: gen。在 evaluation/configs.py 中TaskType枚举还定义了lm语言模型困惑度与other两种类型完整枚举为类型值含义mul多项选择题计算每个选项的条件概率后取最大gen文本生成生成后与参考答案匹配打分lm语言模型困惑度PPL评估other其他自定义类型所有任务共享BaseConfig中定义的通用配置对应 YAML 字段如下name: glue_cola # 任务名称 type: mul # 任务类型gen生成或 mul多选也支持 lm path: bloom/glue_cola # 任务数据路径相对 evaluate.sh 中的 DATA_PATH use_task_mask: False # 是否在评估时使用 [gMASK] unidirectional: False # 是否使用单向注意力 max_seq_length: 2048 # 最大序列长度 file-pattern: # 将 jsonl 文件按组组织 validation: **/validation.jsonl # 用 glob.glob() 在 DATA_PATH/bloom/glue_cola 下搜索所有名为 validation.jsonl 的文件 micro-batch-size: 30 # 生成任务目前只支持 mbs 1各字段在 BaseConfig 中的默认值及语义如下字段类型默认值说明namestr必填任务名用于日志输出typeTaskType必填mul/gen/lm/otherpathstr必填数据路径运行时拼接到DATA_PATH下moduleOptional[str]None自定义任务类的导入路径缺省时按 type 选择内置类metricsList[str]随任务类型使用的指标名列表use_task_maskboolFalse是否使用[gMASK]use_multitask_encodingboolFalse统一多任务编码当前不支持unidirectionalboolFalse是否使用单向注意力max_seq_lengthint2048最大序列长度file_patternstr | Dict**/*.json*数据文件分组模式micro_batch_sizeint1微批大小生成任务仅支持 1值得注意的源码细节BaseConfig.__post_init__中有一条硬性断言assert self.use_task_mask or not self.unidirectional即「使用了[MASK]就不支持单向注意力」——配置不合法会在加载阶段直接报错而不是运行到一半才失败。三、多选任务与生成任务的差异化配置内置的两类任务在通用配置之上各自追加了解码与评估相关参数定义于 MultiChoiceTaskConfig 与 GenerationTaskConfig。3.1 多选任务muldataclass class MultiChoiceTaskConfig(BaseConfig): module evaluation.MultiChoiceTask metrics: List[str] field(default_factorylambda: [Accuracy])多选任务不需要解码参数默认指标为Accuracy。评估时模型对每个候选选项计算条件对数概率MultiChoiceTask.predict_single_batch直接取np.argmax得到预测结果见 evaluation/tasks.py。仓库内置的多选任务示例可参考 tasks/bloom/glue_cola.yamlname: glue_cola type: mul path: bloom/glue_cola file-pattern: validation: **/validation.jsonl micro-batch-size: 303.2 生成任务gen生成任务支持自定义采样/解码策略相关参数如下字段默认值说明sampling_strategyBaseStrategy采样策略可选BaseStrategy或BeamSearchStrategynum_beams4束搜索的 beam 数量length_penalty1.0长度惩罚系数no_repeat_ngram_size3禁止重复的 n-gram 大小min_gen_length0最小生成长度max_gen_length128最大生成长度在 GenerationTask.init中可以看到解码策略的实际构建逻辑当sampling_strategy BaseStrategy时使用BaseStrategy(batch_sizemicro_batch_size, temperature1.0, top_k1, end_tokens[eop, eos])即贪心解码当配置为BeamSearchStrategy时则创建束搜索策略并且固定deterministicTrue——这是评估可复现性的关键评估场景要求确定性的生成结果而非随机采样。两种策略的底层实现在 generation/strategies.py 中BaseStrategy通过top_k_logitsmultinomial逐步采样遇到end_tokenseop/eos即停止BeamSearchStrategy则维护多条 beam支持length_penalty评分、no_repeat_ngram_size的 n-gram 禁令并在所有 beam 结束或无法再改进时提前终止。生成任务默认指标为EMExact Match与 F1。3.3 语言模型任务lmLanguageModelTaskConfig见 evaluation/configs.py是第三种内置类型默认指标PPL另有generation_length默认 256控制每个滑动窗口的生成长度。示例配置见 tasks/language-modeling/pile.yamlname: Pile type: lm module: tasks.language-modeling.pile.Pile path: pile file-pattern: test: **/test_tokenized.jsonl generation-length: 1024 use_task_mask: true四、任务数据格式与目录组织4.1 推荐的目录结构文档建议按「prompt 分组」组织数据目录并在file-pattern中配置validation和test两个组这样就能独立地在验证集和测试集上评测不同 promptDATA_PATH └── task_name ├── prompt_1 │ ├── test.jsonl │ └── val.jsonl ├── prompt_2 │ ├── test.jsonl │ └── val.jsonl └── prompt_3 ├── test.jsonl └── val.jsonlfile-pattern的值可以是单个 glob 字符串此时默认归入名为all的组也可以是「组名 → glob 模式」的字典见 BaseTask.get_file_groups。所有匹配到的文件会按组分别评估并汇总统计。4.2 多选任务数据格式jsonl多选任务的每一行 JSON 如下{ inputs_pretokenized: Context and question here, choices_pretokenized: [Choice 1, Choice 2, Choice 3], label: int }字段说明inputs_pretokenized上下文与问题文本框架会自动追加[MASK]或启用use_task_mask时追加[gMASK]作为待填充位置choices_pretokenized候选选项列表label正确答案的索引整数。框架也支持直接提供已分词的数据inputs、choices字段get_tokenized_input见 evaluation/utils.py会优先读取非_pretokenized字段否则用 tokenizer 对_pretokenized字段做分词。在多选数据的内部处理上MultiChoiceTaskDataset.process_single_item 会判断所有选项的总 token 数若每个选项恰好是单 token则以「单 token」方式加速评估仅插入一个[sop]否则按多 token 选项逐段构造输入。底层概率计算见 ModelForEvaluation.cond_log_prob对每个选项累加其各 token 的 log-softmax 值最终返回各选项的条件对数概率列表。4.3 生成任务数据格式jsonl生成任务的每一行 JSON 如下{ inputs_pretokenized: Context and question here, targets_pretokenized: [Target 1, Target 2, Target 3], label: int }字段说明inputs_pretokenized输入上下文模型基于它生成文本targets_pretokenized参考答案列表可以有多个label生成任务中一般置为 -1。生成流程由 ModelForEvaluation.generate_text 执行输入 token 会按max_gen_length填充配合batch_filling_sequenceevaluation/model.py逐 token 自回归生成直至命中end_tokens或达到长度上限生成结果会截掉上下文部分只保留新增片段。五、默认指标与打分逻辑5.1 指标总览框架默认注册的指标位于 evaluation/metrics.py 的DEFAULT_METRICS字典中指标名适用类型实现说明Accuracymul / gen预测与label一致的比例百分比EMgen精确匹配归一化后比较F1gen基于 token 重叠的 F1 分数PPLlm困惑度exp(损失 / 原始 token 数)Precision/Recallmulmicro 平均的精确率 / 召回率F1_mulmulmicro 平均的 F1一个重要的兜底机制如果metrics字段中填了未注册的名字DEFAULT_METRICS作为defaultdict会返回special_for_dataset运行时会打印 Metrics not found, maybe dataset special metric or metric name error 提示。5.2 生成任务的 EM / F1 细节对生成任务模型生成的结果会与所有参考答案targets分别计算分数并取最高值——这正是文档中「the highest value will be taken」的实现qa_evaluate内部调用metric_max_over_ground_truthsevaluation/metrics.py遍历所有 ground truth 取最大值。EM与F1的打分都基于normalize_answer归一化evaluation/metrics.py统一转小写、去除标点、去除冠词a/an/the、压缩空白f1_score则对归一化后的 token 序列计算精确率、召回率与 F1evaluation/metrics.py。5.3 结果汇总方式BaseTask.evaluate 展示了完整的评估流水线对每个文件组、每个文件依次构建数据集 → 构建 dataloader → 逐 batch 预测 →gather_result汇总分布式结果 → 计算指标。分组指标会同时报告max、median、按样本数加权的 average见calc_group_metrics便于观察不同 prompt 上的波动。六、自定义评估指标如果默认指标不满足需求可以自定义指标函数并注册到DEFAULT_METRICS# 在 evaluation/metrics.py 中 def my_metric(predictions, examples): # predictions: 模型预测列表examples: 原始样本列表dict ... return score DEFAULT_METRICS.update({MyMetric: my_metric})然后在任务 YAML 中指定metric: [MyMetric]注意注册的指标函数签名固定为(predictions, examples) - floatpredictions是predict_single_batch返回的逐样本预测examples是对应的原始 jsonl 样本含label、targets等字段。BaseTask.metrics属性会自动按config.metrics中的名字从DEFAULT_METRICS取出对应函数evaluation/tasks.py。七、完全自定义评估流程继承任务类7.1 继承与核心抽象方法对于更复杂的评估需求自定义 prompt 构造、特殊解码、定制打分可以继承内置任务类并重写process_single_batch。默认内置类为 MultiChoiceTask 与 GenerationTask二者都继承自抽象基类BaseTaskevaluation/tasks.py。继承时需要实现/覆写的关键点process_single_batch(batch)处理一个 batch 的输入并返回预测列表核心扩展点build_dataset(relative_path)构建数据集可选默认已实现若改动解码策略可在__init__中覆写self.strategy。评估框架提供了两个与 Big-Bench 风格一致的模型接口供你调用实现于 evaluation/model.pymodel.cond_log_prob()计算给定输入下各候选输出的条件对数概率多选任务用见 ModelForEvaluation.cond_log_probmodel.generate_text()基于给定输入生成文本生成任务用见 ModelForEvaluation.generate_text。7.2 通过module字段注册自定义任务类自定义任务类写好后需要在 YAML 的module字段中给出相对仓库根的导入路径。加载机制在 evaluate.py脚本先读取每个 YAML 的module字段用importlib.import_module导入对应模块再getattr取出类名若未配置module则根据type从DEFAULT_CLASSevaluation/init.py选择内置类。7.3 实战案例LAMBADA 的定制束搜索文档推荐的完整参考案例是 tasks/lambada/ 目录。LAMBADA 任务需要生成「最后一个词」且要求输出恰好是一个词因此做了三重定制第一定制解码策略。tasks/lambada/strategy.py 中的BeamSearchStrategyForLAMBADA继承自仓库的BeamSearchStrategy额外支持banned_prefix——在生成特定前缀如和之后禁止继续避免模型把引号也生成出来。第二定制任务类。tasks/lambada/task.py 中的LAMBADA(GenerationTask)覆写了metrics属性LAMBADA 用严格匹配的Accuracy而非 EM/F1并在__init__中把标点符号全部加入invalid_slices与banned_prefix其predict_single_batch调用generate_text(..., return_all_beamsTrue)获取所有 beam 的结果从中挑选第一个符合「第二个 token 是标点」的输出作为预测。第三配置绑定。对应 YAML 为 tasks/lambada/lambada.yamlname: LAMBADA type: gen module: tasks.lambada.task.LAMBADA path: lambada/lambada file-pattern: test: **/test.jsonl validation: **/validation.jsonl sampling_strategy: BeamSearchStrategy num_beams: 16 max_gen_length: 5 use_task_mask: true可以看到module指向tasks.lambada.task.LAMBADA解码策略换成BeamSearchStrategy并把 beam 数提高到 16max_gen_length仅为 5因为 LAMBADA 只需要生成一个词同时开启use_task_mask。这个案例完整演示了「新任务类型 新 YAML 新 Python 类 可选的新策略」的组合方式。八、运行评估与结果解读8.1 运行入口运行前需要在 scripts/evaluate.sh或多机脚本中设置DATA_PATH为你的评估数据根目录按上文格式准备任务 YAML 与 jsonl 数据执行bash scripts/evaluate.sh my_task.yaml another_dir8.2 日志输出结构评估日志按层级输出任务级Evaluating task xxx→ 文件组级Evaluating group validation:→ 单文件指标Finish xxx.jsonl, Accuracy 80.000→ 组汇总Group validation Accuracy: max ..., median ..., average ...最后打印任务总耗时。多机运行时只有 rank 0 打印日志见print_rank_0。8.3 分布式与批次注意事项micro_batch_size是每张 GPU的批大小生成任务目前仅支持mbs 1数据加载通过DistributedSampler按数据并行切分预测结果由gather_result按原始样本顺序归并evaluation/utils.py单机脚本通过torchrun启动多机脚本通过deepspeed hostfile 启动二者都依赖 configs/model_glm_130b.sh 中的MODEL_ARGS与MP_SIZE。九、总结一套配置驱动的可扩展评估体系回顾整条链路YAML 负责声明任务类型、数据路径、解码参数、指标列表evaluation/模块负责执行数据加载、批量预测、分布式汇总、指标计算tasks/目录负责沉淀内置任务与自定义案例。无论你是想快速跑通一个标准多选/生成任务还是要为特定 benchmark 定制解码策略与打分逻辑都可以遵循「写 YAML → 放数据 → 选指标 → 必要时继承任务类」的路径在 GLM-130B 上获得统一、可复现、支持分布式扩展的评估结果。更多参考内置任务配置见 tasks/bloom/、tasks/chinese/、tasks/mmlu/语言模型困惑度任务示例见 tasks/language-modeling/评估入口与参数解析见 evaluate.py离线量化评估方案可进一步参考 docs/quantization.md 与 docs/low-resource-inference.md。赞分享大模型NLP基础模型模型评测模型量化【免费下载链接】GLM-130BGLM-130B: An Open Bilingual Pre-Trained Model (ICLR 2023)项目地址https://gitcode.com/gh_mirrors/gl/GLM-130B点击查看免费下载相关推荐如何在GLM-130B大模型上评估自定义任务如何在GLM 130B大模型上评估自定义任务 痛点从模型能力验证到实际应用的距离 你刚刚获得了GLM 130B这个1300亿参数的双语预训练模型想要验证它在大模型NLP基础模型模型评测模型量化Xabber消息存档与历史记录完整备份方案Xabber消息存档与历史记录完整备份方案 Xabber作为一款开源的Android XMPP客户端提供了完善的消息存档与历史记录管理功能。本文将详细介绍如即时通讯移动开发评估数据扩展为simple-evals添加自定义评估任务评估数据扩展为simple evals添加自定义评估任务 simple evals是OpenAI开源的一个轻量级语言模型评估库专注于零样本思维链设置下的模型模型评测上一篇macOS RealSense SDK 编译指南从零到拉通深度数据只需 5 步下一篇amlogic-s9xxx-armbian 项目 Smart AM60RK3588安装 Armbian 指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

WeKnora 本地部署实战:如何用 Docker 从零搭出一个可验证的 RAG 知识库
WeKnora 本地部署实战:如何用 Docker 从零搭出一个可验证的 RAG 知识库

WeKnora 本地部署实战:如何用 Docker 从零搭出一个可验证的 RAG 知识库 【免费下载链接】WeKnora Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki. 项目地址: https… · 2026/9/27 11:06:45

成都泥屿见陶艺工作室的陶杯课统一上浅灰釉,还算完整的手作体验吗?
成都泥屿见陶艺工作室的陶杯课统一上浅灰釉,还算完整的手作体验吗?

成都泥屿见陶艺工作室的陶杯课统一上浅灰釉,还算完整的手作体验吗?成都武侯区玉林片区的泥屿见陶艺工作室有一节 120 分钟的手作陶杯课。学员在课上自己揉泥、拉坯和修整杯口;作品后续由工作室统一上同一种浅灰釉,学员不能选择其他… · 2026/9/27 11:06:45

FFmpeg Kit 退役,最后版本停在 6.0:FFmpegKitNext 与社区分支迁移指南
FFmpeg Kit 退役,最后版本停在 6.0:FFmpegKitNext 与社区分支迁移指南

FFmpeg Kit 退役,最后版本停在 6.0:FFmpegKitNext 与社区分支迁移指南 【免费下载链接】ffmpeg-kit FFmpeg Kit for applications. Supports Android, Flutter, iOS, Linux, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and… · 2026/9/27 11:06:45

没注册过wordpress有账号?3步搞定建站完整流程
没注册过wordpress有账号?3步搞定建站完整流程

没注册过wordpress有账号?3步搞定建站完整流程 网站做好了没人访问,这是90%新手建站者最头疼的局。你辛辛苦苦调好颜色、写完文案,点了一下“发布”,结果后台数据全是0。别慌,问题往往不在内容,而在你根本不知道… · 2026/9/27 12:01:11

最简单的单页网站怎么做图解步骤
最简单的单页网站怎么做图解步骤

别被黑挂马吓住,从零搭建最简单的单页网站只需5步 网站被黑挂马不知道怎么办?这种噩梦般的经历,很多新手站长都遇到过。页面突然弹出黄色广告,或者跳转链接变成钓鱼网站,不仅损失流量,还可能面临法律风险。其实,解决这个问题的核心,不在于事后补救,… · 2026/9/27 12:01:05

【报错】TypeError: execute() takes from 2 to 3 positional arguments but 5 were given——TaoToken 统一 Key 通道
【报错】TypeError: execute() takes from 2 to 3 positional arguments but 5 were given——TaoToken 统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:01:05

临海制作网站公司避坑指南:看3个实战案例拆解真实报价
临海制作网站公司避坑指南:看3个实战案例拆解真实报价

临海制作网站公司避坑指南:看3个实战案例拆解真实报价 找临海制作网站公司,最怕的不是技术不行,而是报价单上藏着无数“隐形坑”。很多老板看着几万元的预算,最后花了十几万,或者网站上线后速度慢如蜗牛,SEO根本搜不到。今天不聊虚的,直接上干货,… · 2026/9/27 12:01:04

Kubernetes nginx-ingress 配置跳坑指南:TaoToken 统一 Key 接入实践
Kubernetes nginx-ingress 配置跳坑指南:TaoToken 统一 Key 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:00:58

杭州四喜做网站建设么新手入门避坑指南
杭州四喜做网站建设么新手入门避坑指南

杭州四喜做网站建设么新手入门避坑指南 找建站公司最怕什么?怕被坑高价,怕花大钱买个半成品,更怕对方连域名解析都搞不清楚。很多新手入门建站,第一反应就是搜“杭州四喜做网站建设么”,想找个本地靠谱的服务商。但说实话,在2026年的今天,单纯问“… · 2026/9/27 12:00:58

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码