跳转到主要内容

Blis BLAS-like线性代数库,作为一个自包含的C扩展。

项目描述

Cython BLIS:从Python和Cython快速进行BLAS-like操作,无需眼泪

本仓库提供Blis线性代数例程作为自包含的Python C扩展,可以访问Blis线性代数

目前,我们只支持单线程执行,因为这对我们的工作负载(机器学习推理)来说实际上是最合适的。

tests pypi Version conda Python wheels

安装

您可以通过pip安装该软件包,首先确保pipsetuptoolswheel都是最新版本。

pip install -U pip setuptools wheel
pip install blis

应该有轮文件可用,因此安装应该很快。如果您想从源码安装且在Windows上,则需要安装LLVM。

为替代架构构建BLIS

提供的轮文件应在x86_64和osx/arm64架构上工作。不幸的是,我们目前不知道如何为替代架构提供不同的轮文件,也无法提供一个在所有地方都工作的单个二进制文件。因此,如果轮文件对您的CPU不适用,您需要指定源代码分发,并使用BLIS_ARCH环境变量通知Blis您的CPU架构。

a) 使用自动检测的CPU支持安装

pip install spacy --no-binary blis

b) 使用现有配置安装

支持配置中提供架构。

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

c) 使用通用架构支持安装

⚠️ generic未针对任何特定CPU进行优化,速度极慢。仅推荐用于测试!

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

d) 构建特定支持

为了编译Blis,cython-blis打包了针对特定架构的makefile脚本,这些脚本通过运行Blis构建系统和记录命令来编译。由于我们没有访问到一些架构,因此我们还没有每个架构的日志。

请参见此处架构列表。例如,以下是构建对Intel架构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

希望这将为您的平台构建一个轮文件。然后,您可以提交一个包含blis/_src/make/linux-knl.jsonlblis/_src/include/linux-knl/blis.h文件的PR,以便您可以使用

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

使用

提供了两个API:高级Python API和直接Cython访问,它提供了融合类型、无GIL的Cython绑定到底层的Blis线性代数库。融合类型是一种简单的模板机制,允许在编译时进行一点通用编程。

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)

根据需要添加了绑定。如果库缺少您需要的某些函数,请提交pull请求。

开发

要构建源代码包,您应该运行以下命令

./bin/update-vendored-source

这将为各种架构填充blis/_src文件夹,使用flame-blis子模块。

更新构建文件

为了编译Blis源代码,我们使用提供显式编译器标志的jsonl文件。我们通过运行Blis的构建系统并转换日志来构建这些jsonl文件。这样我们就不需要在Python中复制构建系统:我们只需使用jsonl来执行大量的子进程调用。为了支持新的操作系统/架构组合,我们必须提供jsonl文件和头文件。

Linux

Linux构建文件需要在manylinux2014 Docker容器中生成,以便与轮文件构建过程兼容。

首先,安装docker。然后执行以下操作以启动容器

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

在容器内部,以下命令应检出存储库并构建通用架构的jsonl文件

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 /

然后在新终端中,从容器中检索我们需要的两个文件

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

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

blis-1.0.1.tar.gz (3.6 MB 查看散列值)

上传时间

构建分布

blis-1.0.1-cp312-cp312-win_amd64.whl (6.4 MB 查看散列值)

上传时间 CPython 3.12 Windows x86-64

blis-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (11.7 MB 查看散列值)

上传时间 CPython 3.12 musllinux: musl 1.2+ x86-64

blis-1.0.1-cp312-cp312-musllinux_1_2_i686.whl (3.2 MB 查看散列值)

上传时间 CPython 3.12 musllinux: musl 1.2+ i686

blis-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.3 MB 查看散列值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

blis-1.0.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (2.7 MB 查看散列值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ i686

blis-1.0.1-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB 查看散列值)

上传于 CPython 3.12 macOS 11.0+ ARM64

blis-1.0.1-cp312-cp312-macosx_10_9_x86_64.whl (7.7 MB 查看哈希)

上传于 CPython 3.12 macOS 10.9+ x86-64

blis-1.0.1-cp311-cp311-win_amd64.whl (6.3 MB 查看哈希)

上传于 CPython 3.11 Windows x86-64

blis-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (11.8 MB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

blis-1.0.1-cp311-cp311-musllinux_1_2_i686.whl (3.2 MB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.2+ i686

blis-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.3 MB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

blis-1.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (2.7 MB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686

blis-1.0.1-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB 查看哈希)

上传于 CPython 3.11 macOS 11.0+ ARM64

blis-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl (7.7 MB 查看哈希)

上传于 CPython 3.11 macOS 10.9+ x86-64

blis-1.0.1-cp310-cp310-win_amd64.whl (6.4 MB 查看哈希)

上传于 CPython 3.10 Windows x86-64

blis-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl (11.6 MB 查看哈希)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

blis-1.0.1-cp310-cp310-musllinux_1_2_i686.whl (3.1 MB 查看哈希)

上传于 CPython 3.10 musllinux: musl 1.2+ i686

blis-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.2 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

blis-1.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.6 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686

blis-1.0.1-cp310-cp310-macosx_11_0_arm64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

blis-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

blis-1.0.1-cp39-cp39-win_amd64.whl (6.4 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

blis-1.0.1-cp39-cp39-musllinux_1_2_x86_64.whl (11.6 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ x86-64

blis-1.0.1-cp39-cp39-musllinux_1_2_i686.whl (3.1 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ i686

blis-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.2 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

blis-1.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.6 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686

blis-1.0.1-cp39-cp39-macosx_11_0_arm64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

blis-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl (7.7 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

由以下机构支持