Artelnics/opennn
OpenNN - Open Neural Networks Library
什么是OpenNN?
OpenNN 是一个现代C++库(针对C++20标准编写),让开发者能够直接从C++代码中构建、训练和运行神经网络模型。它支持常见的数据类型——表格数据、图像、时间序列和纯文本——并且可以在普通CPU上运行,或者选配通过CUDA在NVIDIA GPU上运行。
谁可能使用它?
| 受众 | 重要性 |
|---|---|
| 在大型C++应用程序(例如机器人技术、金融、嵌入式系统)中需要神经网络组件的C++工程师。 | 无需切换语言或嵌入Python解释器;该库直接编译进二进制文件。 |
| 希望精细控制CPU与GPU执行、线程(OpenMP、oneTBB)和低级优化的性能导向团队。 | 您可以根据硬件和编译时约束选择匹配的后端。 |
| 偏好无重型Python依赖的自我包含、开源堆栈的研究人员或爱好者。 | 该库附带示例、针对PyTorch的基准测试和快速入门指南。 |
| 需要为闭源产品提供商业友好许可证的公司。 | 双重许可(AGPL + 商业)让您保持合规,同时保持专有代码私密。 |
它是如何工作的?
- 安装 – 克隆仓库,运行CMake,选择纯CPU或CUDA支持的构建。构建会自动拉取Eigen和zlib;其他可选运行时(MKL、oneDNN等)必须由用户提供。
- 编程模型 – 包含公共头文件(例如
opennn/network/network.h),并使用OpenNN::命名空间创建层、损失函数、优化器等。该库遵循模块化布局(核心、数据、网络、后端)。 - 训练与推理 – 将数据(CSV、图像文件夹等)输入到
DataSet对象中,配置NeuralNetwork,调用train(),然后调用predict()进行推理。同一模型可以导出为纯C或Python源代码,以便在不需要完整库的平台上部署。 - 基准测试与验证 –
benchmarks/文件夹包含将OpenNN的速度和精度与PyTorch进行比较的脚本,遵循文档化的测量协议。 - 测试与CI – 单元测试位于
tests/,GitHub Actions在每次推送时运行测试套件。
何时选择OpenNN而不是其他工具?
| 情况 | OpenNN优势 |
|---|---|
| 仅C++代码库 – 您不需要Python运行时。 | 纯C++ API,可编译为静态或共享库。 |
| 嵌入式或实时系统 – 严格的二进制大小或延迟约束。 | 可导出的C代码和微调的编译选项;可选CUDA用于GPU加速。 |
| 需要双重许可 – 您想要AGPL基础,但需要商业路径用于专有产品。 | 来自Artelnics的明确双重许可模式,并提供商业选项。 |
| 性能比较 – 您想看看C++实现与PyTorch的对比。 | 内置基准套件,具有可重复的协议。 |
如果您已经严重依赖Python生态系统(PyTorch、TensorFlow)且不需要C++集成,那些工具可能更简单。OpenNN在C++集成、许可灵活性或低级性能控制是主要关注点时表现出色。
入门(快速回顾)
# 克隆并配置纯CPU构建
git clone https://github.com/Artelnics/opennn.git
cd opennn
cmake -S . -B ../opennn-build -DCMAKE_BUILD_TYPE=Release \
-DOpenNN_DISABLE_CUDA=ON -DOpenNN_BUILD_EXAMPLES=ON
cmake --build ../opennn-build --target blank --parallel
# 运行最小示例
../opennn-build/bin/blank
从那里,按照examples/中的Iris示例训练分类器、评估并导出模型。
TL;DR
OpenNN是一个C++20神经网络库,可在CPU或CUDA GPU上运行,支持常见数据类型,提供导出为纯C/Python的功能,包含针对PyTorch的基准测试,并提供双重AGPL/商业许可证。对于需要原生C++ ML组件或希望精细控制部署和许可的开发者来说,这是一个坚实的选择。
相关
- 项目
- 项目
- 项目
- 项目
- 项目