Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions docs/base_config_usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# BaseTestConfig 使用文档

## 概述

`BaseTestConfig` 是 InfiniLM 项目的统一配置基类,为各个测试脚本提供通用的命令行参数解析和配置管理功能。

## 特性

- **统一参数管理**: 提供所有测试脚本共用的基础参数
- **设备类型映射**: 支持多种硬件设备的自动类型转换
- **灵活扩展**: 使用 `parse_known_args()` 容错处理,允许脚本添加特定参数
- **类型安全**: 自动将设备字符串转换为对应的 `DeviceType` 枚举

## 支持的设备类型

| 设备名称 | DeviceType 枚举值 |
|---------|-----------------|
| `cpu` | `DEVICE_TYPE_CPU` |
| `nvidia` | `DEVICE_TYPE_NVIDIA` |
| `qy` | `DEVICE_TYPE_QY` |
| `cambricon` | `DEVICE_TYPE_CAMBRICON` |
| `ascend` | `DEVICE_TYPE_ASCEND` |
| `metax` | `DEVICE_TYPE_METAX` |
| `moore` | `DEVICE_TYPE_MOORE` |
| `iluvatar` | `DEVICE_TYPE_ILUVATAR` |
| `kunlun` | `DEVICE_TYPE_KUNLUN` |
| `hygon` | `DEVICE_TYPE_HYGON` |

## 通用参数说明

| 参数 | 类型 | 是否必需 | 默认值 | 说明 |
|------|------|---------|--------|------|
| `--model_path` | str | ✓ 是 | - | 模型文件路径 |
| `--device` | str | 否 | `cpu` | 目标设备类型(见上表) |
| `--ndev` | int | 否 | `1` | 使用的设备数量 |
| `--verbose` | flag | 否 | `False` | 启用详细输出模式 |

## 基本使用

### 1. 直接使用(测试)

```bash
python scripts/base_config.py --model_path /path/to/model
```

### 2. 在脚本中继承使用

```python
from base_config import BaseTestConfig

class MyTestConfig(BaseTestConfig):
def __init__(self):
super().__init__()
# 添加脚本特定参数
self.parser.add_argument("--my_param", type=int, default=10)
self.my_param = self.args.my_param

# 使用
cfg = MyTestConfig()
print(f"模型路径: {cfg.model_path}")
print(f"设备类型: {cfg.device_type}")
print(f"自定义参数: {cfg.my_param}")
```

## 命令行示例

### 基础用法
```bash
python your_script.py --model_path ./models/llama2
```

### 使用 NVIDIA GPU
```bash
python your_script.py --model_path ./models/llama2 --device nvidia --ndev 2
```

### 使用 QY 设备并启用详细输出
```bash
python your_script.py --model_path ./models/llama2 --device qy --verbose
```

### 结合自定义参数
```bash
python your_script.py --model_path ./models/llama2 --device nvidia --ndev 4 --batch_size 32
```

## 类属性说明

初始化后可访问的属性:

- `model_path` (str): 模型路径
- `ndev` (int): 设备数量
- `verbose` (bool): 详细输出开关
- `device_name` (str): 设备名称(原始输入)
- `device_type` (DeviceType): 设备类型枚举值
- `args` (Namespace): 解析后的参数命名空间
- `extra` (list): 未解析的额外参数


## 扩展指南

### 添加新的设备类型

修改 `_get_device_type` 方法中的 `DEVICE_TYPE_MAP`:

```python
DEVICE_TYPE_MAP = {
# ... 现有映射 ...
"new_device": DeviceType.DEVICE_TYPE_NEW,
}
```

### 添加新的通用参数

修改 `_add_common_args` 方法:

```python
def _add_common_args(self):
# ... 现有参数 ...
self.parser.add_argument("--new_param", type=str, default="default")
```

## 注意事项

1. **参数顺序**: 命令行参数顺序不影响解析结果
2. **类型转换**: `--ndev` 等整数参数会自动验证类型
3. **参数覆盖**: 后出现的参数会覆盖前面的同名参数
4. **帮助信息**: 使用 `--help` 查看所有可用参数

## 相关文件

