Skip to main content

Blosc2 Btune

Btune is a dynamic plugin for Blosc2 that assists in finding the optimal combination of compression parameters. It works by training a neural network on your most representative datasets.

By default, this software uses a genetic algorithm to test different combinations of compression parameters that meet your requirements for both compression ratio and speed for every chunk in the dataset. It assigns a score to each combination and, after a number of iterations, the software stops and uses the best score (minimal value) found for the rest of the dataset. For more info and a graphical visualization, visit https://btune.blosc.org.

The process of finding optimal compression parameters in Blosc2 can be slow because of the large number of combinations of compression parameters (codec, compression level, filter, split mode, number of threads, etc.). This can require a significant amount of trial and error to find the best combinations. However, you can significantly accelerate this process by training a neural network on your own datasets.

To begin the training process, provide your datasets to the Blosc Development Team. We will then perform the training and provide neural network models tailored to your needs, along with general tuning advice for Blosc2. In exchange, we request financial contributions to the project.

If you are interested, please contact the Blosc Development Team at contact@blosc.org.

Install the Btune wheel

Btune uses a Python wheel for installation, but it can be used from any application that uses C-Blosc2, whether it is in C, Python, or any other language. Currently, only Linux and Mac installers are supported.

pip install blosc2-btune

Next, we will run an example for Python and then for C. To do so, change your current directory to examples from this repository.

cd examples

Using Btune from Python

To use Btune with Blosc2 in Python, set the BTUNE_TRADEOFF environment variable to a floating-point number between 0 (to optimize speed) and 1 (to optimize compression ratio). Additionally, you can use BTUNE_PERF_MODE to optimize compression, decompression, or to achieve a balance between the two by setting it to COMP, DECOMP, or BALANCED, respectively.

BTUNE_TRADEOFF=0.5 BTUNE_PERF_MODE=COMP python create_ndarray.py
WARNING: Empty metadata, no inference performed
NDArray succesfully created!

This creates a NDArray on disk with some data. The warning message Empty metadata, no inference performed should be ignored as long as we are not using the trained models.

You can set BTUNE_TRACE=1 to see what Btune is doing.

BTUNE_TRACE=1 BTUNE_TRADEOFF=0.5 BTUNE_PERF_MODE=COMP python create_ndarray.py
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Btune version: 1.0.1.dev
Performance Mode: COMP, Compression tradeoff: 0.500000, Bandwidth: 20 GB/s
Behaviour: Waits - 0, Softs - 5, Hards - 11, Repeat Mode - STOP
TRACE: Environment variable BTUNE_MODELS_DIR is not defined
WARNING: Empty metadata, no inference performed
|    Codec   | Filter | Split | C.Level | Blocksize | Shufflesize | C.Threads | D.Threads |   Score   |  C.Ratio   |   Btune State   | Readapt | Winner
|        lz4 |      0 |     1 |       8 |         0 |           8 |         4 |         4 |  9.74e-05 |      1.97x |    CODEC_FILTER |    HARD | W
|        lz4 |      0 |     0 |       8 |         0 |           8 |         4 |         4 |  6.13e-05 |      2.07x |    CODEC_FILTER |    HARD | W
|        lz4 |      1 |     1 |       8 |         0 |           8 |         4 |         4 |  2.72e-05 |      3.97x |    CODEC_FILTER |    HARD | W
|        lz4 |      1 |     0 |       8 |         0 |           8 |         4 |         4 |   1.8e-05 |      3.91x |    CODEC_FILTER |    HARD | -
|        lz4 |      2 |     1 |       8 |         0 |           8 |         4 |         4 |     3e-05 |      4.52x |    CODEC_FILTER |    HARD | W
|        lz4 |      2 |     0 |       8 |         0 |           8 |         4 |         4 |  2.23e-05 |      4.46x |    CODEC_FILTER |    HARD | -
|    blosclz |      0 |     1 |       8 |         0 |           8 |         4 |         4 |  8.03e-05 |      1.99x |    CODEC_FILTER |    HARD | -
|    blosclz |      0 |     0 |       8 |         0 |           8 |         4 |         4 |  6.01e-05 |      2.09x |    CODEC_FILTER |    HARD | -
|    blosclz |      1 |     1 |       8 |         0 |           8 |         4 |         4 |  3.12e-05 |      3.97x |    CODEC_FILTER |    HARD | -
|    blosclz |      1 |     0 |       8 |         0 |           8 |         4 |         4 |   4.4e-05 |      3.82x |    CODEC_FILTER |    HARD | -
NDArray succesfully created!

You can see in the column Winner if the combination is a winner (W), it does not improve the previous winner (-) or it is a special value chunk meaning that it is really easy to compress no matter the compression parameters (S), so Btune cannot determine whether this is a winner or not in this last case.

Btune Models

The Blosc Development Team offers Btune Models, a service in which we provide neural network models trained specifically for your data to determine the optimal combination of codecs and filters. To use these models, set BTUNE_MODELS_DIR to the directory containing the models files after the Blosc Development Team has completed training. Btune will then automatically use the trained model; keep reading for how this works.

