-
Notifications
You must be signed in to change notification settings - Fork 5
04. Developer Guide
This guide is for developers who want to contribute to TritonParse, understand its architecture, or extend its functionality.
TritonParse consists of three main components:
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Python Backend │ │ Processing │ │ Frontend UI │
│ │ │ │ │ │
│ • Structured Logging│──▶│ • Log Parsing │──▶│ • React Interface │
│ • Triton Hooks │ │ • Source Mapping │ │ • IR Visualization │
│ • Trace Generation │ │ • Data Compression │ │ • Code Comparison │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
- Purpose: Capture Triton compilation events and generate structured logs
-
Key Files:
-
structured_logging.py
- Main logging infrastructure -
utils.py
- Parsing and processing utilities -
extract_source_mappings.py
- IR stage correlation -
source_type.py
- Source type definitions
-
- Purpose: Transform raw logs into structured, analyzable format
-
Key Functions:
- Parse NDJSON logs
- Extract source mappings between IR stages
- Compress and package data
- Purpose: Interactive visualization and analysis interface
-
Key Technologies:
- React 19 with TypeScript
- Vite build system
- Tailwind CSS for styling
- Monaco Editor for code display
tritonparse/
├── tritonparse/ # Python package
│ ├── __init__.py
│ ├── structured_logging.py # Core logging infrastructure
│ ├── utils.py # CLI and parsing utilities
│ ├── extract_source_mappings.py # Source mapping extraction
│ ├── source_type.py # Source type definitions
│ ├── common.py # Common utilities
│ ├── tp_logger.py # Logger configuration
│ └── shared_vars.py # Shared variables
├── website/ # React web application
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── CodeViewer.tsx # Code display component
│ │ │ ├── CodeComparisonView.tsx # Side-by-side view
│ │ │ ├── WelcomeScreen.tsx # Landing page
│ │ │ └── ...
│ │ ├── pages/ # Main page components
│ │ │ ├── CodeView.tsx # Single IR view
│ │ │ └── KernelOverview.tsx # Kernel overview
│ │ ├── utils/ # Utility functions
│ │ │ ├── dataLoader.ts # Data loading and processing
│ │ │ └── fbDetection.ts # Internal detection
│ │ ├── App.tsx # Main application component
│ │ └── main.tsx # Entry point
│ ├── public/ # Static assets
│ ├── scripts/ # Build scripts
│ └── package.json # Dependencies
├── tests/ # Test suite
├── docs/ # Documentation
├── .github/ # GitHub Actions
├── .ci/ # CI scripts
├── pyproject.toml # Python project configuration
├── Makefile # Development commands
└── README.md # Project overview
- Python >= 3.9
- Node.js >= 18.0.0
- Triton > 3.3.1 (compiled from source)
- Git for version control
# Clone repository
git clone https://github.com/pytorch-labs/tritonparse.git
cd tritonparse
# Install Python dependencies
make install-dev
# Install website dependencies
cd website
npm install
# Check formatting and linting
make format-check
make lint-check
# Check Python setup
make format-check
make lint-check
python -m unittest tests.test_tritonparse.TestTritonparseCPU -v
# Check website setup
cd website
npm run dev
We use a comprehensive formatting pipeline:
Tool | Purpose | Configuration |
---|---|---|
Black | Code formatting | pyproject.toml |
usort | Import sorting | pyproject.toml |
Ruff | Linting | Built-in rules |
# Format code
make format
# Check formatting
make format-check
# Run linting
make lint-check
# Run tests
python -m unittest tests.test_tritonparse -v
# Website development
cd website && npm run dev
Before committing, ensure:
-
Code is formatted:
make format
-
Linting passes:
make lint-check
-
Tests pass:
python -m unittest tests.test_tritonparse -v
-
Website builds:
cd website && npm run build
Purpose: Capture Triton compilation and launch events in structured format
Key Functions:
-
init(log_path)
- Initialize logging system - TODO:
Integration Points:
- Triton compilation hooks
- PyTorch TorchInductor integration
- Stack trace extraction
Purpose: Transform raw logs into analyzable format
Key Functions:
-
unified_parse()
- Main parsing interface -
oss_run()
- OSS-specific parsing logic -
parse_logs()
- Core log processing
Processing Pipeline:
- Read raw NDJSON logs from input directory
- Parse and validate log entries
- Extract source mappings between IR stages
- Compress and save processed data
Purpose: Correlate lines between different IR stages
Key Functions:
-
extract_source_mappings()
- Main extraction logic -
process_kernel_logs()
- Process individual kernel logs -
map_ir_stages()
- Map lines between IR formats
TODO
# Run CPU tests (no GPU required)
python -m unittest tests.test_tritonparse.TestTritonparseCPU -v
# Run GPU tests (requires CUDA)
python -m unittest tests.test_tritonparse.TestTritonparseCUDA -v
# Run specific test
python -m unittest tests.test_tritonparse.TestTritonparseCUDA.test_whole_workflow -v
# Test with real kernel
cd tests
TORCHINDUCTOR_FX_GRAPH_CACHE=0 python test_add.py
- React 19 - UI framework
- TypeScript - Type safety
- Vite - Build tool and dev server
- Tailwind CSS - Styling
- Monaco Editor - Code display
Purpose: Load and process trace files
Key Functions:
-
loadLogData()
- Load from URL -
loadLogDataFromFile()
- Load from file -
processKernelData()
- Process raw data
Purpose: Display IR code with syntax highlighting
Features:
- Language-specific syntax highlighting
- Line number display
- Interactive line selection
- Source mapping visualization
Purpose: Side-by-side IR comparison
Features:
- Synchronized scrolling
- Line mapping visualization
- Interactive highlighting
- Dropdown IR selection
TODO
cd website
# Development server
npm run dev
# Type checking
npm run build
# Linting
npm run lint
# Test with sample data
# Load ./public/f0_fc0_a0_cai-.ndjson in browser
Python Code
│
▼
Triton Compilation
│
▼
Structured Logging ──────┐
│ │
▼ ▼
Raw NDJSON Logs Hook Events
│ │
▼ ▼
Log Processing Source Mapping
│ │
▼ ▼
Compressed Data ◄───────┘
│
▼
Web Interface
│
▼
Interactive Visualization
{
"event_type": "compilation_start",
"timestamp": 1234567890,
"kernel_name": "add_kernel",
"metadata": {...}
}
{
"kernels": [
{
"hash": "abc123",
"name": "add_kernel",
"metadata": {...},
"irFiles": {
"ttgir": "...",
"ptx": "..."
},
"sourceMappings": {
"ttgir": {...},
"ptx": {...}
}
}
]
}
# Enable debug logging
export TRITONPARSE_DEBUG=1
# Run with debug output
python your_script.py
# Check log file contents
head -n 10 ./logs/*.ndjson
# Inspect compressed data
zcat ./parsed_output/*.gz | head -n 20
# Test parsing pipeline
python -c "
import tritonparse.utils
tritonparse.utils.unified_parse('./logs/', './test_output/', verbose=True)
"
// Enable frontend debug logging
localStorage.setItem('tritonparse-debug', 'true');
// Inspect loaded data
console.log(window.tritonparseData);
// Test data processing
import { processKernelData } from './utils/dataLoader';
console.log(processKernelData(rawData));
tests/
├── test_tritonparse.py # Main test suite
├── test_add.py # Manual test example
├── unit_tests.py # Unit tests
└── example_output/ # Sample data
# All tests
python -m unittest tests.test_tritonparse -v
# CPU-only tests
python -m unittest tests.test_tritonparse.TestTritonparseCPU -v
# GPU tests (requires CUDA)
python -m unittest tests.test_tritonparse.TestTritonparseCUDA -v
# Manual test
cd tests
TORCHINDUCTOR_FX_GRAPH_CACHE=0 python test_add.py
# tests/test_new_feature.py
import unittest
from tritonparse.new_feature import new_function
class TestNewFeature(unittest.TestCase):
def test_new_function(self):
result = new_function(input_data)
self.assertEqual(result, expected_output)
def setUp(self):
# Test setup
pass
def tearDown(self):
# Test cleanup
pass
Versions are managed in:
-
pyproject.toml
- Python package version -
website/package.json
- Frontend version
- Update version numbers
- Update CHANGELOG.md
- Run full test suite
- Build and test website
- Create GitHub release
- Deploy to GitHub Pages
CI/CD pipeline includes:
- Format checking - Code style validation
- Linting - Code quality checks
- Testing - Python and frontend tests
- Website deployment - Automatic GitHub Pages deployment
- Fork the repository
-
Create feature branch:
git checkout -b feature-name
- Make changes following coding standards
- Add tests for new functionality
-
Run formatting:
make format
-
Run tests:
make lint-check && python -m unittest tests.test_tritonparse -v
- Submit pull request
- All PRs require review by core maintainers
- CI checks must pass before merge
- Documentation updates required for new features
- Tests required for new functionality
When reporting issues:
- Use issue templates provided
- Include system information
- Provide reproduction steps
- Include error messages and logs
- Code Formatting Guide - Detailed formatting standards
- API Reference - Complete API documentation
- Architecture Deep Dive - Detailed architecture
- GitHub Discussions - Community Q&A
- GitHub Issues - Bug reports and feature requests
- Triton Documentation - Official Triton docs
- React Documentation - React development guide
- TypeScript Documentation - TypeScript reference
For new developers:
- Complete the Installation Guide
- Read the Usage Guide to understand the tool
- Explore the codebase starting with simple components
- Run the test suite to verify your setup
- Join GitHub Discussions for community support
For experienced contributors:
- Check GitHub Issues for open tasks
- Review the Architecture Deep Dive for advanced topics
- Contribute to documentation improvements
- Propose new features through GitHub Discussions