Skip to main content

The Blis BLAS-like linear algebra library, as a self-contained C-extension.

Project description

Cython BLIS: Fast BLAS-like operations from Python and Cython, without the tears

This repository provides the Blis linear algebra routines as a self-contained Python C-extension.

Currently, we only supports single-threaded execution, as this is actually best for our workloads (ML inference).

Azure Pipelines pypi Version conda Python wheels

Installation

You can install the package via pip, first making sure that pip, setuptools, and wheel are up-to-date:

pip install -U pip setuptools wheel
pip install blis

Wheels should be available, so installation should be fast. If you want to install from source and you're on Windows, you'll need to install LLVM.

Building BLIS for alternative architectures

The provided wheels should work on x86_64 and osx/arm64 architectures. Unfortunately we do not currently know a way to provide different wheels for alternative architectures, and we cannot provide a single binary that works everywhere. So if the wheel doesn't work for your CPU, you'll need to specify source distribution, and tell Blis your CPU architecture using the BLIS_ARCH environment variable.

a) Install with auto-detected CPU support

pip install spacy --no-binary blis

b) Install using an existing configuration

Provide an architecture from the supported configurations.

BLIS_ARCH="power9" pip install spacy --no-binary blis

c) Install with generic arch support

⚠️ generic is not optimized for any particular CPU and is extremely slow. Only recommended for testing!

BLIS_ARCH="generic" pip install spacy --no-binary blis

d) Build specific support

In order to compile Blis, cython-blis bundles makefile scripts for specific architectures, that are compiled by running the Blis build system and logging the commands. We do not yet have logs for every architecture, as there are some architectures we have not had access to.

See here for list of architectures. For example, here's how to build support for the Intel architecture knl:

git clone https://github.com/explosion/cython-blis && cd cython-blis
git pull && git submodule init && git submodule update && git submodule status
python3 -m venv venv
source venv/bin/activate
pip install -U pip setuptools wheel
pip install -r requirements.txt
./bin/generate-make-jsonl linux knl
BLIS_ARCH="knl" python setup.py build_ext --inplace
BLIS_ARCH="knl" python setup.py bdist_wheel

Fingers crossed, this will build you a wheel that supports your platform. You could then submit a PR with the blis/_src/make/linux-knl.jsonl and blis/_src/include/linux-knl/blis.h files so that you can run:

BLIS_ARCH="knl" pip install --no-binary=blis

Usage

Two APIs are provided: a high-level Python API, and direct Cython access, which provides fused-type, nogil Cython bindings to the underlying Blis linear algebra library. Fused types are a simple template mechanism, allowing just a touch of compile-time generic programming:

cimport blis.cy
A = <float*>calloc(nN * nI, sizeof(float))
B = <float*>calloc(nO * nI, sizeof(float))
C = <float*>calloc(nr_b0 * nr_b1, sizeof(float))
blis.cy.gemm(blis.cy.NO_TRANSPOSE, blis.cy.NO_TRANSPOSE,
             nO, nI, nN,
             1.0, A, nI, 1, B, nO, 1,
             1.0, C, nO, 1)

Bindings have been added as we've needed them. Please submit pull requests if the library is missing some functions you require.

Development

To build the source package, you should run the following command:

./bin/update-vendored-source

This populates the blis/_src folder for the various architectures, using the flame-blis submodule.

Updating the build files

In order to compile the Blis sources, we use jsonl files that provide the explicit compiler flags. We build these jsonl files by running Blis's build system, and then converting the log. This avoids us having to replicate the build system within Python: we just use the jsonl to make a bunch of subprocess calls. To support a new OS/architecture combination, we have to provide the jsonl file and the header.

Linux

The Linux build files need to be produced from within the manylinux2014 Docker container, so that they will be compatible with the wheel building process.

First, install docker. Then do the following to start the container:

sudo docker run -it quay.io/pypa/manylinux2014_x86_64:latest

Once within the container, the following commands should check out the repo and build the jsonl files for the generic arch:

mkdir /usr/local/repos
cd /usr/local/repos
git clone https://github.com/explosion/cython-blis && cd cython-blis
git pull && git submodule init && git submodule update && git submodule
status
/opt/python/cp36-cp36m/bin/python -m venv env3.6
source env3.6/bin/activate
pip install -r requirements.txt
./bin/generate-make-jsonl linux generic --export
BLIS_ARCH=generic python setup.py build_ext --inplace
# N.B.: don't copy to /tmp, docker cp doesn't work from there.
cp blis/_src/include/linux-generic/blis.h /linux-generic-blis.h
cp blis/_src/make/linux-generic.jsonl /

Then from a new terminal, retrieve the two files we need out of the container:

sudo docker ps -l # Get the container ID
# When I'm in Vagrant, I need to go via cat -- but then I end up with dummy
# lines at the top and bottom. Sigh. If you don't have that problem and
# sudo docker cp just works, just copy the file.
sudo docker cp aa9d42588791:/linux-generic-blis.h - | cat > linux-generic-blis.h
sudo docker cp aa9d42588791:/linux-generic.jsonl - | cat > linux-generic.jsonl

Project details


Download files

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

Source Distribution

blis-0.9.0.tar.gz (3.6 MB view details)

Uploaded Source

Built Distributions

blis-0.9.0-cp310-cp310-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.10 Windows x86-64

blis-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

