Blis BLAS-like线性代数库,作为一个自包含的C扩展。
项目描述
Cython BLIS:从Python和Cython快速进行BLAS-like操作,无需眼泪
本仓库提供Blis线性代数例程作为自包含的Python C扩展,可以访问Blis线性代数。
目前,我们只支持单线程执行,因为这对我们的工作负载(机器学习推理)来说实际上是最合适的。
安装
您可以通过pip安装该软件包,首先确保pip
、setuptools
和wheel
都是最新版本。
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.jsonl
和blis/_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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 91739cd850ca8100dcddbd8ad66942cab20c9473cdea9a35b165b11d7b8d91e4 |
|
MD5 | 75ebb5631c66a980089ea05344250481 |
|
BLAKE2b-256 | bde4741f20c9b767330e2605d4c71a775303cb6a9c72764b8802232fe6c7afad |
blis-1.0.1-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 376188493f590c4310ca534b687ef96c21c8224eb1ef4a0420703eebe175d6fa |
|
MD5 | f9dbcd08a388ff75d293e0a92b009921 |
|
BLAKE2b-256 | 5a5d81aa3ddf94626806eb898b6d481a90a5e82bf55b10087556464ac05c120b |
blis-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eb553b233fc815957c5bbb5d2fc2f6d2b199c123ec15c5000db935662849e543 |
|
MD5 | fb9ec620acf167683c62682ec9048f64 |
|
BLAKE2b-256 | 1529313887b89e9509438310a0807f8396c6f8f63fd095b699368e76890e8e4a |
blis-1.0.1-cp312-cp312-musllinux_1_2_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e6ad60d9cd81523429f46109b31e3c4bbdd0dc28a328d6dbdcdff8447a53a61e |
|
MD5 | 420ab7e86675243ae5f85991cc0b00bb |
|
BLAKE2b-256 | 95689d05b09291f15f9a5c04eebe45172fbc4de3a6f7a6108df2557eddd5b390 |
blis-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ce20590af2c6ff02d66ffed4148ea8ea1e3f772febb8471e3e58614e71d428c1 |
|
MD5 | ad1a11a87fbfbc9c3510304c8c5a20ba |
|
BLAKE2b-256 | 6ed96541ab3b9eb3a7a4417cae4073a67498a742e14da123242a3c96b959ec64 |
blis-1.0.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 399196506829c278836028511f351f32f2c992263e91ef876c6bc41dc2483d3d |
|
MD5 | a51ece7c47bdd3004ef3aa72b3bc85f0 |
|
BLAKE2b-256 | f8fa78fdcbc74ce98c9d70d3646dd9677ad893fe020fffbbe99463ca9003e782 |
blis-1.0.1-cp312-cp312-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f860c1723928c40d4920a05130d21a600dcb5fbf07aa1fe8f4bdff2c4a5238a5 |
|
MD5 | 1fa12632f3f0475b626d566121e5c958 |
|
BLAKE2b-256 | 3124e3e53642d4089ea8e6ec4755358603aa597e17db08e42d8c4b18fb7eadb7 |
blis-1.0.1-cp312-cp312-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e031b6cf0dcc026d697a860bf53bc02b5f26ddb5a3ecd23933c51cf22803825b |
|
MD5 | efcd29d9329ec9c850fe6911cfe6457e |
|
BLAKE2b-256 | 373dc2fcd7fbb663e2fab38a72ff05991b84e1b7ab28b2744904d87dc61680ac |
blis-1.0.1-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 60e1b03663bee7a37b4b3131b4179d283868ccb10a3260fed01dd980866bc49f |
|
MD5 | f87cdfca869be7e40e94d44bc4143481 |
|
BLAKE2b-256 | 041add7c9119e6e106f98fdfb015a5f571532960ef0a3e0f8b62d85607249ca4 |
blis-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d3b3293c795007dbf4ba8ceaf3184a6bf510ca3252d0229607792f52e8702bb2 |
|
MD5 | 518a8e1b7bbb9bd5ce300e841e61e6be |
|
BLAKE2b-256 | 22a8136bbeed06b4e4f2bef469f4506cfdb14e09fdc1aa8f616c2837298c88ef |
blis-1.0.1-cp311-cp311-musllinux_1_2_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 64393297304712818020734fa75735f4543243eefc44858ef3c99375d5bb029a |
|
MD5 | da23a60a42dfdd7b12e2aa5e5cafa192 |
|
BLAKE2b-256 | f933297c2045145726f2c00f64a043c89f203731d4df183bbb70c1c7ee020a2d |
哈希值 用于 blis-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 632580f1d3ff44fb36e8a21a9457f23aeaff5d35d108bd2ef0393b9f6d85de93 |
|
MD5 | 9def2f87dc8d3ec1f25c9da7458c6f76 |
|
BLAKE2b-256 | 102b75efbdf5a6bd2b3629ff9c09674292fca2784bfc40aef82afd1232e9af29 |
哈希值 用于 blis-1.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c249649c0f7c06b2368a9d5c6b12209255981e96304c6140a3beffaff6cae62 |
|
MD5 | 3f250f8889dff47e0900f5655860f72e |
|
BLAKE2b-256 | 49d6e97bd559d5076a3ac2a0efb02e71675d4e7db02986b803adcdcd09e1278e |
哈希值 用于 blis-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b6b1f791fa3eeb267b97f5877a6bdcc09c868603b84422acf7fd138ec9b96c3c |
|
MD5 | 3cc397c86ec33ffe38d45115533fc351 |
|
BLAKE2b-256 | 1bef95bcd46e09735b8b2de83b11f0387e4e411a00bcc65190df2ca0532959e4 |
哈希值 用于 blis-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5076b33c04b864709d0d22c40e9f57dc06ee9c2bd2f7ab72b10ffa74a470d9e6 |
|
MD5 | de433741a1a1d0e1ed6b25593eb067c2 |
|
BLAKE2b-256 | 2bb3d43c54d950e832799f3cde91a62bb87820a0f1d9df5c33a9981e4242bb92 |
哈希值 用于 blis-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8d4d403d4b4979d5b1e6f12637ed25fb3bd4e260440997d9ba9e752f9e9c91cb |
|
MD5 | 2169d059978340845ee76732bb58924c |
|
BLAKE2b-256 | 4b5b63c4f774b04ad4d286759eecf77bcf0be82ecdbbebec5b52362d4835ea85 |
哈希值 用于 blis-1.0.1-cp310-cp310-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f23cff163c0a256b580c33364f1598a4f49f532074c673a734d9b02a101adce1 |
|
MD5 | 31c50a76243b9f3f88036630f53c9e54 |
|
BLAKE2b-256 | 781158447ae64cf4a4ad25bddd06ad8893f54b712948d204213cbcce1752934d |
哈希值 用于 blis-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c3c89149eed90c3b76f50c88d8d68661ca07d8b4bfaa517eedf5b77ddf640bb1 |
|
MD5 | a13ccd5bd42f5655f678d9dac0b722cf |
|
BLAKE2b-256 | a78a3da934ff0d63418a3ed72934b639346ac9f5d0b0a405be9a3c5006c14188 |
哈希值 用于 blis-1.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 388b0b0c55df884eb5853292d53c7c3daaa009b3d991e7a95413e46e82e88058 |
|
MD5 | 69f80760b9b95c5540f2756d7c4e0677 |
|
BLAKE2b-256 | 3c8c958a37d551b2402f9c9cdc1fc0619532c5b71682e6f811de03e0836bd597 |
哈希值 用于 blis-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 90a796d8311b6439d63c91ed09163be995173a1ca5bedc510c1b45cbdbb7886c |
|
MD5 | fd2e203d750f8b02df62d937dae428fb |
|
BLAKE2b-256 | e8b5d9e23c011549e02f1c11f61e0f460682d9e9b5ac167582b8f74c41c482db |
哈希值 用于 blis-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 232f68f78fd9ab2f8bf01424cd6a265edd97e14e26186ef48eca1b6f212e928f |
|
MD5 | 40d0409bf8ab8466ac3001fe95809015 |
|
BLAKE2b-256 | da8527d8315bc06d230f93cf5e1aab7131e6fa179d301118ea7a2afdebfefb77 |
哈希值 用于 blis-1.0.1-cp39-cp39-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f0977eaba2d3f64df649201aa281cf3216e7bec18929a7374c3f3f36100db029 |
|
MD5 | 32299073326de8f8efaf2dca520df788 |
|
BLAKE2b-256 | e123550d06f67873cdeaf06fd62a9dda53c740b57211e5e61e14b3d64a9ce845 |
哈希值 用于 blis-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 33ad60cde863a7cf8e69fcf0c3b965ab0f804f0332adb35552788bb76660c97f |
|
MD5 | 4b771e8f441c2a47a235d60c3e003bc8 |
|
BLAKE2b-256 | 313b291230d1d0e55711a874ae303cfbce3a3d1038d397b369b5d7c43f2aa1c2 |
哈希值 用于 blis-1.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 806ab0838efa5e434e6fcdce86542601d0263256d483623bc86e91728a645de4 |
|
MD5 | a84fe425a455229e45fddd43806b117f |
|
BLAKE2b-256 | 36ab9e6a3c4de8d678ee542b42288dcd32975e11cc5893361fa35a56ea0e9a08 |