Skip to content
Merged
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
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@

### 🔍 **强大的数据解析系统**
- **🎨 关键词匹配**(默认模式):智能识别日志中的关键字,自动提取数值
- Loss: `loss` → 自动查找后续数字
- Grad Norm: `global_norm` → 自动提取梯度范数值
- Loss: `loss:` → 自动查找后续数字
- Grad Norm: `norm:` → 自动提取梯度范数值
- **⚙️ 正则表达式模式**:支持复杂的自定义匹配规则
- **🤖 智能推荐**:系统自动分析日志格式并推荐最佳解析方式
- **🔬 多格式支持**:JSON、键值对、数组、科学计数法等多种日志格式
Expand Down Expand Up @@ -83,7 +83,7 @@
### 🎯 快速上手
1. **📂 上传文件**: 拖拽训练日志文件到页面任意位置
2. **🔍 选择解析方式**:
- **关键词匹配**(推荐):直接使用 `loss` 和 `global_norm` 关键字
- **关键词匹配**(推荐):直接使用 `loss:` 和 `norm:` 关键字
- **正则表达式**:自定义复杂的匹配规则
3. **📊 查看图表**: 系统自动解析并生成交互式图表
4. **⚖️ 对比分析**: 上传两个文件时自动启用高级对比功能
Expand All @@ -103,21 +103,21 @@
```bash
# 标准格式
loss: 0.1234
global_norm: [1.5678]
norm: [1.5678]

# JSON 格式
{"loss": 0.1234, "global_norm": 1.5678}
{"loss": 0.1234, "norm": 1.5678}

# 数组格式
loss [0.1234]
global_norm: [1.5678]
norm: [1.5678]

# 科学计数法
loss: 1.234e-4
global_norm: 1.5678E+0
norm: 1.5678E+0

# MindFormers 格式
Step 100: loss=0.1234 global_norm=1.5678
Step 100: loss=0.1234 norm=1.5678
```

### ⚙️ 正则表达式模式
Expand Down
4 changes: 2 additions & 2 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ function App() {
const [globalParsingConfig, setGlobalParsingConfig] = useState({
loss: {
mode: 'keyword', // 'keyword' | 'regex'
keyword: 'loss',
keyword: 'loss:',
regex: 'loss:\\s*([\\d.eE+-]+)'
},
gradNorm: {
mode: 'keyword', // 'keyword' | 'regex'
keyword: 'global_norm',
keyword: 'norm:',
regex: 'grad[\\s_]norm:\\s*([\\d.eE+-]+)'
}
});
Expand Down
6 changes: 3 additions & 3 deletions src/components/FileConfigModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ export function FileConfigModal({ file, isOpen, onClose, onSave, globalParsingCo
const [config, setConfig] = useState({
loss: {
mode: 'keyword',
keyword: 'loss',
keyword: 'loss:',
regex: 'loss:\\s*([\\d.eE+-]+)'
},
gradNorm: {
mode: 'keyword',
keyword: 'global_norm',
keyword: 'norm:',
regex: 'grad[\\s_]norm:\\s*([\\d.eE+-]+)'
},
dataRange: {
Expand Down Expand Up @@ -131,7 +131,7 @@ export function FileConfigModal({ file, isOpen, onClose, onSave, globalParsingCo
value={configItem.keyword}
onChange={(e) => handleConfigChange(type, 'keyword', e.target.value)}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 focus:outline-none"
placeholder={type === 'loss' ? 'loss' : 'global_norm'}
placeholder={type === 'loss' ? 'loss:' : 'norm:'}
/>
<p className="text-xs text-gray-500 mt-1">
支持模糊匹配,如 "loss" 可匹配 "training_loss"
Expand Down
2 changes: 1 addition & 1 deletion src/components/RegexControls.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ export function RegexControls({
value={config.keyword}
onChange={(e) => onConfigChange('keyword', e.target.value)}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 focus:outline-none"
placeholder={type === 'loss' ? 'loss' : 'global_norm'}
placeholder={type === 'loss' ? 'loss:' : 'norm:'}
/>
<p className="text-xs text-gray-500 mt-1">
支持模糊匹配,如 "loss" 可匹配 "training_loss"
Expand Down
4 changes: 2 additions & 2 deletions src/components/__tests__/valueExtractor.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ const sampleContent = `loss: 0.123\nstep2 loss 0.234\n{"loss": 0.345, "global_no

describe('ValueExtractor', () => {
it('extracts values by keyword', () => {
const results = ValueExtractor.extractByKeyword(sampleContent, 'loss');
expect(results.length).toBe(3);
const results = ValueExtractor.extractByKeyword(sampleContent, 'loss:');
expect(results.length).toBe(1);
expect(results[0].value).toBeCloseTo(0.123);
});

Expand Down