Skip to main content

CTranslate2 fork with speculative-decoding APIs for CrisperWhisper

Project description

CI PyPI version Documentation Gitter Forum

CTranslate2

CTranslate2 is a C++ and Python library for efficient inference with Transformer models.

The project implements a custom runtime that applies many performance optimization techniques such as weights quantization, layers fusion, batch reordering, etc., to accelerate and reduce the memory usage of Transformer models on CPU and GPU.

The following model types are currently supported:

  • Encoder-decoder models: Transformer base/big, M2M-100, NLLB, BART, mBART, Pegasus, T5, Whisper T5Gemma
  • Decoder-only models: GPT-2, GPT-J, GPT-NeoX, OPT, BLOOM, MPT, Llama, Mistral, Gemma, CodeGen, GPTBigCode, Falcon, Qwen2
  • Encoder-only models: BERT, DistilBERT, XLM-RoBERTa

Compatible models should be first converted into an optimized model format. The library includes converters for multiple frameworks:

The project is production-oriented and comes with backward compatibility guarantees, but it also includes experimental features related to model compression and inference acceleration.

Key features

  • Fast and efficient execution on CPU and GPU
    The execution is significantly faster and requires less resources than general-purpose deep learning frameworks on supported models and tasks thanks to many advanced optimizations: layer fusion, padding removal, batch reordering, in-place operations, caching mechanism, etc.
  • Quantization and reduced precision
    The model serialization and computation support weights with reduced precision: 16-bit floating points (FP16), 16-bit brain floating points (BF16), 16-bit integers (INT16), 8-bit integers (INT8) and AWQ quantization (INT4).
  • Multiple CPU architectures support
    The project supports x86-64 and AArch64/ARM64 processors and integrates multiple backends that are optimized for these platforms: Intel MKL, oneDNN, OpenBLAS, Ruy, and Apple Accelerate.
  • Automatic CPU detection and code dispatch
    One binary can include multiple backends (e.g. Intel MKL and oneDNN) and instruction set architectures (e.g. AVX, AVX2) that are automatically selected at runtime based on the CPU information.
  • Parallel and asynchronous execution
    Multiple batches can be processed in parallel and asynchronously using multiple GPUs or CPU cores.
  • Dynamic memory usage
    The memory usage changes dynamically depending on the request size while still meeting performance requirements thanks to caching allocators on both CPU and GPU.
  • Lightweight on disk
    Quantization can make the models 4 times smaller on disk with minimal accuracy loss.
  • Simple integration
    The project has few dependencies and exposes simple APIs in Python and C++ to cover most integration needs.
  • Configurable and interactive decoding
    Advanced decoding features allow autocompleting a partial sequence and returning alternatives at a specific location in the sequence.
  • Support tensor parallelism for distributed inference
    Very large model can be split into multiple GPUs. Following this documentation to set up the required environment.

Some of these features are difficult to achieve with standard deep learning frameworks and are the motivation for this project.

Installation and usage

CTranslate2 can be installed with pip:

pip install ctranslate2

The Python module is used to convert models and can translate or generate text with few lines of code:

translator = ctranslate2.Translator(translation_model_path)
translator.translate_batch(tokens)

generator = ctranslate2.Generator(generation_model_path)
generator.generate_batch(start_tokens)

See the documentation for more information and examples.

If you have an AMD ROCm GPU, we provide specific Python wheels on the releases page.

Benchmarks

We translate the En->De test set newstest2014 with multiple models:

  • OpenNMT-tf WMT14: a base Transformer trained with OpenNMT-tf on the WMT14 dataset (4.5M lines)
  • OpenNMT-py WMT14: a base Transformer trained with OpenNMT-py on the WMT14 dataset (4.5M lines)
  • OPUS-MT: a base Transformer trained with Marian on all OPUS data available on 2020-02-26 (81.9M lines)

The benchmark reports the number of target tokens generated per second (higher is better). The results are aggregated over multiple runs. See the benchmark scripts for more details and reproduce these numbers.

Please note that the results presented below are only valid for the configuration used during this benchmark: absolute and relative performance may change with different settings.

CPU

Tokens per second Max. memory BLEU
OpenNMT-tf WMT14 model
OpenNMT-tf 2.31.0 (with TensorFlow 2.11.0) 209.2 2653MB 26.93
OpenNMT-py WMT14 model
OpenNMT-py 3.0.4 (with PyTorch 1.13.1) 275.8 2012MB 26.77
- int8 323.3 1359MB 26.72
CTranslate2 3.6.0 658.8 849MB 26.77
- int16 733.0 672MB 26.82
- int8 860.2 529MB 26.78
- int8 + vmap 1126.2 598MB 26.64
OPUS-MT model
Transformers 4.26.1 (with PyTorch 1.13.1) 147.3 2332MB 27.90
Marian 1.11.0 344.5 7605MB 27.93
- int16 330.2 5901MB 27.65
- int8 355.8 4763MB 27.27
CTranslate2 3.6.0 525.0 721MB 27.92
- int16 596.1 660MB 27.53
- int8 696.1 516MB 27.65

