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.post3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.4 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.4 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.5 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.5 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.3 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.1 MB view details)

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

ctranslate2_crisperwhisper-4.7.1.post3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (40.1 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.post3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3af10da8cbabb603d363d8a96f1329baba838820dde7fbdf486bd6e86713e12
MD5 466bbdeff5ce436b4167b4868ccc0992
BLAKE2b-256 60a5fba9e5f08be1a0c1c3e602c20f5c965545461e8940911c76048628584e1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2b45cd5244f515b4ccf0c125f26ae679ef6f71031cbce78523b3875947217750
MD5 4414f249c3e93830202f241c0d35040f
BLAKE2b-256 513775c7f07d7895238089289602c059647644e197cd336381bfddd5b9c00e94

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b996b0b00ef045718ed8680e0590b537b10e9dd331f328884ec41d667d7719c2
MD5 ff6687b2999ed657b565ba77c79b757c
BLAKE2b-256 fac73701889a68f52223f5315e1304319e3d54a811f77f15cb795890a270b2c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 271e3271fbc58c9b6b1a1d78412f58506809ffa4cfce667ed90879e061c4eeb4
MD5 a8b5cebff10c4b7059769b63a7be0956
BLAKE2b-256 d6b44a82c5f5047cd627a2695c0ce6f86e064273e8489a71ac59ef38484b9cf4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4f4efab86642a1055852461cda141218e3cbae7447ae86ecea13286475056022
MD5 7f1d89d6d91177de99a7e09d1b0c93aa
BLAKE2b-256 2e10a3a3757b253f07a12c240afeee1c97466a0b7c4ce9e962a27d40d14ec815

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bed20ef640c45158ace6b579da94fc7001929fa2d4c69c765e0aa29711dcc82a
MD5 f042aa4f653b85fb6de74df568f1e536
BLAKE2b-256 44abf0a5545448531c712275fb47a72a899fa6ca603858049c22b6d30af35f02

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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.post3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ctranslate2_crisperwhisper-4.7.1.post3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b2dde2b07e0749e5bfc91e78b4fbff4f8a2fa55ced893134b034bbe385ed65f
MD5 560137686e36021a059c5d3b79d39086
BLAKE2b-256 45f2ee0e75f5db10c471b7bca6b67106a218c4209188536d4fcc4e711d012ca2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctranslate2_crisperwhisper-4.7.1.post3-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