Skip to main content

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 Python

Documentation · 中文

  • Flexible bitrates. Compress each weight matrix at any non-integer target bitrate, or preserve every input bit with a lossless scheme.
  • Dtype preservation. Restore tensors in their input dtype, including BF16, FP16, FP8, and INT8.
  • PyTorch integration. 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.

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.

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 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 element, then decompresses it to a tensor with the original shape and dtype:

import torch
import entropack as ep

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

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

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

target_bpp is the requested number of bits per element (bpp). actual_bpp reports the stored rate, including metadata. Targets from 1 to 11 are supported, including non-integer values.

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:

import torch
import entropack as ep

linear = torch.nn.Linear(256, 256, dtype=torch.bfloat16, device="cuda")
config = ep.LatticeRANSConfig(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 for model replacement and checkpoint examples.

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.
LatticeRANSConfig(target_bpp=...) Lossy compression of 2D floating-point and integer tensors. target_bpp specifies the target bits per element, from 1 to 11 including non-integer values, to balance storage size and reconstruction accuracy.

See Compression configuration 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 Install and run tensor compression and Compressed Linear examples
Compression configuration Choose a scheme and look up supported dtypes and parameters
Tensor compression Encode, decode, inspect storage, move data, and save or load tensors
Compressed Linear usage Replace model layers, use low-precision computation, and manage checkpoints
API reference Look up functions, classes, and properties

Compression principles: DFloat11, tile-ANS, and EntroPack lattice quantization.

Acknowledgements

EntroPack's design is inspired by DFloat11, dahuffman, DietGPU, and tile-ANS.

License

Apache License 2.0.

Metadata

Release files for entropack 0.1.0

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

Built distribution (wheel)

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

Release files / entropack-0.1.0-py3-none-any.whl

Download URL entropack-0.1.0-py3-none-any.whl
Size 94.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92b51f3e6cbff4d2e1a9c918dd9f1bc52df6f00c68035e76ae5b4f65aeedf63e
BLAKE2b-256 checksum
How to use checksums
58bec1564397d412f107818c34c992db8b047ded2c4b5157d79774487717e26b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

1 release file

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