Skip to content

Repository files navigation

LiteNN

ci

学习用的 C++26 编译器风格神经网络库。

人类含量很低,只有最初的 Tensor/Device/Graph 部分是全人工古法编程的,其他部分合作完成

当前仓库已经包含:

  • 静态计算图前端、Autograd、Interpreter 运行时
  • 基于 MLIR/LLVM 的 CPU AOT 编译与 CompiledModule 加载执行
  • 模型保存/加载、训练 API、MNIST 与 carrier 示例
  • 可安装的 CMake 包导出,支持 find_package(LiteNN)

文档

详细文档索引见 docs/README.md。常用入口:

构建

仅构建基础运行时:

cmake -S . -B build
cmake --build build

开发格式化

仓库使用根目录的 .clang-format 统一格式化所有已跟踪的 C/C++ 源码文件。手动格式化:

python scripts/format_sources.py

clone 后 Git 不会自动安装仓库里的 hook 模板。需要在本地执行一次:

Linux/macOS:

sh scripts/install_git_hooks.sh

Windows:

pwsh -NoProfile -ExecutionPolicy Bypass -File scripts/install_git_hooks.ps1

安装后,pre-commit hook 会在提交前运行全量 clang-format,并重新暂存本次提交中已经暂存的文件。

启用 MLIR/AOT 编译器:

cmake -S . -B build -DLITENN_ENABLE_MLIR=ON -DCMAKE_PREFIX_PATH="<llvm-cmake-dir>;<mlir-cmake-dir>"
cmake --build build

安装

当前包版本为 0.1.0,安装后会导出 LiteNNConfig.cmakeLiteNNConfigVersion.cmake

  • 0.x 阶段 CMake 包按同 minor 版本兼容匹配,避免在 pre-1.0 阶段误接受潜在 breaking minor 升级
cmake --install build --prefix <install-prefix>

安装树包含:

  • include/LiteNN... 公开头文件
  • lib/libLiteNN.* 基础运行时库
  • lib/libLiteNNCompiler.* 可选 AOT 编译器库(仅 LITENN_ENABLE_MLIR=ON 时)
  • lib/cmake/LiteNN/ 包配置与导出 targets

作为 CMake 包使用

基础运行时:

find_package(LiteNN CONFIG REQUIRED)

add_executable(app main.cpp)
target_link_libraries(app PRIVATE LiteNN::LiteNN)

可选 AOT Compiler 组件:

find_package(LiteNN CONFIG REQUIRED COMPONENTS Compiler)

add_executable(app main.cpp)
target_link_libraries(app PRIVATE LiteNN::LiteNNCompiler)

请求 Compiler 组件时,调用方还需要把 LLVM/MLIR 的 CMake 包前缀加入 CMAKE_PREFIX_PATH

仓库里的 cmake/PackageSmokeTest 提供了最小外部消费工程,可用于验证安装后的 find_package(LiteNN) 链路。

Conan 打包

仓库根目录现在提供 conanfile.py,会复用现有的 CMake install/export 逻辑来生成 Conan 包。

导出并创建基础 runtime 包:

conan create . -s compiler=gcc -s compiler.version=<gcc-version> -s compiler.cppstd=gnu26 --build=missing

如需把可选 AOT 编译器一起打进包中,可启用 with_mlir 选项;这要求构建环境里已经能被 CMake 发现到 LLVM/MLIR 的包配置:

conan create . -s compiler=gcc -s compiler.version=<gcc-version> -s compiler.cppstd=gnu26 -o litenn/*:with_mlir=True --build=missing

当前默认 conan profile detect 在 Windows 上通常会生成 MSVC profile,但 LiteNN 代码目前依赖实验性 C++26 反射工具链,因此需要改用与现有构建一致的 GCC/Clang profile。

消费侧继续使用现有的 CMake 包入口:

find_package(LiteNN CONFIG REQUIRED)
target_link_libraries(app PRIVATE LiteNN::LiteNN)

调试 Dump API

基础运行时现在提供 Graph 文本 dump:

#include <LiteNN.h>

std::string graphText = LiteNN::Debug::DumpGraph(graph);

启用 LITENN_ENABLE_MLIR=ON 并链接 LiteNN::LiteNNCompiler 后,还可以输出不同阶段的 MLIR 和 CompiledModule metadata:

#include <LiteNN/Compiler/Dump.h>

std::string inputMlir = LiteNN::Debug::DumpMLIR(graph, LiteNN::Debug::MLIRDumpStage::InputDialect);
std::string loweredMlir = LiteNN::Debug::DumpMLIR(graph, LiteNN::Debug::MLIRDumpStage::AfterLowering);
std::string metadata = LiteNN::Debug::DumpCompiledModuleMetadata(artifact);

About

No description, website, or topics provided.

Resources

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages