DLPrimitives
本项目旨在为深度学习和推理提供跨平台的OpenCL工具。
如今,大多数深度学习训练都在使用闭源CUDA和CUDNN库的NVIDIA GPU上进行。 使用AMD或Intel GPU要么具有挑战性,要么几乎不可能。 例如:AMD提供了ROCm平台,但目前还没有支持RDNA平台(自发布以来已超过一年), 也不支持APU,也不支持Linux以外的任何操作系统。
目标
- 创建一个开源、跨平台的深度学习基元库,类似于cuDNN或MIOpen,支持多种GPU架构。
- 创建一个依赖最小化的推理库,用于在任何现代GPU上进行高效推理,类似于TensorRT或MIGraphX。
- 创建一个极简的深度学习框架,作为功能和性能的概念验证。
- 与现有的大规模深度学习项目(如PyTorch、TF、MXNet)集成,使得与供应商无关的开源OpenCL API成为深度学习的一等公民。
请注意,这仅仅是进行中的工作 - 处于初步阶段。
初步框架集成
与现有框架的集成:
-
Pytorch,(几乎)独立的OpenCL后端项目:
-
Caffe-OpenCL,通过使用dlprimitives提高性能:
与ONNX集成
ONNX模型加载和推理已在以下imagenet网络上进行了测试:
- Pytorch,opsets 9、11、13:
alexnet
、vgg16
、resnet18
、resnext50_32x4d
、wide_resnet50_2
、efficientnet_b0
、efficientnet_b4
、regnet_y_400mf
、squeezenet1_0
、mobilenet_v2
、densenet121
- MXNet:
vgg11_bn
、alexnet
、mobilenetv2_0.25
、mobilenet0.25
、densenet121
、resnet18_v1
、squeezenet1.0
- Tensorflow,有限的初步支持,通道优先:
resnet50
、densenet121
文档
发布于 http://dlprimitives.org/docs/
功能矩阵
操作符 | 特性 | 备注 |
---|---|---|
Softmax | Softmax、LogSoftmax | |
NLLLoss | ||
MSELoss | ||
SoftmaxWithLoss | ||
Elementwise | ax+by、max(ax,by)、ax*y、广播 | |
Concat | ||
Slice | ||
Pooling2D | 最大值、平均值 | |
GlobalPooling | 最大值、平均值 | 仅2D |
GlobalAvgPool2d | ||
InnerProduct | ||
BatchNorm | ||
Reshape | ||
Squeeze | ||
Flatten | ||
Threshold | ||
Hardtanh | ||
Abs | ||
Parameter | 实用工具 | |
Reduction | 求和、均值、平方和、L1 | |
Convolution2D | GEMM、Winograd、深度可分离 | |
TransposedConvolution2D | GEMM、Winograd、深度可分离 | |
Activation | relu、sigmoid、tanh、relu6 |
求解器:SGD、Adam
已测试的GPU
设备 | 厂商 | 备注 |
---|---|---|
RX 6600XT | AMD | ROCr |
RX 560 | AMD | 16cu型号,ROCm、PAL、Clover |
HD 530 | Intel | i5-6600,NEO驱动程序 |
GTX 960 | NVIDIA | |
GTX 1080 | NVIDIA | |
RTX 2060S | NVIDIA | |
MaliG52 MC2 | ARM | 性能尚未优化 |
M1 Max | Apple | 32核心型号 |
在Windows上测试的设备:AMD RX 560、NVIDIA GTX 960。
在macOS上测试的设备:Apple M1 Max。
其他功能
- 用于推理的网络对象
- ONNX到DLPrimitives模型转换器