InfiniCore 是一个跨平台统一编程工具集,为不同芯片平台的功能(包括计算、运行时、通信等)提供统一 C 语言接口。目前支持的硬件和后端包括:
- CPU;
- CUDA
- 英伟达 GPU;
- 摩尔线程 GPU;
- 天数智芯 GPU;
- 沐曦 GPU;
- 海光 DCU;
- 华为昇腾 NPU;
- 寒武纪 MLU;
- 昆仑芯 XPU;
API 定义以及使用方式详见 InfiniCore文档。
- Xmake:跨平台自动构建工具,用于编译 InfiniCore 项目。
- gcc-11 以上或者 clang-16:基础编译器,需要支持 C++ 17 标准。
- Python>=3.10
- PyTorch:可选,用于对比测试。
- 各个硬件平台的工具包:请参考各厂商官方文档(如英伟达平台需要安装 CUDA Toolkit)。
由于仓库中含有子模块,所以在克隆时请添加 --recursive 或 --recurse-submodules,如:
git clone --recursive https://github.com/InfiniTensor/InfiniCore.git或者在普通克隆后进行更新:
git submodule update --init --recursive如果你需要在本地开发九齿算子(即需要对九齿算子库进行修改),推荐单独克隆九齿算子库,并从本地安装:
git clone https://github.com/InfiniTensor/ntops.git
cd ntops
pip install -e .InfiniCore 项目主要包括:
- 底层 C 库(InfiniOP/InfiniRT/InfiniCCL):
一键安装|手动安装; - InfiniCore C++ 库:
安装指令 - InfiniCore Python 包(依赖九齿算子库):
安装指令
三者需要按照顺序进行编译安装。
在 script/ 目录中提供了 install.py 安装脚本。使用方式如下:
cd InfiniCore
python scripts/install.py [XMAKE_CONFIG_FLAGS]参数 XMAKE_CONFIG_FLAGS 是 xmake 构建配置,可配置下列可选项:
| 选项 | 功能 | 默认值 |
|---|---|---|
--omp=[y|n] |
是否使用 OpenMP | y |
--cpu=[y|n] |
是否编译 CPU 接口实现 | y |
--nv-gpu=[y|n] |
是否编译英伟达 GPU 接口实现 | n |
--ascend-npu=[y|n] |
是否编译昇腾 NPU 接口实现 | n |
--cambricon-mlu=[y|n] |
是否编译寒武纪 MLU 接口实现 | n |
--metax-gpu=[y|n] |
是否编译沐曦 GPU 接口实现 | n |
--moore-gpu=[y|n] |
是否编译摩尔线程 GPU 接口实现 | n |
--iluvatar-gpu=[y|n] |
是否编译沐曦 GPU 接口实现 | n |
--hygon-dcu=[y|n] |
是否编译海光 DCU 接口实现 | n |
--kunlun-xpu=[y|n] |
是否编译昆仑 XPU 接口实现 | n |
--ninetoothed=[y|n] |
是否编译九齿实现 | n |
--ccl=[y|n] |
是否编译 InfiniCCL 通信库接口实现 | n |
-
生成九齿算子(可选)
-
克隆并安装九齿算子库。
-
在
InfiniCore文件夹下运行以下命令 AOT 编译库中的九齿算子:PYTHONPATH=${PYTHONPATH}:src python scripts/build_ntops.py
-
-
项目配置
windows系统上,建议使用
xmake v2.8.9编译项目。-
查看当前配置
xmake f -v
-
配置 CPU(默认配置)
xmake f -cv
-
配置加速卡
# 英伟达 # 可以指定 CUDA 路径, 一般环境变量为 `CUDA_HOME` 或者 `CUDA_ROOT` # window系统:--cuda="%CUDA_HOME%" # linux系统:--cuda=$CUDA_HOME xmake f --nv-gpu=true --cuda=$CUDA_HOME -cv # 寒武纪 xmake f --cambricon-mlu=true -cv # 华为昇腾 xmake f --ascend-npu=true -cv
-
-
编译安装
默认安装路径为
$HOME/.infini。xmake build && xmake install -
设置环境变量
按输出提示设置
INFINI_ROOT和LD_LIBRARY_PATH环境变量。
xmake build _infinicore
xmake install _infinicorepip install .或
pip install . -e注:开发时建议加入 -e 选项(即 pip install -e .),这样对 python/infinicore 做的更改将会实时得到反映,同时对 C++ 层所做的修改也只需要运行 xmake build _infinicore && xmake install _infinicore 便可以生效。
python test/infinicore/run.py --verbose --bench [--cpu | --nvidia | --cambricon | --ascend | --iluvatar | --metax | --moore | --kunlun]使用 -h 查看更多参数。
# 测试单算子
python test/infiniop/[operator].py [--cpu | --nvidia | --cambricon | --ascend | --iluvatar | --metax | --moore | --kunlun | --Hygon]
# 测试全部算子
python scripts/python_test.py [--cpu | --nvidia | --cambricon | --ascend | --iluvatar | --metax | --moore | --kunlun | --Hygon]编译(需要先安装底层库中的 InfiniCCL 库):
xmake build infiniccl-test在英伟达平台运行测试(会自动使用所有可见的卡):
infiniccl-test --nvidia