Metadata-Version: 2.4
Name: entropack
Version: 0.1.2
Summary: EntroPack: general-purpose tensor compression for PyTorch with lossless and rate-controlled lossy schemes and GPU encoding and decoding.
Author: DiffSynth-Studio
License-Expression: Apache-2.0
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: torch>=2.10
Requires-Dist: numpy>=1.23
Requires-Dist: dahuffman>=0.4
Provides-Extra: cuda13
Requires-Dist: cupy-cuda13x>=14; extra == "cuda13"
Provides-Extra: cuda12
Requires-Dist: cupy-cuda12x>=14; extra == "cuda12"
Dynamic: license-file

# EntroPack

### General-purpose tensor compression for PyTorch

EntroPack is a general-purpose tensor compression library for PyTorch. It supports lossless
compression for exact recovery and lossy compression with a target bitrate to balance storage
and reconstruction accuracy. GPU encoding and decoding compress tensors and restore them
in their original shape and dtype.

[![License](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](LICENSE)
![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg) [![arXiv](https://img.shields.io/badge/arXiv-2609.34185-b31b1b.svg)](https://arxiv.org/abs/2609.34185)

[Documentation](https://entropackdoc.readthedocs.io/en/latest/) · [中文](README_zh.md)

- **Flexible bitrates.** Compress each weight matrix at any non-integer target bitrate,
  or preserve every input bit with a lossless scheme.
- **Multiple dtypes.** Compress tensors in 16 floating-point, integer, and Boolean dtypes,
  such as FP32, BF16, FP16, FP8, and INT8.
- **Easy to use.** Compress and restore tensors through a common API, and save
  them with `state_dict`. Compressed linear layers provide an integration for model weights.

## Installation

Use Python 3.10 or later and install a CUDA-enabled build of PyTorch 2.10 or later
for your environment.

### Install from source (recommended)

```bash
git clone https://github.com/modelscope/entropack.git
cd entropack
pip install -e ".[cuda13]"
```

### Install from PyPI

PyPI releases may lag behind source updates. Install from source for the latest features.

```bash
pip install "entropack[cuda13]"
```

Both installation methods above use CUDA 13 and include the matching CuPy package.
For CUDA 12, replace `cuda13` with `cuda12` in either command. If a compatible CuPy is
already installed, use `pip install -e .` for source installation or `pip install entropack` for PyPI.

See [Quick start](https://entropackdoc.readthedocs.io/en/latest/Usage/Quick-start.html) for environment requirements and usage examples.

## Get started

### Direct tensor compression

This example compresses a 2D BF16 tensor at a target of 3.5 bits per parameter,
then decompresses it to a tensor with the original shape and dtype:

```python
import torch
import entropack as ep

tensor = (torch.randn(256, 256, device="cuda") * 0.02).to(torch.bfloat16)
config = ep.EntroPackLossyConfig(target_bpp=3.5)

compressed = ep.compress(tensor, config)
restored = ep.decompress(compressed, config)

print(f"Target: {config.target_bpp:.2f} bits per parameter")
print(f"Stored: {compressed.actual_bpp:.2f} bits per parameter")
print(restored.shape, restored.dtype)
```

`target_bpp` specifies the target bitrate in bits per parameter (bpp). For general tensors, each
tensor element counts as one parameter when computing bpp. `actual_bpp` reports the stored rate,
including metadata. Finite targets with `0.001 <= target_bpp <= 11` are supported, including
non-integer values. See [Compression configuration](https://entropackdoc.readthedocs.io/en/latest/Usage/Configuration.html) for target limits by dtype.

### Compressed Linear

`CompressedLinear.from_linear` compresses an existing `torch.nn.Linear`'s weights using
the supplied Config and returns a new Compressed Linear. Call it as `layer(x)` to compute
the output, just as with an ordinary linear layer:

```python
import torch
import entropack as ep

linear = torch.nn.Linear(256, 256, dtype=torch.bfloat16, device="cuda")
config = ep.EntroPackLossyConfig(target_bpp=4.0)
layer = ep.CompressedLinear.from_linear(linear, config=config)
x = torch.randn(8, 256, dtype=torch.bfloat16, device="cuda")

with torch.inference_mode():
    output = layer(x)
print(output.shape, f"{layer.compressed_bits:.2f} bits per weight")
```

See [Compressed Linear usage](https://entropackdoc.readthedocs.io/en/latest/Usage/Linear-layers.html) for model replacement and checkpoint examples.

### Pre-quantized models

We provide pre-quantized weight packages produced by EntroPack for representative diffusion models on
[ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/EntroPackPreQuants).
These packages can be loaded using the quantization features of [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio):

- **Z-Image-Turbo**: DiT and text encoder.
- **Qwen-Image-2.1**: DiT and text encoder.
- **MiniMax-H3**: two DiTs, FL2VA and Ref2VA, sharing the text encoder and video VAE.

Each model provides DiT and text-encoder packages at **4/5/6/7/8 bpp**, plus:

- **FP8@5** (`dit_fp8_5bpp`): FP8 W8A8 weight codes compressed to 5 bpp with EntroPack, using FP8 GEMM for inference.
- **Extreme mixed-bit**: bitrate allocation based on layer sensitivity, reaching **2.3 bpp** for Z-Image-Turbo and **3.0 bpp** for Qwen-Image-2.1 and MiniMax-H3.

## Configuration

Config defines the compression scheme and its settings. It is passed to tensor compression
and decompression functions or to a compressed Linear layer's constructor.

| Config | Compression and use cases |
| --- | --- |
| `DFloat11Config()` | Specialized lossless compression for BF16 tensors. Decompression restores every input bit, for applications requiring exact recovery. |
| `TileANSConfig()` | Lossless compression for BF16, FP16, FP32, FP8, INT8, and other supported dtypes. The compression ratio depends on the input data distribution. |
| `EntroPackLossyConfig(target_bpp=...)` | Lossy compression of 2D floating-point and integer tensors. `target_bpp` specifies the target bits per parameter in [0.001, 11], including non-integer values, to balance storage size and reconstruction accuracy. |

See [Compression configuration](https://entropackdoc.readthedocs.io/en/latest/Usage/Configuration.html) for scheme selection
and the complete parameter reference.

## Performance

On one NVIDIA H20, EntroPack compresses the weights of all 276 linear layers in
Z-Image-Turbo's diffusion transformer at a 4 bpp target in **3.5 seconds**. The compressed
weights occupy **4.02 bpp**, with **7.18%** relative L2 reconstruction error. Inference with
these weights takes **544.7 ms** per denoising step, only **7.7%** above the original BF16
model's 505.7 ms.

## Documentation

| Guide | Contents |
| --- | --- |
| [Quick start](https://entropackdoc.readthedocs.io/en/latest/Usage/Quick-start.html) | Install and run tensor compression and Compressed Linear examples |
| [Compression configuration](https://entropackdoc.readthedocs.io/en/latest/Usage/Configuration.html) | Choose a scheme and look up supported dtypes and parameters |
| [Tensor compression](https://entropackdoc.readthedocs.io/en/latest/Usage/Tensor-compression.html) | Encode, decode, inspect storage, move data, and save or load tensors |
| [Compressed Linear usage](https://entropackdoc.readthedocs.io/en/latest/Usage/Linear-layers.html) | Replace model layers, use low-precision computation, and manage checkpoints |
| [API reference](https://entropackdoc.readthedocs.io/en/latest/API_Reference/index.html) | Look up functions, classes, and properties |

Compression principles: [DFloat11](https://entropackdoc.readthedocs.io/en/latest/Principles/DFloat11.html), [tile-ANS](https://entropackdoc.readthedocs.io/en/latest/Principles/Tile-ANS.html),
and [EntroPack Lossy Compression](https://entropackdoc.readthedocs.io/en/latest/Principles/EntroPack-Lossy.html).

## Acknowledgements

EntroPack's design is inspired by [DFloat11](https://github.com/LeanModels/DFloat11),
[dahuffman](https://github.com/soxofaan/dahuffman),
[DietGPU](https://github.com/facebookresearch/dietgpu), and
[tile-ANS](https://arxiv.org/abs/2606.15789).

## License

[Apache License 2.0](LICENSE).

## Citation

```bibtex
@misc{zhang2026entropackfastaccurateentropycoded,
      title={EntroPack: Fast and Accurate Entropy-Coded Weight Compression at Arbitrary Bitrates},
      author={Hong Zhang and Zhongjie Duan and Yingda Chen},
      year={2026},
      eprint={2609.34185},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2609.34185},
}
```
