Skip to main content

TriFast

License: MIT

A Triton-based implementation of Fused Triangle Self Attention kernels. TriFast provides an optimized version triangle self attention, using the ideas of flash attention.

🚀 Features

  • Memory Efficient: Achieves n² memory complexity (compared to n³ for pure PyTorch implementations)
  • High Performance:
    • ⚡ ~4x faster forward pass than the next fastest implementation (DS4S evoformer kernel)
    • ⚡ ~2x faster backward pass than the next fastest implementation (DS4S evoformer kernel)
  • Multiple Precision Support: Works with float32, bfloat16, and fp16 data types
  • GPU Accelerated: Benchmarked on NVIDIA GPUs with excellent scaling properties
  • Auto-tuning: Includes built-in kernel tuning capabilities to optimize for specific workloads

📊 Benchmarks

All benchmarks were performed on an NVIDIA GeForce RTX 3090 GPU using BFloat16 precision.

Forward Pass Performance

Runtime

TSA forward runtime

Memory Usage

TSA forward memory

Backward Pass Performance

Runtime

TSA backward runtime

Memory Usage

TSA backward memory

🛠️ Installation

pip install trifast

📖 Usage

Basic usage of the triangle attention function:

import torch
from trifast import triangle_attention
from trifast.utils import gen_tensors

# Generate tensors (query, key, value, bias, mask)
q, k, v, bias, mask = gen_tensors(n, d, h, use_mask=True, device=device, dtype=dtype, std=scale)

# Apply triangle self attention
out = triangle_attention(q, k, v, bias, mask)

⚙️ Auto-tuning

TriFast modifies triton.autotune to cache the best config to disk. This means the first time the kernel is run will generally be slower than subsequent times (for a given input shape).

Using the auto-tuner

The package provides a command-line script for auto-tuning:

# Basic usage
trifast-tune

# For a more extensive tuning process
TRIFAST_FORCE_TUNE=1 trifast-tune

# With custom parameters
trifast-tune --min-n 32 --max-n 2048 --dtype bfloat16 --h 4,8 --d 32,64

Auto-tuner Parameters

--min-n          Minimum sequence length to tune (default: 16)
--max-n          Maximum sequence length to tune (default: 1024)
--dtype          PyTorch datatypes to use (comma-separated).
                 Options: float32, bfloat16, float16, all (default: bfloat16)
--h              List of number of heads (comma-separated integers, e.g., "1,2,4") (default: 4)
--d              List of dimensions (comma-separated integers, e.g., "16,32,64") (default: 32)

After tuning, the best configurations are cached to disk using platformdirs (e.g. under ~/.config/trifast/<version> on Linux).

🧠 How It Works

TriFast implements Triangle Self Attention using Triton to create optimized GPU kernels. It's essentially a Flash Attention applied to triangle self attention, resulting in significant performance gains compared to naive PyTorch implementations.

🔍 Implementation Details

This implementation draws inspiration from:

🗺️ Roadmap

  • Explore performance optimizations for dq/db/dkv transposed operations
  • Implement pipelined writes to global memory in backward kernels

👨‍💻 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgements

  • The FlagOpen team for their work on FlagAttention
  • The Triton team for providing excellent documentation and tutorials
  • The DS4S team for their evoformer kernel implementation used in benchmarking

Metadata

Release files for trifast 0.1.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for trifast 0.1.13
File Size Uploaded
trifast-0.1.13.tar.gz 428.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trifast 0.1.13
File Interpreter ABI Platform
trifast-0.1.13-py3-none-any.whl Python 3 none any Details

Total release size: 444.5 kB

Release files / trifast-0.1.13.tar.gz

Download URL trifast-0.1.13.tar.gz
Size 428.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e3918dc81f4ae75c0fd2218bae5b2055e18242e4067ac34c21c64c2c957648ad
BLAKE2b-256 checksum
How to use checksums
6c1b6d384e72cad1512493b8cb6c074ee7860e4a9040d3a0c39336101b972a3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.6.17

Release files / trifast-0.1.13-py3-none-any.whl

Download URL trifast-0.1.13-py3-none-any.whl
Size 16.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e96fc0224b85e98802b04c495380198387110e3e712ce2ca7d2e672a27e10496
BLAKE2b-256 checksum
How to use checksums
11b35b2961811e4e47fcad1e3eb2fab6cc96285ebaf03768304ef84980fb3dcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.6.17

Release history Release notifications | RSS feed

This release

0.1.13 This release

2 release files

0.1.12

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

1 release file

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page