Text Generation
Transformers
Safetensors
Chinese
English
qwen3
qwen
scoring
grading
evaluation
llm-judge
conversational
text-generation-inference
Instructions to use blue-tundra-42/code_and_model with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use blue-tundra-42/code_and_model with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="blue-tundra-42/code_and_model") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("blue-tundra-42/code_and_model") model = AutoModelForCausalLM.from_pretrained("blue-tundra-42/code_and_model") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- vLLM
How to use blue-tundra-42/code_and_model with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "blue-tundra-42/code_and_model" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "blue-tundra-42/code_and_model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/blue-tundra-42/code_and_model
- SGLang
How to use blue-tundra-42/code_and_model with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "blue-tundra-42/code_and_model" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "blue-tundra-42/code_and_model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "blue-tundra-42/code_and_model" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "blue-tundra-42/code_and_model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use blue-tundra-42/code_and_model with Docker Model Runner:
docker model run hf.co/blue-tundra-42/code_and_model
File size: 6,137 Bytes
f1f682e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | [English](README.md) | [中文](README-zh.md)
---
# UNO评估框架
为了更通用地评估各种Omni评测集,我们构建了一个轻量级的Omni评估框架,并发布了一个高性能的打分模型用以支持评分,你可以自由且便捷地基于此框架新增数据集或评测模型。接下来,我们将以**UNO-Bench**和**Qwen-2.5-Omni-7B**为例,介绍如何运行框架。
# 🚀 快速开始
## 🛠️ 环境准备
运行前请确保安装以下Python核心依赖。注意:由于vLLM的安装涉及PyTorch、CUDA等复杂依赖,建议在新的虚拟环境中进行安装,以避免潜在的依赖冲突问题。
```bash
pip install -r requirements.txt
```
接下来你可以通过以下命令下载必要的模型权重和数据集:
```bash
huggingface-cli download xxx --repo-type dataset --local-dir /path/to/UNO-Bench
huggingface-cli download xxx --local-dir /path/to/UNO-Scorer
huggingface-cli download Qwen/Qwen2.5-Omni-7B --local-dir /path/to/Qwen2.5-Omni
```
## 🎯 实验复现
通过执行如下代码,你可以复现论文中Qwen-2.5-Omni-7B的实验结果。记得将**MODEL_PATH**、**DATASET_LOCAL_DIR**和**SCORER_MODEL_PATH**替换为你本地数据集路径。
```bash
bash examples/run_unobench_qwen_omni_hf.sh
```
更推荐执行vLLM版本的推理服务,具有更好的性能表现。
```bash
bash examples/run_unobench_qwen_omni_vllm.sh
```
* 程序采用串行逻辑进行评估,依次执行:`启动推理服务 -> 结果生成 -> 资源释放 -> 启动打分服务 -> 计算分数 -> 资源释放`
* 支持断点续评,推理进度和打分进度均会以一定间隔保存到本地。
## 📈 Compositional Law
Compositional Law的拟合曲线可以参考如下代码。
```python
python3 compositional_law.py
```
## 🤖 只使用打分模型
我们推荐使用vLLM以获取更高的效率,你可以参考:
```bash
bash examples/test_scorer_vllm.sh
```
或者基于transformers,但是效率较低:
```python
python3 examples/test_scorer_hf.py
```
## ⚙️ 配置指南
在运行之前,**必须** 修改 `run_unobench_qwen_omni_*.sh` 顶部的配置区域以适配你的环境。
### 1. 推理模型配置 (Target Model)
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| `MODEL_NAME` | 模型注册名称 (对应 `models` 代码中定义的名称) | `"Qwen-2.5-Omni-7B" "VLLMClient"` |
| `MODEL_PATH` | 模型权重所在的本地绝对路径 | `/path/to/Qwen2.5-Omni` |
| `INFERENCE_BACKEND` | 推理后端选择:`"vllm"` 或 `"hf"` | `"vllm"` |
| `TARGET_GPU_IDS` | 推理阶段使用的 GPU 编号 | `"0,1"` |
| `TARGET_TP_SIZE` | 推理模型的 Tensor Parallelism 大小 | `2` |
| `TARGET_PORT` | vLLM 服务端口 | `8000` |
### 2. 打分模型配置 (Scorer Model)
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| `SCORER_MODEL_PATH` | 打分模型UNO-Scorer的路径 | `/path/to/UNO-Scorer` |
| `SCORER_GPU_IDS` | 打分阶段使用的 GPU 编号 | `"0,1"` |
| `SCORER_PORT` | 打分服务vLLM端口 | `8001` |
### 3. 数据集与路径
| 变量名 | 说明 |
| :--- | :--- |
| `DATASET_NAME` | 评测数据集名称 (如 `"UNO-Bench"`) |
| `HF_CACHE_DIR` | HuggingFace 缓存或多媒体数据目录,自动下载的数据集会保存在此处 |
|`DATASET_LOCAL_DIR`|数据集本地路径, 程序会优先从DATASET_LOCAL_DIR读取数据,否则自动下载至HF_CACHE_DIR|
| `EXP_MARKING` | 实验标记后缀 (如 `_test`),用于区分实验设置以及输出文件名 |
## 🌀 运行评测
配置完成后,授予脚本执行权限并运行:
```bash
bash run_eval.sh
```
### 脚本执行流程详解
1. **Stage 1: Inference (推理)**
* 若选择 `vllm` 模式,脚本将在后台启动目标模型的 API Server。
* 运行 `eval.py --mode inference` 进行数据推理。
* **关键步骤**:推理完成后,脚本会自动 kill 掉目标模型的 vLLM 进程,完全释放 GPU 显存。
2. **Stage 2: Scorer Setup (启动打分)**
* 在后台启动打分模型(Scorer)的 vLLM 服务。
3. **Stage 3: Evaluation (评分)**
* 运行 `eval.py --mode scoring`,将生成结果发送给打分模型进行评估。
4. **Cleanup (清理)**
* 任务结束,自动关闭打分模型服务。
## 📊 结果输出
评测结果将生成 JSON 文件,默认保存在 `./eval_results/` 目录下。
* **文件名格式**: `{MODEL_NAME}{EXP_MARKING}:{DATASET_NAME}.json`
## 📂 极简开发指南
```text
.
├── run_eval.sh # [主程序] 负责配置参数、服务生命周期管理及流程控制
├── eval.py # [执行脚本] 负责数据加载、API交互及结果存储
├── utils/ # [依赖] 通用工具函数集
├── models/ # [依赖] 模型注册与加载
└── benchmarks/ # [依赖] 数据集注册与加载
```
项目主要分为评测集和评测模型两部分,你可以在benchmarks/下注册新数据集,在models/下注册新模型。
### 新增评测集
1. 在benchmarks/下新建一个新数据集.py文件,如unobench.py,内部继承BaseDataset类,并实现其中的抽象方法。
- `load_and_prepare`,下载并加载评测集,并将每条数据组织为`utils.EvaluationRecord`格式。
- `build_message`,构建发送到模型侧的消息,格式为OpenAI Chat Message。
- `build_score_message`,构建发送到打分模型的消息,格式为OpenAI Chat Message。
- `compute_score`,计算单条数据的分数。
- `compute_metrics`,计算整个数据集的所有指标。
2. 在__init__.py中注册该数据集。
### 新增评测模型
1. 在models/下新建一个新模型.py文件,如何qwen_2d5_omni_7b.py,内部继承BaseModel类,并实现其中的抽象方法。
- `load_model`,加载模型。
- `generate`,单次调用模型接口生成文本。
- `generate_batch`,批量调用模型接口生成文本。
2. 在__init__.py中注册该模型。
## ⚠️ 注意事项
* **路径检查**: 请确保脚本中的路径已修改为你服务器上的实际路径。 |