🔧 TensorCraft Core: High-Performance AI Kernel Library

工业级高性能 AI 算子库 - Header-Only 设计

Level CUDA C++ Header-Only


📖 模块简介

TensorCraft Core 是 CUDA Kernel Academy 的核心算子库,提供生产级的 CUDA kernel 实现。采用 Header-Only 设计,易于集成到其他项目中。

🎯 学习目标:掌握工业级 API 设计、理解多种算子实现、学会在项目中集成高性能库

🗺️ 在学习路径中的位置

┌─────────────────────────────────────────────────────────────────┐
│  01-sgemm-tutorial                                              │
│     ↓                                                           │
│  ★ 02-tensorcraft-core (You are here)                          │
│     ↓                                                           │
│  03-hpc-advanced / 04-inference-engine                         │
└─────────────────────────────────────────────────────────────────┘

前置要求:完成 01-sgemm-tutorial 后续学习03-hpc-advanced (进阶) 或 04-inference-engine (应用)

✨ 核心特性

特性 描述
📦 Header-Only 纯头文件设计,零编译依赖
🚀 多架构支持 Volta (sm_70) 到 Hopper (sm_90)
🐍 Python 绑定 pybind11 提供 Python 接口
🧪 完整测试 GoogleTest 单元测试
📊 性能基准 Google Benchmark 性能测试

📁 目录结构

02-tensorcraft-core/
├── include/tensorcraft/
│   ├── core/
│   │   ├── cuda_check.hpp      # CUDA 错误检查 (统一标准)
│   │   ├── features.hpp        # 特性检测
│   │   └── type_traits.hpp     # 类型特征
│   ├── kernels/
│   │   ├── gemm.hpp            # GEMM 实现
│   │   ├── attention.hpp       # Attention 机制
│   │   ├── normalization.hpp   # LayerNorm / RMSNorm
│   │   ├── elementwise.hpp     # 激活函数
│   │   ├── softmax.hpp         # Softmax
│   │   ├── conv2d.hpp          # 卷积
│   │   ├── sparse.hpp          # 稀疏矩阵
│   │   └── fusion.hpp          # 算子融合
│   └── memory/
│       ├── tensor.hpp          # Tensor 封装
│       └── memory_pool.hpp     # 内存池
├── src/python_ops/             # Python 绑定
├── tests/                      # 单元测试
├── benchmarks/                 # 性能基准
├── docs/                       # 文档
└── CMakeLists.txt

🚀 快速开始

环境要求

  • CMake 3.20+
  • CUDA Toolkit 11.0+
  • C++17 兼容编译器

构建

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

# 运行测试
ctest --output-on-failure

# 运行 benchmark
./benchmarks/gemm_benchmark

在项目中使用

方式 1: 作为子目录

add_subdirectory(02-tensorcraft-core)
target_link_libraries(your_target PRIVATE tensorcraft)

方式 2: 直接包含头文件

target_include_directories(your_target PRIVATE 
    path/to/02-tensorcraft-core/include)
target_link_libraries(your_target PRIVATE CUDA::cudart)

📚 API 使用示例

GEMM 矩阵乘法

#include "tensorcraft/kernels/gemm.hpp"

using namespace tensorcraft::kernels;

// 选择优化版本
launch_gemm(d_A, d_B, d_C, M, N, K, 
            1.0f, 0.0f,                    // alpha, beta
            GemmVersion::Tiled,            // 版本选择
            stream);

// Tensor Core (half 精度)
#ifdef TC_HAS_WMMA
launch_gemm_wmma(d_A_half, d_B_half, d_C_float, M, N, K);
#endif

归一化层

#include "tensorcraft/kernels/normalization.hpp"

// LayerNorm
layernorm(d_input, d_gamma, d_beta, d_output, batch_size, hidden_size);

// RMSNorm (LLaMA, Mistral 使用)
rmsnorm(d_input, d_weight, d_output, batch_size, hidden_size);

Attention 机制

#include "tensorcraft/kernels/attention.hpp"

// FlashAttention 风格
float scale = 1.0f / sqrtf(head_dim);
launch_flash_attention(d_Q, d_K, d_V, d_O,
                       batch_size, num_heads, seq_len, head_dim, scale);

// RoPE 位置编码
launch_rope(d_x, d_cos, d_sin, batch_size, seq_len, num_heads, head_dim);

Python 接口

import tensorcraft_ops as tc
import numpy as np

# GEMM
A = np.random.randn(256, 512).astype(np.float32)
B = np.random.randn(512, 128).astype(np.float32)
C = tc.gemm(A, B, version='tiled')

# 激活函数
output = tc.relu(input_data)
output = tc.gelu(input_data)

# 归一化
output = tc.layernorm(input_data, gamma, beta)

🔧 统一 API 设计

CUDA 错误检查 (标准实现)

#include "tensorcraft/core/cuda_check.hpp"

// API 调用检查
TC_CUDA_CHECK(cudaMalloc(&ptr, size));

// Kernel 启动检查
my_kernel<<<grid, block>>>(...);
TC_CUDA_CHECK_LAST();

// 同步检查
TC_CUDA_SYNC_CHECK();

Kernel 版本枚举

enum class GemmVersion {
    Naive,          // 基础实现
    Tiled,          // 共享内存分块
    DoubleBuffer,   // 双缓冲
    TensorCore,     // WMMA Tensor Core
    Auto            // 自动选择
};

📊 性能基准

在 NVIDIA RTX 3090 上的 GEMM 性能:

矩阵大小 Naive Tiled Double Buffer cuBLAS
512×512 15 GFLOPS 180 GFLOPS 220 GFLOPS 280 GFLOPS
1024×1024 18 GFLOPS 350 GFLOPS 450 GFLOPS 520 GFLOPS
2048×2048 20 GFLOPS 480 GFLOPS 620 GFLOPS 750 GFLOPS

🔗 相关模块

模块 关系 说明
01-sgemm-tutorial 前置 SGEMM 基础优化
03-hpc-advanced 扩展 进阶优化技术
04-inference-engine 依赖方 使用本库构建推理引擎

📄 License

MIT License

results matching ""

    No results matching ""