To determine the number of chunks for performing inference, use BTUNE_USE_INFERENCE. If set to -1, it performs inference on all chunks. If set to a number greater than 0, it performs inference on this number of chunks and then tweaks parameters for the rest of the chunks. If set to 0, it does not perform inference at all. The default is -1.

BTUNE_TRADEOFF=0.5 BTUNE_PERF_MODE=COMP BTUNE_TRACE=1  BTUNE_MODELS_DIR=./models/ BTUNE_USE_INFERENCE=3 python create_ndarray.py
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Btune version: 1.0.1.dev
Performance Mode: COMP, Compression tradeoff: 0.500000, Bandwidth: 20 GB/s
Behaviour: Waits - 0, Softs - 5, Hards - 11, Repeat Mode - STOP
INFO: Model files found in the './models/' directory
TRACE: time load model: 0.000071
TRACE: Inference category=7 codec=1 filter=35 clevel=5 splitmode=2 time entropy=0.000218 inference=0.000012
|    Codec   | Filter | Split | C.Level | Blocksize | Shufflesize | C.Threads | D.Threads |   Score   |  C.Ratio   |   Btune State   | Readapt | Winner
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |   5.4e-05 |      3.97x |    CODEC_FILTER |    HARD | W
TRACE: Inference category=7 codec=1 filter=35 clevel=5 splitmode=2 time entropy=0.000120 inference=0.000003
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |  2.01e-05 |      3.97x |    CODEC_FILTER |    HARD | -
TRACE: Inference category=7 codec=1 filter=35 clevel=5 splitmode=2 time entropy=0.000104 inference=0.000002
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |  1.92e-05 |      3.97x |    CODEC_FILTER |    HARD | -
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |   2.1e-05 |      3.97x |    CODEC_FILTER |    HARD | -
|        lz4 |     35 |     0 |       5 |         0 |           8 |         4 |         4 |  1.96e-05 |      3.91x |    CODEC_FILTER |    HARD | -
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |  1.95e-05 |      3.97x |    THREADS_COMP |    HARD | W
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |  1.96e-05 |      3.97x |          CLEVEL |    HARD | -
|        lz4 |     35 |     1 |       6 |         0 |           8 |         4 |         4 |  2.25e-05 |      3.97x |          CLEVEL |    SOFT | -
|        lz4 |     35 |     1 |       5 |         0 |           8 |         4 |         4 |  1.99e-05 |      3.97x |          CLEVEL |    SOFT | -
|        lz4 |     35 |     1 |       4 |         0 |           8 |         4 |         4 |  1.91e-05 |      3.97x |          CLEVEL |    SOFT | -
NDArray succesfully created!

Using Btune Models usually leads to significantly better performance scores, as demonstrated by the table above. Moreover, the process of finding the best combination is much faster with trained models. See https://btune.blosc.org for more info.

Using Btune from C

You can also use Btune from C. Similar to the Python examples above, you can activate it by setting the BTUNE_TRADEOFF environment variable. Alternatively, you can set the tuner_id in the compression parameters, also known as cparams, to the value of BLOSC_BTUNE. This will use the default Btune configuration. However, running Btune from C offers the advantage of being able to tune way more parameters, depending on your preferences:

    // compression params
    blosc2_cparams cparams = BLOSC2_CPARAMS_DEFAULTS;
    cparams.nthreads = 16; // Btune may lower this
    cparams.tuner_id = BLOSC_BTUNE;
    
    // Btune config parameters
    btune_config btune_config = BTUNE_CONFIG_DEFAULTS;
    btune_config.perf_mode = BTUNE_PERF_COMP; // You can choose BTUNE_PERF_COMP, BTUNE_PERF_DECOMP or BTUNE_PERF_BALANCED
    btune_config.tradeoff = .5; // Equivalent to BTUNE_TRADEOFF
    btune_config.use_inference = 2; // Equivalent to BTUNE_USE_INFERENCE
    btune_config.models_dir = "../models/"; // Equivalent to BTUNE_MODELS_DIR
    btune_config.behaviour.nwaits_before_readapt = 1;       // Number of waits before a readapt
    btune_config.behaviour.nsofts_before_hard = 3;          // Number of soft readapts before a hard readapt
    btune_config.behaviour.nhards_before_stop = 10;         // Number of hard readapts before stoping
    btune_config.behaviour.repeat_mode = BTUNE_REPEAT_ALL;  // Repeat all the initial readaptions (BTUNE_REPEAT_ALL), 
                                                            // only soft readaptions (BTUNE_REPEAT_SOFT)
                                                            // or stop improving (BTUNE_STOP)
    // Set the personalized Btune configuration
    cparams.tuner_params = &btune_config;

    // Create super chunk
    blosc2_dparams dparams = BLOSC2_DPARAMS_DEFAULTS;
    dparams.nthreads = 1;
    blosc2_storage storage = {
        .cparams=&cparams,
        .dparams=&dparams,
        .contiguous=true,
        .urlpath=(char*)out_fname
    };
    blosc2_schunk* schunk_out = blosc2_schunk_new(&storage);

See the full example in examples/btune_example.c. You can compile and run this example as follows:

Linux

