---
title: OpenASH
canonical_url: "https://www.modelscope.cn/models/dfytensor/OpenASH"
md_url: "https://www.modelscope.cn/models/dfytensor/OpenASH.md"
repository: dfytensor/OpenASH
chinese_name: OpenASH
last_updated: 2026-04-23
pipeline_tag: text-generation
tasks:
  - text-generation
downloads: 0
stars: 0
---

# OpenASH

> OpenASH - dfytensor 在 ModelScope 开源的模型。OpenASH 是一个基于 PyTorch 的轻量级语言模型项目，使用自研的 累积最大值注意力机制（Cumulative Max Attention） 替代传统 Softmax 注意力，支持预训练、SFT 微调、流式推理和 WebUI 对话。

- **Repository**: dfytensor/OpenASH
- **Tasks**: text-generation
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2026-04-23

Source: https://www.modelscope.cn/models/dfytensor/OpenASH

---

# OpenASH

OpenASH 是一个基于 PyTorch 的轻量级语言模型项目，使用自研的 **累积最大值注意力机制（Cumulative Max Attention）** 替代传统 Softmax 注意力，支持预训练、SFT 微调、流式推理和 WebUI 对话。

## 模型架构

- **MaxStateSuper**: 核心注意力层，使用 `torch.cummax` 操作替代 softmax，通过可学习的 alpha 参数混合多种交互项，支持有状态推理（stateful inference）
- **DecoderLayer**: 解码器层，包含 MaxStateSuper 注意力 + 门控前馈网络（Gated FFN）+ 残差连接 + LayerNorm
- **OpenASH**: 完整模型，由 Embedding + 多层 DecoderLayer + 输出投影层组成

默认配置: `hidden_size=640, num_layers=8, num_heads=8`（约数百万参数）。

## 项目结构

```
demo/
├── open_ash.py            # 模型定义（MaxStateSuper, DecoderLayer, OpenASH）
├── open_ash_voc.py         # 分词器（基于 jieba + 代理词表编码）
├── open_ash_infer.py       # 推理引擎（采样、流式生成、交互式聊天）
├── open_ash_webui.py       # Streamlit WebUI（支持工具调用、思考模式）
├── open_ash_dataset.py     # 数据集（Pretrain/SFT/DPO/RLAIF/AgentRL）
├── train_pretrain.py       # 预训练脚本
├── train_full_sft.py       # SFT 全参数微调脚本
├── trainer_utils.py        # 训练工具（分布式、检查点、学习率调度）
├── config.py               # 配置文件
├── open_ash_voc_agent.json # 代理词表映射
└── vocabulary_nnn.json     # 基础词表
```

## 特性

- **自定义注意力机制**: 使用累积最大值（cummax）替代 softmax，计算效率更高
- **有状态推理**: 支持跨 chunk 的状态传递，可处理超长序列
- **代理词表编码**: 通过二维/三维索引编码扩展词表，在有限 token 空间内覆盖更多词汇
- **多种采样策略**: 支持 Temperature、Top-K、Top-P、重复惩罚
- **流式输出**: 支持逐 token 流式解码
- **工具调用**: 支持 function calling / tool use
- **思考模式**: 支持 `<|think|>...<|end_think|>` 链式思考
- **分布式训练**: 支持多卡 DDP、混合精度（BFloat16）、梯度累积、断点续训
- **Streamlit WebUI**: 提供可视化对话界面，支持中英文切换

## 依赖

```
torch
jieba
streamlit
numpy
tqdm
```

## 快速开始

### 推理

```bash
python open_ash_infer.py
```

### WebUI 对话

```bash
streamlit run demo/open_ash_webui.py
```

启动后会自动在浏览器中打开 WebUI 界面（默认 http://localhost:8501），支持以下功能：

- **模型选择**: 支持加载不同配置的模型权重（自动扫描 `out/` 目录）
- **参数调节**: 侧边栏可调节历史对话轮次、最大生成长度、温度、Top-K、Top-P、重复惩罚
- **思考模式**: 开启后模型会在 `<|think|>...<|end_think|>` 中展示推理过程
- **工具调用**: 支持选择并使用工具（数学计算、时间查询、随机数、文本长度、单位转换、天气、汇率、翻译等）
- **多语言**: 支持中英文界面切换
- **流式输出**: 实时显示生成过程
- **对话历史**: 保存当前会话的对话记录

配置说明：
- `WEIGHT_DIR`: 模型权重目录（默认 `F:\OpenASH\out`）
- `HIDDEN_SIZE`: 模型隐藏层维度（默认 640）
- `NUM_LAYERS`: 模型层数（默认 8）
- `NUM_HEADS`: 注意力头数（默认 8）
- `MAX_SEQ_LEN`: 最大序列长度（默认 2048）

### 预训练

```bash
python train_pretrain.py \
    --data_path pretrain_t2t.jsonl \
    --epochs 6 \
    --batch_size 40 \
    --learning_rate 1.25e-4 \
    --max_seq_len 512 \
    --save_dir ../out
```

### SFT 微调

```bash
python train_full_sft.py \
    --data_path sft_t2t.jsonl \
    --epochs 6 \
    --batch_size 40 \
    --learning_rate 1.25e-5 \
    --from_weight pretrain \
    --max_seq_len 512 \
    --save_dir ../out \
    --save_weight full_sft
```

### 多卡训练

```bash
torchrun --nproc_per_node=4 train_pretrain.py \
    --data_path pretrain_t2t.jsonl \
    --batch_size 10
```

## 训练参数说明

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `--data_path` | 训练数据路径（JSONL 格式） | `pretrain_t2t.jsonl` |
| `--epochs` | 训练轮数 | 6 |
| `--batch_size` | 批次大小 | 40 |
| `--learning_rate` | 学习率 | 1.25e-4 (pretrain) / 1.25e-5 (sft) |
| `--max_seq_len` | chunk 最大序列长度 | 512 |
| `--accumulation_steps` | 梯度累积步数 | 1 |
| `--grad_clip` | 梯度裁剪阈值 | 1.0 |
| `--from_weight` | 加载的预训练权重前缀 | `none` (pretrain) / `pretrain` (sft) |
| `--from_resume` | 是否从检查点续训 | 0 |
| `--use_compile` | 是否使用 `torch.compile` | 0 |
| `--hidden_size` | 隐藏层维度 | 640 |
| `--num_layers` | 层数 | 8 (pretrain) / 10 (sft) |
| `--num_heads` | 注意力头数 | 8 |

## 数据格式

### 预训练数据

每行一个 JSON 对象，包含 `text` 字段：

```json
{"text": "这是一段训练文本..."}
```

### SFT 数据

每行一个 JSON 对象，包含 `conversations` 字段：

```json
{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "你好！有什么可以帮你的？"}]}
```

支持 `system`、`user`、`assistant`、`tool` 角色，以及 `reasoning_content`（思考内容）、`tool_calls`（工具调用）、`tools`（工具定义）等字段。

## License

MIT
