Skip to main content

Fast inference engine for OpenNMT models

Project description

CI PyPI version Gitter

CTranslate2

CTranslate2 is a fast inference engine for OpenNMT-py and OpenNMT-tf models supporting both CPU and GPU execution. The goal is to provide comprehensive inference features and be the most efficient and cost-effective solution to deploy standard neural machine translation systems such as Transformer models.

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

Table of contents

  1. Key features
  2. Quickstart
  3. Installation
  4. Converting models
  5. Translating
  6. Environment variables
  7. Building
  8. Testing
  9. Benchmarks
  10. Frequently asked questions

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.
  • Quantization and reduced precision
    The model serialization and computation support weights with reduced precision: 16-bit floating points (FP16), 16-bit integers, and 8-bit integers.
  • Multiple CPU architectures support
    The project supports x86-64 and ARM64 processors and integrates multiple backends that are optimized for these platforms: Intel MKL, oneDNN, OpenBLAS, 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 translations
    Translations can be run efficiently in parallel 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
    Models can be quantized below 100MB with minimal accuracy loss. A full featured Docker image supporting GPU and CPU requires less than 400MB.
  • Simple integration
    The project has few dependencies and exposes translation APIs in Python and C++ to cover most integration needs.
  • Interactive decoding
    Advanced decoding features allow autocompleting a partial translation and returning alternatives at a specific location in the translation.

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

Supported decoding options

The translation API supports several decoding options:

  • decoding with greedy or beam search
  • random sampling from the output distribution
  • translating with a known target prefix
  • returning alternatives at a specific location in the target
  • constraining the decoding length
  • returning multiple translation hypotheses
  • returning attention vectors
  • approximating the generation using a pre-compiled vocabulary map
  • replacing unknown target tokens by source tokens with the highest attention

See the Decoding documentation for examples.

Quickstart

The steps below assume a Linux OS and a Python installation (3.6 or above).

1. Install the Python package:

pip install --upgrade pip
pip install ctranslate2

2. Convert a model trained with OpenNMT-py or OpenNMT-tf, for example the pretrained Transformer model (choose one of the two models):

a. OpenNMT-py

pip install OpenNMT-py

wget https://s3.amazonaws.com/opennmt-models/transformer-ende-wmt-pyOnmt.tar.gz
tar xf transformer-ende-wmt-pyOnmt.tar.gz

ct2-opennmt-py-converter --model_path averaged-10-epoch.pt --model_spec TransformerBase \
    --output_dir ende_ctranslate2

b. OpenNMT-tf

pip install OpenNMT-tf

wget https://s3.amazonaws.com/opennmt-models/averaged-ende-export500k-v2.tar.gz
tar xf averaged-ende-export500k-v2.tar.gz

ct2-opennmt-tf-converter --model_path averaged-ende-export500k-v2 --model_spec TransformerBase \
    --output_dir ende_ctranslate2

3. Translate tokenized inputs, for example with the Python API:

import ctranslate2
translator = ctranslate2.Translator("ende_ctranslate2/")
translator.translate_batch([["▁H", "ello", "▁world", "!"]])

Installation

Python package

Python packages are published on PyPI for Linux and macOS:

pip install ctranslate2

All software dependencies are included in the package, including CUDA libraries for GPU support on Linux. The macOS version only supports CPU execution.

Requirements:

  • OS: Linux, macOS
  • Python version: >= 3.6
  • pip version: >= 19.3
  • GPU driver version: >= 418.39

Docker images

The opennmt/ctranslate2 repository contains images for multiple Linux distributions, with or without GPU support:

docker pull opennmt/ctranslate2:latest-ubuntu18-cuda11.0

The images include:

  • a translation client to directly translate files
  • Python 3 packages
  • libctranslate2.so library development files

Manual compilation

See Building.

Converting models

The core CTranslate2 implementation is framework agnostic. The framework specific logic is moved to a conversion step that serializes trained models into a simple binary format.

The following frameworks and models are currently supported:

OpenNMT-tf OpenNMT-py
Transformer (Vaswani et al. 2017)
+ relative position representations (Shaw et al. 2018)

If you are using a model that is not listed above, consider opening an issue to discuss future integration.

Conversion scripts are parts of the Python package and should be run in the same environment as the selected training framework:

  • ct2-opennmt-py-converter
  • ct2-opennmt-tf-converter