gcc -o btune_example btune_example.c -lblosc2 -lm -I $CONDA_PREFIX/include/ -L $CONDA_PREFIX/lib64/
BTUNE_TRACE=1 LD_LIBRARY_PATH=$CONDA_PREFIX/lib64 ./btune_example rand_int.b2nd out.b2nd

MacOS

gcc -o btune_example btune_example.c -lblosc2 -lm -I $CONDA_PREFIX/include/ -L $CONDA_PREFIX/lib/
BTUNE_TRACE=1 DYLD_LIBRARY_PATH=$CONDA_PREFIX/lib ./btune_example rand_int.b2nd out.b2nd

Platform support

Right now, we support Btune on Intel/ARM64 Linux and Intel/ARM64 Mac, and we are providing binary wheels for these.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

blosc2_btune-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

blosc2_btune-1.0.2-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

blosc2_btune-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

blosc2_btune-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

blosc2_btune-1.0.2-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

blosc2_btune-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

blosc2_btune-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

blosc2_btune-1.0.2-cp39-cp39-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

blosc2_btune-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

blosc2_btune-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

blosc2_btune-1.0.2-cp38-cp38-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

blosc2_btune-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file blosc2_btune-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f56b8c98966290d02f0cb5d203d067e7ff7eb2b6ec6823131c520bd20dd71a66
MD5 ce42ab5da96e131640aaba1ad8831bc4
BLAKE2b-256 afbdffa19956adc4c31604f859a720086be5af75eeb86265e476f4d5bf45f4cb

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cedc2c53676f9435362dac21addbf81b1ee1238a33985a3b5d74f63c7b4d92b1
MD5 ea5cb1a71b1f27e77b86eedf961283ac
BLAKE2b-256 1a1ebfb91e380e35a7c760a0370a0c1ae8b553cb71c967dba3db79e89ff145ae

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ee8fb63993547b0a601f7d9dfe1eabe4262908478d87c4b6faff98b420b7f25a
MD5 979a4e39280bd1aef6fa24ae53d49469
BLAKE2b-256 6714e926c34418c2229c0871e4456c5ade604c525e467df496d9b194048716ff

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e888c76d53e401e66be76626c5bffce92a524d2a209e128603bc9cdb2c7cad4
MD5 4214f6411b568ec320c6f299dad5d3e2
BLAKE2b-256 7e85bec29c7085389e3b232731201606b9fa8bfb59118a90055ab9cfa24d1660

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c650d92a63df4aa6894ede791a9a928dedda6856b35d0e931b77e21730829ebc
MD5 a8a310842712b101e0beb96dd679fc03
BLAKE2b-256 b41674096c0a8749f02aa4a97434d39a86601c8c050a38af8021636d3d2b79cc

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1bdf483fc07697da977049e28672b3a324d2917a781db52a564bf155f66a40b4
MD5 31b6d656f2c37df932f60a7e8be301d5
BLAKE2b-256 3e452639785272662e1b723e036f7f9f48e84e5766717b013a3c5f616dd8deb8

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 33b764a342eb30456e48ff3f047d56f43a2e96ec6a28d9334fc1a14f0642edbc
MD5 6002837fe4e5cab445d078bedebe726f
BLAKE2b-256 1eb3047be44cae605af249c26999cd509735ce6a021ff421704e85ff2713b234

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0481bd61009a3c0f4572336f04177b28aae1481692d60707b796d18e278f8552
MD5 43ff337d86506c03416dcdade7f6e2d4
BLAKE2b-256 5b73af5c20b7050ee231a1bab1098f65542af56b01a618496a31237849ead6a6

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4f139c3a8ef4d885b31fabd905b2564c3f4d0844ecfbf62202a991ddf19563d5
MD5 9bbbab7df774ca18a6e7b3a041b44fdc
BLAKE2b-256 e33ce144aa64e169c1938a6c8622a10f413b9da80131cb3e361b058653957c97

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93c0c01dc83503fd079311b667aff047284122ec8e9276f26909c647400978a9
MD5 3ce61da179bc926ff67faaed800c97e4
BLAKE2b-256 06124727dd1bc92891cbd11f32742f94c921aa1eae39098bf235da46388c7dac

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1b97a1b0069f5a595ed473ef0e1bd6035ed43fa7862ee00fa30b89fd167e7d8
MD5 7d7253e0c0edc826f3ac9a8e66e24412
BLAKE2b-256 ac94608d50a2d7cc8b0c1c4265a78a886e574852224e6aa61427eeba80576bc0

See more details on using hashes here.

File details

Details for the file blosc2_btune-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_btune-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 48b1ad333ce39da07f0eaba03830b773f87e4f924d2f40774214fadde14264e5
MD5 642484819e20dcf1e58e71ab14638d68
BLAKE2b-256 1ee0edbe5484848887e86b8dc05f3acfc8913375214b481e1345c3a1bce99439

See more details on using hashes here.

Release history Release notifications | RSS feed

1.2.1

3 files

1.2.0

5 files

1.1.2

5 files

1.1.1

5 files

1.1.0

5 files

1.0.3

5 files

This release

1.0.2 This release

12 files

1.0.1

12 files

1.0.0

8 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