Executed with 4 threads on a c5.2xlarge Amazon EC2 instance equipped with an Intel(R) Xeon(R) Platinum 8275CL CPU.

GPU

Tokens per second Max. GPU memory Max. CPU memory BLEU
OpenNMT-tf WMT14 model
OpenNMT-tf 2.31.0 (with TensorFlow 2.11.0) 1483.5 3031MB 3122MB 26.94
OpenNMT-py WMT14 model
OpenNMT-py 3.0.4 (with PyTorch 1.13.1) 1795.2 2973MB 3099MB 26.77
FasterTransformer 5.3 6979.0 2402MB 1131MB 26.77
- float16 8592.5 1360MB 1135MB 26.80
CTranslate2 3.6.0 6634.7 1261MB 953MB 26.77
- int8 8567.2 1005MB 807MB 26.85
- float16 10990.7 941MB 807MB 26.77
- int8 + float16 8725.4 813MB 800MB 26.83
OPUS-MT model
Transformers 4.26.1 (with PyTorch 1.13.1) 1022.9 4097MB 2109MB 27.90
Marian 1.11.0 3241.0 3381MB 2156MB 27.92
- float16 3962.4 3239MB 1976MB 27.94
CTranslate2 3.6.0 5876.4 1197MB 754MB 27.92
- int8 7521.9 1005MB 792MB 27.79
- float16 9296.7 909MB 814MB 27.90
- int8 + float16 8362.7 813MB 766MB 27.90

Executed with CUDA 11 on a g5.xlarge Amazon EC2 instance equipped with a NVIDIA A10G GPU (driver version: 510.47.03).

Contributing

CTranslate2 is a community-driven project. We welcome contributions of all kinds:

  • New Model Support: Help us implement more Transformer architectures.
  • Performance: Propose optimizations for CPU or GPU kernels.
  • Bug Reports: Open an issue if you find something not working as expected.
  • Documentation: Improve our guides or add new examples.

Check out our Contributing Guide to learn how to set up your development environment.

Additional resources

Project details


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.

ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ctranslate2_crisperwhisper-4.7.1.post2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (39.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb02c90d5cf94faa62c1a80973c881a7dadf6ea97a135e777a626c0b6c7b73de
MD5 0d575c9020c3d868dcaa6f0de4988fee
BLAKE2b-256 03824d7c4df38df4e3704de0d0abf75c1e7054b5073287b3320d85ae18e87c99

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ff560e7801cfa500d3599969d7a6c288c66d2313af911a257bba2623dc1d308
MD5 34dacb2e5b67b5607dd9e7b564b27ef4
BLAKE2b-256 b6bb8c1b4bc1c4a7a1e3b4cccf9c02ab9fe56e4b6877116bf8e7fb3a69a4bb3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 39aa08ae8adc3ee4727c5d6946b790d9d73d40c6050fdff078290c3d76cd3177
MD5 7f3d4903fc63266f806ae8a5fb35d7e1
BLAKE2b-256 6e4d107036c0016724b5432ac100850015bdcf69a2f3e8d5964e25e74d66ef9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6fe07b4f3e8e20349fd488680e235634e70c3e2f83e5350544685bcbd3f81c9f
MD5 02917df9142618c69d53e5b6b2393993
BLAKE2b-256 3fef5e0d03b415cbebd4fa339354bcce6ce18c55b8d80ede03248e8d53a796c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e66618a689ee563a4f1e62b602dc6783d295dc7aaa59274d95ccaefcbdad99fe
MD5 18c6355c0bd365b9fe7a0eb4243907e3
BLAKE2b-256 fdb7a5e6ca2f3b03dbd270a01d4d7e855a5b8b2dfb6497a68ecc7dd35c9e9601

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca2d7350f42aac874621a452f272cfd1b6526f43dcb16f4d0d64a7fddaf66f8c
MD5 205af3e549cbda44a42556f3b16a199e
BLAKE2b-256 84d5ce09113b86be5b9979058e035254a3856398d685b1cca3e79b8291db3372

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctranslate2_crisperwhisper-4.7.1.post2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5daf9c81e7c9c818c05450d439bb04fda4b09002b91b16aa3d1d87841f4aecd0
MD5 322af88da95ad38922dfbfe02adbb0b3
BLAKE2b-256 e666fbfcfd13ba64bd2b5eb04799996d63e50a62b42413045f97b62d7773fdef

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on nyrahealth/CTranslate2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page