README.md 5.44 KB
Newer Older
Pan Zezhong's avatar
Pan Zezhong committed
1
2
# InfiniCore

YdrMaster's avatar
YdrMaster committed
3
4
5
6
7
8
9
10
11
12
13
[![Doc](https://img.shields.io/badge/Document-ready-blue)](https://github.com/InfiniTensor/InfiniCore-Documentation)
[![CI](https://github.com/InfiniTensor/InfiniCore/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/InfiniTensor/InfiniCore/actions)
[![license](https://img.shields.io/github/license/InfiniTensor/InfiniCore)](https://mit-license.org/)
![GitHub repo size](https://img.shields.io/github/repo-size/InfiniTensor/InfiniCore)
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/InfiniTensor/InfiniCore)

[![GitHub Issues](https://img.shields.io/github/issues/InfiniTensor/InfiniCore)](https://github.com/InfiniTensor/InfiniCore/issues)
[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/InfiniTensor/InfiniCore)](https://github.com/InfiniTensor/InfiniCore/pulls)
![GitHub contributors](https://img.shields.io/github/contributors/InfiniTensor/InfiniCore)
![GitHub commit activity](https://img.shields.io/github/commit-activity/m/InfiniTensor/InfiniCore)

14
InfiniCore 是一个跨平台统一编程工具集,为不同芯片平台的功能(包括计算、运行时、通信等)提供统一 C 语言接口。目前支持的硬件和后端包括:
Pan Zezhong's avatar
Pan Zezhong committed
15

16
17
18
19
20
21
22
23
24
25
- CPU;
- CUDA
  - 英伟达 GPU;
  - 摩尔线程 GPU;
  - 天数智芯 GPU;
  - 沐曦 GPU;
  - 曙光 DCU;
- 华为昇腾 NPU;
- 寒武纪 MLU;
- 昆仑芯 XPU;
Pan Zezhong's avatar
Pan Zezhong committed
26

PanZezhong's avatar
PanZezhong committed
27
28
API 定义以及使用方式详见 [`InfiniCore文档`](https://github.com/InfiniTensor/InfiniCore-Documentation)

29
## 配置和使用
Pan Zezhong's avatar
Pan Zezhong committed
30

31
32
### 一键安装

33
`script/` 目录中提供了 `install.py` 安装脚本。使用方式如下:
34
35
36
37

```shell
cd InfiniCore

38
python scripts/install.py [XMAKE_CONFIG_FLAGS]
39
40
```

YdrMaster's avatar
YdrMaster committed
41
42
参数 `XMAKE_CONFIG_FLAGS` 是 xmake 构建配置,可配置下列可选项:

43
44
45
46
47
48
49
50
51
52
53
54
| 选项                     | 功能                              | 默认值
|--------------------------|-----------------------------------|:-:
| `--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
| `--sugon-dcu=[y\|n]`     | 是否编译曙光 DCU 接口实现         | n
| `--kunlun-xpu=[y\|n]`    | 是否编译昆仑 XPU 接口实现         | n
55
| `--ninetoothed=[y\|n]`   | 是否编译九齿实现                 | n
56
| `--ccl=[y\|n]`           | 是否编译 InfiniCCL 通信库接口实现 | n
YdrMaster's avatar
YdrMaster committed
57

58
59
### 手动安装

60
61
62
63
0. 生成九齿算子(可选)

    参见[使用九齿](#使用九齿)章节。

64
1. 项目配置
Pan Zezhong's avatar
Pan Zezhong committed
65

66
   windows系统上,建议使用`xmake v2.8.9`编译项目。
67
   - 查看当前配置
Pan Zezhong's avatar
Pan Zezhong committed
68

69
70
71
     ```shell
     xmake f -v
     ```
Pan Zezhong's avatar
Pan Zezhong committed
72

73
   - 配置 CPU(默认配置)
Pan Zezhong's avatar
Pan Zezhong committed
74

75
76
77
     ```shell
     xmake f -cv
     ```
Pan Zezhong's avatar
Pan Zezhong committed
78

79
   - 配置加速卡
Pan Zezhong's avatar
Pan Zezhong committed
80

81
82
83
     ```shell
     # 英伟达
     # 可以指定 CUDA 路径, 一般环境变量为 `CUDA_HOME` 或者 `CUDA_ROOT`
84
85
     # window系统:--cuda="%CUDA_HOME%"
     # linux系统:--cuda=$CUDA_HOME
86
     xmake f --nv-gpu=true --cuda=$CUDA_HOME -cv
Pan Zezhong's avatar
Pan Zezhong committed
87

88
89
     # 寒武纪
     xmake f --cambricon-mlu=true -cv
Pan Zezhong's avatar
Pan Zezhong committed
90

91
92
93
     # 华为昇腾
     xmake f --ascend-npu=true -cv
     ```
Pan Zezhong's avatar
Pan Zezhong committed
94

95
96
97
98
99
100
101
102
103
104
105
106
2. 编译安装

   默认安装路径为 `$HOME/.infini`

   ```shell
   xmake build && xmake install
   ```

3. 设置环境变量

   按输出提示设置 `INFINI_ROOT``LD_LIBRARY_PATH` 环境变量。

107
108
109
### 运行测试

#### 运行Python算子测试
Pan Zezhong's avatar
Pan Zezhong committed
110

111
112
113
114
115
116
117
118
119
```shell
python test/infiniop/[operator].py [--cpu | --nvidia | --cambricon | --ascend]
```

#### 一键运行所有Python算子测试

```shell
python scripts/python_test.py [--cpu | --nvidia | --cambricon | --ascend]
```
Pan Zezhong's avatar
Pan Zezhong committed
120

121
122
123
124
#### 算子测试框架

详见 `test/infiniop-test` 目录

125
126
127
#### 通信库(InfiniCCL)测试

编译(需要先安装InfiniCCL):
128

129
130
131
132
133
```shell
xmake build infiniccl-test
```

在英伟达平台运行测试(会自动使用所有可见的卡):
134

135
136
137
138
```shell
infiniccl-test --nvidia
```

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
### 使用九齿

[九齿](https://github.com/InfiniTensor/ninetoothed)是一门基于 Triton 但提供更高层抽象的领域特定语言(DSL)。使用九齿可以降低算子的开发门槛,并且提高开发效率。

InfiniCore 目前已经可以接入使用九齿实现的算子,但是这部分实现的编译是默认关闭的。如果选择编译库中的九齿实现,需要使用 `--ninetoothed=y`,并在运行一键安装脚本前完成以下准备工作:

1. 安装九齿与[九齿算子库](https://github.com/InfiniTensor/ntops)

```shell
git clone https://github.com/InfiniTensor/ntops.git
cd ntops
pip install -e .
```

注:安装 `ntops` 时,`ninetoothed` 会被当成依赖也一并安装进来。

2.`InfiniCore` 文件夹下运行以下命令 AOT 编译库中的九齿算子:

```shell
PYTHONPATH=src/ python scripts/build_ntops.py
```

注:如果对九齿相关文件有修改,需要重新构建 InfiniCore 时,也需要同时运行以上命令进行重新生成。

3. 按照上面的指引进行[一键安装](#一键安装)或者[手动安装](#手动安装)

PanZezhong's avatar
PanZezhong committed
165
## 如何开源贡献
YdrMaster's avatar
YdrMaster committed
166

PanZezhong's avatar
PanZezhong committed
167
[`InfiniCore开发者手册`](DEV.md)