The converter Python API can also be used to convert Transformer models with any number of layers, hidden dimensions, and attention heads.

Integrated model conversion

Models can also be converted directly from the supported training frameworks. See their documentation:

Quantization and reduced precision

The converters support reducing the weights precision to save on space and possibly accelerate the model execution. The --quantization option accepts the following values:

  • int8
  • int16
  • float16

When loading a quantized model, the library tries to use the same type for computation. If the current platform or backend do not support optimized execution for this computation type (e.g. int16 is not optimized on GPU), then the library converts the model weights to another optimized type. The tables below document the fallback types:

On CPU:

Model int8 int16 float16
Intel int8 int16 float
other int8 int8 float

(This table only applies for prebuilt binaries or when compiling with both Intel MKL and oneDNN backends.)

On GPU:

Compute Capability int8 int16 float16
>= 7.0 int8 float16 float16
6.1 int8 float float
<= 6.0 float float float

Notes:

  • The computation type can also be changed when creating a translation instance by setting the --compute_type argument.
  • Integer quantization is only applied for GEMM-based layers and embeddings.

Adding converters

Each converter should populate a model specification with trained weights coming from an existing model. The model specification declares the variable names and layout expected by the CTranslate2 core engine.

See the existing converters implementation which could be used as a template.

Translating

The examples use the English-German model converted in the Quickstart. This model requires a SentencePiece tokenization.

With the translation client

echo "▁H ello ▁world !" | docker run --gpus=all -i --rm -v $PWD:/data \
    opennmt/ctranslate2:latest-ubuntu18-cuda11.0 --model /data/ende_ctranslate2 --device cuda

See docker run --rm opennmt/ctranslate2:latest-ubuntu18-cuda11.0 --help for additional options.

With the Python API

import ctranslate2
translator = ctranslate2.Translator("ende_ctranslate2/")
translator.translate_batch([["▁H", "ello", "▁world", "!"]])

See the Python reference for more advanced usages.

With the C++ API

#include <iostream>
#include <ctranslate2/translator.h>

int main() {
  ctranslate2::Translator translator("ende_ctranslate2/");
  ctranslate2::TranslationResult result = translator.translate({"▁H", "ello", "▁world", "!"});

  for (const auto& token : result.output())
    std::cout << token << ' ';
  std::cout << std::endl;
  return 0;
}

See the Translator class for more advanced usages, and the TranslatorPool class for running translations in parallel.

Environment variables

Some environment variables can be configured to customize the execution:

  • CT2_CUDA_ALLOW_FP16: Allow using FP16 computation on GPU even if the device does not have efficient FP16 support.
  • CT2_CUDA_CACHING_ALLOCATOR_CONFIG: Tune the CUDA caching allocator (see Performance).
  • CT2_FORCE_CPU_ISA: Force CTranslate2 to select a specific instruction set architecture (ISA). Possible values are: GENERIC, AVX, AVX2. Note: this does not impact backend libraries (such as Intel MKL) which usually have their own environment variables to configure ISA dispatching.
  • CT2_TRANSLATORS_CORE_OFFSET: If set to a non negative value, parallel translators are pinned to cores in the range [offset, offset + inter_threads]. Requires compilation with -DOPENMP_RUNTIME=NONE.
  • CT2_USE_EXPERIMENTAL_PACKED_GEMM: Enable the packed GEMM API for Intel MKL (see Performance).
  • CT2_USE_MKL: Force CTranslate2 to use (or not) Intel MKL. By default, the runtime automatically decides whether to use Intel MKL or not based on the CPU vendor.
  • CT2_VERBOSE: Enable some verbose logs to help debugging the run configuration.

Building

Docker images

The Docker images build all translation clients presented in Translating. The build command should be run from the project root directory, e.g.:

docker build -t opennmt/ctranslate2:latest-ubuntu18 -f docker/Dockerfile.ubuntu .

When building GPU images, the CUDA version can be selected with --build-arg CUDA_VERSION=11.0.

See the docker/ directory for available images.

Build options

The project uses CMake for compilation. The following options can be set with -DOPTION=VALUE:

CMake option Accepted values (default in bold) Description
BUILD_TESTS OFF, ON Compiles the tests
CMAKE_CXX_FLAGS compiler flags Defines additional compiler flags
ENABLE_CPU_DISPATCH OFF, ON Compiles CPU kernels for multiple ISA and dispatches at runtime (should be disabled when explicitly targeting an architecture with the -march compilation flag)
ENABLE_PROFILING OFF, ON Enables the integrated profiler (usually disabled in production builds)
LIB_ONLY OFF, ON Disables the translation client
OPENMP_RUNTIME INTEL, COMP, NONE Selects or disables the OpenMP runtime (INTEL: Intel OpenMP; COMP: OpenMP runtime provided by the compiler; NONE: no OpenMP runtime)
WITH_CUDA OFF, ON Compiles with the CUDA backend
WITH_DNNL OFF, ON Compiles with the oneDNN backend (a.k.a. DNNL)
WITH_MKL OFF, ON Compiles with the Intel MKL backend
WITH_ACCELERATE OFF, ON Compiles with the Apple Accelerate backend
WITH_OPENBLAS OFF, ON Compiles with the OpenBLAS backend

Some build options require external dependencies:

  • -DWITH_MKL=ON requires:
  • -DWITH_DNNL=ON requires:
  • -DWITH_ACCELERATE=ON requires:
  • -DWITH_OPENBLAS=ON requires:
  • -DWITH_CUDA=ON requires:

Multiple backends can be enabled for a single build. When building with both Intel MKL and oneDNN, the backend will be selected at runtime based on the CPU information.

Example (Ubuntu)

Install Intel MKL (optional for GPU only builds)

Use the following instructions to install Intel MKL:

wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo sh -c 'echo "deb https://apt.repos.intel.com/oneapi all main" > /etc/apt/sources.list.d/oneAPI.list'
sudo apt-get update
sudo apt-get install intel-oneapi-mkl-devel

See the Intel MKL documentation for other installation methods.

Install CUDA (optional for CPU only builds)

See the NVIDIA documentation for information on how to download and install CUDA.

Compile

Under the project root, run the following commands:

git submodule update --init
mkdir build && cd build
cmake -DWITH_MKL=ON -DWITH_CUDA=ON ..
make -j4

(If you did not install one of Intel MKL or CUDA, set its corresponding flag to OFF in the CMake command line.)

These steps should produce the cli/translate binary. You can try it with the model converted in the Quickstart section:

$ echo "▁H ello ▁world !" | ./cli/translate --model ende_ctranslate2/ --device auto
▁Hallo ▁Welt !

Testing

C++

To enable the tests, you should configure the project with cmake -DBUILD_TESTS=ON. The binary tests/ctranslate2_test runs all tests using Google Test. It expects the path to the test data as argument:

./tests/ctranslate2_test ../tests/data

Python

# Install the CTranslate2 library.
cd build && make install && cd ..