- `scripts/jiuge_config.py`: 九格评测配置
- `scripts/jiuge_ppl_config.py`: 九格 PPL 配置
- `scripts/jiuge.py`: 九歌评测主脚本

44 changes: 44 additions & 0 deletions jiuge.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/bin/bash

# Jiuge模型运行脚本
# 使用NVIDIA显卡运行9G4B模型

set -e # 遇到错误立即退出

echo "=========================================="
echo "🚀 启动 Jiuge 模型 (9G4B) - NVIDIA版本"
echo "=========================================="
export INFINI_ROOT=/home/featurize/.infini
# 设置参数
MODEL_DIR="/home/featurize/work/InfiniFamily/9G4B"
DEVICE="--nvidia"
N_DEVICE=1
SCRIPT_PATH="python scripts/jiuge.py"

# 检查模型目录是否存在
if [ ! -d "$MODEL_DIR" ]; then
echo "❌ 错误: 模型目录不存在: $MODEL_DIR"
echo "请检查路径是否正确"
exit 1
fi

# 检查Python脚本是否存在
if [ ! -f "scripts/jiuge.py" ]; then
echo "❌ 错误: 未找到jiuge.py脚本: scripts/jiuge.py"
echo "请确保在当前目录下运行此脚本"
exit 1
fi

echo "📁 模型路径: $MODEL_DIR"
echo "🎯 设备类型: NVIDIA GPU"
echo "💻 设备数量: $N_DEVICE"
echo ""

# 运行模型
echo "🔄 启动模型..."
$SCRIPT_PATH $DEVICE $MODEL_DIR $N_DEVICE

echo ""
echo "=========================================="
echo "✅ 模型运行完成"
echo "=========================================="
53 changes: 53 additions & 0 deletions scripts/base_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import argparse
import sys
from libinfinicore_infer import DeviceType




class BaseTestConfig:
def __init__(self):
self.parser = argparse.ArgumentParser(description="InfiniLM Unified Config")
self._add_common_args()

# 核心:使用 parse_known_args() 容忍脚本特有参数
# args 存储解析好的命名空间,extra 存储未识别的参数
self.args, self.extra = self.parser.parse_known_args()

self.model_path = self.args.model_path
self.ndev = self.args.ndev
self.verbose = self.args.verbose

self.device_name = self.args.device
self.device_type = self._get_device_type(self.args.device)



def _add_common_args(self):

self.parser.add_argument("--device", type=str, default="cpu")
self.parser.add_argument("--model_path", type=str, required=True)
self.parser.add_argument("--ndev", type=int, default=1)
self.parser.add_argument("--verbose", action="store_true")


def _get_device_type(self, dev_str):
DEVICE_TYPE_MAP = {
"cpu": DeviceType.DEVICE_TYPE_CPU,
"nvidia": DeviceType.DEVICE_TYPE_NVIDIA,
"qy": DeviceType.DEVICE_TYPE_QY,
"cambricon": DeviceType.DEVICE_TYPE_CAMBRICON,
"ascend": DeviceType.DEVICE_TYPE_ASCEND,
"metax": DeviceType.DEVICE_TYPE_METAX,
"moore": DeviceType.DEVICE_TYPE_MOORE,
"iluvatar": DeviceType.DEVICE_TYPE_ILUVATAR,
"kunlun": DeviceType.DEVICE_TYPE_KUNLUN,
"hygon": DeviceType.DEVICE_TYPE_HYGON,
}

return DEVICE_TYPE_MAP.get(dev_str.lower(), DeviceType.DEVICE_TYPE_CPU)

if __name__ == '__main__':
cfg = BaseTestConfig()
print(cfg.model_path)
print(cfg.ndev)
3 changes: 2 additions & 1 deletion scripts/jiuge.py
Original file line number Diff line number Diff line change
Expand Up @@ -871,7 +871,8 @@ def test():
# Find n_device argument (skip --verbose)
ndev_args = [arg for arg in sys.argv[3:] if arg != "--verbose"]
ndev = int(ndev_args[0]) if ndev_args else 1

print("type is")
print(type(device_type))
model = JiugeForCauslLM(model_path, device_type, ndev)
model.generate("山东最高的山是?", 500, verbose=verbose)
model.destroy_model_instance()
Expand Down
Loading