7.5 KiB
PyTorch to CK Profiler Conversion Tools
This directory contains two Python scripts to convert PyTorch convolution operations to CK Profiler format and execute them.
Overview
convert_pytorch_to_ck.py- Converts PyTorch JSON to CK Profiler configuration JSONrun_ck_profiler.py- Executes CK profilers for each configuration
Workflow
# Step 1: Convert PyTorch JSON to CK Profiler JSON
python convert_pytorch_to_ck.py build/test-data/conv_repros_ir.json ck_profiler_configs.json
# Step 2: Execute profilers
python run_ck_profiler.py ck_profiler_configs.json --profiler-path ./build/bin
Script 1: convert_pytorch_to_ck.py
Description
Converts PyTorch convolution operations from conv_repros_ir.json to CK Profiler configuration format.
Supported Operations
aten::miopen_convolution→ Forward convolutionaten::convolution_backward→ Backward data and/or backward weight
Configuration
The script uses these hardcoded settings:
- Data type: FP16 (data_type=1)
- Layout: NGCHW_GKCYX_NGKHW (layout=3)
- Index type: 32-bit (index_type=0, for forward only)
- Verification: Disabled (verify=0)
- Initialization: Integer values (init=1)
- Logging: Disabled (log=0)
- Timing: Enabled (time=1)
- Split-K: "all" (for backward operations)
Usage
# Basic usage (uses defaults)
python convert_pytorch_to_ck.py
# Specify input and output files
python convert_pytorch_to_ck.py input.json output.json
# Help
python convert_pytorch_to_ck.py --help
Default Files
- Input:
build/test-data/conv_repros_ir.json - Output:
ck_profiler_configs.json
Output Format
The output JSON contains an array of configurations:
[
{
"operation_type": "profile_grouped_conv_fwd",
"profiler_args": {
"data_type": 1,
"layout": 3,
"index_type": 0,
"verify": 0,
"init": 1,
"log": 0,
"time": 1,
"num_dim_spatial": 2,
"G": 32,
"N": 32,
"K": 4,
"C": 4,
"filter_spatial": [3, 3],
"input_spatial": [200, 200],
"strides": [1, 1],
"dilations": [1, 1],
"left_pads": [1, 1],
"right_pads": [1, 1]
},
"metadata": {
"priority_rank": 1,
"pytorch_op": "aten::miopen_convolution",
"description": "Forward conv: G=32, N=32, K=4, C=4, [3, 3] kernel, [200, 200] input"
}
}
]
Example Output
Converting PyTorch convolutions to CK Profiler format...
✓ [1/78] Converted: aten::miopen_convolution (rank 1) → fwd
✓ [2/78] Converted: aten::convolution_backward (rank 2) → bwd_data
✓ [2/78] Converted: aten::convolution_backward (rank 2) → bwd_weight
...
============================================================
Conversion Summary
============================================================
Total PyTorch operations: 78
✓ Forward convolutions: 30
✓ Backward data convolutions: 35
✓ Backward weight convolutions: 35
⚠ Skipped operations: 0
Total CK profiler configs: 100
Output file: ck_profiler_configs.json
============================================================
Conversion completed successfully!
Script 2: run_ck_profiler.py
Description
Executes CK Profiler binaries for each configuration in the JSON file, with support for dry-run, filtering, and result collection.
Usage
# Run all configurations
python run_ck_profiler.py ck_profiler_configs.json
# Run first 10 only (for testing)
python run_ck_profiler.py ck_profiler_configs.json --max-ops 10
# Dry run (show commands without executing)
python run_ck_profiler.py ck_profiler_configs.json --dry-run
# Specify profiler path
python run_ck_profiler.py ck_profiler_configs.json --profiler-path ./build/bin
# Quiet mode (less verbose output)
python run_ck_profiler.py ck_profiler_configs.json --quiet
# Don't save results
python run_ck_profiler.py ck_profiler_configs.json --no-save
# Custom results output file
python run_ck_profiler.py ck_profiler_configs.json --output my_results.json
Command Line Options
| Option | Description | Default |
|---|---|---|
config_file |
CK Profiler configuration JSON file | (required) |
--profiler-path |
Path to CK profiler binaries | ./build/bin |
--max-ops |
Maximum number of operations to execute | All |
--dry-run |
Show commands without executing | False |
--quiet |
Reduce output verbosity | False |
--no-save |
Do not save results to JSON | False |
--output |
Output file for results | profiler_results.json |
Example Output
Executing CK Profiler for 100 configurations...
======================================================================
[1/100] Forward conv: G=32, N=32, K=4, C=4, [3, 3] kernel, [200, 200] input
Priority Rank: 1
PyTorch Op: aten::miopen_convolution
======================================================================
Command: ./build/bin/profile_grouped_conv_fwd 1 3 0 0 1 0 1 2 32 32 4 4 3 3 200 200 1 1 1 1 1 1 1 1
✓ SUCCESS (completed in 2.34s)
Output:
...profiler output...
...
======================================================================
Execution Summary
======================================================================
Total configurations: 100
✓ Successful: 95
✗ Failed: 5
Success rate: 95.0%
======================================================================
Results saved to: profiler_results.json
Results File Format
The profiler_results.json file contains:
{
"timestamp": "2026-01-19T05:48:00",
"stats": {
"total": 100,
"success": 95,
"failed": 5,
"skipped": 0
},
"results": [
{
"operation": "profile_grouped_conv_fwd",
"description": "Forward conv: G=32, N=32, K=4, C=4, [3, 3] kernel, [200, 200] input",
"priority_rank": 1,
"success": true,
"returncode": 0,
"elapsed_time": 2.34,
"command": "./build/bin/profile_grouped_conv_fwd ...",
"error": null,
"stdout": "...truncated..."
}
]
}
Requirements
- Python 3.6+
- CK profiler binaries built in
./build/bin(or specify with--profiler-path) - Input JSON file with PyTorch convolution operations
Notes
Layout Mapping
PyTorch uses NCHW layout, which maps to CK's NGCHW_GKCYX_NGKHW (layout=3):
- Input: [N, G, C, Hi, Wi]
- Weight: [G, K, C, Y, X]
- Output: [N, G, K, Ho, Wo]
Per-Group Channels
For grouped convolutions:
C_per_group = C_total / groupsK_per_group = K_total / groups
The converter automatically computes these values.
Backward Operations
The aten::convolution_backward operation can compute:
- Backward data (gradient w.r.t. input) when
output_mask[0]=true - Backward weight (gradient w.r.t. weight) when
output_mask[1]=true - Both if both flags are true
Split-K Parameter
For backward operations, split_k is set to "all" which instructs the profiler to test all split-K values: -1, 1, 2, 4, 8, 16, 32, 64, 128.
Troubleshooting
"Profiler executable not found"
Ensure CK profilers are built:
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make profile_grouped_conv_fwd profile_grouped_conv_bwd_data profile_grouped_conv_bwd_weight
"Input file not found"
Check that the PyTorch JSON file exists:
ls -l build/test-data/conv_repros_ir.json
Conversion warnings
Yellow warnings indicate operations that couldn't be converted (e.g., non-convolution operations). These are expected and don't indicate errors.