🤗 Hugging Face • ⏬ 数据 • 📖 教程
中文 | English
DevOps-Eval 是一个专为 DevOps 领域基础模型设计的综合评估套件。我们希望 DevOps-Eval 能帮助开发者,尤其是 DevOps 领域的开发者,跟踪模型的进展并分析其重要优势和不足。
📚 本仓库包含与 DevOps 相关的问题和练习,包括 AIOps、工具学习;
💥️ 目前有 7486 道多选题,涵盖 8 个不同的通用类别,如下图所示。
🔥 AIOps 子类别共有 2840 个样本,涵盖了日志解析、时间序列异常检测、时间序列分类、时间序列预测和根因分析等场景。
🔧 工具学习子类别共有 1509 个样本,涵盖了 59 个领域的 239 个工具场景。
🔔 新闻
- [2023.12.27] 添加 1509 个工具学习样本,涵盖 59 个领域的 239 个工具类别;发布相关评估排行榜;
- [2023.11.27] 添加 487 个运维场景样本和 640 个时间序列预测样本;更新排行榜;
- [2023.10.30] 添加 AIOps 排行榜。
- [2023.10.25] 添加 AIOps 样本,包括日志解析、时间序列异常检测、时间序列分类和根因分析。
- [2023.10.18] 更新初始排行榜...
📜 目录
🏆 排行榜
以下是我们在初始发布中评估的模型的零样本和五样本准确率。我们注意到,对于许多指令微调的模型,五样本性能优于零样本。
👀 DevOps
零样本
模型名称 | 规划 | 编码 | 构建 | 测试 | 发布 | 部署 | 运维 | 监控 | 平均 |
---|---|---|---|---|---|---|---|---|---|
DevOpsPal-14B-Chat | 60.61 | 78.35 | 84.86 | 84.65 | 87.26 | 82.75 | 69.89 | 79.17 | 78.23 |
DevOpsPal-14B-Base | 54.55 | 77.82 | 83.49 | 85.96 | 86.32 | 81.96 | 71.18 | 82.41 | 78.23 |
Qwen-14B-Chat | 60.61 | 75.4 | 85.32 | 84.21 | 89.62 | 82.75 | 69.57 | 80.56 | 77.18 |
Qwen-14B-Base | 57.58 | 73.81 | 84.4 | 85.53 | 86.32 | 81.18 | 70.05 | 80.09 | 76.19 |
Baichuan2-13B-Base | 60.61 | 69.42 | 79.82 | 79.82 | 82.55 | 81.18 | 70.37 | 83.8 | 73.73 |
Baichuan2-13B-Chat | 60.61 | 68.43 | 77.98 | 80.7 | 81.6 | 83.53 | 67.63 | 84.72 | 72.9 |
DevOpsPal-7B-Chat | 54.55 | 69.11 | 83.94 | 82.02 | 76.89 | 80 | 64.73 | 77.78 | 71.92 |
DevOpsPal-7B-Base | 54.55 | 68.96 | 82.11 | 78.95 | 80.66 | 76.47 | 65.54 | 78.7 | 71.69 |
Qwen-7B-Base | 53.03 | 68.13 | 78.9 | 75.44 | 80.19 | 80 | 65.06 | 80.09 | 71.09 |
Qwen-7B-Chat | 57.58 | 66.01 | 80.28 | 79.82 | 76.89 | 77.65 | 62.64 | 79.17 | 69.75 |
Baichuan2-7B-Chat | 54.55 | 63.66 | 77.98 | 76.32 | 71.7 | 73.33 | 59.42 | 79.63 | 66.97 |
Internlm-7B-Chat | 60.61 | 62.15 | 77.06 | 76.32 | 66.98 | 74.51 | 60.39 | 78.24 | 66.27 |
Baichuan2-7B-Base | 56.06 | 62.45 | 75.69 | 70.61 | 74.06 | 69.8 | 61.67 | 75.93 | 66.21 |
Internlm-7B-Base | 54.55 | 58.29 | 79.36 | 78.95 | 77.83 | 70.59 | 65.86 | 75.93 | 65.99 |
五样本
模型名称 | 规划 | 编码 | 构建 | 测试 | 发布 | 部署 | 运维 | 监控 | 平均分 |
---|---|---|---|---|---|---|---|---|---|
DevOpsPal-14B-Chat | 63.64 | 79.49 | 81.65 | 85.96 | 86.79 | 86.67 | 72.95 | 81.48 | 79.69 |
DevOpsPal-14B-Base | 62.12 | 80.55 | 82.57 | 85.53 | 85.85 | 84.71 | 71.98 | 80.09 | 79.63 |
Qwen-14B-Chat | 65.15 | 76 | 82.57 | 85.53 | 84.91 | 84.31 | 70.85 | 81.48 | 77.81 |
Qwen-14B-Base | 66.67 | 76.15 | 84.4 | 85.53 | 86.32 | 80.39 | 72.46 | 80.56 | 77.56 |
Baichuan2-13B-Base | 63.64 | 71.39 | 80.73 | 82.46 | 81.13 | 84.31 | 73.75 | 85.19 | 75.8 |
Qwen-7B-Base | 75.76 | 72.52 | 78.9 | 81.14 | 83.96 | 81.18 | 70.37 | 81.94 | 75.36 |
Baichuan2-13B-Chat | 62.12 | 69.95 | 76.61 | 84.21 | 83.49 | 79.61 | 71.98 | 80.56 | 74.12 |
DevOpsPal-7B-Chat | 66.67 | 69.95 | 83.94 | 81.14 | 80.19 | 82.75 | 68.6 | 76.85 | 73.61 |
DevOpsPal-7B-Base | 69.7 | 69.49 | 82.11 | 81.14 | 82.55 | 82.35 | 67.15 | 79.17 | 73.35 |
Qwen-7B-Chat | 65.15 | 66.54 | 82.57 | 81.58 | 81.6 | 81.18 | 65.38 | 81.02 | 71.69 |
Baichuan2-7B-Base | 60.61 | 67.22 | 76.61 | 75 | 77.83 | 78.43 | 67.31 | 79.63 | 70.8 |
Internlm-7B-Chat | 60.61 | 63.06 | 79.82 | 80.26 | 67.92 | 75.69 | 60.06 | 77.31 | 69.21 |
Baichuan2-7B-Chat | 60.61 | 64.95 | 81.19 | 75.88 | 71.23 | 75.69 | 64.9 | 79.17 | 69.05 |
Internlm-7B-Base | 62.12 | 65.25 | 77.52 | 80.7 | 74.06 | 78.82 | 63.45 | 75.46 | 67.17 |
🔥 AIOps
零样本
模型名称 | 日志解析 | 根因分析 | 时间序列异常检测 | 时间序列分类 | 时间序列预测 | 平均分 |
---|---|---|---|---|---|---|
Qwen-14B-Base | 66.29 | 58.8 | 25.33 | 43.5 | 62.5 | 52.25 |
DevOpsPal-14B-Base | 63.14 | 53.6 | 23.33 | 43.5 | 64.06 | 50.49 |
Qwen-14B-Chat | 64.57 | 51.6 | 22.67 | 36 | 62.5 | 48.94 |
DevOpsPal-14B-Chat | 60 | 56 | 24 | 43 | 57.81 | 48.8 |
Qwen-7B-Base | 50 | 39.2 | 22.67 | 54 | 43.75 | 41.48 |
DevOpsPal-7B-Chat | 56.57 | 30.4 | 25.33 | 45 | 44.06 | 40.92 |
Baichuan2-13B-Chat | 64 | 18 | 21.33 | 37.5 | 46.88 | 39.3 |
Qwen-7B-Chat | 57.43 | 38.8 | 22.33 | 39.5 | 25.31 | 36.97 |
Internlm-7B-Chat | 58.86 | 8.8 | 22.33 | 28.5 | 51.25 | 36.34 |
Baichuan2-7B-Chat | 60.86 | 10 | 28 | 34.5 | 39.06 | 36.34 |
Baichuan2-7B-Base | 53.43 | 12.8 | 27.67 | 36.5 | 40.31 | 35.49 |
Baichuan2-13B-Base | 54 | 12.4 | 23 | 34.5 | 42.81 | 34.86 |
DevOpsPal-7B-Base | 46.57 | 20.8 | 25 | 34 | 38.75 | 33.94 |
Internlm-7B-Base | 48.57 | 18.8 | 23.33 | 37.5 | 33.75 | 33.1 |
一次性测试
模型名称 | 日志解析 | 根因分析 | 时间序列异常检测 | 时间序列分类 | 时间序列预测 | 平均 |
---|---|---|---|---|---|---|
DevOpsPal-14B—Chat | 66.29 | 80.8 | 23.33 | 44.5 | 56.25 | 54.44 |
DevOpsPal-14B—Base | 60 | 74 | 25.33 | 43.5 | 52.5 | 51.13 |
Qwen-14B-Base | 64.29 | 74.4 | 28 | 48.5 | 40.31 | 50.77 |
Qwen-7B-Base | 56 | 60.8 | 27.67 | 44 | 57.19 | 49.44 |
Qwen-14B-Chat | 49.71 | 65.6 | 28.67 | 48 | 42.19 | 46.13 |
Baichuan2-13B-Base | 56 | 43.2 | 24.33 | 41 | 46.88 | 42.89 |
Baichuan2-7B-Chat | 58.57 | 31.6 | 27 | 31.5 | 51.88 | 41.83 |
DevOpsPal-7B—Base | 52.86 | 44.4 | 28 | 44.5 | 36.25 | 41.2 |
Baichuan2-7B-Base | 48.29 | 40.4 | 27 | 42 | 40.94 | 39.86 |
Qwen-7B-Chat | 54.57 | 52 | 29.67 | 26.5 | 27.19 | 38.73 |
Baichuan2-13B-Chat | 57.43 | 44.4 | 25 | 25.5 | 30.63 | 37.75 |
DevOpsPal-7B—Chat | 56.57 | 27.2 | 25.33 | 41.5 | 33.44 | 37.46 |
Internlm-7B—Chat | 62.57 | 12.8 | 22.33 | 21 | 50.31 | 36.69 |
Internlm-7B—Base | 48 | 33.2 | 29 | 35 | 31.56 | 35.85 |
🔧 工具学习
函数调用填充器 | 数据集名称 | fccr | 1-fcffr | 1-fcfnr | 1-fcfpr | 1-fcfnir | aar |
---|---|---|---|---|---|---|---|
Qwen-14b-chat | luban | 61 | 100 | 97.68 | 63.32 | 100 | 69.46 |
Qwen-7b-chat | luban | 50.58 | 100 | 98.07 | 52.51 | 100 | 63.59 |
Baichuan-7b-chat | luban | 60.23 | 100 | 97.3 | 62.93 | 99.61 | 61.12 |
Internlm-chat-7b | luban | 47.88 | 100 | 96.14 | 51.74 | 99.61 | 61.85 |
Qwen-14b-chat | fc_data | 98.37 | 99.73 | 99.86 | 98.78 | 100 | 81.58 |
Qwen-7b-chat | fc_data | 99.46 | 99.86 | 100 | 99.59 | 100 | 79.25 |
Baichuan-7b-chat | fc_data | 97.96 | 99.32 | 100 | 98.64 | 100 | 89.53 |
Internlm-chat-7b | fc_data | 94.29 | 95.78 | 100 | 98.5 | 100 | 88.19 |
CodeLLaMa-7b | fc_data | 98.78 | 99.73 | 100 | 99.05 | 100 | 94.7 |
CodeLLaMa-7b-16 | fc_data | 98.1 | 99.87 | 99.73 | 98.5 | 100 | 93.14 |
CodeFuse-7b-4k | fc_data | 98.91 | 99.87 | 99.87 | 99.18 | 100 | 89.5 |
⏬ 数据
下载
- 方法1:下载zip文件(你也可以直接在浏览器中打开以下链接):
然后解压缩,你可以使用pandas加载数据:wget https://huggingface.co/datasets/codefuse-admin/devopseval-exam/resolve/main/devopseval-exam.zip
import os import pandas as pd File_Dir="devopseval-exam" test_df=pd.read_csv(os.path.join(File_Dir,"test","UnitTesting.csv"))
- 方法2:使用Hugging Face数据集直接加载数据集:
from datasets import load_dataset dataset=load_dataset(r"DevOps-Eval/devopseval-exam",name="UnitTesting") print(dataset['val'][0]) # {"id": 1, "question": "单元测试应该覆盖以下哪些方面?", "A": "正常路径", "B": "异常路径", "C": "边界值条件","D": 所有以上,"answer": "D", "explanation": ""} ```
- 方法3:使用ModelScope数据集直接加载数据集:
from modelscope.msdatasets import MsDataset MsDataset.clone_meta(dataset_work_dir='./xxx', dataset_id='codefuse-ai/devopseval-exam')
👀 注意事项
为了方便使用,我们整理了55个子类别对应的类别名处理程序和英文/中文名称。详情请参考category_mapping.json。格式如下:
{
"UnitTesting.csv": [
"unit testing",
"单元测试",
{"dev": 5, "test": 32}
"TEST"
],
...
"文件名":[
"英文名称",
"中文名称",
"样本数量",
"超级类别标签(在PLAN、CODE、BUILD、TEST、RELEASE、DEPOLY、OPERATE、MONITOR中选择1个)"
]
}
每个子类别由两个部分组成:dev和test。每个子类别的dev集包含5个带有解释的示例,用于少样本评估。test集用于模型评估。test部分的标签也已发布。
以下是"版本控制"的一个dev示例:
id: 4
问题:如何找到Git特定提交中已更改的文件列表?
A: 使用命令 `git diff --name-only SHA`
B: 使用命令 `git log --name-only SHA`
C: 使用命令 `git commit --name-only SHA`
D: 使用命令 `git clone --name-only SHA`
答案: A
解释:
分析原因:
git diff --name-only SHA命令会显示与SHA参数对应的提交中已修改的文件列表。参数--name-only让命令只输出文件名,而忽略其他信息。其它选项中的命令并不能实现此功能。
🔥 AIOps 样例示例
👀 👀 以日志解析和时间序列异常检测为例,以下是AIOps样例的简要展示:
日志解析
id: 0
问题:
以下是一些运行日志
0 04:21:15,429 WARN Cannot open channel to 2 at election address /10.10.34.12:3888
1 19:18:56,377 WARN ******* GOODBYE /10.10.34.11:52703 ********
2 19:13:46,128 WARN ******* GOODBYE /10.10.34.11:52308 ********
3 19:16:26,268 WARN ******* GOODBYE /10.10.34.11:52502 ********
4 09:11:16,012 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
5 16:37:13,837 WARN Cannot open channel to 2 at election address /10.10.34.12:3888
6 09:09:16,008 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
7 15:27:03,681 WARN Cannot open channel to 3 at election address /10.10.34.13:3888
日志的前三部分分别是索引、时间戳和日志级别。不考虑这三部分,假设日志中的变量用'<*>'表示,令牌之间用空格分隔。上述日志的具体日志模板是什么?
A: Notification time out: <*> 和 Connection broken for id <*>, my id = <*>, error =
B: Send worker leaving thread 和 Connection broken for id <*>, my id = <*>, error =
C: Received connection request /<*>:<*> 和 Interrupting SendWorker
D: Cannot open channel to <*> at election address /<*>:<*> 和 ******* GOODBYE /<*>:<*> ********
答案: D
解释:日志包含固定模板片段"Cannot open channel to <> at election address /<>:<>"和"****** GOODBYE /<>:<> ********",这两者都出现在选项D中。同时,其他选项中的模板片段与日志内容不匹配。因此,选项D最符合日志模板。
时间序列异常检测
id: 0
问题:
分析以下时间序列
[50,62,74,84,92,97,99,98,94,87,77,65,265,40,28,17,8,3,0,0,4,10,20,31,43,56,68,79,89,95,99,99,96,91,82,71,59,46,34,22,12,5,1,0,2,7,15,25,37,49]
请识别明显的异常点的索引。异常点通常指显著偏离数据整体趋势的点。
A: 46
B: 0
C: 37
D: 12
答案: D
解释:根据分析,给定时间序列中12点处的值265显著大于周围数据,表现出突增现象。因此,选择选项D是正确的。
🔧 工具学习样例示例
👀 👀 工具学习样例的数据格式与OpenAI的Function Calling兼容。
详情请参考tool_learning_info.md。
🚀 如何评估
如果您需要测试自己的huggingface格式模型,整体步骤如下:
- 编写模型的加载器函数。
- 为模型编写context_builder函数。
- 在配置文件中注册模型。
- 运行测试脚本。 如果模型在加载后不需要任何特殊处理,且输入不需要转换为特定格式(如chatml格式或其他人机对话格式),可以直接进行第4步启动测试。
1. 编写加载器函数
如果模型在加载后需要额外处理(如调整tokenizer),需要继承src.context_builder.context_builder_family.py
中的ModelAndTokenizerLoader
类,并重写相应的load_model
和load_tokenizer
函数。可以参考以下示例:
class QwenModelAndTokenizerLoader(ModelAndTokenizerLoader):
def __init__(self):
super().__init__()
pass
@override
def load_model(self, model_path: str):
# 方法实现
pass
@override
def load_tokenizer(self, model_path: str):
# 方法实现
pass
2. 为模型编写context_builder函数
如果输入需要转换为特定格式(如chatml格式或其他人机对话格式),需要继承src.context_builder.context_builder_family
中的ContextBuilder类,并重写make_context函数。该函数用于将输入转换为相应的所需格式。示例如下:
class QwenChatContextBuilder(ContextBuilder):
def __init__(self):
super().__init__()
@override
def make_context(self, model, tokenizer, query: str, system: str = "hello!"):
# 方法实现
pass
3. 在配置文件中注册模型
前往conf目录下的model_conf.json
文件,注册相应的模型名称以及该模型将使用的loader和context_builder。loader和context_builder只需写第一步和第二步中定义的类名即可。示例如下:
{
"Qwen-Chat": {
"loader": "QwenModelAndTokenizerLoader",
"context_builder": "QwenChatContextBuilder"
}
}
4. 执行测试脚本
运行以下代码启动测试:
python src/run_eval.py \
--model_path 模型路径 \
--model_name 配置中的模型名称 \
--model_conf_path 模型配置路径 \
--eval_dataset_list all \
--eval_dataset_fp_conf_path 数据集配置路径 \
--eval_dataset_type test \
--data_path 下载的devops_eval_data路径 \
--k_shot 0
👀 👀 具体评估过程请参考 📖 评估教程
🧭 待办事项
- 添加AIOps样例。
- 添加AIOps场景时间序列预测。
- 添加工具学习样例。
- 增加样本数量。
- 添加难度设置为困难的样本。
- 添加英文版样本。
🏁 许可证
本项目采用Apache许可证(版本2.0)。
😃 引用
如果您使用了我们的数据集,请引用我们的论文。
即将推出...
🗂 其他
📱 联系我们
✨ Star历史
🤝 友情链接
- Codefuse-ChatBot
- Codefuse-ChatBot 是一个开源的 AI 智能助手,旨在通过对话式访问工具、知识和平台集成,支持软件开发生命周期。
- Awesome AIGC 教程
- Awesome AIGC 教程收集了精心筛选的教程和资源,涵盖大型语言模型、AI 绘画和相关领域。