blis-0.9.0-cp310-cp310-macosx_11_0_arm64.whl (902.6 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

blis-0.9.0-cp310-cp310-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

blis-0.9.0-cp39-cp39-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.9 Windows x86-64

blis-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

blis-0.9.0-cp39-cp39-macosx_11_0_arm64.whl (902.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

blis-0.9.0-cp39-cp39-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

blis-0.9.0-cp38-cp38-win_amd64.whl (7.0 MB view details)

Uploaded CPython 3.8 Windows x86-64

blis-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

blis-0.9.0-cp38-cp38-macosx_11_0_arm64.whl (897.0 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

blis-0.9.0-cp38-cp38-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

blis-0.9.0-cp37-cp37m-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.7m Windows x86-64

blis-0.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

blis-0.9.0-cp37-cp37m-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

blis-0.9.0-cp36-cp36m-win_amd64.whl (6.9 MB view details)

Uploaded CPython 3.6m Windows x86-64

blis-0.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

blis-0.9.0-cp36-cp36m-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file blis-0.9.0.tar.gz.

File metadata

  • Download URL: blis-0.9.0.tar.gz
  • Upload date:
  • Size: 3.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0.tar.gz
Algorithm Hash digest
SHA256 699e1ca1496716370b4b9b527c58d842bf892863d8d944cda32f8720ed3cb429
MD5 4bb77f3b8c36e00d5c9df12e80cb8440
BLAKE2b-256 1ac5d05b5689038bece119b89792d1e9420c18421bb1c8003e0eb6f4949a337a

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: blis-0.9.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 488111278eb35f55ea6b71a6ae4a6b1bcb1059f22953c03dacfe0a9346fafbff
MD5 b1ab6d5c81dddb4b454ec513e3f1e79e
BLAKE2b-256 4be5241bb61b3263427aa727ee415edd9a4ee43456cfafd2f03c9f6e7869045e

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 68fe1b48a8b5de1d4792f209d63db25cb318a73c0096cd430ca940ea476d26ca
MD5 c4f9490fc1334f5434d4d06bb9e56b62
BLAKE2b-256 b12c49b7bc6a6bc06d840857d843ab7b7effdaf1aaab174bc1063040b5289b81

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a28d6a2c81841041c12ff43a2e0da85a3f5c96790216ee994db71d48baa96478
MD5 6db5b84cc40c1a3163a2a83b7649affd
BLAKE2b-256 a1ab0f9ca13719eda7b7333c135be6ae132efb8b7f51b9f0c7bbd060b3c9c76c

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 660fb38a5737cd526d1329329e779e5fc720ac198810189e363ff5bd179759a3
MD5 3cad502a59e6f4d31e7dfce427246192
BLAKE2b-256 6d4c232021015189e6a41bacfefb27f638bdcc70e48f7bbd4d039041548afd0d

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: blis-0.9.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4c9c0a60adcceb5ba09298fd3a555bd35aea1b0db5d1b1ebccaf526ceeb8ad05
MD5 633695296fe18c305c61cec119b3a9c1
BLAKE2b-256 1829eb162d2e53e9a50bc040ad7e631d2d24652ff608452c700670142f8f1778

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ff190cddd75e1f49c8272126be5261303f2c947785885636964382b7dea8395c
MD5 38b592afb536d997d868d3d471cb5d90
BLAKE2b-256 6cc46e5bd036a6e5b1911299f8f1b3d032b0a83c5546c3deeff78b900b72df49

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a6a72f1f203047f6bd6239361b82ccdce062df5b6ef3a85383c3fcda1b8de65f
MD5 bbcea02fbf981bf759b081a36855a312
BLAKE2b-256 0b7f5d7766f8dddd4b3aaf4a58398e7df65ac011c889e3bbdbe7b3b0c5c33d69

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 04b6d30cd4465a150f2f0bcd97d50b758e9aad2f061df35b367145d0d0454386
MD5 3fcaf3d7109f2d82d001da5ca824811f
BLAKE2b-256 51dab6bab83ae577dcbda27b2a031dbf72fda60a8d3f1ff9a0226e2eff042eca

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: blis-0.9.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 feab931b56a597681f649a8ab4c26aef659151416ab3b92f494599823e033e18
MD5 42af38fc539744c4df6473eadc146133
BLAKE2b-256 bf86d07aa12dde2aea796f127f38841ba3990d16d687b7a9bd606991029b8583

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 074c71ebb5ccae5cf61dcfb0eac097bb51ce8ac5151d63fa89d07e6c70611189
MD5 abdf9c43729a63709e95bedd5d815975
BLAKE2b-256 c1874020ceb845d5f4df6df498b061cc51529475ae9655e091aa3318cc441138

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6357e736479ac3de382cf8b947f0e3492a49e40d26cb9901124c59b49b2a6eba
MD5 d6c95a58d1e3977bc07e0f284a805e9e
BLAKE2b-256 fdeb6047ea41774a12e4926ac5cb1b07c93a5e3109f7586ab1c5ac7bec41e902

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5f189073fafe9e0e5536f6a5032e1d27de1aac16acb62d2f6b95c0e1a28ac025
MD5 0fc7242fcd771b717c6ee75fd80d46fb
BLAKE2b-256 3f751236cd5425c6046883608de3a368af5065a5af273b2c48d5efd3d29f5490

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: blis-0.9.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 27ac3be2bc4b97a1a4b7141c9fb6673b34b66eefca5cae5f429c08f83a526d9f
MD5 5f112b318eb2d2da38fbdb3bb5dcc1d9
BLAKE2b-256 01f88be65c5a96324e9d52167d57d7e6e4247be3907f448ff919690358a891a6

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fa1cd188172fc5380bc53f83b90c8c52a09be3bba55cbc1a9c395cda11684d94
MD5 385b9be0f6060abeb05bd2557a18eef9
BLAKE2b-256 ace176f283a3072b9e7998e3a62d2988fc9260925859161a714de2c6530e9822

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 14f5f6fe7a798c5f067f9147f1b446b3f5058dd668c198c5d0735b33288b9693
MD5 9f680643df6e15673c6a009de728a42d
BLAKE2b-256 a27c9dc2c2bb4131600f34eaee146234fcde56f52b497fe67cdaa0fc0c9ecbe9

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: blis-0.9.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for blis-0.9.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 3b0c89a5199740298efebac0b3083a1bea209a4898a3a2fc562973f54bc22dc2
MD5 1536bef8f01e67e619d37853c07ea9ff
BLAKE2b-256 0cca855ff4788f4797d722c3c58491bfd9ae8a9255d2f79666c68f208f574eec

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e769a65db2b07f9979ee29ee775046cee29c7f872d7187235c4a9202e710618f
MD5 baae0c2ab800f2add19daad441c63c82
BLAKE2b-256 45bb2bfe7601f1c77149264dff2384d8567abe045059ab4e0a3e3d9f436a55b3

See more details on using hashes here.

File details

Details for the file blis-0.9.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blis-0.9.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 edca0fb5035a8df13c66c224edacd1ca67acb0985259b9ec878ea2079b972975
MD5 78956c369381eb898867f0b0a5ddbfce
BLAKE2b-256 8dfaf292bca9d4309d3eab86b1f02600574b84798ae9a8f5ed02912022a259a8

See more details on using hashes here.

Supported by

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