# Build and install the Python wheel.
cd python
pip install -r install_requirements.txt
python setup.py bdist_wheel
pip install dist/*.whl

# Run the tests with pytest.
pip install -r tests/requirements.txt
pytest tests/test.py

Depending on your build configuration, you might need to set LD_LIBRARY_PATH if missing libraries are reported when running tests/test.py.

Benchmarks

We compare CTranslate2 with OpenNMT-py and OpenNMT-tf on their pretrained English-German Transformer models (available on the website). For this benchmark, CTranslate2 models are using the weights of the OpenNMT-py model.

Model size

Model size
OpenNMT-py 542MB
OpenNMT-tf 367MB
CTranslate2 364MB
- int16 187MB
- float16 182MB
- int8 100MB

CTranslate2 models are generally lighter and can go as low as 100MB when quantized to int8. This also results in a fast loading time and noticeable lower memory usage during runtime.

Results

We translate the test set newstest2014 and report:

  • the number of target tokens generated per second (higher is better)
  • the maximum memory usage (lower is better)
  • the BLEU score of the detokenized output (higher is better)

Translations are running beam search with a size of 4 and a maximum batch size of 32.

See the directory tools/benchmark for more details about the benchmark procedure and how to run it. Also see the Performance document to further improve CTranslate2 performance.

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 2.14.0 (with TensorFlow 2.4.0) 279.3 2308MB 26.93
OpenNMT-py 2.0.0 (with PyTorch 1.7.0) 292.9 1840MB 26.77
- int8 383.3 1784MB 26.86
CTranslate2 1.17.0 593.2 970MB 26.77
- int16 777.2 718MB 26.84
- int8 921.5 635MB 26.92
- int8 + vmap 1143.4 621MB 26.75

Executed with 4 threads on a c5.metal 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 2.14.0 (with TensorFlow 2.4.0) 1753.4 4958MB 2525MB 26.93
OpenNMT-py 2.0.0 (with PyTorch 1.7.0) 1189.4 2838MB 2666MB 26.77
CTranslate2 1.17.0 2721.1 1164MB 954MB 26.77
- int8 3710.0 882MB 541MB 26.86
- float16 3965.8 924MB 590MB 26.75
- float16 + local sorting 4869.4 1148MB 591MB 26.75

Executed with CUDA 11.0 on a g4dn.xlarge Amazon EC2 instance equipped with a NVIDIA T4 GPU (driver version: 450.80.02).

Frequently asked questions

How does it relate to the original CTranslate project?

The original CTranslate project shares a similar goal which is to provide a custom execution engine for OpenNMT models that is lightweight and fast. However, it has some limitations that were hard to overcome:

  • a strong dependency on LuaTorch and OpenNMT-lua, which are now both deprecated in favor of other toolkits;
  • a direct reliance on Eigen, which introduces heavy templating and a limited GPU support.

CTranslate2 addresses these issues in several ways:

  • the core implementation is framework agnostic, moving the framework specific logic to a model conversion step;
  • the internal operators follow the ONNX specifications as much as possible for better future-proofing;
  • the call to external libraries (Intel MKL, cuBLAS, etc.) occurs as late as possible in the execution to not rely on a library specific logic.

What is the state of this project?

The implementation has been generously tested in production environment so people can rely on it in their application. The project versioning follows Semantic Versioning 2.0.0. The following APIs are covered by backward compatibility guarantees:

  • Converted models
  • Python converters options
  • Python symbols:
    • ctranslate2.Translator
    • ctranslate2.converters.OpenNMTPyConverter
    • ctranslate2.converters.OpenNMTTFConverter
  • C++ symbols:
    • ctranslate2::models::Model
    • ctranslate2::TranslationOptions
    • ctranslate2::TranslationResult
    • ctranslate2::Translator
    • ctranslate2::TranslatorPool
  • C++ translation client options

Other APIs are expected to evolve to increase efficiency, genericity, and model support.

Why and when should I use this implementation instead of PyTorch or TensorFlow?

Here are some scenarios where this project could be used:

  • You want to accelarate standard translation models for production usage, especially on CPUs.
  • You need to embed translation models in an existing C++ application without adding large dependencies.
  • Your application requires custom threading and memory usage control.
  • You want to reduce the model size on disk and/or memory.

However, you should probably not use this project when:

  • You want to train custom architectures not covered by this project.
  • You see no value in the key features listed at the top of this document.

What hardware is supported?

CPU

CTranslate2 supports x86-64 and ARM64 processors. It includes optimizations for AVX, AVX2, and NEON and supports multiple BLAS backends that should be selected based on the target platform (see Building).

Prebuilt binaries are designed to run on any x86-64 processors supporting at least SSE 4.2. The binaries implement runtime dispatch to select the best backend and instruction set architecture (ISA) for the platform. In particular, they are compiled with both Intel MKL and oneDNN so that Intel MKL is only used on Intel processors where it performs best, whereas oneDNN is used on other x86-64 processors such as AMD.

GPU

CTranslate2 supports NVIDIA GPUs with a Compute Capability greater or equal to 3.0 (Kepler). FP16 execution requires a Compute Capability greater or equal to 7.0.

The driver requirement depends on the CUDA version. See the CUDA Compatibility guide for more information.

What are the known limitations?

The current approach only exports the weights from existing models and redefines the computation graph via the code. This implies a strong assumption of the graph architecture executed by the original framework.

We are actively looking to ease this assumption by supporting ONNX as model parts.

What are the future plans?

There are many ways to make this project better and even faster. See the open issues for an overview of current and planned features. Here are some things we would like to get to:

  • Support of running ONNX graphs

What is the difference between intra_threads and inter_threads?

  • intra_threads is the number of OpenMP threads that is used per translation: increase this value to decrease the latency.
  • inter_threads is the maximum number of CPU translations executed in parallel: increase this value to increase the throughput. Even though the model data are shared, this execution mode will increase the memory usage as some internal buffers are duplicated for thread safety.

The total number of computing threads launched by the process is summarized by this formula:

num_threads = inter_threads * intra_threads

Note that these options are only defined for CPU translation and are forced to 1 when executing on GPU. Parallel translations on GPU require multiple GPUs. See the option device_index that accepts multiple device IDs.

Do you provide a translation server?

The OpenNMT-py REST server is able to serve CTranslate2 models. See the code integration to learn more.

How do I generate a vocabulary mapping file?

See here.

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-1.20.1-cp39-cp39-manylinux2014_x86_64.whl (76.7 MB view details)

Uploaded CPython 3.9

ctranslate2-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl (35.5 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

ctranslate2-1.20.1-cp38-cp38-manylinux2014_x86_64.whl (76.7 MB view details)

Uploaded CPython 3.8

ctranslate2-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl (35.5 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

ctranslate2-1.20.1-cp37-cp37m-manylinux2014_x86_64.whl (76.8 MB view details)

Uploaded CPython 3.7m

ctranslate2-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl (35.5 MB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

ctranslate2-1.20.1-cp36-cp36m-manylinux2014_x86_64.whl (76.8 MB view details)

Uploaded CPython 3.6m

ctranslate2-1.20.1-cp36-cp36m-macosx_10_9_x86_64.whl (35.5 MB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file ctranslate2-1.20.1-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 76.7 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1710ecc9a96c1269c2639c86e787b0fceedc7c5558bae7ae9ba8c7a52641ff0a
MD5 6a52bba2c747c72ee1eba7caa0d1f7c4
BLAKE2b-256 c1e4d695fbf6634cbdf906d0e221c1dd748863fd582882042cd880b1f320889a

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 35.5 MB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3c3e9fa61a915b78ac1ac6d85834bc65f217b4f0176882a5db6b5bb833c3069b
MD5 6b94b39de1f7ab575c35a540b19ec8bc
BLAKE2b-256 bca71193de21c2a7d6cfdeee3eb81175cb760de385c5d1b3f9026289db9dfa6f

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 76.7 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7c9eea155429d39bcafa1cb20c651984497ee0e050103cf03c510be13ff014a
MD5 7fc4198dcd6c379a4a27f53d91c55037
BLAKE2b-256 41694285dcf41985faec2378469ad85b85b18d402ec00403f1df36d249e84674

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 35.5 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 705dd9bfedf9e9fe308ace91547ed5479ef3a0923dd851c2f689501d3cd8102f
MD5 8fc01c167b274b86b04170a8a95f7a64
BLAKE2b-256 0ba5a0f90d3d1a2cd33077ec601db6aef07a3a6e0b09f72d62e7debff6b7bb04

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 76.8 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7630c39a94e28d52717f5568d12951f2a713c59defce5342b107649c2d831c7b
MD5 6631b95518423ebfe578c4d1ffab40d7
BLAKE2b-256 1815b6dd092ad363ae13343e084ff6764caa24ea33702b388d5012dc7e69ebd4

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 35.5 MB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a5a6f3b67e3696e33d786ad04781474331c19cdc0868eba4226e2b9b0843ec59
MD5 195b76a4124e0d6650ef6387ad337653
BLAKE2b-256 9a4ba86c4f97c9cd0d8148f7552337127828c1043ef398a62254f8b3dbee0e9b

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 76.8 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 79f019cddef0a006ddfafab3e275bc0eb02e7466cc991c1f3d3acc626b55c269
MD5 00fbfa00d3c81fb59eaf297ec2d3d6fc
BLAKE2b-256 291aa2f2458055a6e598e32cb211d46a9849ece1dde11d36333f2fd517d33833

See more details on using hashes here.

File details

Details for the file ctranslate2-1.20.1-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: ctranslate2-1.20.1-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 35.5 MB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ctranslate2-1.20.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 454ccacfd9415f61def0dda68072cf02ce7704146ab118540d53f8d2c882f32a
MD5 15151c3469b893fc2b3b7b4a2daaf692
BLAKE2b-256 ec91c4d60b9d8530e178e31dcd214461462db212486dfdc9e557a97725a882ec

See more details on using hashes here.

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