Tech-Renaissance API 参考文档

概述

单人团队以 AI 技术开发的超轻量级高性能深度学习训练框架。

Tech-Renaissance 采用静态图编译执行、CUDA Graph 全捕获、FP16 AMP 混合精度训练、分布式数据并行等先进技术,在训练吞吐量上相比传统深度学习框架具有显著优势。在 A100 × 8 平台上,VGG16BN 训练吞吐量比 PyTorch + torch.compile 快 26.65%;在七个不同 GPU 平台上,MLP 训练加速比达到 6.90x - 13.58x。

本文档为 Tech-Renaissance V4.20.692 的完整 API 参考,涵盖七大核心模块的所有公开接口。

版本:V4.20.692


依赖项

工具/库 最低版本
CMake 3.28
gcc 13.3
MSVC 14.44.35207
Ninja 1.11
Python 3.12
Eigen 5.0
XNNPACK 2024-08-20
CUDA 13.1
cuDNN 9.17
cuDNN Frontend 1.17
NCCL 2.29
zlib 1.3
libcurl 8.5
libjpeg-turbo 3.1
mimalloc 3.2
stb 2024-07-29
simd 6.2

配置与运行

推荐以 Docker 容器方式运行,可确保环境一致并省去手动安装依赖的步骤。

# 1. 克隆项目
mkdir -p /opt/tr4 && cd /opt/tr4
git clone https://gitee.com/tech-renaissance/renaissance.git

# 2. 拉取镜像并启动容器
docker pull crpi-vbtd6yj00u83ugqk.cn-beijing.personal.cr.aliyuncs.com/tech-renaissance/tr4:v4.20
docker run -d -it --name tr4-dev --gpus all --cap-add SYS_NICE -v /opt/tr4:/opt/tr4 -w /opt/tr4 \
    crpi-vbtd6yj00u83ugqk.cn-beijing.personal.cr.aliyuncs.com/tech-renaissance/tr4:v4.20 \
    tail -f /dev/null
docker exec -it tr4-dev bash

# 3. 配置与编译
cd /opt/tr4/renaissance && python configure.py
./build.sh

# 4. 运行示例
/opt/tr4/renaissance/build/bin/tests/example/mlp_mnist

注意configure.py 会从当前环境自动查找依赖并生成编译脚本。若不使用 Docker,需手动安装所有依赖项(见上表)并确保 GPU 驱动、CUDA、NVIDIA Container Toolkit 已正确配置。

代码示例

以下示例展示从引入头文件到完成训练的最短路径(训练 MLP 至 99.4% 以上的 MNIST 准确率):

#include <renaissance.h>

using namespace tr;

int main() {
    // 1. 全局训练环境配置
    GLOBAL_SETTING
        .use_gpu("0")          // 使用 GPU 0
        .amp(true)             // 启用 FP16 自动混合精度训练
        .manual_seed(123)      // 固定随机种子,保证结果可复现
        .global_batch_size(200)
        .input_resolution(28);

    // 2. 数据预处理配置
    PREPROCESSOR_SETTING
        .dataset("mnist", std::string(TR_PROJECT_ROOT) + "/data/mnist")
        .download(true)
        .preprocess_workers(8)
        .normalization(NormMode::MNIST)
        .train_transforms(
            Pad(2),
            RandomCrop(28),
            RandomRotation(20.0f, 0),
            RandomScale(0.8f, 1.2f),
            RandomErasing(0.5f)
        )
        .commit();

    // 3. 模型定义:4 层 MLP
    //    输入 [28, 28] -> Flatten -> 1024 -> 512 -> 256 -> 10 (SoftmaxCE)
    BluePrint mlp = seq(
        fc(1024, true), relu(),
        fc(512, true), relu(),
        fc(256, true), relu(),
        fc(10, true)
    );

    constexpr int kTotalEpochs = 100;

    // 4. 训练任务配置
    DeepLearningTask task;
    task.model(mlp)
        .loss(CrossEntropyLoss().label_smoothing(0.1f))
        .total_epochs(kTotalEpochs)
        .optimizer(AdamW().weight_decay(1e-4f))
        .scheduler(CosineAnnealingLR().base_lr(0.001f).warmup(5));

    // 编译:默认仅打印 ArchPlan,适合普通用户快速查看模型结构。
    // 需要调试时,可改为 task.compile(CompileInfo::ALL);
    task.compile();

    // 5. 执行训练
    auto result = task.run();

    // 6. 输出训练结果
    std::cout << "Best Top-1: " << result.best_top1 * 100.0f << "%\n";

    return 0;
}

七大模块

Tech-Renaissance 采用模块化架构,分为七大核心模块:

模块 职责 关键头文件
Core 类型系统、日志、RNG、全局配置、异常 types.hrng.hlogger.hglobal_registry.h
Data 数据加载、图像预处理增强管线 data_loader.hpreprocessor.hpreprocess_operation.h
Tensor CPU 端 Tensor 与分布式 DTensor tensor.hdistributed_tensor.h
Graph 计算图构建、编译、内存规划、CUDA Graph 捕获 blueprint.hcompiler.hcomputation_graph.h
Algo 损失函数、优化器、学习率调度器 optimizer.hscheduler.hloss.h
Task 训练/推理任务门面与生命周期 task_base.hsimple_task.hdeep_learning_task.h
Backend 算子注册、设备上下文、图执行器、内存池 graph_executor.hdevice_context.hmemory_arena.h

Core 模块

提供基础类型定义(ShapeDTypeRegionPhaseStreamKind)、高性能可复现 RNG、线程安全日志系统、统一异常体系和全局配置管理。

Data 模块

负责数据加载与预处理,支持 MNIST、CIFAR、ImageNet 等数据集,提供完整的图像增强操作链(RandomResizedCropColorJitterNormalize 等),采用多线程流水线架构实现高效传输。

Tensor 模块

提供 CPU 端数据容器 Tensor(紧凑布局、移动语义、TSR 格式序列化)和分布式张量描述符 DTensor(多卡统一内存视图、对齐计算、槽位管理)。

Graph 模块

实现计算图编译与捕获,提供 BluePrint DSL 定义模型、五阶段编译管线、多流 CUDA Graph 捕获、基于 69-Region 规范的显存布局引擎。

Algo 模块

提供训练算法配置接口,包括 SGD/LARS/Adam/AdamW 优化器、支持 Warmup 的多种学习率调度器(PolynomialLRCosineAnnealingLRStepLR 等)、交叉熵损失函数。

Task 模块

提供训练/推理任务门面与生命周期管理,SimpleTask 用于手动构图场景,DeepLearningTask 封装完整训练循环(验证、SEMA、早停、指标收集、模型保存)。

Backend 模块

作为执行引擎,管理硬件设备、内存/显存池、算子执行和多流调度,提供 DeviceContextMemoryArenaGraphExecutor、算子注册表等核心组件。


Core

板块介绍

Core 模块是 Tech-Renaissance 框架的核心基础设施,提供基础类型定义、随机数生成、日志记录、异常处理、全局配置管理等功能。

该模块对外提供的核心能力包括:

关键头文件路径:

内部实现位置:src/core/


struct Shape

概述

Shape 是表示张量形状的结构体,采用 NHWC(Batch-Height-Width-Channel)格式,支持 4 维张量的形状描述。

所属头文件:#include

设计定位:值类型,可拷贝,可移动

常用使用路径:作为 Tensor 构造参数、数据层配置、模型输入输出形状描述

典型使用代码片段:

// 默认构造:标量 [1,1,1,1]
tr::Shape scalar;

// 从4个元素构造:[N,H,W,C]
tr::Shape image_batch(32, 224, 224, 3);

// 从初始化列表构造(右对齐填充)
tr::Shape vector{128};        // [1,1,1,128]
tr::Shape matrix{64, 128};    // [1,1,64,128]
tr::Shape tensor{8, 28, 28, 64};  // [8,28,28,64]
构造与赋值
Shape::Shape()
Shape() = default;

功能简介 默认构造函数,创建标量形状 [1,1,1,1]。

参数

返回值

异常


Shape::Shape(int n, int h, int w, int c)
TR_NOINLINE Shape(int n, int h, int w, int c);

功能简介 从 4 个显式参数构造 Shape [N,H,W,C]。使用 TR_NOINLINE 和 volatile 写入修复 MSVC /O2 优化问题。

参数

参数名 类型 默认值 说明
n int - Batch 大小(N)
h int - 高度(H)
w int - 宽度(W)
c int - 通道数(C)

返回值

异常

注意事项


Shape::Shape(std::initializer_list list)
Shape(std::initializer_list<int> list);

功能简介 从初始化列表构造 Shape,支持 1-4 个元素,右对齐填充。

参数

参数名 类型 默认值 说明
list std::initializer_list - 形状列表(1-4个元素)

返回值

异常

注意事项 填充规则(右对齐):

非正值(<=0)会自动修正为 1。

示例

tr::Shape s1{128};           // [1,1,1,128]
tr::Shape s2{64, 128};       // [1,1,64,128]
tr::Shape s3{28, 28, 3};     // [1,28,28,3]
tr::Shape s4{32, 224, 224, 3}; // [32,224,224,3]

数据访问
int& Shape::operator[](size_t i)
int& operator[](size_t i);
const int& operator[](size_t i) const;

功能简介 访问第 i 个维度(0-based)。

参数

参数名 类型 默认值 说明
i size_t - 维度索引(0-3)

返回值 对应维度的引用

异常 无(不进行边界检查)


int Shape::n() const
int n() const;

功能简介 获取 Batch 大小 N(维度 0)。

参数

返回值 Batch 大小

异常


int Shape::h() const
int h() const;

功能简介 获取高度 H(维度 1)。

参数

返回值 高度值

异常


int Shape::w() const
int w() const;

功能简介 获取宽度 W(维度 2)。

参数

返回值 宽度值

异常


int Shape::c() const
int c() const;

功能简介 获取通道数 C(维度 3)。

参数

返回值 通道数

异常


int64_t Shape::numel() const
int64_t numel() const noexcept;

功能简介 计算总元素数量 N×H×W×C。

参数

返回值 总元素个数(int64_t)

异常


运算符
bool Shape::operator==(const Shape& other) const
bool operator==(const Shape& other) const noexcept;

功能简介 相等比较运算符。

参数

参数名 类型 默认值 说明
other const Shape& - 另一个 Shape

返回值 所有维度是否完全相同

异常


bool Shape::operator!=(const Shape& other) const
bool operator!=(const Shape& other) const noexcept;

功能简介 不等比较运算符。

参数

参数名 类型 默认值 说明
other const Shape& - 另一个 Shape

返回值 是否有任何维度不同

异常


工具方法
std::string Shape::to_string() const
std::string to_string() const;

功能简介 转换为字符串表示,如 "[32,224,224,3]"。

参数

返回值 字符串表示

异常


static constexpr size_t Shape::ndim()
static constexpr size_t ndim();

功能简介 获取维度数量(总是返回 4)。

参数

返回值 维度数量(4)

异常


enum class DType

概述

数据类型枚举,表示张量的元素类型。

所属头文件:#include

枚举值 说明
FP32 32 位浮点数(单精度)
FP16 16 位浮点数(半精度)
INT8 8 位整数
INT32 32 位整数

enum class NormMode

概述

归一化模式枚举,指定数据预处理的归一化方式。

所属头文件:#include

枚举值 说明
NO_NORM 不归一化
MLPERF MLPerf 基准测试归一化参数
IMAGENET ImageNet 数据集归一化参数
MNIST MNIST 数据集归一化参数
CIFAR CIFAR-10/100 数据集归一化参数

enum class Region

概述

显存区域枚举,定义了 69 个显存区域(Region),用于显存池管理和张量分配。按功能分为多个系列:B 系列(BN 统计量)、W 系列(主模型权重)、E 系列(EMA 权重)、A 系列(AMP FP16 权重)、G 系列(梯度)、M 系列(一阶动量)、V 系列(二阶动量)、N 系列(LARS 范数)、I 系列(输入缓冲区)、F 系列(特征图)、S 系列(标量)、T 系列(临时张量)、R 系列(结果区)。

所属头文件:#include

枚举值 系列 说明
B_PREV_MEAN B BN 上一轮均值(epoch 级生命周期)
B_PREV_VAR B BN 上一轮方差
B_NEXT_MEAN B BN 下一轮均值
B_NEXT_VAR B BN 下一轮方差
W_EQ_BIAS W 等价融合 Bias
W_EQ_SCALE W 等价融合 Scale
W_BN_BIAS W BN 偏置(权重)
W_BN_WEIGHT W BN 缩放权重
W_FC_BIAS W 全连接层偏置
W_FC_WEIGHT W 全连接层权重
W_FIRST_CONV W 首层卷积权重
W_DEEP_CONV W 深层卷积权重
E_BN_BIAS E EMA BN 偏置
E_BN_WEIGHT E EMA BN 缩放权重
E_FC_BIAS E EMA 全连接层偏置
E_FC_WEIGHT E EMA 全连接层权重
E_FIRST_CONV E EMA 首层卷积权重
E_DEEP_CONV E EMA 深层卷积权重
E_FC_WEIGHT_FP16 E EMA 全连接层 FP16 权重
E_FIRST_CONV_FP16 E EMA 首层卷积 FP16 权重
E_DEEP_CONV_FP16 E EMA 深层卷积 FP16 权重
A_FC_WEIGHT A AMP 全连接层 FP16 权重
A_FIRST_CONV A AMP 首层卷积 FP16 权重
A_DEEP_CONV A AMP 深层卷积 FP16 权重
G_BN_BIAS G 梯度:BN 偏置(桶 2 起点)
G_BN_WEIGHT G 梯度:BN 缩放权重
G_FC_BIAS G 梯度:全连接层偏置
G_FC_WEIGHT G 梯度:全连接层权重(桶 2 终点)
G_DEEP_CONV G 梯度:深层卷积权重(桶 1)
R_RESULT R 结果区(FP32 三标量:loss + top1 + top5)
G_FC_WEIGHT_FP16 G 梯度:全连接层 FP16 权重
G_FIRST_CONV_FP16 G 梯度:首层卷积 FP16 权重
G_DEEP_CONV_FP16 G 梯度:深层卷积 FP16 权重
M_BN_BIAS M 一阶动量:BN 偏置
M_BN_WEIGHT M 一阶动量:BN 缩放权重
M_FC_BIAS M 一阶动量:全连接层偏置
M_FC_WEIGHT M 一阶动量:全连接层权重
M_FIRST_CONV M 一阶动量:首层卷积权重
M_DEEP_CONV M 一阶动量:深层卷积权重
V_BN_BIAS V 二阶动量(Adam):BN 偏置
V_BN_WEIGHT V 二阶动量(Adam):BN 缩放权重
V_FC_BIAS V 二阶动量:全连接层偏置
V_FC_WEIGHT V 二阶动量:全连接层权重
V_FIRST_CONV V 二阶动量:首层卷积权重
V_DEEP_CONV V 二阶动量:深层卷积权重
N_FC_WEIGHT N LARS 范数:全连接层权重
N_FIRST_CONV N LARS 范数:首层卷积权重
N_DEEP_CONV N LARS 范数:深层卷积权重
I_A_LABEL I 输入缓冲区:A 路标签
I_A_DATA I 输入缓冲区:A 路数据
I_B_LABEL I 输入缓冲区:B 路标签
I_B_DATA I 输入缓冲区:B 路数据
F_FEATURE_FP32 F 特征图 FP32
F_GRAD_SLOT_FP32 F 梯度槽 FP32
F_FEATURE_FP16 F 特征图 FP16
F_GRAD_SLOT_FP16 F 梯度槽 FP16
S_SCALAR_FP32 S 标量 FP32
S_SCALAR_FP16 S 标量 FP16
S_SCALAR_INT32 S 标量 INT32
S_SCALAR_INT8 S 标量 INT8
S_MASK S 掩码
T_TEMP_FP32 T 临时张量 FP32
T_TEMP_FP16 T 临时张量 FP16
T_TEMP_INT32 T 临时张量 INT32
T_TEMP_INT8 T 临时张量 INT8
R_PREDICTED_LABEL R 推理标签值([batch] INT32)
R_RESULT_ACCUMULATED R 累积结果区(FP32:sum_loss, sum_top1, sum_top5)
DEFAULT - 等价于 B_PREV_MEAN
NUM_REGIONS - Region 总数(69)

struct PlanConfig

概述

内存规划配置结构体,用于指示 MemoryPlan 需要为哪些类型的张量分配显存。

所属头文件:#include

设计定位:值类型,8 个布尔/整数字段,直接传递给内存规划器

成员
字段名 类型 默认值 说明
bn_folded bool true 是否将 BN 折叠进卷积
use_lars bool false 是否使用 LARS 优化器
use_adam bool false 是否使用 Adam/AdamW 优化器
use_momentum bool true 是否使用动量(Adam 隐含需要 M_/V_ 系列)
has_ema bool false 是否维护 EMA 权重
num_models int 1 预留字段,当前固定为 1
need_mask bool false 是否需要掩码区
need_temp bool false 是否需要临时张量区

enum class GraphMode

概述

图模式枚举,表示计算图的工作模式。

所属头文件:#include

枚举值 说明
TRAIN_FORWARD 训练前向传播
TRAIN_BACKWARD 训练反向传播
INFERENCE 推理模式

enum class Phase

概述

任务生命周期枚举,表示任务的不同阶段。

所属头文件:#include

枚举值 说明
PLANNING 规划阶段
MEMORY_LOCKED 内存锁定阶段
COMPILED 已编译阶段

enum class StreamKind

概述

CUDA 流类型枚举,定义 5 个物理非阻塞流。

所属头文件:#include

枚举值 说明
TRANS 传输流(H2D/D2H)
COMP_1 计算流 1
COMP_2 计算流 2
COMP_3 计算流 3
UPDATE 更新流(梯度更新)

enum class OptimizerKind

概述

优化器类型枚举,用于配置优化器。

所属头文件:#include

枚举值 说明
SGD 随机梯度下降
SGD_MOMENTUM SGD with Momentum
SGD_NESTEROV SGD with Nesterov momentum
LARS Layer-wise Adaptive Rate Scaling
LARS_NESTEROV LARS with Nesterov momentum
ADAM Adaptive Moment Estimation
ADAMW Adam with decoupled weight decay

enum class NormalizePreset

概述

归一化预设配置枚举,定义常用的数据集归一化参数。

所属头文件:#include

枚举值 说明
NO_NORM 不归一化(仅 ToTensor)
MNIST MNIST 数据集归一化参数
CIFAR CIFAR-10/100 数据集归一化参数
IMAGENET ImageNet 数据集归一化参数
MLPERF MLPerf 基准测试归一化参数

enum class ConvSearchMode

概述

卷积搜索模式枚举,控制 cuDNN 卷积算法选择策略。

所属头文件:#include

枚举值 说明
HEURISTIC_B 启发式搜索(默认)
EXHAUSTIVE_C 穷举搜索(仅 AMP Conv,仅 A100/RTX5090)

enum class Metric

概述

指标位掩码枚举,用于指定需要计算的评估指标。

所属头文件:#include

枚举值 说明
NONE 无指标
TRAIN_LOSS 训练损失
VAL_LOSS 验证损失
VAL_TOP1 验证 Top-1 准确率
VAL_TOP5 验证 Top-5 准确率
EMA_TOP1 EMA Top-1 准确率
EMA_TOP5 EMA Top-5 准确率

enum class TTA

概述

TTA(Test Time Augmentation)模式枚举,测试时数据增强技术。

所属头文件:#include

枚举值 说明
DISABLED 禁用 TTA(默认)
LR 左右翻转
SHIFT_1PX 一像素平移(四个方向+中心)

struct InputSpec

概述

输入规格结构体,描述模型输入的默认维度。

所属头文件:#include

设计定位:值类型,4 字段 POD

成员
字段名 类型 默认值 说明
n int 1 Batch 大小
c int 3 通道数
h int 224 输入高度
w int 224 输入宽度

struct TrainingResult

概述

训练结果结构体,由 Task::run() 返回,汇总训练过程中的最佳指标。

所属头文件:#include

设计定位:值类型,返回结果容器

成员
字段名 类型 默认值 说明
best_top1 float 0.0f 最佳 Top-1 准确率
best_top5 float 0.0f 最佳 Top-5 准确率
best_ema_top1 float 0.0f 最佳 EMA Top-1 准确率
best_ema_top5 float 0.0f 最佳 EMA Top-5 准确率
best_epoch int -1 最佳 epoch 索引
工厂方法
static TrainingResult TrainingResult::debug_stub()
static TrainingResult debug_stub();

功能简介 返回一个默认构造的 TrainingResult,用于调试占位。

参数

返回值 默认 TrainingResult

异常


enum class LogLevel

概述

日志级别枚举,控制日志输出的详细程度。

所属头文件:#include

枚举值 说明
DEBUG 调试信息(最详细)
INFO 一般信息
WARN 警告信息
ERR 错误信息

enum class InitKind

概述

初始化方法枚举,定义 8 种张量初始化策略,覆盖 MLPerf 全部需求。

所属头文件:#include

枚举值 说明
NONE 不初始化(显存池已为零)
ZEROS 全零
CONSTANTS 全常量
KAIMING_NORMAL He 正态分布
KAIMING_UNIFORM He 均匀分布
XAVIER_NORMAL Glorot 正态分布
XAVIER_UNIFORM Glorot 均匀分布
TRUNC_NORMAL 截断正态分布(MLPerf 卷积专用)
FIXED_NORMAL 固定正态分布
STANDARD BN 标准初始化
ZERO_GAMMA BN ZERO_GAMMA 初始化

enum class FanMode

概述

Fan 计算模式枚举,用于卷积初始化时的 fan_in/fan_out 计算。

所属头文件:#include

枚举值 说明
FAN_IN fan_in = C_in × H × W
FAN_OUT fan_out = C_out × H × W
FAN_AVG (fan_in + fan_out) / 2

struct InitConfig

概述

初始化配置结构体,8 字节紧凑布局,描述张量的初始化策略。

所属头文件:#include

设计定位:值类型,可通过 NCCL Broadcast 一次性传输

常用使用路径:作为 Initializer::derive() 的返回值

成员
字段名 类型 默认值 说明
scale float 1.0f 数值参数(含义依赖 kind)
kind InitKind InitKind::NONE 初始化方法种类
fan FanMode FanMode::FAN_IN fan 计算模式

总大小:8 bytes(含 2 字节 padding)


数据访问
bool InitConfig::needs_init() const
bool needs_init() const noexcept;

功能简介 判断是否需要执行初始化。

参数

返回值 kind != NONE 时返回 true

异常


const char* InitConfig::to_string() const
const char* to_string() const noexcept;

功能简介 转换为可读字符串(调试用)。

参数

返回值 格式化的字符串(静态缓冲区)

异常


class Generator

概述

Generator 是基于 Philox4x32-10 算法的伪随机数生成器,支持多线程可复现、高性能、跨平台。

所属头文件:#include

设计定位:有状态(stateful),使用 Pimpl 模式避免 MUSA SDK 的 冲突

常用使用路径:

典型使用代码片段:

// 全局设置(推荐)
tr::GlobalRegistry::instance().manual_seed(42);

// 使用默认生成器
tr::cpu_rand_normal_float(ptr, count, 0.0f, 1.0f);

// 使用独立生成器(多线程)
tr::Generator gen(1234);
tr::cpu_rand_normal_float(ptr, count, 0.0f, 1.0f, gen);
构造与赋值
Generator::Generator(uint64_t seed)
explicit Generator(uint64_t seed = 0) noexcept;

功能简介 构造函数,创建指定种子的生成器。

参数

参数名 类型 默认值 说明
seed uint64_t 0 随机种子

返回值

异常


Generator::~Generator()
~Generator();

功能简介 析构函数。

参数

返回值

异常


Generator::Generator(Generator&& other)
Generator(Generator&& other) noexcept;

功能简介 移动构造函数。

参数

参数名 类型 默认值 说明
other Generator&& - 源对象

返回值

异常

注意事项 源对象的 impl_ 自动置为 nullptr


Generator& Generator::operator=(Generator&& other)
Generator& operator=(Generator&& other) noexcept;

功能简介 移动赋值运算符。

参数

参数名 类型 默认值 说明
other Generator&& - 源对象

返回值 *this

异常

注意事项 禁止拷贝(拷贝构造和拷贝赋值已删除)


种子管理
void Generator::set_seed(uint64_t seed)
void set_seed(uint64_t seed);

功能简介 设置种子(重置 offset 为 0)。

参数

参数名 类型 默认值 说明
seed uint64_t - 新种子

返回值

异常

注意事项 线程安全,但会短暂阻塞其他操作


uint64_t Generator::seed() const
uint64_t seed() const noexcept;

功能简介 获取当前种子。

参数

返回值 种子值

异常


状态管理(用于 Checkpoint)
std::pair Generator::get_state() const
std::pair<uint64_t, uint64_t> get_state() const;

功能简介 获取完整状态 {seed, offset}。

参数

返回值 {seed, offset} 对

异常


void Generator::set_state(uint64_t seed, uint64_t offset)
void set_state(uint64_t seed, uint64_t offset);

功能简介 设置完整状态。

参数

参数名 类型 默认值 说明
seed uint64_t - 种子
offset uint64_t - 偏移量

返回值

异常


偏移量管理(核心方法)
uint64_t Generator::next_offset(uint64_t count)
uint64_t next_offset(uint64_t count);

功能简介 原子预留偏移量区间,实现多线程可复现的关键。

参数

参数名 类型 默认值 说明
count uint64_t - 需要的随机数个数

返回值 本次预留的起始 offset

异常

注意事项


uint64_t Generator::current_offset() const
uint64_t current_offset() const noexcept;

功能简介 获取当前偏移量(不修改状态)。

参数

返回值 当前 offset

异常


辅助方法
int Generator::random_int(int low, int high)
int random_int(int low, int high);

功能简介 生成 [low, high] 范围的随机整数(包含两端)。

参数

参数名 类型 默认值 说明
low int - 最小值(包含)
high int - 最大值(包含)

返回值 [low, high] 范围内的随机整数

异常

注意事项 可复现:相同的 seed 和 offset 序列产生相同的结果,用于 Fisher-Yates 洗牌等场景


class Logger

概述

Logger 是轻量级、线程安全、可编译关闭的日志系统,支持四级日志(DEBUG/INFO/WARN/ERROR)和模块化标记。

所属头文件:#include

设计定位:单例模式,线程安全,支持编译期级别过滤

常用使用路径:

典型使用代码片段:

// 设置日志级别
tr::Logger::instance().set_level(tr::LogLevel::INFO);

// 设置输出文件
tr::Logger::instance().set_output_file("app.log");

// 使用日志宏
TR_LOG_INFO("TR") << "Training started";
LOG_WARN << "Low memory detected";
构造与析构
Logger& Logger::instance()
static Logger& instance() noexcept;

功能简介 获取 Logger 单例实例(Meyers 单例,线程安全)。

参数

返回值 Logger 单例引用

异常


Logger::~Logger()
~Logger();

功能简介 析构函数,自动关闭日志文件。

参数

返回值

异常

注意事项 禁止拷贝和赋值


配置方法
void Logger::set_level(LogLevel level)
void set_level(LogLevel level) noexcept;

功能简介 设置日志级别,低于此级别的日志将被过滤。

参数

参数名 类型 默认值 说明
level LogLevel - 日志级别

返回值

异常


void Logger::set_output_file(const std::string& filename)
void set_output_file(const std::string& filename);

功能简介 设置日志输出文件。

参数

参数名 类型 默认值 说明
filename std::string - 日志文件路径,空字符串表示控制台输出

返回值

异常


void Logger::set_quiet_mode(bool quiet)
void set_quiet_mode(bool quiet) noexcept;

功能简介 设置静默模式。

参数

参数名 类型 默认值 说明
quiet bool - true 表示不输出任何日志

返回值

异常


核心日志方法
void Logger::log(LogLevel level, const char module, const char file, int line, const std::string& message)
void log(LogLevel level, const char* module, const char* file,
         int line, const std::string& message);

功能简介 核心日志方法,输出日志消息。

参数

参数名 类型 默认值 说明
level LogLevel - 日志级别
module const char* - 模块名称
file const char* - 源文件名
line int - 行号
message std::string - 日志消息

返回值

异常

注意事项 线程安全,内部使用互斥锁保护


查询方法
LogLevel Logger::level() const
LogLevel level() const noexcept;

功能简介 获取当前日志级别。

参数

返回值 当前日志级别

异常


内部生命周期方法
void Logger::init()
void init();

功能简介 初始化 Logger(供 Initializer 调用)。

参数

返回值

异常

注意事项 空实现,保留接口一致性。实际初始化由 Logger::instance() 的 Meyers 单例完成。


void Logger::cleanup()
void cleanup();

功能简介 清理 Logger(供 Initializer 调用)。

参数

返回值

异常

注意事项 空实现,保留接口一致性。


void Logger::log_exception(const TRException& e)
[[deprecated]] void log_exception(const TRException& e);

功能简介 将异常信息记录到日志。

参数

参数名 类型 默认值 说明
e const TRException& - 要记录的异常

返回值

异常

注意事项 【已废弃】自 V4.20.1 起,异常不再自动记录到 Logger。此方法仅保留给特殊场景,新代码应避免使用。


宏定义

概述

框架提供的日志、线程安全输出及平台兼容宏定义。

头文件

日志宏

所属头文件:#include

编译期过滤宏

编译期日志过滤由 TR_LOG_LEVEL 控制(定义于 renaissance/core/logger.h):
- TR_LOG_LEVEL <= 0:DEBUG 及以上启用
- TR_LOG_LEVEL <= 1:INFO 及以上启用
- TR_LOG_LEVEL <= 2:WARN 及以上启用
- TR_LOG_ERROR 始终保留,不受该宏影响
- 未定义时,Debug 模式默认为 0,Release 模式默认为 2

TR_LOG_DEBUG(module)
TR_LOG_DEBUG(module)

签名 宏调用形式:TR_LOG_DEBUG(module)

功能简介 DEBUG 级别日志宏,编译期可过滤。在 Release 模式下完全消失(零开销)。

参数

参数名 类型 说明
module const char* 模块名称(字符串字面量)

返回值 LogStream 或 NullStream(支持流式操作)

异常

注意事项


TR_LOG_INFO(module)
TR_LOG_INFO(module)

签名 宏调用形式:TR_LOG_INFO(module)

功能简介 INFO 级别日志宏。

参数

参数名 类型 说明
module const char* 模块名称

返回值 LogStream 或 NullStream

异常

注意事项 TR_LOG_LEVEL <= 1 时启用


TR_LOG_WARN(module)
TR_LOG_WARN(module)

签名 宏调用形式:TR_LOG_WARN(module)

功能简介 WARN 级别日志宏。

参数

参数名 类型 说明
module const char* 模块名称

返回值 LogStream 或 NullStream

异常

注意事项 TR_LOG_LEVEL <= 2 时启用


TR_LOG_ERROR(module)
TR_LOG_ERROR(module)

签名 宏调用形式:TR_LOG_ERROR(module)

功能简介 ERROR 级别日志宏,始终保留(不可编译期过滤)。

参数

参数名 类型 说明
module const char* 模块名称

返回值 LogStream

异常


便捷宏(自动推断模块)

LOG_DEBUG / LOG_INFO / LOG_WARN / LOG_ERROR
#define LOG_DEBUG TR_LOG_DEBUG("TR")
#define LOG_INFO  TR_LOG_INFO("TR")
#define LOG_WARN  TR_LOG_WARN("TR")
#define LOG_ERROR TR_LOG_ERROR("TR")

签名 宏调用形式:LOG_DEBUGLOG_INFOLOG_WARNLOG_ERROR

功能简介 便捷日志宏,自动使用 "TR" 作为模块名。

参数

返回值 LogStream 或 NullStream

异常

示例

LOG_INFO << "Training started";
LOG_WARN << "GPU memory usage: " << usage << "%";
LOG_ERROR << "Failed to load model";

线程安全原子性输出宏

所属头文件:#include

TR_ATOMIC_COUT
TR_ATOMIC_COUT

签名 宏调用形式:TR_ATOMIC_COUT

功能简介 线程安全原子性标准输出宏,直接输出到 stdout,不经过日志级别过滤、不附加时间戳/模块名。通过全局互斥锁保证多线程下整行/整块输出不被打断。

参数

返回值 AtomicCoutStream(支持流式操作)

异常

注意事项

示例

TR_ATOMIC_COUT << "Progress: " << percent << "%" << std::endl;

平台兼容属性宏(实现细节)

所属头文件:#include

以下宏为框架内部平台兼容/编译器控制宏,普通用户通常无需直接使用。

TR_NOINLINE
#ifdef _MSC_VER
    #define TR_NOINLINE __declspec(noinline)
#elif defined(__GNUC__) || defined(__clang__)
    #define TR_NOINLINE __attribute__((noinline))
#else
    #define TR_NOINLINE
#endif

功能简介 禁止编译器内联当前函数。用于修复特定平台/优化级别下的正确性问题。

使用位置 主要在 Shape::Shape(int n, int h, int w, int c) 构造函数中使用,避免 MSVC /O2 优化导致的参数传递错误。

注意事项


struct ExceptionContext

概述

异常上下文信息结构体,用于记录异常发生时的文件、函数和消息。

所属头文件:#include

设计定位:值类型,构成 TRException 的上下文链

成员
字段名 类型 默认值 说明
file const char* - 源文件名(basename)
func const char* - 函数名
message std::string - 上下文消息
工具方法
std::string ExceptionContext::to_string() const
std::string to_string() const;

功能简介 将上下文格式化为可读字符串。

参数

返回值 格式:message (at file :: func())

异常


class TRException

概述

TRException 是框架统一异常基类,支持 Context Chain(多层上下文叠加)、延迟构建 what()、线程安全。

所属头文件:#include

设计定位:异常基类,所有框架异常的根

常用使用路径:通过 TR_THROW() 宏抛出,通过 catch 块捕获

典型使用代码片段:

// 抛出异常
TR_THROW(ValueError, "Invalid batch size: " << batch_size);

// 条件检查
TR_CHECK(ptr != nullptr, MemoryError, "null pointer");

// 重新抛出并添加上下文
try {
    // ...
} catch (tr::TRException& e) {
    TR_RETHROW(e, "While loading model from " << path);
}
构造与析构
TRException::TRException(const char type_name, const std::string& message, const char file, const char* func)
TRException(const char* type_name,
            const std::string& message,
            const char* file,
            const char* func);

功能简介 构造异常对象。

参数

参数名 类型 默认值 说明
type_name const char* - 异常类型名
message std::string - 错误消息
file const char* - 源文件名(__FILE__)
func const char* - 函数名(__func__)

返回值

异常


TRException::~TRException()
virtual ~TRException() noexcept = default;

功能简介 虚析构函数。

参数

返回值

异常


TRException::TRException(const TRException& other)
TRException(const TRException& other) noexcept;

功能简介 拷贝构造函数(MSVC C5272 警告修复,noexcept)。

参数

参数名 类型 默认值 说明
other const TRException& - 源异常对象

返回值

异常

注意事项 mutex_ 成员不可复制,需要在新对象中重新初始化


TRException& TRException::operator=(const TRException& other)
TRException& operator=(const TRException& other) noexcept;

功能简介 拷贝赋值运算符(MSVC C5272 警告修复,noexcept)。

参数

参数名 类型 默认值 说明
other const TRException& - 源异常对象

返回值 *this

异常


核心方法
const char* TRException::what() const
const char* what() const noexcept override;

功能简介 获取完整错误描述(线程安全 + OOM 安全)。

参数

返回值 包含 Context Chain 的完整消息

异常

注意事项


void TRException::add_context(const std::string& ctx_message, const char file, const char func)
void add_context(const std::string& ctx_message,
                 const char* file,
                 const char* func);

功能简介 添加上下文信息(线程安全,支持重新抛出)。

参数

参数名 类型 默认值 说明
ctx_message std::string - 上下文消息
file const char* - 文件名
func const char* - 函数名

返回值

异常

注意事项 通过 TR_RETHROW 宏使用,不要手动调用


const char* TRException::type() const
const char* type() const noexcept;

功能简介 获取异常类型名。

参数

返回值 异常类型字符串

异常


const std::string& TRException::message() const
const std::string& message() const noexcept;

功能简介 获取根消息。

参数

返回值 根消息字符串引用

异常


std::vector TRException::get_contexts() const
std::vector<ExceptionContext> get_contexts() const;

功能简介 获取上下文链(线程安全,返回拷贝)。

参数

返回值 上下文链的副本

异常

注意事项 推荐使用此方法而非已废弃的 contexts()


const std::vector& TRException::contexts() const
[[deprecated]] const std::vector<ExceptionContext>& contexts() const;

功能简介 获取上下文链的常量引用。

参数

返回值 上下文链的常量引用

异常

注意事项 【已废弃】直接返回内部 vector 引用,存在线程安全和生命周期风险。请改用 get_contexts()


具体异常类型

概述

框架提供的具体异常类型,均继承自 TRException

所属头文件:#include

异常类型 说明
NotImplementedError 功能未实现
FileNotFoundError 文件未找到
ValueError 参数值错误
IndexError 索引越界
TypeError 类型错误
ZeroDivisionError 除零错误
ShapeError 张量形状错误
DeviceError 设备错误
MemoryError 内存错误
TimeoutError 超时错误
GPUOutOfMemoryError GPU 显存不足(可恢复)
DistributedError 分布式训练错误
RuntimeError 通用运行时错误

异常宏

概述

框架提供的异常抛出、条件检查与消息构建宏。

所属头文件:#include

核心异常宏
TR_THROW(ExceptionType, msg_stream)
#define TR_THROW(ExceptionType, msg_stream)

签名 宏调用形式:TR_THROW(ExceptionType, msg_stream)

功能简介 抛出异常的核心宏。

参数

参数名 类型 说明
ExceptionType 异常类型 异常类名(如 ValueError)
msg_stream 流式消息 支持 << 的消息流

返回值 无(抛出异常)

异常 抛出指定的异常类型

示例

TR_THROW(ValueError, "Invalid size: " << size);
TR_THROW(ShapeError, "Expected shape " << expected << ", got " << actual);

TR_CHECK(condition, ExceptionType, msg_stream)
#define TR_CHECK(condition, ExceptionType, msg_stream)

签名 宏调用形式:TR_CHECK(condition, ExceptionType, msg_stream)

功能简介 条件检查(所有模式都执行),条件为 false 时抛出异常。

参数

参数名 类型 说明
condition 布尔表达式 检查条件
ExceptionType 异常类型 条件为 false 时抛出的异常类型
msg_stream 流式消息 错误消息

返回值 无(条件为 false 时抛出异常)

异常 条件为 false 时抛出指定异常

注意事项

示例

TR_CHECK(x > 0, ValueError, "x must be positive, got " << x);
TR_CHECK(ptr != nullptr, MemoryError, "null pointer");

TR_DEBUG_CHECK(condition, ExceptionType, msg_stream)
#define TR_DEBUG_CHECK(condition, ExceptionType, msg_stream)

签名 宏调用形式:TR_DEBUG_CHECK(condition, ExceptionType, msg_stream)

功能简介 防御性检查(仅 Debug 模式执行),Release 模式下完全消失(零开销)。

参数

参数名 类型 说明
condition 布尔表达式 检查条件
ExceptionType 异常类型 条件为 false 时抛出的异常类型
msg_stream 流式消息 错误消息

返回值 无(Debug 模式下条件为 false 时抛出异常)

异常 Debug 模式下条件为 false 时抛出指定异常

注意事项


TR_RETHROW(exception, ctx_stream)
#define TR_RETHROW(exception, ctx_stream)

签名 宏调用形式:TR_RETHROW(exception, ctx_stream)

功能简介 重新抛出并添加上下文(带引用安全检查)。

参数

参数名 类型 说明
exception TRException& 异常引用(必须是左值引用)
ctx_stream 流式消息 上下文消息

返回值 无(重新抛出异常)

异常 重新抛出输入的异常

注意事项

示例

try {
    // Some operation
} catch (tr::TRException& e) {
    TR_RETHROW(e, "While loading model from " << path);
}

便捷异常宏

所属头文件:#include

TR_MSG(...)
#define TR_MSG(...)

签名 宏调用形式:TR_MSG(...)

功能简介 构建异常消息字符串,供 TR_THROW 系列宏内部使用。

参数

参数名 类型 说明
... 流式表达式 支持 << 连接的消息片段

返回值 std::string 形式的消息字符串

异常

注意事项 通常不直接调用,由 TR_THROW 和便捷异常宏自动展开。


以下宏是 TR_THROW 的便捷版本,自动指定异常类型:

#define TR_NOT_IMPLEMENTED(...) TR_THROW(NotImplementedError, TR_MSG(__VA_ARGS__))
#define TR_VALUE_ERROR(...) TR_THROW(ValueError, TR_MSG(__VA_ARGS__))
#define TR_SHAPE_ERROR(...) TR_THROW(ShapeError, TR_MSG(__VA_ARGS__))
#define TR_TYPE_ERROR(...) TR_THROW(TypeError, TR_MSG(__VA_ARGS__))
#define TR_INDEX_ERROR(...) TR_THROW(IndexError, TR_MSG(__VA_ARGS__))
#define TR_DEVICE_ERROR(...) TR_THROW(DeviceError, TR_MSG(__VA_ARGS__))
#define TR_FILE_NOT_FOUND(...) TR_THROW(FileNotFoundError, TR_MSG(__VA_ARGS__))
#define TR_ZERO_DIVISION(...) TR_THROW(ZeroDivisionError, TR_MSG(__VA_ARGS__))
#define TR_MEMORY_ERROR(...) TR_THROW(MemoryError, TR_MSG(__VA_ARGS__))
#define TR_TIMEOUT_ERROR(...) TR_THROW(TimeoutError, TR_MSG(__VA_ARGS__))
#define TR_GPU_OOM(...) TR_THROW(GPUOutOfMemoryError, TR_MSG(__VA_ARGS__))
#define TR_DISTRIBUTED_ERROR(...) TR_THROW(DistributedError, TR_MSG(__VA_ARGS__))
#define TR_RUNTIME_ERROR(...) TR_THROW(RuntimeError, TR_MSG(__VA_ARGS__))

class GlobalRegistry

概述

GlobalRegistry 是全局配置管理类,线程安全的单例,存储训练过程中需要共享的配置信息。

所属头文件:#include

设计定位:单例模式,线程安全,分类管理(fixed 固定型 + alterable 可变型)

常用使用路径:

典型使用代码片段:

// 链式配置
GLOBAL_SETTING
    .use_gpu("0,1,2,3")
    .manual_seed(42)
    .global_batch_size(128);

// 查询配置
bool using_gpu = GLOBAL_SETTING.using_gpu();
int batch_size = GLOBAL_SETTING.get_local_batch_size();
单例访问
GlobalRegistry& GlobalRegistry::instance()
static GlobalRegistry& instance();

功能简介 获取单例实例。

参数

返回值 GlobalRegistry 单例引用

异常

注意事项 禁止拷贝和移动


初始化方法
void GlobalRegistry::initialize()
void initialize();

功能简介 初始化全局注册表,检查所有 fixed 变量是否已赋值。

参数

返回值

异常 ValueError - 如果有 fixed 变量未赋值

注意事项


void GlobalRegistry::init()
void init();

功能简介 初始化(供 Initializer 调用),空实现,保留接口一致性。

参数

返回值

异常

注意事项 实际初始化由 begin_train() / begin_val() 触发


void GlobalRegistry::cleanup()
void cleanup();

功能简介 清理(供 Initializer 调用),空实现,保留接口一致性。

参数

返回值

异常


阶段管理方法
void GlobalRegistry::begin_train()
void begin_train();

功能简介 开始训练阶段。

参数

返回值

异常

注意事项


void GlobalRegistry::end_train()
void end_train();

功能简介 结束训练阶段。

参数

返回值

异常 ValueError - 如果 train_counter_ 减到负数


void GlobalRegistry::begin_val()
void begin_val();

功能简介 开始验证阶段。

参数

返回值

异常

注意事项


void GlobalRegistry::end_val()
void end_val();

功能简介 结束验证阶段。

参数

返回值

异常 ValueError - 如果 val_counter_ 减到负数


链式配置方法
GlobalRegistry& GlobalRegistry::manual_seed(uint64_t seed)
GlobalRegistry& manual_seed(uint64_t seed);

功能简介 设置全局随机种子。

参数

参数名 类型 默认值 说明
seed uint64_t - 种子值

返回值 GlobalRegistry 引用,支持链式调用

异常

注意事项 调用 rng_set_seed() 设置全局随机数生成器的种子


GlobalRegistry& GlobalRegistry::auto_seed()
GlobalRegistry& auto_seed();

功能简介 使用时间种子自动初始化随机数生成器。

参数

返回值 GlobalRegistry 引用,支持链式调用

异常

注意事项 使用当前时间戳作为种子调用 manual_seed()


GlobalRegistry& GlobalRegistry::reproducible()
GlobalRegistry& reproducible();

功能简介 确保可复现性(启用可复现性保险)。

参数

返回值 GlobalRegistry 引用,支持链式调用

异常

注意事项 只要调用了 manual_seed() 或 auto_seed(),就会自动启用可复现模式


void GlobalRegistry::set_reproducibility_insurance(bool value)
void set_reproducibility_insurance(bool value);

功能简介 设置是否启用可复现性保险。

参数

参数名 类型 默认值 说明
value bool - true=启用可复现性保险

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


void GlobalRegistry::ensure_reproducibility(bool value)
void ensure_reproducibility(bool value);

功能简介 set_reproducibility_insurance 的别名。

参数

参数名 类型 默认值 说明
value bool - true=启用可复现性保险

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::reproducibility_insurance() const
bool reproducibility_insurance() const;

功能简介 获取可复现性保险是否启用。

参数

返回值 启用返回 true

异常


GlobalRegistry& GlobalRegistry::amp(bool value)
GlobalRegistry& amp(bool value);

功能简介 设置是否使用混合精度训练(AMP)。

参数

参数名 类型 默认值 说明
value bool - 是否使用 AMP

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 初始化后对 AMP 设置进行非幂等修改时


GlobalRegistry& GlobalRegistry::use_tf32(bool value)
GlobalRegistry& use_tf32(bool value = true);

功能简介 设置是否允许 cuDNN 使用 TF32 Tensor Core 加速。

参数

参数名 类型 默认值 说明
value bool true true=允许 TF32(默认),false=禁用 TF32

返回值 GlobalRegistry 引用,支持链式调用

异常

注意事项 必须在第一个 cuDNN Graph 构建之前调用


GlobalRegistry& GlobalRegistry::local_batch_size(int value)
GlobalRegistry& local_batch_size(int value);

功能简介 设置本地 batch size。

参数

参数名 类型 默认值 说明
value int - batch size 值

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 对 fixed batch size 进行非幂等修改时


GlobalRegistry& GlobalRegistry::global_batch_size(int value)
GlobalRegistry& global_batch_size(int value);

功能简介 设置全局 batch size(自动计算本地 batch size)。

参数

参数名 类型 默认值 说明
value int - 全局 batch size 值

返回值 GlobalRegistry 引用,支持链式调用

异常 DeviceError - 如果尚未调用 use_gpu() 或 use_cpu() ValueError - 如果 value 不能被 world_size 整除

注意事项 将 global_batch_size / world_size 的商作为 local_batch_size 设置


状态查询方法
bool GlobalRegistry::is_training() const
bool is_training() const;

功能简介 是否处于训练阶段。

参数

返回值 训练阶段返回 true

异常


bool GlobalRegistry::is_validating() const
bool is_validating() const;

功能简介 是否处于验证阶段。

参数

返回值 验证阶段返回 true

异常


bool GlobalRegistry::is_busy() const
bool is_busy() const;

功能简介 是否忙碌(有对象正在训练或验证)。

参数

返回值 忙碌状态返回 true

异常


bool GlobalRegistry::is_initialized() const
bool is_initialized() const;

功能简介 是否已初始化。

参数

返回值 已初始化返回 true

异常


GPU 配置高层接口
GlobalRegistry& GlobalRegistry::use_gpu()
GlobalRegistry& use_gpu();

功能简介 配置 GPU 使用模式(无参数版本,自动使用所有可见 GPU)。

参数

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 当可见 GPU 数量为 0、不是 2 的幂或超过 16 时

注意事项


GlobalRegistry& GlobalRegistry::use_cpu()
GlobalRegistry& use_cpu();

功能简介 配置为 CPU 模式。

参数

返回值 GlobalRegistry 引用,支持链式调用

异常


GlobalRegistry& GlobalRegistry::use_gpu(const std::string& gpu_id_str)
GlobalRegistry& use_gpu(const std::string& gpu_id_str);

功能简介 配置 GPU 使用模式(字符串版本)。

参数

参数名 类型 默认值 说明
gpu_id_str std::string - GPU ID 字符串,如 "0,1,2,3" 或 "0-7"

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果 GPU ID 无效或数量不是 2 的幂

注意事项

示例

GLOBAL_SETTING.use_gpu("0,1,2,3");    // 使用 GPU 0-3
GLOBAL_SETTING.use_gpu("0-7");        // 使用 GPU 0-7

分辨率配置方法
GlobalRegistry& GlobalRegistry::train_resolution(int value)
GlobalRegistry& train_resolution(int value);

功能简介 设置训练分辨率(非渐进式)。

参数

参数名 类型 默认值 说明
value int - 训练分辨率,必须大于 0

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果 value 不大于 0

注意事项


GlobalRegistry& GlobalRegistry::val_resolution(int value)
GlobalRegistry& val_resolution(int value);

功能简介 设置验证分辨率。

参数

参数名 类型 默认值 说明
value int - 验证分辨率,必须大于 0

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果 value 不大于 0


GlobalRegistry& GlobalRegistry::input_resolution(int value)
GlobalRegistry& input_resolution(int value);

功能简介 同时设置训练和验证分辨率。

参数

参数名 类型 默认值 说明
value int - 训练和验证共用分辨率,必须大于 0

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果 value 不大于 0

注意事项 依次调用 train_resolution(value) 和 val_resolution(value)


GlobalRegistry& GlobalRegistry::train_resolution(std::pair pair_begin, std::pair pair_end)
GlobalRegistry& train_resolution(std::pair<int, int> pair_begin, std::pair<int, int> pair_end);

功能简介 设置渐进式训练分辨率。

参数

参数名 类型 默认值 说明
pair_begin std::pair - 起始参数对 (starting_epoch, train_sample_resolution_begin)
pair_end std::pair - 结束参数对 (boundary_epoch, train_sample_resolution_end)

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果参数不合法

注意事项


锁页内存管理
GlobalRegistry& GlobalRegistry::allocate_staging_memory(size_t bytes_per_device)
GlobalRegistry& allocate_staging_memory(size_t bytes_per_device);

功能简介 为所有活跃设备分配 Staging 内存。

参数

参数名 类型 默认值 说明
bytes_per_device size_t - 每块 Staging 内存的字节数

返回值 GlobalRegistry 引用,支持链式调用

异常 ValueError - 如果 bytes_per_device 为 0、或已分配但大小不同

注意事项


void* GlobalRegistry::staging_memory_ptr(int rank) const
void* staging_memory_ptr(int rank) const;

功能简介 按 RANK 获取 Staging 内存指针。

参数

参数名 类型 默认值 说明
rank int - RANK 索引(0-based)

返回值 Staging 内存指针

异常 RuntimeError - 如果尚未分配 Staging 内存 IndexError - 如果 rank 越界


GlobalRegistry& GlobalRegistry::allocate_staging_params(size_t bytes_per_rank)
GlobalRegistry& allocate_staging_params(size_t bytes_per_rank = 256);

功能简介 分配 Staging 参数区(StagingParamPool)。

参数

参数名 类型 默认值 说明
bytes_per_rank size_t 256 每 rank 参数区大小

返回值 GlobalRegistry 引用,支持链式调用

异常

注意事项


void* GlobalRegistry::staging_params_ptr(int rank) const
void* staging_params_ptr(int rank) const;

功能简介 获取 rank 对应的 Staging 参数区指针。

参数

参数名 类型 默认值 说明
rank int - RANK 索引(0-based)

返回值 Staging 参数区指针

异常 RuntimeError - 如果尚未分配 IndexError - 如果 rank 越界


bool GlobalRegistry::has_staging_memory() const
bool has_staging_memory() const;

功能简介 是否已分配 Staging 内存。

参数

返回值 已分配返回 true

异常


size_t GlobalRegistry::staging_memory_size() const
size_t staging_memory_size() const;

功能简介 获取每 GPU Staging 内存字节数。

参数

返回值 字节数;未分配时返回 0

异常


int GlobalRegistry::staging_memory_numa_node(int rank) const
int staging_memory_numa_node(int rank) const;

功能简介 按 RANK 获取 Staging 内存所在 NUMA 节点编号。

参数

参数名 类型 默认值 说明
rank int - RANK 索引(0-based)

返回值 NUMA 节点编号;查询失败返回 -1

异常 RuntimeError - 如果尚未分配 Staging 内存 IndexError - 如果 rank 越界


bool GlobalRegistry::has_staging_params() const
bool has_staging_params() const;

功能简介 是否已分配 Staging 参数区。

参数

返回值 已分配返回 true

异常


size_t GlobalRegistry::staging_params_bytes() const
size_t staging_params_bytes() const;

功能简介 获取每 rank Staging 参数区字节数。

参数

返回值 字节数;未分配时返回 0

异常


void GlobalRegistry::clear_staging_memory()
void clear_staging_memory();

功能简介 显式释放所有 Staging 内存。

参数

返回值

异常

注意事项 析构时会自动释放,此方法用于提前释放


常用配置查询与设置

以下方法在 GlobalRegistry 的已有文档中未完整覆盖,但属于用户常见查询/配置入口。

GlobalRegistry& GlobalRegistry::setup()
GlobalRegistry& setup();

功能简介 入口方法(空实现),仅返回引用以支持链式配置语法。

参数

返回值 GlobalRegistry 引用,支持链式调用

异常


static int GlobalRegistry::get_visible_gpu_count()
static int get_visible_gpu_count();

功能简介 获取当前环境可见的 GPU 数量。

参数

返回值 可见 GPU 数量;CPU 模式或无可用 GPU 时返回 0

异常


void GlobalRegistry::set_dataset_type(DatasetType value)
void set_dataset_type(DatasetType value);

功能简介 设置数据集类型。

参数

参数名 类型 默认值 说明
value DatasetType - 数据集类型

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


DatasetType GlobalRegistry::dataset_type() const
DatasetType dataset_type() const;

功能简介 获取数据集类型。

参数

返回值 当前数据集类型

异常 ValueError - 尚未设置时


void GlobalRegistry::set_num_classes(int value)
void set_num_classes(int value);

功能简介 设置分类数量。

参数

参数名 类型 默认值 说明
value int - 分类数量

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


int GlobalRegistry::num_classes() const
int num_classes() const;

功能简介 获取分类数量。

参数

返回值 分类数量

异常 ValueError - 尚未设置时


void GlobalRegistry::set_num_color_channels(int value)
void set_num_color_channels(int value);

功能简介 设置颜色通道数。

参数

参数名 类型 默认值 说明
value int - 颜色通道数,如 1 或 3

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


int GlobalRegistry::num_color_channels() const
int num_color_channels() const;

功能简介 获取颜色通道数。

参数

返回值 颜色通道数

异常 ValueError - 尚未设置时


void GlobalRegistry::set_num_load_workers(int value)
void set_num_load_workers(int value);

功能简介 设置 DataLoader 加载线程数。

参数

参数名 类型 默认值 说明
value int - 加载线程数

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


int GlobalRegistry::num_load_workers() const
int num_load_workers() const;

功能简介 获取 DataLoader 加载线程数。

参数

返回值 加载线程数

异常 ValueError - 尚未设置时


void GlobalRegistry::set_num_preproc_workers(int value)
void set_num_preproc_workers(int value);

功能简介 设置 Preprocessor 预处理线程数。

参数

参数名 类型 默认值 说明
value int - 预处理线程数

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


int GlobalRegistry::num_preproc_workers() const
int num_preproc_workers() const;

功能简介 获取 Preprocessor 预处理线程数。

参数

返回值 预处理线程数

异常 ValueError - 尚未设置时


int GlobalRegistry::world_size() const
int world_size() const;

功能简介 获取分布式训练的 world size(RANK 总数)。

参数

返回值 world size

异常 ValueError - 尚未配置 GPU/CPU 时


int GlobalRegistry::get_local_batch_size() const
int get_local_batch_size() const;

功能简介 获取每个 RANK 的本地 batch size。

参数

返回值 本地 batch size

异常 ValueError - 尚未设置时


void GlobalRegistry::set_batch_size(int value)
void set_batch_size(int value);

功能简介 设置本地 batch size(fixed 变量底层 setter)。

参数

参数名 类型 默认值 说明
value int - 本地 batch size 值

返回值

异常 ValueError - 初始化后修改或非幂等赋值时

注意事项 普通用户建议使用链式方法 local_batch_size(value)


void GlobalRegistry::set_optimizer_kind(OptimizerKind kind)
void set_optimizer_kind(OptimizerKind kind);

功能简介 设置优化器类型。

参数

参数名 类型 默认值 说明
kind OptimizerKind - 优化器类型枚举

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


OptimizerKind GlobalRegistry::optimizer_kind() const
OptimizerKind optimizer_kind() const;

功能简介 获取优化器类型。

参数

返回值 当前优化器类型

异常 ValueError - 尚未设置时


int GlobalRegistry::optimizer_kind_raw() const
[[nodiscard]] int optimizer_kind_raw() const noexcept;

功能简介 获取优化器类型的原始整数值(不抛异常)。

参数

返回值 优化器类型原始值;-1 表示未设置

异常


bool GlobalRegistry::using_gpu() const
bool using_gpu() const;

功能简介 是否使用 GPU。

参数

返回值 GPU 模式返回 true

异常


const std::vector& GlobalRegistry::gpu_ids() const
const std::vector<int>& gpu_ids() const;

功能简介 获取当前配置的 GPU ID 列表。

参数

返回值 GPU ID 列表的常量引用

异常


void GlobalRegistry::set_using_gpu(bool value)
void set_using_gpu(bool value);

功能简介 设置是否使用 GPU(fixed 变量底层 setter)。

参数

参数名 类型 默认值 说明
value bool - true=使用 GPU,false=使用 CPU

返回值

异常 ValueError - 初始化后修改或非幂等赋值时

注意事项 普通用户建议使用链式方法 use_gpu()use_cpu()


void GlobalRegistry::set_gpu_ids(const std::vector& ids)
void set_gpu_ids(const std::vector<int>& ids);

功能简介 设置 GPU ID 列表(fixed 变量底层 setter)。

参数

参数名 类型 默认值 说明
ids const std::vector& - GPU ID 列表

返回值

异常 ValueError - 初始化后修改或非幂等赋值时

注意事项 普通用户建议使用链式方法 use_gpu(const std::string&)


bool GlobalRegistry::using_amp() const
bool using_amp() const;

功能简介 是否启用混合精度训练(AMP)。

参数

返回值 启用 AMP 返回 true

异常


bool GlobalRegistry::has_amp_set() const
bool has_amp_set() const;

功能简介 AMP 标志是否已被用户显式设置。

参数

返回值 已调用 amp(true/false) 返回 true

异常


void GlobalRegistry::set_num_train_samples(size_t count)
void set_num_train_samples(size_t count);

功能简介 设置训练集样本总数。

参数

参数名 类型 默认值 说明
count size_t - 训练集样本总数

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


size_t GlobalRegistry::num_train_samples() const
size_t num_train_samples() const;

功能简介 获取训练集样本总数。

参数

返回值 训练集样本总数

异常 ValueError - 尚未设置时


void GlobalRegistry::set_num_val_samples(size_t count)
void set_num_val_samples(size_t count);

功能简介 设置验证集样本总数。

参数

参数名 类型 默认值 说明
count size_t - 验证集样本总数

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


size_t GlobalRegistry::num_val_samples() const
size_t num_val_samples() const;

功能简介 获取验证集样本总数。

参数

返回值 验证集样本总数

异常 ValueError - 尚未设置时


int GlobalRegistry::get_train_steps() const
int get_train_steps() const;

功能简介 获取训练总 batch 数(steps)。

参数

返回值 训练 steps

异常 ValueError - 依赖项未设置时


int GlobalRegistry::get_val_steps() const
int get_val_steps() const;

功能简介 获取验证总 batch 数(steps)。

参数

返回值 验证 steps

异常 ValueError - 依赖项未设置时


其他 fixed 配置查询与设置
void GlobalRegistry::set_sdmp_factor(int value)
void set_sdmp_factor(int value);

功能简介 设置 SDMP(Spatially Distributed Multi-Path)因子。

参数

参数名 类型 默认值 说明
value int - SDMP 因子

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


int GlobalRegistry::sdmp_factor() const
int sdmp_factor() const;

功能简介 获取 SDMP 因子。

参数

返回值 SDMP 因子

异常 ValueError - 尚未设置时


void GlobalRegistry::set_using_cpvs(bool value)
void set_using_cpvs(bool value);

功能简介 设置是否使用 CPVS(Cross-Parallel Validation Strategy)。

参数

参数名 类型 默认值 说明
value bool - 是否启用 CPVS

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::using_cpvs() const
bool using_cpvs() const;

功能简介 是否使用 CPVS。

参数

返回值 启用返回 true

异常


void GlobalRegistry::set_using_drop_last(bool value)
void set_using_drop_last(bool value);

功能简介 设置是否丢弃最后不完整的 batch。

参数

参数名 类型 默认值 说明
value bool - true=丢弃不完整 batch

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::using_drop_last() const
bool using_drop_last() const;

功能简介 是否丢弃最后不完整的 batch。

参数

返回值 丢弃返回 true

异常


void GlobalRegistry::set_train_with_rhf(bool value)
void set_train_with_rhf(bool value);

功能简介 设置训练集是否包含 RandomHorizontalFlip。

参数

参数名 类型 默认值 说明
value bool - true=包含水平翻转

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::train_with_rhf() const
bool train_with_rhf() const;

功能简介 训练集是否包含 RandomHorizontalFlip。

参数

返回值 包含返回 true

异常


void GlobalRegistry::set_val_with_rhf(bool value)
void set_val_with_rhf(bool value);

功能简介 设置验证集是否包含 RandomHorizontalFlip。

参数

参数名 类型 默认值 说明
value bool - true=包含水平翻转

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::val_with_rhf() const
bool val_with_rhf() const;

功能简介 验证集是否包含 RandomHorizontalFlip。

参数

返回值 包含返回 true

异常


void GlobalRegistry::set_shuffle_train(bool value)
void set_shuffle_train(bool value);

功能简介 设置训练集是否洗牌。

参数

参数名 类型 默认值 说明
value bool - true=洗牌

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::shuffle_train() const
bool shuffle_train() const;

功能简介 训练集是否洗牌。

参数

返回值 洗牌返回 true

异常


void GlobalRegistry::set_initializer_inited(bool value)
void set_initializer_inited(bool value);

功能简介 设置框架初始化标志(仅供 Initializer 内部调用)。

参数

参数名 类型 默认值 说明
value bool - 是否已初始化

返回值

异常

注意事项 普通用户无需调用。


bool GlobalRegistry::initializer_inited() const
bool initializer_inited() const;

功能简介 框架是否已调用 Initializer::init()

参数

返回值 已初始化返回 true

异常


void GlobalRegistry::set_is_deployment_mode(bool value)
void set_is_deployment_mode(bool value);

功能简介 设置是否为 Deployment(推理部署)模式。

参数

参数名 类型 默认值 说明
value bool - true=部署模式

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::is_deployment_mode() const
bool is_deployment_mode() const;

功能简介 是否为 Deployment 模式。

参数

返回值 部署模式返回 true

异常


void GlobalRegistry::set_cpu_binding_enabled(bool value)
void set_cpu_binding_enabled(bool value);

功能简介 设置是否启用 CPU 绑核。

参数

参数名 类型 默认值 说明
value bool - true=启用绑核

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::cpu_binding_enabled() const
bool cpu_binding_enabled() const;

功能简介 是否启用 CPU 绑核。

参数

返回值 启用返回 true

异常


void GlobalRegistry::set_cpu_binding_map(const std::vector& map)
void set_cpu_binding_map(const std::vector<int>& map);

功能简介 设置 CPU 绑核映射表(worker_id → CPU 核心 ID)。

参数

参数名 类型 默认值 说明
map const std::vector& - 绑核映射表

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


const std::vector& GlobalRegistry::cpu_binding_map() const
const std::vector<int>& cpu_binding_map() const;

功能简介 获取 CPU 绑核映射表。

参数

返回值 绑核映射表的常量引用

异常


void GlobalRegistry::set_fixed_s_original_indices(const std::vector& indices)
void set_fixed_s_original_indices(const std::vector<int>& indices);

功能简介 设置 S 区原始索引向量(用于 S 区洗牌)。

参数

参数名 类型 默认值 说明
indices const std::vector& - 原始顺序索引向量

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


const std::vector& GlobalRegistry::fixed_s_original_indices() const
const std::vector<int>& fixed_s_original_indices() const;

功能简介 获取 S 区原始索引向量。

参数

返回值 原始索引向量的常量引用

异常


样本统计与 last batch
int GlobalRegistry::get_last_train_batch_size() const
int get_last_train_batch_size() const;

功能简介 获取训练最后一个 batch 的本地样本数。

参数

返回值 最后一个 batch 样本数

异常 ValueError - 依赖项未设置时


int GlobalRegistry::get_last_val_batch_size() const
int get_last_val_batch_size() const;

功能简介 获取验证最后一个 batch 的本地样本数。

参数

返回值 最后一个 batch 样本数

异常 ValueError - 依赖项未设置时


size_t GlobalRegistry::padded_train_samples() const
size_t padded_train_samples() const;

功能简介 获取 pad 到 world_size 整数倍后的训练集总样本数。

参数

返回值 pad 后训练样本总数

异常 ValueError - 依赖项未设置时


size_t GlobalRegistry::padded_val_samples() const
size_t padded_val_samples() const;

功能简介 获取 pad 到 world_size 整数倍后的验证集总样本数。

参数

返回值 pad 后验证样本总数

异常 ValueError - 依赖项未设置时


size_t GlobalRegistry::train_samples_per_rank() const
size_t train_samples_per_rank() const;

功能简介 获取每个 RANK 的训练样本数(已 pad 后)。

参数

返回值 每 RANK 训练样本数

异常 ValueError - 依赖项未设置时


size_t GlobalRegistry::val_samples_per_rank() const
size_t val_samples_per_rank() const;

功能简介 获取每个 RANK 的验证样本数(已 pad 后)。

参数

返回值 每 RANK 验证样本数

异常 ValueError - 依赖项未设置时


void GlobalRegistry::set_aligned_max_output_size(size_t size)
void set_aligned_max_output_size(size_t size);

功能简介 设置 S/C 区单个样本对齐后字节数(64 字节对齐)。

参数

参数名 类型 默认值 说明
size size_t - 单个样本字节数

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


size_t GlobalRegistry::aligned_max_output_size() const
size_t aligned_max_output_size() const;

功能简介 获取 S/C 区单个样本对齐后字节数。

参数

返回值 对齐后字节数

异常 ValueError - 尚未设置时


渐进式分辨率与输出尺寸
void GlobalRegistry::set_using_progressive_resolution(bool value)
void set_using_progressive_resolution(bool value);

功能简介 设置是否启用渐进式分辨率。

参数

参数名 类型 默认值 说明
value bool - true=启用渐进式分辨率

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


bool GlobalRegistry::using_progressive_resolution() const
bool using_progressive_resolution() const;

功能简介 是否启用渐进式分辨率。

参数

返回值 启用返回 true

异常


int GlobalRegistry::max_sample_resolution() const
int max_sample_resolution() const;

功能简介 获取所有训练和验证分辨率中的最大值。

参数

返回值 最大分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::train_sample_resolution_begin() const
int train_sample_resolution_begin() const;

功能简介 获取训练起始分辨率(渐进式)。

参数

返回值 训练起始分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::train_sample_resolution_end() const
int train_sample_resolution_end() const;

功能简介 获取训练结束分辨率(渐进式)。

参数

返回值 训练结束分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::get_train_sample_resolution_by_epoch(int epoch) const
int get_train_sample_resolution_by_epoch(int epoch) const;

功能简介 根据 epoch 获取训练集分辨率(渐进式)。

参数

参数名 类型 默认值 说明
epoch int - 当前 epoch

返回值 该 epoch 对应的训练分辨率

异常 ValueError - 依赖项未设置时


int GlobalRegistry::get_val_sample_resolution() const
int get_val_sample_resolution() const;

功能简介 获取验证集分辨率。

参数

返回值 验证分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::boundary_epoch() const
int boundary_epoch() const;

功能简介 获取渐进式分辨率切换的边界 epoch。

参数

返回值 边界 epoch

异常 ValueError - 尚未设置时


int GlobalRegistry::get_train_sample_resolution_begin() const
int get_train_sample_resolution_begin() const;

功能简介 获取训练集起始分辨率(渐进式)。

参数

返回值 训练起始分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::get_train_sample_resolution_end() const
int get_train_sample_resolution_end() const;

功能简介 获取训练集结束分辨率(渐进式)。

参数

返回值 训练结束分辨率

异常 ValueError - 尚未设置时


int GlobalRegistry::val_sample_resolution() const
int val_sample_resolution() const;

功能简介 获取验证集分辨率(get_val_sample_resolution 的别名)。

参数

返回值 验证集分辨率

异常 ValueError - 尚未设置时


void GlobalRegistry::set_current_resolution_train(int value)
void set_current_resolution_train(int value);

功能简介 设置当前训练分辨率(alterable)。

参数

参数名 类型 默认值 说明
value int - 当前训练分辨率

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::current_resolution_train() const
int current_resolution_train() const;

功能简介 获取当前训练分辨率。

参数

返回值 当前训练分辨率

异常


void GlobalRegistry::set_current_resolution_val(int value)
void set_current_resolution_val(int value);

功能简介 设置当前验证分辨率(alterable)。

参数

参数名 类型 默认值 说明
value int - 当前验证分辨率

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::current_resolution_val() const
int current_resolution_val() const;

功能简介 获取当前验证分辨率。

参数

返回值 当前验证分辨率

异常


void GlobalRegistry::set_train_crop_output(int value)
void set_train_crop_output(int value);

功能简介 设置训练集 crop 输出尺寸(alterable)。

参数

参数名 类型 默认值 说明
value int - crop 输出尺寸

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::train_crop_output() const
int train_crop_output() const;

功能简介 获取训练集 crop 输出尺寸。

参数

返回值 crop 输出尺寸

异常


void GlobalRegistry::set_train_resize_output(int value)
void set_train_resize_output(int value);

功能简介 设置训练集 resize 输出尺寸(alterable)。

参数

参数名 类型 默认值 说明
value int - resize 输出尺寸

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::train_resize_output() const
int train_resize_output() const;

功能简介 获取训练集 resize 输出尺寸。

参数

返回值 resize 输出尺寸

异常


void GlobalRegistry::set_val_crop_output(int value)
void set_val_crop_output(int value);

功能简介 设置验证集 crop 输出尺寸(alterable)。

参数

参数名 类型 默认值 说明
value int - crop 输出尺寸

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::val_crop_output() const
int val_crop_output() const;

功能简介 获取验证集 crop 输出尺寸。

参数

返回值 crop 输出尺寸

异常


void GlobalRegistry::set_val_resize_output(int value)
void set_val_resize_output(int value);

功能简介 设置验证集 resize 输出尺寸(alterable)。

参数

参数名 类型 默认值 说明
value int - resize 输出尺寸

返回值

异常 ValueError - is_busy() 为 true 时


int GlobalRegistry::val_resize_output() const
int val_resize_output() const;

功能简介 获取验证集 resize 输出尺寸。

参数

返回值 resize 输出尺寸

异常


void GlobalRegistry::set_user_epoch_id(int value)
void set_user_epoch_id(int value);

功能简介 用户手动设置 Epoch ID(仅供调试)。

参数

参数名 类型 默认值 说明
value int - 用户指定的 epoch ID

返回值

异常 ValueError - is_busy() 为 true 时

注意事项 框架内部不应依赖此数值。


int GlobalRegistry::user_epoch_id() const
int user_epoch_id() const;

功能简介 获取用户手动设置的 Epoch ID。

参数

返回值 用户 epoch ID

异常

注意事项 仅供调试,框架代码不要依赖。


初始化策略配置
void GlobalRegistry::set_conv_init_kind(InitKind kind)
void set_conv_init_kind(InitKind kind);

功能简介 设置卷积层初始化策略。

参数

参数名 类型 默认值 说明
kind InitKind - 初始化方法

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


InitKind GlobalRegistry::conv_init_kind() const
InitKind conv_init_kind() const;

功能简介 获取卷积层初始化策略。

参数

返回值 卷积初始化策略

异常 ValueError - 尚未设置时


void GlobalRegistry::set_fc_init_kind(InitKind kind)
void set_fc_init_kind(InitKind kind);

功能简介 设置全连接层初始化策略。

参数

参数名 类型 默认值 说明
kind InitKind - 初始化方法

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


InitKind GlobalRegistry::fc_init_kind() const
InitKind fc_init_kind() const;

功能简介 获取全连接层初始化策略。

参数

返回值 全连接初始化策略

异常 ValueError - 尚未设置时


void GlobalRegistry::set_bn_init_kind(InitKind kind)
void set_bn_init_kind(InitKind kind);

功能简介 设置 BN 层初始化策略(STANDARD 或 ZERO_GAMMA)。

参数

参数名 类型 默认值 说明
kind InitKind - 初始化方法

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


InitKind GlobalRegistry::bn_init_kind() const
InitKind bn_init_kind() const;

功能简介 获取 BN 层初始化策略。

参数

返回值 BN 初始化策略

异常 ValueError - 尚未设置时


void GlobalRegistry::set_conv_search_mode(ConvSearchMode mode)
void set_conv_search_mode(ConvSearchMode mode);

功能简介 设置 cuDNN 卷积算法搜索模式。

参数

参数名 类型 默认值 说明
mode ConvSearchMode - HEURISTIC_BEXHAUSTIVE_C

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


ConvSearchMode GlobalRegistry::conv_search_mode() const
ConvSearchMode conv_search_mode() const;

功能简介 获取卷积搜索模式。

参数

返回值 当前搜索模式;未设置时返回 HEURISTIC_B

异常


void GlobalRegistry::set_fan_mode(FanMode mode)
void set_fan_mode(FanMode mode);

功能简介 设置 Kaiming/Xavier 初始化时的 fan 计算模式。

参数

参数名 类型 默认值 说明
mode FanMode - FAN_IN / FAN_OUT / FAN_AVG

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


FanMode GlobalRegistry::fan_mode() const
FanMode fan_mode() const;

功能简介 获取 fan 计算模式。

参数

返回值 当前 fan 模式

异常


数据增强与损失参数
void GlobalRegistry::set_random_erasing_p(float value)
void set_random_erasing_p(float value);

功能简介 设置 Random Erasing 概率参数。

参数

参数名 类型 默认值 说明
value float - 概率,范围 [0.0, 1.0]

返回值

异常 ValueError - is_busy() 为 true 时


float GlobalRegistry::random_erasing_p() const
float random_erasing_p() const;

功能简介 获取 Random Erasing 概率。

参数

返回值 当前概率 [0.0, 1.0]

异常


void GlobalRegistry::set_label_smoothing(float value)
void set_label_smoothing(float value);

功能简介 设置 Label Smoothing 系数。

参数

参数名 类型 默认值 说明
value float - 标签平滑系数,范围 [0, 0.2]

返回值

异常 ValueError - 初始化后修改或非幂等赋值时


float GlobalRegistry::label_smoothing() const
[[nodiscard]] float label_smoothing() const;

功能简介 获取 Label Smoothing 系数。

参数

返回值 当前标签平滑系数 [0, 0.2]

异常


bool GlobalRegistry::has_label_smoothing_set() const
[[nodiscard]] bool has_label_smoothing_set() const;

功能简介 Label Smoothing 是否已被显式设置。

参数

返回值 已调用 setter 返回 true

异常


优化器超参数
void GlobalRegistry::set_momentum(float value)
void set_momentum(float value);

功能简介 设置优化器动量系数。

参数

参数名 类型 默认值 说明
value float - 动量值

返回值

异常


float GlobalRegistry::momentum() const
[[nodiscard]] float momentum() const;

功能简介 获取优化器动量系数。

参数

返回值 当前动量值

异常


void GlobalRegistry::set_weight_decay(float value)
void set_weight_decay(float value);

功能简介 设置优化器权重衰减系数。

参数

参数名 类型 默认值 说明
value float - 权重衰减值

返回值

异常


float GlobalRegistry::weight_decay() const
[[nodiscard]] float weight_decay() const;

功能简介 获取优化器权重衰减系数。

参数

返回值 当前权重衰减值

异常


void GlobalRegistry::set_trust_coefficient(float value)
void set_trust_coefficient(float value);

功能简介 设置 LARS trust coefficient。

参数

参数名 类型 默认值 说明
value float - trust coefficient

返回值

异常


float GlobalRegistry::trust_coefficient() const
[[nodiscard]] float trust_coefficient() const;

功能简介 获取 LARS trust coefficient。

参数

返回值 当前 trust coefficient

异常


void GlobalRegistry::set_eps(float value)
void set_eps(float value);

功能简介 设置优化器 epsilon(数值稳定小量)。

参数

参数名 类型 默认值 说明
value float - epsilon 值

返回值

异常


float GlobalRegistry::eps() const
[[nodiscard]] float eps() const;

功能简介 获取优化器 epsilon。

参数

返回值 当前 epsilon

异常


void GlobalRegistry::set_beta2(float value)
void set_beta2(float value);

功能简介 设置 Adam/AdamW 的 beta2 系数。

参数

参数名 类型 默认值 说明
value float - beta2 值

返回值

异常


float GlobalRegistry::beta2() const
[[nodiscard]] float beta2() const;

功能简介 获取 Adam/AdamW 的 beta2 系数。

参数

返回值 当前 beta2

异常


void GlobalRegistry::set_grad_clip_max_abs(float value)
void set_grad_clip_max_abs(float value);

功能简介 设置梯度裁剪的最大绝对值阈值。

参数

参数名 类型 默认值 说明
value float - 最大绝对值阈值;小于 0 表示不裁剪

返回值

异常


float GlobalRegistry::grad_clip_max_abs() const
[[nodiscard]] float grad_clip_max_abs() const;

功能简介 获取梯度裁剪的最大绝对值阈值。

参数

返回值 当前阈值;小于 0 表示不裁剪

异常


TransferStation 指针
void GlobalRegistry::set_transfer_station_ptr(size_t index, void* ptr)
void set_transfer_station_ptr(size_t index, void* ptr);

功能简介 设置 TransferStation 指针数组中的某个元素。

参数

参数名 类型 默认值 说明
index size_t - 数组索引(0-15)
ptr void* - TransferStation 指针

返回值

异常 ValueError - is_busy() 为 true 或 index 越界时


void* GlobalRegistry::transfer_station_ptr(size_t index) const
void* transfer_station_ptr(size_t index) const;

功能简介 获取 TransferStation 指针数组中的某个元素。

参数

参数名 类型 默认值 说明
index size_t - 数组索引(0-15)

返回值 TransferStation 指针

异常 IndexError - index 越界时


std::atomic> GlobalRegistry::transfer_station_ptrs() const
std::atomic<void*>* transfer_station_ptrs() const;

功能简介 获取 TransferStation 指针数组的指针(固定大小 16)。

参数

返回值 指向指针数组的指针

异常

注意事项 该数组固定大小为 16,未使用的位置为 nullptr。


字符串命名访问
int GlobalRegistry::get_value_int(const std::string& name) const
int get_value_int(const std::string& name) const;

功能简介 通过名称获取整数值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称(如 "num_load_workers"

返回值 变量值

异常 ValueError - 变量不存在时


float GlobalRegistry::get_value_float(const std::string& name) const
float get_value_float(const std::string& name) const;

功能简介 通过名称获取浮点数值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称

返回值 变量值

异常 ValueError - 变量不存在时


bool GlobalRegistry::get_value_bool(const std::string& name) const
bool get_value_bool(const std::string& name) const;

功能简介 通过名称获取布尔值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称

返回值 变量值

异常 ValueError - 变量不存在时


void GlobalRegistry::set_value_int(const std::string& name, int value)
void set_value_int(const std::string& name, int value);

功能简介 通过名称设置整数值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称
value int - 新值

返回值

异常 ValueError - 变量不存在或 is_busy() 为 true 时


void GlobalRegistry::set_value_float(const std::string& name, float value)
void set_value_float(const std::string& name, float value);

功能简介 通过名称设置浮点数值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称
value float - 新值

返回值

异常 ValueError - 变量不存在或 is_busy() 为 true 时


void GlobalRegistry::set_value_bool(const std::string& name, bool value)
void set_value_bool(const std::string& name, bool value);

功能简介 通过名称设置布尔值。

参数

参数名 类型 默认值 说明
name const std::string& - 变量名称
value bool - 新值

返回值

异常 ValueError - 变量不存在或 is_busy() 为 true 时


语法糖

概述

全局注册表 GlobalRegistry 的引用与访问语法糖。

所属头文件:#include

全局注册表语法糖
the_registry
inline GlobalRegistry& the_registry = GlobalRegistry::instance();

功能简介 全局 GlobalRegistry 引用,提供更简洁的访问方式。

类型 GlobalRegistry&

示例

the_registry.use_gpu().manual_seed(42);
bool amp = the_registry.using_amp();

GLOBAL_SETTING
#define GLOBAL_SETTING (::tr::the_registry)

签名 宏定义

功能简介 进一步简化调用,提供更直观的链式配置语法。

示例

GLOBAL_SETTING.use_gpu().manual_seed(42);
GLOBAL_SETTING.use_cpu().auto_seed();
GLOBAL_SETTING.ensure_reproducibility().use_gpu("0,1,2,3").manual_seed(12345);

enum class StreamType

概述

流类型枚举,用于指定异步操作使用的 CUDA/MUSA 流。

所属头文件:#include

枚举值 说明
default_stream 默认流(同步所有流)
transfer_stream 传输流(H2D/D2H 数据传输)
compute_stream 计算流(kernel 计算)
comm_stream 通信流(NCCL 集合通信)

enum class DatasetType

概述

数据集类型枚举。

所属头文件:#include

枚举值 说明
no_dataset 无数据集
imagenet ImageNet 数据集
mnist MNIST 数据集
cifar_10 CIFAR-10 数据集
cifar_100 CIFAR-100 数据集

enum class LoadMode

概述

数据加载模式枚举。

所属头文件:#include

枚举值 说明
AUTO 自动选择(根据内存判断)
FULLY 全量加载
PARTIAL 部分加载(环形缓冲区)

全局配置宏

概述

常用枚举值和常量的便捷别名宏。

所属头文件:#include

以下宏为常用枚举值和常量的便捷别名:

#define TR_DEFAULT_STREAM   tr::StreamType::default_stream
#define TR_TRANSFER_STREAM  tr::StreamType::transfer_stream
#define TR_COMPUTE_STREAM   tr::StreamType::compute_stream
#define TR_COMM_STREAM      tr::StreamType::comm_stream

#define TR_NO_DATASET   tr::DatasetType::no_dataset
#define TR_IMAGENET  tr::DatasetType::imagenet
#define TR_MNIST   tr::DatasetType::mnist
#define TR_CIFAR_10      tr::DatasetType::cifar_10
#define TR_CIFAR_100      tr::DatasetType::cifar_100

#define TR_AMP_INITIAL_SCALING  8192.0f

class Initializer

概述

Initializer 是张量初始化器,非单例值类型,负责策略推导和数学工具。

所属头文件:#include

设计定位:可复制值类型,非单例

常用使用路径:

典型使用代码片段:

tr::Initializer init;
init.conv(tr::InitKind::TRUNC_NORMAL)
    .fc(tr::InitKind::KAIMING_UNIFORM)
    .bn(tr::InitKind::STANDARD);

tr::InitConfig config = init.derive(tr::Region::W_FIRST_CONV);
构造与赋值
Initializer::Initializer()
Initializer() = default;

功能简介 默认构造函数。

参数

返回值

异常


链式 API
Initializer& Initializer::conv(InitKind k)
Initializer& conv(InitKind k);

功能简介 设置卷积层初始化策略。

参数

参数名 类型 默认值 说明
k InitKind - 初始化方法(MLPerf 默认 TRUNC_NORMAL)

返回值 *this,支持链式调用

异常


Initializer& Initializer::fc(InitKind k, float param)
Initializer& fc(InitKind k, float param = 0.01f);

功能简介 设置全连接层初始化策略。

参数

参数名 类型 默认值 说明
k InitKind - 初始化方法(默认 KAIMING_UNIFORM)
param float 0.01f FIXED_NORMAL 时的 σ 参数;仅当 k 为 FIXED_NORMAL 时生效

返回值 *this,支持链式调用

异常


Initializer& Initializer::bn(InitKind k)
Initializer& bn(InitKind k = InitKind::STANDARD);

功能简介 设置批归一化层初始化策略。

参数

参数名 类型 默认值 说明
k InitKind InitKind::STANDARD STANDARD: weight=CONSTANTS(1.0), bias=ZEROS

返回值 *this,支持链式调用

异常 ValueError - 当 k 不是 InitKind::STANDARDInitKind::ZERO_GAMMA


Initializer& Initializer::zero_gamma(bool on)
Initializer& zero_gamma(bool on = true);

功能简介 设置 BN ZERO_GAMMA 策略。

参数

参数名 类型 默认值 说明
on bool true true=BN3→0, 其他BN→1;false=全部BN→1

返回值 *this,支持链式调用

异常


Initializer& Initializer::fan(FanMode m)
Initializer& fan(FanMode m);

功能简介 设置 fan 模式(FAN_IN/FAN_OUT/FAN_AVG)。

参数

参数名 类型 默认值 说明
m FanMode - fan 计算模式

返回值 *this,支持链式调用

异常


Initializer& Initializer::scale(float s)
Initializer& scale(float s);

功能简介 设置全局 gain 倍数。

参数

参数名 类型 默认值 说明
s float - 全局 gain

返回值 *this,支持链式调用

异常 ValueError - 当 s < 0


Initializer& Initializer::nonlinearity(float a)
Initializer& nonlinearity(float a);

功能简介 设置 Kaiming 初始化的非线性参数 a(负斜率)。

参数

参数名 类型 默认值 说明
a float - LeakyReLU 负斜率,gain = √(2/(1+a²))

返回值 *this,支持链式调用

异常

注意事项


核心方法
InitConfig Initializer::derive(Region region) const
[[nodiscard]] InitConfig derive(Region region) const;

功能简介 根据 Region 推导初始化配置。

参数

参数名 类型 默认值 说明
region Region - 目标 Region

返回值 对应的 InitConfig(8 字节)

异常

注意事项 穷举全部 69 Region,三段式结构:

  1. 非参数区 → NONE
  2. 偏置区 → ZEROS
  3. 权重区 → 按层类型分发(CONV/FC/BN)

static int64_t Initializer::compute_fan(const Shape& shape, FanMode mode)
static int64_t compute_fan(const Shape& shape, FanMode mode);

功能简介 计算卷积权重的 fan_in/fan_out。

参数

参数名 类型 默认值 说明
shape const Shape& - 张量形状
mode FanMode - FAN_IN/FAN_OUT/FAN_AVG

返回值 fan 值

异常

注意事项 Conv weight 布局 = KRSC: [K=outC, R=kH, S=kW, C=inC]


static void Initializer::apply_to_tensor(Tensor& t, const Shape& shape, InitConfig cfg)
static void apply_to_tensor(class Tensor& t, const Shape& shape, InitConfig cfg);

功能简介 按 InitConfig 填充张量(CPU 端执行)。

参数

参数名 类型 默认值 说明
t Tensor& - 目标张量(CPU 端)
shape const Shape& - 张量形状(用于 fan 计算)
cfg InitConfig - 初始化配置

返回值

异常

注意事项 支持全部 InitKind,严格遵循 MLPerf 数学公式


调试方法
const char* Initializer::dump() const
[[nodiscard]] const char* dump() const;

功能简介 转储当前策略配置为字符串。

参数

返回值 配置字符串

异常


bool Initializer::is_zero_gamma() const
[[nodiscard]] bool is_zero_gamma() const noexcept;

功能简介 ZERO_GAMMA 策略是否激活。

参数

返回值 激活返回 true

异常


void Initializer::mark_bn3(int32_t id)
void mark_bn3(int32_t id);

功能简介 标记指定 DTensor 为 BN3 权重(由 Compiler 在 alloc 阶段调用)。

参数

参数名 类型 默认值 说明
id int32_t - DTensor 全局 ID

返回值

异常

注意事项 expand_block_unfused 展开 RESNET_1_3_1 时,主干的最后一个 BN 命名为 "bn3"


const std::vector& Initializer::bn3_weight_ids() const
[[nodiscard]] const std::vector<int32_t>& bn3_weight_ids() const noexcept;

功能简介 获取所有 BN3 权重 DTensor ID(只读)。

参数

返回值 BN3 权重 ID 列表

异常


class Downloader

概述

Downloader 是基于 libcurl 的文件下载器,支持主 URL 和备用 URL 自动切换、自动创建目录、文件覆盖控制。

所属头文件:#include

设计定位:工具类,禁止拷贝和移动

常用使用路径:下载数据集文件、预训练模型

典型使用代码片段:

tr::Downloader downloader;
downloader.set_url("http://example.com/file.zip", "http://backup.com/file.zip");
bool success = downloader.download_to("downloads/", "myfile.zip", false);
if (success && downloader.already_exists()) {
    LOG_INFO << "File already exists, skipped download";
}
构造与析构
Downloader::Downloader()
Downloader();

功能简介 构造函数。

参数

返回值

异常


Downloader::~Downloader()
~Downloader();

功能简介 析构函数。

参数

返回值

异常

注意事项 禁止拷贝和移动


配置方法
void Downloader::set_url(const std::string& url, const std::string& spare_url)
void set_url(const std::string& url, const std::string& spare_url = "");

功能简介 设置下载 URL(主 URL 和可选备用 URL)。

参数

参数名 类型 默认值 说明
url std::string - 主下载 URL
spare_url std::string "" 备用下载 URL(空字符串表示无备用)

返回值

异常 ValueError - 当 url 为空时

注意事项


void Downloader::set_progress_callback(std::function callback)
void set_progress_callback(std::function<void(size_t, size_t, int)> callback);

功能简介 设置进度回调函数。

参数

参数名 类型 默认值 说明
callback std::function - 进度回调函数

返回值

异常

注意事项


下载方法
bool Downloader::download_to(const std::string& dir_name, const std::string& file_name, bool cover)
bool download_to(const std::string& dir_name,
                 const std::string& file_name = "",
                 bool cover = false);

功能简介 下载文件到指定目录。

参数

参数名 类型 默认值 说明
dir_name std::string - 目标目录路径
file_name std::string "" 保存的文件名(空字符串表示使用 URL 中的原始文件名)
cover bool false 是否覆盖已存在的文件

返回值 true 表示成功(下载完成或文件已存在且 cover=false),false 表示失败

异常 ValueError - 如果未设置 URL 或 URL 为空 ValueError - 如果无法从 URL 提取文件名且 file_name 为空

注意事项


bool Downloader::already_exists() const
bool already_exists() const;

功能简介 查询最后一次 download_to 是否因文件已存在而跳过。

参数

返回值 true 表示文件已存在且 cover=false,跳过下载

异常

注意事项 仅在 download_to 返回 true 时有意义


class StagingBufferPool

概述

StagingBufferPool 是 NUMA 感知的 Staging Buffer 池,为多 GPU 场景提供 NUMA 感知的 Staging Buffer 分配。

所属头文件:#include

设计定位:内部工具类,禁止拷贝

常用使用路径:通过 GlobalRegistry::allocate_staging_memory() 使用


构造与析构
StagingBufferPool::StagingBufferPool(const std::vector& gpu_ids, size_t bytes_per_block)
StagingBufferPool(const std::vector<int>& gpu_ids, size_t bytes_per_block);

功能简介 构造函数,为指定 GPU 分配 Staging Buffer。

参数

参数名 类型 默认值 说明
gpu_ids const std::vector& - GPU ID 列表
bytes_per_block size_t - 每块 Staging 内存字节数

返回值

异常 ValueError - 当 gpu_ids 为空或 bytes_per_block 为 0 时 MemoryError - 当某块 Staging 内存分配失败时

注意事项


StagingBufferPool::~StagingBufferPool()
~StagingBufferPool();

功能简介 析构函数。

参数

返回值

异常

注意事项 禁止拷贝和赋值


数据访问
void* StagingBufferPool::ptr(int rank) const
void* ptr(int rank) const;

功能简介 获取指定 rank 的 Staging Buffer 指针。

参数

参数名 类型 默认值 说明
rank int - RANK 索引(0-based)

返回值 Staging Buffer 指针

异常 IndexError - 当 rank 越界时


int StagingBufferPool::num_blocks() const
int num_blocks() const;

功能简介 获取块数量。

参数

返回值 块数量

异常


size_t StagingBufferPool::bytes_per_block() const
size_t bytes_per_block() const;

功能简介 获取每块字节数。

参数

返回值 每块字节数

异常


int StagingBufferPool::numa_node_for_rank(int rank) const
int numa_node_for_rank(int rank) const;

功能简介 获取指定 rank 的 NUMA 节点编号。

参数

参数名 类型 默认值 说明
rank int - RANK 索引

返回值 NUMA 节点编号,查询失败时返回 -1

异常 IndexError - 当 rank 越界时


class StagingParamPool

概述

StagingParamPool 是 Per-RANK Staging 参数区,为 RANGE_H2D_COPY_DTENSOR 算子提供 per-rank 的小参数区(256 字节 = 64 × FP32)。

所属头文件:#include

设计定位:内部工具类,禁止拷贝

常用使用路径:通过 GlobalRegistry::allocate_staging_params() 使用


构造与析构
StagingParamPool::StagingParamPool(const std::vector& gpu_ids, size_t bytes_per_rank)
StagingParamPool(const std::vector<int>& gpu_ids, size_t bytes_per_rank = 256);

功能简介 构造函数。

参数

参数名 类型 默认值 说明
gpu_ids const std::vector& - GPU ID 列表
bytes_per_rank size_t 256 每 rank 参数区大小

返回值

异常 DeviceError - 当 GPU 设备设置或锁页内存分配失败时 RuntimeError - 当 CPU 场景内存分配失败时

注意事项


StagingParamPool::~StagingParamPool()
~StagingParamPool();

功能简介 析构函数。

参数

返回值

异常

注意事项 禁止拷贝和赋值


数据访问
void* StagingParamPool::ptr(int rank) const
void* ptr(int rank) const;

功能简介 获取 rank 对应的 Staging 参数区指针。

参数

参数名 类型 默认值 说明
rank int - RANK 索引

返回值 Staging 参数区指针

异常 IndexError - 当 rank 越界时


void StagingParamPool::set_param(int rank, int slot, float value)
void set_param(int rank, int slot, float value);

功能简介 设置指定 rank 和 slot 的参数值。

参数

参数名 类型 默认值 说明
rank int - RANK 索引
slot int - 槽位索引
value float - 参数值

返回值

异常 IndexError - 当 rankslot 越界时


float StagingParamPool::param(int rank, int slot) const
float param(int rank, int slot) const;

功能简介 获取指定 rank 和 slot 的参数值。

参数

参数名 类型 默认值 说明
rank int - RANK 索引
slot int - 槽位索引

返回值 参数值

异常 IndexError - 当 rankslot 越界时


int StagingParamPool::num_ranks() const
int num_ranks() const;

功能简介 获取 rank 数量。

参数

返回值 rank 数量

异常


size_t StagingParamPool::bytes_per_rank() const
size_t bytes_per_rank() const;

功能简介 获取每 rank 字节数。

参数

返回值 每 rank 字节数

异常


预定义常量

概述

Core 模块提供的预定义常量,用于初始化配置。

所属头文件:#include


独立函数

概述

Core 模块提供一些不属于任何类的自由函数,包括内存对齐、CPU 随机数生成、Philox 算法等。

所属头文件:根据具体函数分别位于 types.hinitializer.hrng.hphilox.h 等。

设计定位:无状态辅助函数,直接调用即可。

内存对齐

所属头文件:#include

utils::align_up_256(size_t size)
constexpr inline size_t align_up_256(size_t size) noexcept;

功能简介 将给定大小向上对齐到 256 字节的最小倍数。

参数

参数名 类型 默认值 说明
size size_t - 原始大小

返回值 对齐后的 256 字节倍数

异常

示例

size_t aligned = tr::utils::align_up_256(100);  // 256
size_t aligned2 = tr::utils::align_up_256(512); // 512

InitConfig 相关函数

所属头文件:#include

kInitConstant(float v)
inline InitConfig kInitConstant(float v);

功能简介 创建常量初始化配置。

参数

参数名 类型 默认值 说明
v float - 常数值

返回值 InitConfigkind=CONSTANTS, scale=v

异常


to_string(InitKind kind)
inline const char* to_string(InitKind kind) noexcept;

功能简介InitKind 转换为字符串。

参数

参数名 类型 默认值 说明
kind InitKind - 初始化方法

返回值 枚举值的字符串表示

异常


to_string(FanMode mode)
inline const char* to_string(FanMode mode) noexcept;

功能简介FanMode 转换为字符串。

参数

参数名 类型 默认值 说明
mode FanMode - fan 模式

返回值 枚举值的字符串表示

异常


Metric 位运算

所属头文件:#include

operator|(Metric a, Metric b)
inline Metric operator|(Metric a, Metric b);

功能简介 指标位掩码按位或运算,用于组合多个指标。

参数

参数名 类型 默认值 说明
a Metric - 左操作数
b Metric - 右操作数

返回值 组合后的 Metric 位掩码

异常

示例

tr::Metric m = tr::Metric::VAL_TOP1 | tr::Metric::VAL_TOP5;

has_metric(Metric flags, Metric m)
inline bool has_metric(Metric flags, Metric m);

功能简介 判断位掩码中是否包含指定指标。

参数

参数名 类型 默认值 说明
flags Metric - 组合后的指标位掩码
m Metric - 要检查的指标

返回值 true 表示 flags 包含 m

异常


全局生成器访问

所属头文件:#include

get_default_generator()
Generator& get_default_generator();

功能简介 获取默认全局生成器(Meyers 单例,线程安全)。

参数

返回值 Generator 引用

异常


rng_set_seed(uint64_t seed)
void rng_set_seed(uint64_t seed);

功能简介 设置全局随机种子。

参数

参数名 类型 默认值 说明
seed uint64_t - 种子值

返回值

异常

注意事项 等价于 get_default_generator().set_seed(seed)


CPU 随机数生成函数(核心 API)

所属头文件:#include

所有函数均提供两个版本:

  1. 带 Generator& 参数的版本(独立生成器)
  2. 不带参数的便捷版本(使用默认生成器)
cpu_rand_uint64(uint64_t* ptr, size_t count, Generator& gen)
void cpu_rand_uint64(uint64_t* ptr, size_t count, Generator& gen);

功能简介 生成 N 个随机 uint64 整数。

参数

参数名 类型 默认值 说明
ptr uint64_t* - 目标内存指针 [in,out]
count size_t - 元素个数
gen Generator& - 生成器引用 [in]

返回值

异常

注意事项 多线程安全且可复现


cpu_rand_bernoulli_int8(int8_t* ptr, size_t count, float prob_one, Generator& gen)
void cpu_rand_bernoulli_int8(int8_t* ptr, size_t count, float prob_one, Generator& gen);

功能简介 生成 N 个伯努利分布的 INT8(0 或 1)。

参数

参数名 类型 默认值 说明
ptr int8_t* - 目标内存指针 [in,out]
count size_t - 元素个数
prob_one float - "1" 的概率,范围 [0, 1]
gen Generator& - 生成器引用 [in]

返回值

异常


cpu_rand_uniform_int8(int8_t* ptr, size_t count, int8_t low, int8_t high, Generator& gen)
void cpu_rand_uniform_int8(int8_t* ptr, size_t count, int8_t low, int8_t high, Generator& gen);

功能简介 生成 N 个均匀分布的 INT8。

参数

参数名 类型 默认值 说明
ptr int8_t* - 目标内存指针 [in,out]
count size_t - 元素个数
low int8_t - 最小值(包含)
high int8_t - 最大值(包含)
gen Generator& - 生成器引用 [in]

返回值

异常


cpu_rand_bernoulli_int32(int32_t* ptr, size_t count, float prob_one, Generator& gen)
void cpu_rand_bernoulli_int32(int32_t* ptr, size_t count, float prob_one, Generator& gen);

功能简介 生成 N 个伯努利分布的 INT32(0 或 1)。

参数

参数名 类型 默认值 说明
ptr int32_t* - 目标内存指针 [in,out]
count size_t - 元素个数
prob_one float - "1" 的概率,范围 [0, 1]
gen Generator& - 生成器引用 [in]

返回值

异常


cpu_rand_uniform_int32(int32_t* ptr, size_t count, int32_t low, int32_t high, Generator& gen)
void cpu_rand_uniform_int32(int32_t* ptr, size_t count, int32_t low, int32_t high, Generator& gen);

功能简介 生成 N 个均匀分布的 INT32。

参数

参数名 类型 默认值 说明
ptr int32_t* - 目标内存指针 [in,out]
count size_t - 元素个数
low int32_t - 最小值(包含)
high int32_t - 最大值(不包含)
gen Generator& - 生成器引用 [in]

返回值

异常

注意事项 范围为 [low, high),与 Python randint 语义一致


cpu_rand_uniform_float(float* ptr, size_t count, float low, float high, Generator& gen)
void cpu_rand_uniform_float(float* ptr, size_t count, float low, float high, Generator& gen);

功能简介 生成 N 个均匀分布的 FP32。

参数

参数名 类型 默认值 说明
ptr float* - 目标内存指针 [in,out]
count size_t - 元素个数
low float - 最小值(包含)
high float - 最大值(不包含)
gen Generator& - 生成器引用 [in]

返回值

异常


cpu_rand_normal_float(float* ptr, size_t count, float mean, float std, Generator& gen)
void cpu_rand_normal_float(float* ptr, size_t count, float mean, float std, Generator& gen);

功能简介 生成 N 个正态分布的 FP32。

参数

参数名 类型 默认值 说明
ptr float* - 目标内存指针 [in,out]
count size_t - 元素个数
mean float - 均值
std float - 标准差
gen Generator& - 生成器引用 [in]

返回值

异常


便捷函数(使用默认生成器)

所属头文件:#include

以下函数使用默认全局生成器,参数列表省略 Generator& 参数:

inline void cpu_rand_uint64(uint64_t* ptr, size_t count);
inline void cpu_rand_bernoulli_int8(int8_t* ptr, size_t count, float prob_one);
inline void cpu_rand_uniform_int8(int8_t* ptr, size_t count, int8_t low, int8_t high);
inline void cpu_rand_bernoulli_int32(int32_t* ptr, size_t count, float prob_one);
inline void cpu_rand_uniform_int32(int32_t* ptr, size_t count, int32_t low, int32_t high);
inline void cpu_rand_uniform_float(float* ptr, size_t count, float low = 0.0f, float high = 1.0f);
inline void cpu_rand_normal_float(float* ptr, size_t count, float mean = 0.0f, float std = 1.0f);

Philox 算法函数(tr::detail)

所属头文件:#include

注意:以下函数位于 tr::detail 命名空间,主要供框架内部 RNG 实现使用,普通用户通常不需要直接调用。

Philox4x32-10 伪随机数生成算法,Counter-Based RNG,支持 CPU/GPU 并行可复现生成。

philox4x32_round(...)
TR_HOST_DEVICE TR_FORCEINLINE
void philox4x32_round(uint32_t* ctr0, uint32_t* ctr1, uint32_t* ctr2, uint32_t* ctr3,
                      uint32_t key0, uint32_t key1);

功能简介 Philox4x32 单轮函数。


philox4x32_10(...)
TR_HOST_DEVICE TR_FORCEINLINE
void philox4x32_10(uint32_t* ctr0, uint32_t* ctr1, uint32_t* ctr2, uint32_t* ctr3,
                  uint32_t key0, uint32_t key1);

功能简介 Philox4x32-10 核心函数(10 轮迭代)。


philox_generate_4x32(...)
TR_HOST_DEVICE TR_FORCEINLINE
void philox_generate_4x32(uint64_t seed, uint64_t offset, uint32_t* out);

功能简介 从 seed 和 offset 生成 4 个 uint32 随机数。


philox_uniform_float(...)
TR_HOST_DEVICE TR_FORCEINLINE
float philox_uniform_float(uint64_t seed, uint64_t offset);

功能简介 生成 [0, 1) 范围的 float。


philox_normal_pair(...)
TR_HOST_DEVICE TR_FORCEINLINE
void philox_normal_pair(uint64_t seed, uint64_t offset, float* out0, float* out1);

功能简介 Box-Muller 变换生成标准正态分布(一次生成两个)。


philox_uint64(...)
TR_HOST_DEVICE TR_FORCEINLINE
uint64_t philox_uint64(uint64_t seed, uint64_t offset);

功能简介 生成单个 uint64 随机数。


Data

板块介绍

Data 模块是 Tech-Renaissance 框架的数据处理核心,负责数据加载、预处理增强和高效传输。该模块采用多线程流水线架构,支持 JPEG 图像的局部解码、随机数据增强、双缓冲传输等高性能优化。

核心职责:

对外提供的核心能力:

关键类和组件:

关键头文件:

内部实现位置:

DataLoader

概述

DataLoader 是数据加载器的抽象基类,定义了统一的数据加载接口规范。所有具体的数据加载器(如 MNISTLoaderDTSCIFARLoaderDTSImageNetLoaderDTS 等)都必须继承此类并实现其纯虚函数。

设计特点:

所属头文件: #include

继承关系:

常用使用路径: 通过具体数据加载器的单例实例使用,如 MNISTLoaderDTS::instance()

典型使用代码片段:

// 通过 Preprocessor 配置数据集时自动使用对应的 DataLoader
PREPROCESSOR_SETTING
    .dataset("mnist", "/data/mnist")
    .commit();
构造与析构
DataLoader::~DataLoader()

签名

virtual ~DataLoader() = default;

功能简介 虚析构函数,确保子类析构时正确释放资源。

返回值

异常

配置接口
DataLoader::configure(int, int, const std::string&, const std::string&, bool, bool, bool, bool)

签名

virtual void configure(
    int num_load_workers,
    int num_preproc_workers,
    const std::string& train_path,
    const std::string& val_path,
    bool shuffle_train = true,
    bool shuffle_val = false,
    bool skip_first = false,
    bool verify_crc = false
) = 0;

功能简介 配置 DataLoader 的运行参数,包括线程数、数据路径和随机化设置。

参数

参数名 类型 默认值 说明
num_load_workers int DataLoader 线程数 N(建议值为 1/2/4/8/16)
num_preproc_workers int Preprocessor 线程数 M(范围 1~64)
train_path const std::string& 训练集路径
val_path const std::string& 验证集路径
shuffle_train bool true 训练集是否乱序
shuffle_val bool false 验证集是否乱序
skip_first bool false 是否跳过第一个样本(用于调试)
verify_crc bool false 是否验证 CRC-32 校验码

返回值

异常 ValueError:如果参数值不合法(如线程数为负数)

生命周期管理
DataLoader::begin_epoch(int, bool)

签名

virtual void begin_epoch(int epoch_id, bool is_train) = 0;

功能简介 开始一个新的 epoch,用于随机化的 epoch ID 和训练/验证模式标识。

参数

参数名 类型 默认值 说明
epoch_id int Epoch 编号(用于确定性 shuffle)
is_train bool true 表示训练模式,false 表示验证模式

返回值

异常

DataLoader::end_epoch()

签名

virtual void end_epoch() = 0;

功能简介 结束当前 epoch,清理状态并准备下一个 epoch。

返回值

异常

DataLoader::reset_after_warmup()

签名

virtual void reset_after_warmup();

功能简介 重置 DataLoader 状态(用于 warmup 和 test_dataloader 之后),释放 FULLY 模式分配的内存并重置所有加载标记。

返回值

异常

核心数据接口
DataLoader::get_next_sample(int, int32_t&, const uint8_t*&, size_t&)

签名

virtual bool get_next_sample(
    int preproc_worker_id,
    int32_t& label,
    const uint8_t*& data_ptr,
    size_t& data_size
) = 0;

功能简介 获取下一个样本(线程安全,零拷贝)。多个 Preprocessor worker 可并发调用此方法。

参数

参数名 类型 默认值 说明
preproc_worker_id int Preprocessor worker ID(范围 0 ~ M-1)
label int32_t& [out] 标签值
data_ptr const uint8_t*& [out] 数据指针(指向内部缓冲区)
data_size size_t& [out] 数据大小(字节)

返回值 true 表示成功获取样本,false 表示 epoch 结束。

异常

注意事项 返回的 data_ptr 指向 DataLoader 内部缓冲区,不应释放或修改。

状态查询
DataLoader::dataset_name()

签名

virtual const char* dataset_name() const = 0;

功能简介 获取数据集名称,用于日志和调试。

返回值 数据集名称字符串(如 "MNIST""CIFAR-10""ImageNet")。

异常

DataLoader::num_train_samples()

签名

virtual size_t num_train_samples() const = 0;

功能简介 获取训练集样本总数。

返回值 训练集样本数量。

异常

DataLoader::num_val_samples()

签名

virtual size_t num_val_samples() const = 0;

功能简介 获取验证集样本总数。

返回值 验证集样本数量。

异常

DataLoader::is_loaded()

签名

virtual bool is_loaded() const = 0;

功能简介 检查数据集是否已加载完成。

返回值 true 表示已加载,false 表示未加载或加载中。

异常

DataLoader::set_train_mode(LoadMode)

签名

virtual void set_train_mode(LoadMode mode) = 0;

功能简介 设置训练集加载模式(AUTO / FULLY / PARTIAL)。

参数

参数名 类型 默认值 说明
mode LoadMode 加载模式:AUTOFULLYPARTIAL

返回值

异常

DataLoader::set_val_mode(LoadMode)

签名

virtual void set_val_mode(LoadMode mode) = 0;

功能简介 设置验证集加载模式(AUTO / FULLY / PARTIAL)。

参数

参数名 类型 默认值 说明
mode LoadMode 加载模式:AUTOFULLYPARTIAL

返回值

异常

DataLoader::load_next_buffer()

签名

virtual void load_next_buffer();

功能简介 加载下一个缓冲区(仅 PARTIAL 模式需要)。基类默认实现抛出 std::runtime_error

返回值

异常 std::runtime_error:如果子类未实现此方法。

DataLoader::has_more_buffers() const

签名

virtual bool has_more_buffers() const;

功能简介 检查是否还有更多缓冲区需要加载(仅 PARTIAL 模式需要)。基类默认实现返回 false

返回值 true 表示还有更多缓冲区,false 表示已完成。

异常

数据集下载和验证
DataLoader::download(const std::string&)

签名

virtual void download(const std::string& save_path) = 0;

功能简介 下载数据集(如果尚未下载)。支持开源数据集的自动下载。

参数

参数名 类型 默认值 说明
save_path const std::string& 数据集保存路径

返回值

异常

DataLoader::extract(const std::string&)

签名

virtual void extract(const std::string& save_path);

功能简介 解压已下载的数据集压缩包。默认实现抛出 NotImplementedError,子类(如 MNIST/CIFAR Loader)可选择实现。

参数

参数名 类型 默认值 说明
save_path const std::string& 数据集目录(压缩包所在位置)

返回值

异常

DataLoader::verify(const std::string&, bool)

签名

virtual bool verify(const std::string& save_path, bool verbose = false);

功能简介 验证已下载的数据集文件完整性。对于 DTS Loader 调用 verify_dts_crc(),对于 RAW Loader 使用 CRC-32 常量验证。默认实现抛出 NotImplementedError

参数

参数名 类型 默认值 说明
save_path const std::string& 数据集目录
verbose bool false 是否输出详细验证日志

返回值 true 表示验证通过,false 表示验证失败。

异常

DataLoader::verify_dts_crc(const std::string&)

签名

virtual bool verify_dts_crc(const std::string& file_path) const = 0;

功能简介 验证 DTS 文件的 CRC-32 校验码,确保数据完整性。

参数

参数名 类型 默认值 说明
file_path const std::string& DTS 文件路径

返回值 true 表示验证通过,false 表示验证失败。

异常 TRException:如果文件读取失败

注意事项 CRC 计算范围从 header 之后到文件末尾(跳过 header)。

SampleLoader

概述

SampleLoader 是通用样本加载器,专为部署场景设计。与训练用 DataLoader 不同,它支持动态格式的样本输入(JPEG 文件或 NHWC Tensor),适用于单样本推理场景。

设计特点:

所属头文件: #include

继承关系: 继承自 DataLoader,重写了大部分接口以适应部署场景。

常用使用路径: 通过单例实例 SampleLoader::instance() 使用。

典型使用代码片段:

// 配置内存池大小
SampleLoader::instance().configure_memory_pool(512);  // 512MB

// 加载 JPEG 文件
SampleLoader::instance().load_jpeg_file("/path/to/image.jpg");

// 标记输入结束
SampleLoader::instance().end();
单例管理
SampleLoader::instance()

签名

static SampleLoader& instance();

功能简介 获取 SampleLoader 的单例实例。

返回值 SampleLoader 单例引用。

异常

配置接口
SampleLoader::configure_memory_pool(size_t)

签名

void configure_memory_pool(size_t memory_pool_size_mb = 256);

功能简介 配置 SampleLoader 的内存池大小。

参数

参数名 类型 默认值 说明
memory_pool_size_mb size_t 256 内存池大小(MB)

返回值

异常

样本加载
SampleLoader::load_jpeg_file(const std::string&)

签名

void load_jpeg_file(const std::string& file_path);

功能简介 加载 JPEG 文件到内部队列。只读取文件,不解码(解码由 Preprocessor 负责)。

参数

参数名 类型 默认值 说明
file_path const std::string& JPEG 文件路径

返回值

异常 无(文件读取失败时输出 warning 并跳过)

SampleLoader::end()

签名

void end();

功能简介 标记数据输入结束,通知 Preprocessor 没有更多样本。

返回值

异常

Preprocessor

概述

Preprocessor 是图像预处理器,采用 V4.0 架构设计,负责管理多线程预处理流水线。它集成了数据加载、图像解码、数据增强、双缓冲传输等功能,是 Data 模块的核心协调者。

设计特点:

所属头文件: #include

常用使用路径: 通过单例实例 Preprocessor::instance()PREPROCESSOR_SETTING 宏使用。

典型使用代码片段:

// 使用流畅 API 配置预处理器
PREPROCESSOR_SETTING
    .dataset("imagenet", "/data/imagenet")
    .preprocess_workers(128)
    .normalization(NormMode::IMAGENET)
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip()
    )
    .val_transforms(
        Resize(256),
        CenterCrop(224)
    )
    .commit();

// 运行训练
Preprocessor::instance().train();
单例管理
Preprocessor::instance()

签名

static Preprocessor& instance();

功能简介 获取 Preprocessor 的单例实例。

返回值 Preprocessor 单例引用。

异常

配置接口
Preprocessor::setup()

签名

static Setup setup();

功能简介 开始配置流程,返回 Setup 构建器用于链式配置。

返回值 Setup 对象,支持链式调用。

异常

示例

Preprocessor::setup()
    .dataset("imagenet", "/data/imagenet")
    .train_transforms(RandomResizedCrop(224), RandomHorizontalFlip())
    .val_transforms(Resize(256), CenterCrop(224))
    .commit();
训练和验证
Preprocessor::train()

签名

void train();

功能简介 运行训练一个 epoch(内部依次调用 begin_epochrunend_epoch)。

返回值

异常 TRException:如果预处理器未正确配置

Preprocessor::val()

签名

void val();

功能简介 运行验证一个 epoch(不增加 iteration_id)。

返回值

异常 TRException:如果预处理器未正确配置

Preprocessor::test_dataloader()

签名

void test_dataloader();

功能简介 性能测试(训练集+验证集),总是先测试 train 再测试 val,用于验证数据加载性能。

返回值

异常

状态查询
Preprocessor::steps_per_epoch()

签名

int steps_per_epoch() const;

功能简介 获取每个 epoch 的步数(batch 数)。

返回值 每个 epoch 的步数。

异常 ValueError:如果 steps_per_epoch 未正确计算(≤ 0)

Preprocessor::is_ready()

签名

bool is_ready();

功能简介 检查预处理器是否已初始化完成。

返回值 true 表示已初始化,false 表示未初始化。

异常

初始化与线程管理
Preprocessor::cpu_binding(bool)

签名

void cpu_binding(bool enable = true);

功能简介 启用或禁用 CPU 绑核(GPU 模式下的性能优化)。仅在 TR_SCENE_GPU_CLOUD 场景下生效,必须在 Setup::commit() 之后调用。

参数

参数名 类型 默认值 说明
enable bool true 是否启用 CPU 绑核

返回值

异常 TRException::ConfigError:如果设备配置未完成

Preprocessor::multi_thread_init()

签名

void multi_thread_init();

功能简介 执行多线程初始化。展开 num_preproc_workers_ 个线程,在每个线程中完成绑核等初始化操作,然后 join 所有线程。在 train() / val() 前调用一次。

返回值

异常

Preprocessor::ensure_inited()

签名

void ensure_inited();

功能简介 确保预处理器已完成初始化。如果尚未初始化,则调用 multi_thread_init()

返回值

异常

Preprocessor::init()

签名

void init();

功能简介 Initializer 接口。当前为空实现,保留接口一致性。

返回值

异常

Preprocessor::cleanup()

签名

void cleanup();

功能简介 Initializer 接口。当前为空实现,保留接口一致性。

返回值

异常

运行与统计
Preprocessor::configure(const Config&)

签名

void configure(const Config& config);

功能简介 旧版配置接口。通过 Config 结构体配置预处理器参数,适合需要直接控制内部参数的高级用户。

参数

参数名 类型 默认值 说明
config const Config& 配置参数结构体

返回值

异常

注意事项 推荐使用 Preprocessor::setup() 流畅 API 进行配置。

Config 结构体字段如下:

字段名 类型 默认值 说明
num_workers int 16 Worker 数量 M
log_dir std::string TR_WORKSPACE CSV 输出目录
enable_logging bool false 是否记录日志
simulate_delay bool false 是否模拟预处理延迟
delay_us uint64_t 100 延迟时间(微秒)
jpeg_decode bool true 是否执行 JPEG 解码
apply_crop bool true 是否执行 RandomResizedCrop
calc_crc bool false 是否计算 CRC32 校验码
Preprocessor::run(DataLoader&)

签名

void run(DataLoader& loader);

功能简介 运行预处理,阻塞直到当前 epoch 结束。train()val() 内部均调用此方法。

参数

参数名 类型 默认值 说明
loader DataLoader& 数据加载器引用

返回值

异常 TRException:如果运行过程中发生错误

Preprocessor::set_pw_test_mode(bool)

签名

void set_pw_test_mode(bool enable);

功能简介 启用或禁用 PW 测试模式。测试模式下 PreprocessWorker 不需要 TransferStation,只执行第一个 PO 操作,输出固定到 A 区。

参数

参数名 类型 默认值 说明
enable bool true 启用测试模式,false 正常模式

返回值

异常

Preprocessor::get_stats() const

签名

Stats get_stats() const;

功能简介 获取预处理统计信息,包括总样本数、处理的 buffer 数量和每个 worker 的样本数。

返回值 返回 Stats 结构体,字段如下:

字段名 类型 说明
total_samples size_t 总样本数
buffer_count size_t 处理的 buffer 数量
per_worker std::vector 每个 Worker 的样本数

异常

Preprocessor::reset()

签名

void reset();

功能简介 重置预处理器状态。

返回值

异常

Preprocessor::calculate_steps_per_epoch()

签名

void calculate_steps_per_epoch();

功能简介 根据 world_sizelocal_batch_size 和训练集样本数计算每个 epoch 的步数。通常由 Setup::commit() 自动调用。

返回值

异常

PreprocessOperation

概述

PreprocessOperation 是预处理操作的抽象基类,定义了所有数据增强操作的统一接口。每个具体的操作(如 ResizeRandomCropRandomHorizontalFlip 等)都必须继承此类并实现其核心方法。

设计特点:

所属头文件: #include

继承关系:

常用使用路径: 通过 Preprocessor::train_transforms()Preprocessor::val_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip(),
        ColorJitter(0.4, 0.4, 0.4)
    )
    .commit();
构造与析构
PreprocessOperation::~PreprocessOperation()

签名

virtual ~PreprocessOperation() = default;

功能简介 虚析构函数,确保派生类析构时正确释放资源。

返回值

异常

核心执行接口
PreprocessOperation::execute(const uint8_t, int32_t, int32_t, size_t, uint8_t, int32_t&, int32_t&, size_t&, Generator*, bool, bool)

签名

virtual void execute(
    const uint8_t* input_ptr,
    int32_t input_width,
    int32_t input_height,
    size_t input_stride,
    uint8_t* output_ptr,
    int32_t& output_width,
    int32_t& output_height,
    size_t& output_stride,
    Generator* rng = nullptr,
    bool execute_from_full = false,
    bool forced_compact_output = true
) = 0;

功能简介 执行预处理操作,对输入图像进行变换处理。

参数

参数名 类型 默认值 说明
input_ptr const uint8_t* 输入图像数据(RGB uint8,值域 0-255)
input_width int32_t 输入宽度
input_height int32_t 输入高度
input_stride size_t 输入行步长(字节)
output_ptr uint8_t* 输出图像数据(预分配)
output_width int32_t& [out] 输出宽度
output_height int32_t& [out] 输出高度
output_stride size_t& [out] 输出行步长(字节)
rng Generator* nullptr 随机数生成器。默认 nullptr 仅为接口兼容性;实际运行时 PreprocessWorker 保证传入非空指针
execute_from_full bool false 是否从完整解码的图像中执行
forced_compact_output bool true 是否强制使用紧凑布局(无行间 padding)

返回值

异常 NotImplementedError:对于不支持的操作(如 NormalizeRandomErasing

注意事项

克隆接口
PreprocessOperation::clone()

签名

virtual std::unique_ptr<PreprocessOperation> clone() const = 0;

功能简介 深拷贝当前对象,返回新的独立副本。每个 PreprocessWorker 持有独立副本,避免共享状态导致的缓存冲突。

返回值 新的独立副本(unique_ptr)。

异常

元信息查询
PreprocessOperation::name()

签名

virtual std::string name() const = 0;

功能简介 获取操作名称,用于日志和调试。

返回值 操作名称字符串(如 "Resize""RandomCrop")。

异常

PreprocessOperation::introduce_randomness()

签名

virtual bool introduce_randomness() const = 0;

功能简介 检查该操作是否引入随机性。

返回值 true 表示引入随机性,false 表示确定性操作。

异常

PreprocessOperation::inference_output_size(int)

签名

virtual int inference_output_size(int input_size);

功能简介 推断输出尺寸(基于输入尺寸)。用于 PO 链中推断中间输出尺寸。

参数

参数名 类型 默认值 说明
input_size int 输入尺寸(宽度或高度,假设正方形)

返回值 输出尺寸。

异常 NotImplementedError:对于不支持的类(如 Resize/Crop 类)

PreprocessOperation::set_output_size(int)

签名

virtual void set_output_size(int size);

功能简介 设置输出尺寸。用于动态分辨率训练或 PO 链尺寸推断阶段。

参数

参数名 类型 默认值 说明
size int 输出尺寸(宽度或高度,假设正方形)

返回值

异常

PreprocessOperation::get_output_size() const

签名

virtual int get_output_size() const;

功能简介 获取当前设置的输出尺寸。

返回值 当前输出尺寸。

异常

PreprocessOperation::get_decode_strategy(int32_t, int32_t, int, Generator*) const
virtual DecodeStrategy get_decode_strategy(
    int32_t image_width,
    int32_t image_height,
    int sdmp_factor,
    Generator* rng
) const;

功能简介 获取 JPEG 解码策略。仅在当前操作是预处理链(PO chain)的首个操作时被调用,用于决定是否进行局部解码、完整解码或跳过解码等优化。

参数

参数名 类型 默认值 说明
image_width int32_t 原始图像宽度(已从 JPEG 头读取)
image_height int32_t 原始图像高度(已从 JPEG 头读取)
sdmp_factor int SDMP 因子
rng Generator* 随机数生成器指针

返回值 返回一个 DecodeStrategy 结构体,描述推荐解码方式。

异常 基类默认实现不抛出异常,返回默认构造的 DecodeStrategy

Resize

概述

Resize 是图像缩放操作,使用双线性插值算法和 Simd 加速,支持动态分辨率(渐进式训练)。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::val_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .val_transforms(
        Resize(256),
        CenterCrop(224)
    )
    .commit();
构造函数
Resize::Resize(int, size_t)

签名

explicit Resize(int output_size = 224, size_t output_alignment = 0);

功能简介 构造 Resize 操作。

参数

参数名 类型 默认值 说明
output_size int 224 输出尺寸(通常为正方形边长)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

Resize::~Resize()

签名

~Resize();

功能简介 析构函数,释放缓存的 Simd Resizer 上下文。

返回值

异常

执行接口
Resize::execute(const uint8_t, int32_t, int32_t, size_t, uint8_t, int32_t&, int32_t&, size_t&, Generator*, bool, bool)

签名

void execute(
    const uint8_t* input_ptr,
    int32_t input_width,
    int32_t input_height,
    size_t input_stride,
    uint8_t* output_ptr,
    int32_t& output_width,
    int32_t& output_height,
    size_t& output_stride,
    Generator* rng = nullptr,
    bool execute_from_full = false,
    bool forced_compact_output = true
) override;

功能简介 执行图像缩放操作。

参数 参见 PreprocessOperation::execute() 参数说明。

返回值

异常

注意事项

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
get_decode_strategy(...) PreprocessOperation
set_output_size(int) PreprocessOperation

RandomResizedCrop

概述

RandomResizedCrop 是随机尺寸裁剪+缩放操作,ImageNet 训练的标准数据增强。它随机裁剪输入图像的随机区域,然后缩放到固定输出尺寸。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip()
    )
    .commit();
构造函数
RandomResizedCrop::RandomResizedCrop(int, float, float, float, float, size_t)

签名

explicit RandomResizedCrop(
    int output_size = 224,
    float scale_min = 0.08f,
    float scale_max = 1.0f,
    float ratio_min = 3.0f / 4.0f,
    float ratio_max = 4.0f / 3.0f,
    size_t output_alignment = 0
);

功能简介 构造 RandomResizedCrop 操作(分开参数版本)。

参数

参数名 类型 默认值 说明
output_size int 224 输出尺寸(通常为 224×224)
scale_min float 0.08f 最小缩放比例(即 8%)
scale_max float 1.0f 最大缩放比例(即 100%)
ratio_min float 0.75f 最小长宽比(3.0/4.0)
ratio_max float 1.33f 最大长宽比(4.0/3.0)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

RandomResizedCrop::RandomResizedCrop(int, std::pair, std::pair, size_t)

签名

RandomResizedCrop(
    int output_size,
    std::pair<float, float> scale,
    std::pair<float, float> ratio,
    size_t output_alignment = 0
);

功能简介 构造 RandomResizedCrop 操作(initializer_list 版本)。

参数

参数名 类型 默认值 说明
output_size int 输出尺寸
scale std::pair 缩放范围 {min, max}
ratio std::pair 长宽比范围 {min, max}
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

示例

RandomResizedCrop(224, {0.08f, 1.0f}, {0.75f, 4.0f/3.0f})
执行接口
RandomResizedCrop::execute(const uint8_t, int32_t, int32_t, size_t, uint8_t, int32_t&, int32_t&, size_t&, Generator*, bool, bool)

签名

void execute(
    const uint8_t* input_ptr,
    int32_t input_width,
    int32_t input_height,
    size_t input_stride,
    uint8_t* output_ptr,
    int32_t& output_width,
    int32_t& output_height,
    size_t& output_stride,
    Generator* rng = nullptr,
    bool execute_from_full = false,
    bool forced_compact_output = true
) override;

功能简介 执行随机裁剪+缩放操作。

参数 参见 PreprocessOperation::execute() 参数说明。

返回值

异常

注意事项

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
get_decode_strategy(...) PreprocessOperation

CenterCrop

概述

CenterCrop 是中心裁剪操作,从输入图像中心裁剪指定尺寸。如果输入小于输出,返回整个输入(不放大)。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::val_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .val_transforms(
        Resize(256),
        CenterCrop(224)
    )
    .commit();
构造函数
CenterCrop::CenterCrop(int, size_t)

签名

explicit CenterCrop(int output_size = 224, size_t output_alignment = 0);

功能简介 构造 CenterCrop 操作。

参数

参数名 类型 默认值 说明
output_size int 224 输出尺寸(通常为正方形边长)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

执行接口
CenterCrop::execute(const uint8_t, int32_t, int32_t, size_t, uint8_t, int32_t&, int32_t&, size_t&, Generator*, bool, bool)

签名

void execute(
    const uint8_t* input_ptr,
    int32_t input_width,
    int32_t input_height,
    size_t input_stride,
    uint8_t* output_ptr,
    int32_t& output_width,
    int32_t& output_height,
    size_t& output_stride,
    Generator* rng = nullptr,
    bool execute_from_full = false,
    bool forced_compact_output = true
) override;

功能简介 执行中心裁剪操作。

参数 参见 PreprocessOperation::execute() 参数说明。

返回值

异常

注意事项

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
get_decode_strategy(...) PreprocessOperation

RandomCrop

概述

RandomCrop 是随机裁剪操作,在随机位置裁剪图像到指定尺寸。支持先 padding 后裁剪,避免图像过小无法裁剪。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        Pad(2),
        RandomCrop(28),
        RandomRotation(20.0f, 0),
        RandomScale(0.8f, 1.2f)
    )
    .commit();
构造函数
RandomCrop::RandomCrop(int, size_t)

签名

explicit RandomCrop(
    int size,
    size_t output_alignment = 0
);

功能简介 构造 RandomCrop 操作。当前公开构造函数仅暴露 sizeoutput_alignment,其余参数(padding、pad_if_needed、fill、padding_mode)使用内部固定默认值。

参数

参数名 类型 默认值 说明
size int 输出尺寸(必须指定,通常为 28 或 224)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

注意事项

执行接口
RandomCrop::execute(const uint8_t, int32_t, int32_t, size_t, uint8_t, int32_t&, int32_t&, size_t&, Generator*, bool, bool)

签名

void execute(
    const uint8_t* input_ptr,
    int32_t input_width,
    int32_t input_height,
    size_t input_stride,
    uint8_t* output_ptr,
    int32_t& output_width,
    int32_t& output_height,
    size_t& output_stride,
    Generator* rng = nullptr,
    bool execute_from_full = false,
    bool forced_compact_output = true
) override;

功能简介 执行随机裁剪操作。

参数 参见 PreprocessOperation::execute() 参数说明。

返回值

异常

注意事项

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
get_decode_strategy(...) PreprocessOperation

RandomHorizontalFlip

概述

RandomHorizontalFlip 是随机水平翻转操作,以 50% 概率水平翻转图像。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip()
    )
    .commit();
构造函数
RandomHorizontalFlip::RandomHorizontalFlip(float, size_t)

签名

explicit RandomHorizontalFlip(float prob = 0.5f, size_t output_alignment = 0);

功能简介 构造 RandomHorizontalFlip 操作。

参数

参数名 类型 默认值 说明
prob float 0.5f 翻转概率(默认 0.5,即 50% 概率翻转)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

预判接口
RandomHorizontalFlip::should_flip(Generator*)

签名

bool should_flip(Generator* rng) override;

功能简介 预判是否需要翻转(保留接口完整性)。

参数

参数名 类型 默认值 说明
rng Generator* 随机数生成器

返回值 true 表示需要翻转,false 表示不需要。

异常

注意事项 PreprocessWorker 中相关分支已移除,此方法保留以保证 API 完整性。实际翻转由 FusedNormalization::execute() 完成。

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation
should_flip(Generator*) RandomHorizontalFlip(重写基类默认实现)

Normalize

概述

Normalize 是归一化占位操作,仅用于记录归一化预设参数(NormMode 枚举)。实际归一化逻辑由 FusedNormalizationexecute() 融合完成。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::normalization() 配置使用,不应直接传递给 train_transforms()

典型使用代码片段:

PREPROCESSOR_SETTING
    .normalization(NormMode::IMAGENET)
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip()
    )
    .commit();
构造函数
Normalize::Normalize(NormMode)

签名

explicit Normalize(NormMode mode = NormMode::NO_NORM);

功能简介 构造 Normalize 操作。

参数

参数名 类型 默认值 说明
mode NormMode NormMode::NO_NORM 归一化预设枚举

返回值

异常

注意事项 不能显式传递给 .train_transforms().val_transforms(),必须使用 .normalization() 配置。

查询接口
Normalize::mode()

签名

NormMode mode() const;

功能简介 获取归一化预设模式。

返回值 归一化预设枚举值。

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

RandomErasing

概述

RandomErasing 是随机擦除占位操作,仅记录参数供 GPU 端实现使用。实际擦除逻辑在 FusedNormalization::execute() 中完成。

设计特点:

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip(),
        RandomErasing(0.5f)
    )
    .commit();
构造函数
RandomErasing::RandomErasing(float, size_t)

签名

explicit RandomErasing(
    float p,
    size_t output_alignment = 0
);

功能简介 构造 RandomErasing 操作(简化版)。

参数

参数名 类型 默认值 说明
p float 擦除概率(必须显式指定,范围 [0.0, 1.0])
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

典型值

RandomErasing::RandomErasing(float, std::pair, std::pair, size_t)

签名

RandomErasing(
    float p,
    std::pair<float, float> scale,
    std::pair<float, float> ratio,
    size_t output_alignment = 0
);

功能简介 构造 RandomErasing 操作(完整参数版)。

参数

参数名 类型 默认值 说明
p float 擦除概率
scale std::pair 擦除区域面积比例范围 {min, max}
ratio std::pair 擦除区域长宽比范围 {min, max}
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

示例

RandomErasing(0.5f, {0.05f, 0.4f}, {0.3f, 3.3f})
RandomErasing::~RandomErasing()

签名

~RandomErasing() = default;

功能简介 默认析构函数。

返回值

异常

查询接口
RandomErasing::get_p()

签名

float get_p() const;

功能简介 获取擦除概率参数。

返回值 擦除概率值(范围 [0.0, 1.0])。

异常

RandomErasing::scale_min()

签名

float scale_min() const;

功能简介 获取擦除区域面积比例下界。

返回值 面积比例下界(默认 0.02)。

异常

RandomErasing::scale_max()

签名

float scale_max() const;

功能简介 获取擦除区域面积比例上界。

返回值 面积比例上界(默认 0.33)。

异常

RandomErasing::ratio_min()

签名

float ratio_min() const;

功能简介 获取擦除区域长宽比下界。

返回值 长宽比下界(默认 0.3)。

异常

RandomErasing::ratio_max()

签名

float ratio_max() const;

功能简介 获取擦除区域长宽比上界。

返回值 长宽比上界(默认 3.3)。

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

TransferStation

概述

TransferStation 是双缓冲区管理器,实现 CPU-GPU 间的高效数据传输。它采用双缓冲架构,支持预处理器写入和深度学习引擎读取的并行操作。

设计特点:

所属头文件: #include

常用使用路径: 由 Preprocessor 内部管理,用户通常不直接操作。

典型使用代码片段: TransferStation 通常由框架自动管理,用户无需直接调用。

配置接口
TransferStation::configure(int, size_t, size_t, int, int)

签名

void configure(
    int local_batch_size,
    size_t max_train_sample_bytes,
    size_t max_val_sample_bytes,
    int num_workers_per_engine,
    int engine_id
);

功能简介 配置 TransferStation 的运行参数。

参数

参数名 类型 默认值 说明
local_batch_size int 本地 batch 大小
max_train_sample_bytes size_t 训练样本最大字节数
max_val_sample_bytes size_t 验证样本最大字节数
num_workers_per_engine int 每个 Engine 的 worker 数
engine_id int Engine ID

返回值

异常

复位接口
TransferStation::reset_and_update()

签名

void reset_and_update();

功能简介 复位所有状态并更新 phase 配置。复位所有计数器和状态变量,memset 清空所有内存,从 GlobalRegistry 更新 phase 相关配置。

返回值

异常

注意事项 不复位已分配的内存和 configure 时设置的参数。

写入接口
TransferStation::request_write_slot(int, int, int32_t)

签名

uint8_t* request_write_slot(int position, int batch_id, int32_t label);

功能简介 申请写入位置(零拷贝)。

参数

参数名 类型 默认值 说明
position int Batch 内位置(范围 0 ~ local_batch_size-1)
batch_id int 逻辑 Batch ID
label int32_t 标签

返回值 数据写入位置指针,如果已停止返回 nullptr

异常

TransferStation::notify_sample_written()

签名

bool notify_sample_written();

功能简介 通知一个样本写入完成。

返回值 true 表示触发了传输,false 表示未触发。

异常

TransferStation::no_more_samples(int)

签名

void no_more_samples(int worker_id);

功能简介 Worker 报告没有更多样本。

参数

参数名 类型 默认值 说明
worker_id int Worker ID(范围 0 ~ num_workers-1)

返回值

异常

注意事项 每个 Worker 只能调用一次。

状态查询
TransferStation::total_samples_transferred()

签名

size_t total_samples_transferred() const;

功能简介 获取已传输的样本总数。

返回值 已传输样本数。

异常

TransferStation::current_buffer_id()

签名

int current_buffer_id() const;

功能简介 获取当前缓冲区 ID。

返回值 当前缓冲区 ID(0 或 1)。

异常

TransferStation::is_finished()

签名

bool is_finished() const;

功能简介 检查是否所有样本处理完成。

返回值 true 表示已完成,false 表示未完成。

异常

缓冲区状态管理
TransferStation::set_buffer_readable(int, bool)

签名

void set_buffer_readable(int buffer_id, bool readable_flag);

功能简介 设置缓冲区可读状态(深度学习引擎读取完毕后必须调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)
readable_flag bool 可读标志

返回值

异常

注意事项 深度学习引擎读取 buffer 完毕后必须将 buffer 设为不可读,否则可能重复读入。

TransferStation::set_buffer_writeable(int, bool)

签名

void set_buffer_writeable(int buffer_id, bool writeable_flag);

功能简介 设置缓冲区可写状态。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)
writeable_flag bool 可写标志

返回值

异常

TransferStation::buffer_is_readable(int)

签名

bool buffer_is_readable(int buffer_id);

功能简介 查询缓冲区是否可读(仅供深度学习引擎调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 true 表示可读,false 表示不可读。

异常

TransferStation::buffer_is_writeable(int)

签名

bool buffer_is_writeable(int buffer_id);

功能简介 查询缓冲区是否可写。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 true 表示可写,false 表示不可写。

异常

TransferStation::both_buffers_writeable()

签名

bool both_buffers_writeable() const;

功能简介 查询两个缓冲区是否都可写(供 Preprocessor 检查 phase 结束条件)。

返回值 true 表示都可写,false 表示至少有一个不可写。

异常

等待接口
TransferStation::wait_buffer_readable(int)

签名

void wait_buffer_readable(int buffer_id);

功能简介 GPU 侧:阻塞直到 buffer 可读(condition_variable,替换忙轮询)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值

异常

TransferStation::wait_buffer_writeable(int)

签名

void wait_buffer_writeable(int buffer_id);

功能简介 Preprocessor 侧:阻塞直到 buffer 可写。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值

异常

数据访问
TransferStation::get_buffer_ptr(int)

签名

uint8_t* get_buffer_ptr(int buffer_id);

功能简介 获取 buffer 的起始位置指针(仅供深度学习引擎调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 buffer 起始位置指针(注意:是 buffer_labels_ 而不是 buffer_data_)。

异常

TransferStation::get_image_data_ptr(int)

签名

uint8_t* get_image_data_ptr(int buffer_id) const;

功能简介 获取 image data 区的起始位置指针(仅供深度学习引擎调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 image data 区起始位置指针。

异常

TransferStation::get_buffer_actual_transfer_bytes(int)

签名

size_t get_buffer_actual_transfer_bytes(int buffer_id);

功能简介 获取 buffer 实际传输字节数(仅供深度学习引擎调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 实际传输字节数(包含整个 buffer_labels_ 区和实际图像字节)。

异常

TransferStation::get_buffer_actual_transfer_samples_(int)

签名

int get_buffer_actual_transfer_samples_(int buffer_id);

功能简介 获取 buffer 实际传输的样本数(仅供深度学习引擎调用)。

参数

参数名 类型 默认值 说明
buffer_id int 缓冲区 ID(0 或 1)

返回值 实际传输样本数。

异常

构造与析构
TransferStation::TransferStation()

签名

TransferStation();

功能简介 默认构造函数,初始化双缓冲状态。

返回值

异常

TransferStation::~TransferStation()

签名

~TransferStation();

功能简介 析构函数,释放相关资源。

返回值

异常

SampleInfo

概述

SampleInfo 是样本信息结构体,用于 FULLY 模式第二个 epoch 及以后的样本记录和重放。它存储标签、数据指针和数据大小,用于 FULLY 模式的样本记录。

设计特点:

所属头文件: #include

常用使用路径: 由 DataLoader 内部管理,用户通常不直接操作。

成员
字段名 类型 默认值 说明
label int32_t 标签
data_ptr const uint8_t* 数据指针(指向 full_arena 或 buffer)
data_size size_t 数据大小

注意事项

DecodeStrategy

概述

DecodeStrategy 是 JPEG 解码策略封装,用于控制图像解码方式(局部解码 vs 完整解码)。

设计特点:

所属头文件: #include

常用使用路径: 由 PreprocessWorker 内部管理,用户通常不直接操作。

成员
字段名 类型 默认值 说明
need_decode bool false 是否需要解码(非 ImageNet 为 false)
use_partial bool false 局部解码 vs 完整解码
decode_x int32_t 0 解码起始 X(MCU 对齐,向下取整)
decode_y int32_t 0 解码起始 Y(MCU 对齐,向下取整)
decode_w int32_t 0 解码宽度(MCU 对齐,向上取整)
decode_h int32_t 0 解码高度(MCU 对齐,向上取整)

注意事项

enum class PaddingMode

概述

PaddingMode 定义图像填充模式,用于 PadRandomCrop 等操作。定义在 include/renaissance/data/padding_mode.h

枚举值 说明
CONSTANT 常数填充,使用指定的 fill
EDGE 边缘填充,重复图像边缘像素
REFLECT 反射填充,以边缘为轴镜像反射(不重复边缘像素)
SYMMETRIC 对称填充,以边缘为轴镜像反射(重复边缘像素)

enum class NormMode

概述

NormMode 定义归一化预设模式,用于 Setup::normalization(NormMode)Normalize。该枚举定义在 include/renaissance/core/types.h,在 Data 模块中频繁使用。

枚举值 说明
NO_NORM 不归一化,仅做 ToTensor(除以 255)
MLPERF MLPerf 标准归一化
IMAGENET ImageNet 标准归一化:mean=(0.485,0.456,0.406),std=(0.229,0.224,0.225)
MNIST MNIST 标准归一化:mean=(0.1307,),std=(0.3081,)
CIFAR CIFAR 标准归一化:mean=(0.4914,0.4822,0.4465),std=(0.2470,0.2435,0.2616)

enum class NormalizePreset

概述

NormalizePreset 定义融合归一化操作的归一化预设,与 NormMode 类似但专用于 FusedNormalization。该枚举定义在 include/renaissance/core/types.h。实际使用中,框架会根据 Setup::normalization() 设置的 NormMode 自动映射为对应的 NormalizePreset

枚举值 说明
NO_NORM 不归一化
MNIST MNIST 预设
CIFAR CIFAR 预设
IMAGENET ImageNet 预设
MLPERF MLPerf 预设

enum class LoadMode

概述

LoadMode 定义数据加载模式,用于 DataLoader::set_train_mode(LoadMode)DataLoader::set_val_mode(LoadMode)。该枚举定义在 include/renaissance/core/global_config.h,在 Data 模块中频繁使用。

枚举值 说明
AUTO 自动选择加载模式(框架根据内存判断)
FULLY 全量加载:整个数据集一次性加载到内存
PARTIAL 部分加载:使用环形缓冲区循环加载

Setup

概述

Setup 是 Preprocessor 的配置构建器,提供流畅的链式 API。它支持数据集配置、计算参数配置、Transforms 配置等,用于简化 Preprocessor 的配置流程。

设计特点:

所属头文件: #include

常用使用路径: 通过 Preprocessor::setup() 获取实例。

典型使用代码片段:

Preprocessor::setup()
    .dataset("imagenet", "/data/imagenet")
    .preprocess_workers(128)
    .normalization(NormMode::IMAGENET)
    .train_transforms(
        RandomResizedCrop(224),
        RandomHorizontalFlip()
    )
    .val_transforms(
        Resize(256),
        CenterCrop(224)
    )
    .commit();
构造与析构
Setup::Setup()

签名

Setup();

功能简介 默认构造函数,创建一个新的 Setup 实例。

返回值

异常

Setup::~Setup()

签名

~Setup();

功能简介 析构函数,释放内部状态。

返回值

异常

Setup::Setup(Setup&&)

签名

Setup(Setup&&) noexcept;

功能简介 移动构造函数。Setup 禁止拷贝,但支持移动。

返回值

异常

Setup::operator=(Setup&&)

签名

Setup& operator=(Setup&&) noexcept;

功能简介 移动赋值运算符。Setup 禁止拷贝赋值,但支持移动赋值。

返回值 Setup 引用,支持链式调用。

异常

数据集配置
Setup::dataset(const std::string&, const std::string&)

签名

Setup& dataset(const std::string& name, const std::string& path);

功能简介 配置数据集(数据集名称和路径)。

参数

参数名 类型 默认值 说明
name const std::string& 数据集名称("mnist"/"cifar10"/"imagenet")
path const std::string& 数据集路径

返回值 Setup 引用,支持链式调用。

异常

计算参数配置
Setup::color_channels(int)

签名

Setup& color_channels(int ch);

功能简介 配置颜色通道数(对于内置数据集会自动设置,无需调用)。

参数

参数名 类型 默认值 说明
ch int 颜色通道数(1=灰度,3=RGB)

返回值 Setup 引用,支持链式调用。

异常

Setup::load_workers(int)

签名

Setup& load_workers(int num);

功能简介 配置数据加载线程数。

参数

参数名 类型 默认值 说明
num int 加载线程数(建议值 1/2/4/8/16)

返回值 Setup 引用,支持链式调用。

异常

Setup::preprocess_workers(int)

签名

Setup& preprocess_workers(int num);

功能简介 配置预处理 worker 总数(跨所有 GPU)。

参数

参数名 类型 默认值 说明
num int 总预处理线程数

返回值 Setup 引用,支持链式调用。

异常

注意事项 与 PyTorch DataLoader num_workers 的换算关系:preprocess_workers = num_workers × world_size

Setup::using_dts_format(bool, int)

签名

Setup& using_dts_format(bool dts = true, int level = 0);

功能简介 配置 DTS 压缩级别(0-3,仅 DTS 格式有效)。

参数

参数名 类型 默认值 说明
dts bool true 是否使用 DTS 格式
level int 0 压缩级别(0-3)

返回值 Setup 引用,支持链式调用。

异常

Setup::fully_mode(bool)

签名

Setup& fully_mode(bool fully = true);

功能简介 配置数据加载模式(PARTIAL vs FULLY)。

参数

参数名 类型 默认值 说明
fully bool true true 表示 FULLY 模式,false 表示 PARTIAL 模式

返回值 Setup 引用,支持链式调用。

异常

Setup::partial_mode(bool)

签名

Setup& partial_mode(bool partial = true);

功能简介 配置数据加载模式(PARTIAL vs FULLY)。与 fully_mode() 互为反向接口,默认启用 PARTIAL 模式。

参数

参数名 类型 默认值 说明
partial bool true true 表示 PARTIAL 模式,false 表示 FULLY 模式

返回值 Setup 引用,支持链式调用。

异常

注意事项 不建议使用此 API,建议使用 fully_mode() 来配置,因为默认即为 PARTIAL 模式。

Setup::shuffle_train(bool)

签名

Setup& shuffle_train(bool shuffle = true);

功能简介 配置是否打乱训练集数据。

参数

参数名 类型 默认值 说明
shuffle bool true 是否打乱训练集

返回值 Setup 引用,支持链式调用。

异常

Setup::download(bool)

签名

Setup& download(bool enable = true);

功能简介 配置是否自动下载数据集。

参数

参数名 类型 默认值 说明
enable bool true 是否自动下载

返回值 Setup 引用,支持链式调用。

异常

Setup::sdmp_factor(int)

签名

Setup& sdmp_factor(int factor);

功能简介 配置 SDMP(Single Decode Multiple Preprocess)因子,控制局部解码与完整解码的权衡。

参数

参数名 类型 默认值 说明
factor int SDMP 因子。1 表示优先局部解码,>1 表示使用 SDMP 缓存

返回值 Setup 引用,支持链式调用。

异常

Setup::using_cpvs(bool)

签名

Setup& using_cpvs(bool enable = true);

功能简介 配置是否使用 CPVS(Cached Preprocessed Validation Set),用于加速验证集预处理。

参数

参数名 类型 默认值 说明
enable bool true 是否启用 CPVS

返回值 Setup 引用,支持链式调用。

异常

Setup::max_intermediate_resolution(int)

签名

Setup& max_intermediate_resolution(int res);

功能简介 配置渐进式分辨率训练中的最大中间分辨率。

参数

参数名 类型 默认值 说明
res int 最大中间分辨率。-1 表示自动计算

返回值 Setup 引用,支持链式调用。

异常

Setup::drop_last(bool)

签名

Setup& drop_last(bool enable = true);

功能简介 配置是否丢弃最后一个不完整的 batch。

参数

参数名 类型 默认值 说明
enable bool true true 表示丢弃不完整 batch

返回值 Setup 引用,支持链式调用。

异常

Setup::cpu_binding(bool)

签名

Setup& cpu_binding(bool enable = true);

功能简介 配置是否启用 CPU 绑核(GPU 云场景下的性能优化)。

参数

参数名 类型 默认值 说明
enable bool true 是否启用 CPU 绑核

返回值 Setup 引用,支持链式调用。

异常

Setup::normalization(NormMode)

签名

Setup& normalization(NormMode mode);

功能简介 配置归一化模式(NormMode 枚举)。

参数

参数名 类型 默认值 说明
mode NormMode 归一化模式,参见 enum class NormMode

返回值 Setup 引用,支持链式调用。

异常

注意事项 框架会自动设置对应的均值和标准差。不能通过 .train_transforms() 显式传递 Normalize PO。

Transforms 配置
Setup::train_transforms(Ops&&...)

签名

template<typename... Ops>
Setup& train_transforms(Ops&&... ops);

功能简介 配置训练集数据变换。

参数

参数名 类型 默认值 说明
ops Ops&&... PreprocessOperation 类型(自动推导)

返回值 Setup 引用,支持链式调用。

异常 TypeError:如果传递了 NormalizeFusedNormalization

注意事项 不能显式传递 Normalize,必须使用 .normalization() 配置。

Setup::val_transforms(Ops&&...)

签名

template<typename... Ops>
Setup& val_transforms(Ops&&... ops);

功能简介 配置验证集数据变换。

参数

参数名 类型 默认值 说明
ops Ops&&... PreprocessOperation 类型(自动推导)

返回值 Setup 引用,支持链式调用。

异常 TypeError:如果传递了 NormalizeFusedNormalization

提交配置
Setup::commit()

签名

void commit();

功能简介 验证配置完整性,并按内部状态机正确顺序一次性应用所有配置。

返回值

异常 TRException::ConfigError:如果配置不完整或参数非法

注意事项 必须在配置完所有参数后调用,触发实际的配置应用。

除上述核心预处理操作外,Data 模块还提供以下常用数据增强操作类。它们均继承自 PreprocessOperation,通过 Preprocessor::train_transforms() 配置使用。

ColorJitter

概述

ColorJitter 是颜色抖动操作,随机调整图像的亮度、对比度、饱和度和色调。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        ColorJitter(0.4, 0.4, 0.4, 0.1)
    )
    .commit();
构造函数
ColorJitter::ColorJitter(float, float, float, float, size_t)

签名

explicit ColorJitter(
    float brightness = 0.0f,
    float contrast = 0.0f,
    float saturation = 0.0f,
    float hue = 0.0f,
    size_t output_alignment = 0
);

功能简介 构造 ColorJitter 操作。

参数

参数名 类型 默认值 说明
brightness float 0.0f 亮度调整幅度。0.2 表示亮度系数从 [max(0, 0.8), 1.2] 均匀采样
contrast float 0.0f 对比度调整幅度。0.3 表示对比度系数从 [max(0, 0.7), 1.3] 均匀采样
saturation float 0.0f 饱和度调整幅度。0.4 表示饱和度系数从 [max(0, 0.6), 1.4] 均匀采样
hue float 0.0f 色调调整幅度,范围 [0, 0.5]0.1 表示色调偏移从 [-0.1, 0.1] 均匀采样
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

注意事项

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

GaussianBlur

概述

GaussianBlur 是高斯模糊操作,使用高斯核对图像进行模糊处理。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        GaussianBlur()
    )
    .commit();
构造函数
GaussianBlur::GaussianBlur(float, float, size_t)

签名

explicit GaussianBlur(
    float sigma_min = 0.1f,
    float sigma_max = 2.0f,
    size_t output_alignment = 0
);

功能简介 构造 GaussianBlur 操作。Sigma 范围决定模糊强度,Simd 库会根据 sigma 自动计算合适的核大小。

参数

参数名 类型 默认值 说明
sigma_min float 0.1f 最小高斯 sigma
sigma_max float 2.0f 最大高斯 sigma(必须 >= sigma_min)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

GaussianBlur::~GaussianBlur()

签名

~GaussianBlur();

功能简介 析构函数,释放内部资源。

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

GaussianNoise

概述

GaussianNoise 是高斯噪声操作,向图像添加高斯噪声。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        RandomResizedCrop(224),
        GaussianNoise()
    )
    .commit();
构造函数
GaussianNoise::GaussianNoise(float, float, bool, int, size_t)

签名

explicit GaussianNoise(
    float mean = 0.0f,
    float sigma = 25.5f,
    bool clip = true,
    int cache_size = 2048,
    size_t output_alignment = 0
);

功能简介 构造 GaussianNoise 操作。向图像添加高斯分布的随机噪声。

参数

参数名 类型 默认值 说明
mean float 0.0f 噪声均值
sigma float 25.5f 噪声标准差,推荐范围 [10, 50]
clip bool true 是否将结果裁剪到 [0, 255]
cache_size int 2048 嵌入式缓存大小,推荐范围 [256, 8192]
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

RandomRotation

概述

RandomRotation 是随机旋转操作,随机旋转图像指定角度。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        Pad(2),
        RandomCrop(28),
        RandomRotation(20.0f, 0)
    )
    .commit();
构造函数
RandomRotation::RandomRotation(float, uint8_t, size_t)

签名

explicit RandomRotation(
    float degrees = 30.0f,
    uint8_t fill = 0,
    size_t output_alignment = 0
);

功能简介 构造 RandomRotation 操作。

参数

参数名 类型 默认值 说明
degrees float 30.0f 旋转角度范围,旋转角度从 [-degrees, degrees] 均匀采样
fill uint8_t 0 边界填充值(0=黑色,128=灰色)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

RandomScale

概述

RandomScale 是随机缩放操作,随机缩放图像到指定尺寸。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        Pad(2),
        RandomCrop(28),
        RandomScale(0.8f, 1.2f)
    )
    .commit();
构造函数
RandomScale::RandomScale(float, float, size_t)

签名

explicit RandomScale(
    float min_scale,
    float max_scale,
    size_t output_alignment = 0
);

功能简介 构造 RandomScale 操作。输出尺寸与输入尺寸相同,空缺区域零填充。

参数

参数名 类型 默认值 说明
min_scale float 最小缩放比例(必须 > 0,如 0.5 表示 50%)
max_scale float 最大缩放比例(必须 >= min_scale)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

Pad

概述

Pad 是填充操作,在图像周围填充指定像素数。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

典型使用代码片段:

PREPROCESSOR_SETTING
    .train_transforms(
        Pad(2),
        RandomCrop(28)
    )
    .commit();
构造函数
Pad::Pad(int, const std::vector&, PaddingMode, size_t)

签名

explicit Pad(
    int padding = 0,
    const std::vector<int>& fill = {0},
    PaddingMode padding_mode = PaddingMode::CONSTANT,
    size_t output_alignment = 0
);

功能简介 构造 Pad 操作。在图像四周填充指定像素数,输出尺寸 = 输入尺寸 + 2×padding。

参数

参数名 类型 默认值 说明
padding int 0 四周填充像素数(必须 >= 0)
fill const std::vector& {0} 常数填充值。单值表示所有通道相同;三个值表示 [R, G, B](仅 RGB)
padding_mode PaddingMode PaddingMode::CONSTANT 填充模式,参见 enum class PaddingMode
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

FastRandomResizedCrop

概述

FastRandomResizedCrop 是快速随机裁剪+缩放操作,针对性能优化版本。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

构造函数
FastRandomResizedCrop::FastRandomResizedCrop(int, float, float, float, float, size_t)

签名

explicit FastRandomResizedCrop(
    int output_size = 224,
    float scale_min = 0.08f,
    float scale_max = 1.0f,
    float ratio_min = 3.0f / 4.0f,
    float ratio_max = 4.0f / 3.0f,
    size_t output_alignment = 0
);

功能简介 构造 FastRandomResizedCrop 操作(分开参数版本)。

参数

参数名 类型 默认值 说明
output_size int 224 输出尺寸
scale_min float 0.08f 最小缩放比例
scale_max float 1.0f 最大缩放比例
ratio_min float 0.75f 最小长宽比(3.0/4.0)
ratio_max float 1.33f 最大长宽比(4.0/3.0)
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

FastRandomResizedCrop::FastRandomResizedCrop(int, std::pair, std::pair, size_t)

签名

FastRandomResizedCrop(
    int output_size,
    std::pair<float, float> scale,
    std::pair<float, float> ratio,
    size_t output_alignment = 0
);

功能简介 构造 FastRandomResizedCrop 操作(initializer_list 版本)。

参数

参数名 类型 默认值 说明
output_size int 输出尺寸
scale std::pair 缩放范围 {min, max}
ratio std::pair 长宽比范围 {min, max}
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

示例

FastRandomResizedCrop(224, {0.08f, 1.0f}, {0.75f, 4.0f/3.0f})
继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
get_decode_strategy(...) PreprocessOperation

RandomAutocontrast

概述

RandomAutocontrast 是随机自动对比度操作。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

构造函数
RandomAutocontrast::RandomAutocontrast(float, size_t)

签名

explicit RandomAutocontrast(
    float p = 0.5f,
    size_t output_alignment = 0
);

功能简介 构造 RandomAutocontrast 操作。

参数

参数名 类型 默认值 说明
p float 0.5f 应用自动对比度的概率,必须在 [0.0, 1.0] 范围内
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

决策接口
RandomAutocontrast::should_apply(Generator*)

签名

virtual bool should_apply(Generator* rng);

功能简介 提前决策是否应用自动对比度增强。如果返回 false,预处理 worker 可跳过 execute() 直接返回输入。

参数

参数名 类型 默认值 说明
rng Generator* 随机数生成器指针

返回值 true 表示应用增强,false 表示跳过。

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

RandomGrayscale

概述

RandomGrayscale 是随机灰度化操作,以一定概率将图像转换为灰度。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 通过 Preprocessor::train_transforms() 配置使用。

构造函数
RandomGrayscale::RandomGrayscale(float, size_t)

签名

explicit RandomGrayscale(
    float prob = 0.1f,
    size_t output_alignment = 0
);

功能简介 构造 RandomGrayscale 操作。

参数

参数名 类型 默认值 说明
prob float 0.1f 灰度化概率
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

决策接口
RandomGrayscale::should_apply(Generator*)

签名

virtual bool should_apply(Generator* rng);

功能简介 提前决策是否将图像转换为灰度。如果返回 false,预处理 worker 可跳过 execute() 直接返回输入。

参数

参数名 类型 默认值 说明
rng Generator* 随机数生成器指针

返回值 true 表示应用灰度化,false 表示跳过。

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

DoNothing

概述

DoNothing 是空操作,不进行任何处理,用于测试或占位。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 用于测试场景。

构造函数
DoNothing::DoNothing(size_t)

签名

explicit DoNothing(size_t output_alignment = 0);

功能简介 构造 DoNothing 操作。

参数

参数名 类型 默认值 说明
output_alignment size_t 0 输出对齐字节数(0=紧凑布局)

返回值

异常

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation

FusedNormalization

概述

FusedNormalization 是融合归一化操作,将归一化、随机翻转、Random Erasing 等操作融合在一起执行,提高性能。

所属头文件: #include

继承关系: 继承自 PreprocessOperation

常用使用路径: 由框架自动注入,用户通常不直接使用。

构造函数
FusedNormalization::FusedNormalization(NormalizePreset, bool, bool, bool, float, float, float, float, float, size_t)

签名

FusedNormalization(
    NormalizePreset preset = NormalizePreset::IMAGENET,
    bool use_amp = false,
    bool flip_enabled = false,
    bool erase_enabled = false,
    float erase_p = 0.5f,
    float erase_scale_min = 0.02f,
    float erase_scale_max = 0.33f,
    float erase_ratio_min = 0.3f,
    float erase_ratio_max = 3.3f,
    size_t output_alignment = 0
);

功能简介 构造 FusedNormalization 操作。该操作将 ToTensor(uint8 → float/FP16)、RandomHorizontalFlip、Normalize 和 RandomErasing 融合为一次内存遍历,是 TR4 数据管道的核心步骤。

参数

参数名 类型 默认值 说明
preset NormalizePreset NormalizePreset::IMAGENET 归一化预设,决定 mean/std,参见 enum class NormalizePreset
use_amp bool false 是否使用 AMP/FP16 输出。true 时输出为 FP16 并强制 4 通道 padding
flip_enabled bool false 是否启用随机水平翻转
erase_enabled bool false 是否启用 Random Erasing
erase_p float 0.5f 触发 Random Erasing 的概率(仅在 erase_enabled=true 时有效)
erase_scale_min float 0.02f 擦除区域面积占原图面积的最小比例
erase_scale_max float 0.33f 擦除区域面积占原图面积的最大比例
erase_ratio_min float 0.3f 擦除区域长宽比最小值
erase_ratio_max float 3.3f 擦除区域长宽比最大值
output_alignment size_t 0 保留参数,实际由输出数据类型决定 stride,用户传入无效

返回值

异常

注意事项

FusedNormalization::~FusedNormalization()

签名

~FusedNormalization();

功能简介 析构函数,释放内部翻转缓冲区等资源。

返回值

异常

内存布局
FusedNormalization::calculate_stride()

签名

size_t calculate_stride() override;

功能简介 计算输出 stride(字节)。与基类不同,本操作的 stride 由输出数据类型决定,而非 uint8_t 布局。

返回值 输出图像每行占用的字节数。

异常

注意事项

通道配置
FusedNormalization::set_num_channels(int)

签名

void set_num_channels(int num_channels) override;

功能简介 设置通道数,并校验与 preset 暗示的通道数是否一致。

参数

参数名 类型 默认值 说明
num_channels int 通道数(1 或 3)

返回值

异常 ValueError:如果传入的通道数与所选 NormalizePreset 冲突。

继承自基类的公共接口
方法 继承自
execute(...) PreprocessOperation
clone() PreprocessOperation
name() PreprocessOperation
introduce_randomness() PreprocessOperation
inference_output_size(int) PreprocessOperation
set_output_size(int) PreprocessOperation

宏 PREPROCESSOR_SETTING

概述

简化 Preprocessor::setup() 调用的语法糖宏,提供更直观的链式配置语法。

签名

#define PREPROCESSOR_SETTING (::tr::Preprocessor::setup())

示例

PREPROCESSOR_SETTING.dataset("imagenet", "/data/imagenet").train_transforms(...).commit();

注意事项 此宏仅用于简化调用,功能与 Preprocessor::setup() 完全相同。

Tensor

板块介绍

Tensor 板块提供 CPU 端数据容器,主要用于主机-设备间数据搬运(H2D/D2H)。该板块包含两个核心数据结构:Tensor(紧凑布局的 CPU 端张量)和 DTensor(分布式张量描述符)。Tensor 强制紧凑布局,所有数据按 NHWC 顺序连续存储,基址 256 字节对齐。DTensor 为纯虚拟概念,描述单张量在多卡上的统一内存视图,不持有实际内存。

核心能力:

主要类型:

关键头文件:

内部实现:

Tensor

概述

CPU 端数据容器,主要用于主机-设备间数据搬运(H2D/D2H)。Tensor 内部使用页锁定内存(GPU 模式)或 256 字节对齐内存(CPU 模式),强制紧凑布局,所有数据按 NHWC 顺序连续存储。不包含任何计算功能,所有数学运算均通过框架后端执行。

头文件: #include

设计定位:

状态:

常用使用路径:

典型使用代码:

#include <renaissance.h>
using namespace tr;

// 创建全零张量
Tensor tensor = Tensor::zeros(Shape{4, 224, 224, 3}, DType::FP32);

// 常数填充
tensor.fill(1.0f);

// 深拷贝(仅调试/序列化场景)
Tensor debug_copy = tensor.clone();

// 移动语义传递(零开销)
process_tensor(std::move(tensor));
// 注意:移动后 tensor 已置空,valid() == false
构造与赋值
Tensor::Tensor()
Tensor() = default;

功能简介

默认构造函数,创建一个无效的空 Tensor(内部指针为 nullptrnbytes_elem_size_ 均为 0)。常用于先声明变量、稍后通过移动赋值或工厂函数接收数据。

参数

返回值

无(构造函数)

异常

注意事项

Tensor::Tensor(const Tensor&)
Tensor(const Tensor&) = delete;

功能简介

拷贝构造函数已显式删除,禁止隐式拷贝。Tensor 只支持移动语义和显式深拷贝(clone())。

参数

返回值

异常

注意事项

Tensor::operator=(const Tensor&)
Tensor& operator=(const Tensor&) = delete;

功能简介

拷贝赋值运算符已显式删除,禁止隐式拷贝赋值。

参数

返回值

异常

注意事项

Tensor::Tensor(const Shape&, DType)
explicit Tensor(const Shape& shape, DType dtype = DType::FP32);

功能简介

构造并分配指定形状和数据类型的内存。Tensor 强制紧凑布局,实际分配的内存大小严格等于 shape.numel() * sizeof(dtype),无任何行尾 padding。

参数

参数名 类型 默认值 说明
shape const Shape& - NHWC 逻辑形状 [in]
dtype DType DType::FP32 数据类型 [in]

返回值

无(构造函数)

异常

注意事项

Tensor::~Tensor()
~Tensor();

功能简介

析构函数,释放底层内存(页锁定内存或 mimalloc 对齐内存)。

参数

返回值

异常

Tensor::Tensor(Tensor&&)
Tensor(Tensor&& other) noexcept;

功能简介

移动构造函数,接管源对象的内存缓冲区。移动后源对象的内部指针置空,变为无效状态。

参数

参数名 类型 默认值 说明
other Tensor&& - 源 Tensor [in,out]

返回值

无(构造函数)

异常

注意事项

Tensor::operator=(Tensor&&)
Tensor& operator=(Tensor&& other) noexcept;

功能简介

移动赋值运算符,先释放当前持有的资源,再接管源对象的内存缓冲区。移动后源对象置空。

参数

参数名 类型 默认值 说明
other Tensor&& - 源 Tensor [in,out]

返回值

返回 *this,支持链式调用

异常

注意事项

数据访问
Tensor::data()
void* data() noexcept;
const void* data() const noexcept;

功能简介

获取原始数据指针(非 const 或 const 版本)。

参数

返回值

异常

Tensor::data()
template<typename T>
T* data() noexcept;

template<typename T>
const T* data() const noexcept;

功能简介

模板方法:以指定类型指针访问数据。模板参数 T 应与 Tensor 的 dtype 匹配。

参数

返回值

异常

注意事项

示例

#include <renaissance.h>
using namespace tr;

Tensor label = Tensor::zeros(Shape{4, 1, 1, 1}, DType::INT32);
int32_t* ptr = label.data<int32_t>();
for (int i = 0; i < 4; ++i) {
    ptr[i] = i * 10 + 7;  // 直接写入标签值
}

Tensor fp16 = Tensor::zeros(Shape{2, 8, 8, 3}, DType::FP16);
const uint16_t* src = fp16.data<uint16_t>();
int64_t numel = fp16.numel();
std::vector<uint16_t> copy(src, src + numel);  // 复制到 std::vector
Tensor::shape()
const Shape& shape() const noexcept;

功能简介

获取 NHWC 逻辑形状。

参数

返回值

异常

Tensor::dtype()
DType dtype() const noexcept;

功能简介

获取数据类型。

参数

返回值

异常

Tensor::nbytes()
size_t nbytes() const noexcept;

功能简介

获取总分配字节数。紧凑布局下 nbytes = numel() * sizeof(dtype)

参数

返回值

异常

Tensor::numel()
int64_t numel() const noexcept;

功能简介

获取元素总数(N × H × W × C)。

参数

返回值

异常

Tensor::row_stride()
size_t row_stride() const noexcept;

功能简介

获取紧凑布局的行字节数(W × C × sizeof(dtype))。V4.21 后 Tensor 强制紧凑,此函数保留兼容性。

参数

返回值

异常

注意事项

【已废弃】V4.21 后 Tensor 强制紧凑,此函数仅保留兼容性。Tensor 类永远紧凑,行步幅实时计算。

Tensor::elem_size()
size_t elem_size() const noexcept;

功能简介

获取单个元素字节数。

参数

返回值

异常

Tensor::valid()
[[nodiscard]] bool valid() const noexcept;

功能简介

检查 Tensor 是否持有有效内存(ptr_ != nullptr)。

参数

返回值

异常

初始化
Tensor::fill_zero()
void fill_zero();

功能简介

全零初始化,将整个缓冲区填充为 0。

参数

返回值

异常

Tensor::fill(int8_t)
void fill(int8_t value);

功能简介

常数填充(INT8)。将所有元素设置为指定常数值。

参数

参数名 类型 默认值 说明
value int8_t - 常数值,范围 [-128, 127] [in]

返回值

异常

Tensor::fill(int32_t)
void fill(int32_t value);

功能简介

常数填充(INT32)。将所有元素设置为指定常数值。

参数

参数名 类型 默认值 说明
value int32_t - 常数值 [in]

返回值

异常

Tensor::fill(float)
void fill(float value);

功能简介

常数填充(FP32)。将所有元素设置为指定常数值。

参数

参数名 类型 默认值 说明
value float - 常数值 [in]

返回值

异常

Tensor::fill_fp16(float)
void fill_fp16(float value);

功能简介

常数填充(FP16)。将 FP32 值转换为 FP16 后填充所有元素。

参数

参数名 类型 默认值 说明
value float - 常数值(会转换为 FP16)[in]

返回值

异常

Tensor::uniform_int(int8_t, int8_t)
void uniform_int(int8_t lower, int8_t upper);

功能简介

均匀分布随机整数(INT8)。生成 [lower, upper] 范围内的均匀分布随机整数。

参数

参数名 类型 默认值 说明
lower int8_t - 下限,范围 [-128, 127] [in]
upper int8_t - 上限,范围 [-128, 127] [in]

返回值

异常

Tensor::uniform_int(int32_t, int32_t)
void uniform_int(int32_t lower, int32_t upper);

功能简介

均匀分布随机整数(INT32)。生成 [lower, upper] 范围内的均匀分布随机整数。

参数

参数名 类型 默认值 说明
lower int32_t - 下限 [in]
upper int32_t - 上限 [in]

返回值

异常

Tensor::uniform(float, float)
void uniform(float lower, float upper);

功能简介

均匀分布随机数(FP32)。生成 [lower, upper] 范围内的均匀分布随机浮点数。

参数

参数名 类型 默认值 说明
lower float - 下限 [in]
upper float - 上限 [in]

返回值

异常

Tensor::uniform_fp16(float, float)
void uniform_fp16(float lower, float upper);

功能简介

均匀分布随机数(FP16)。生成 [lower, upper] 范围内的均匀分布随机浮点数(FP32 生成后转换为 FP16)。

参数

参数名 类型 默认值 说明
lower float - 下限 [in]
upper float - 上限 [in]

返回值

异常

Tensor::normal(float, float)
void normal(float mean, float stddev);

功能简介

正态分布随机数(FP32)。生成指定均值和标准差的正态分布随机浮点数。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::randn(float, float)
void randn(float mean, float stddev) { normal(mean, stddev); }

功能简介

正态分布随机数(FP32),normal() 的别名函数。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::normal_fp16(float, float)
void normal_fp16(float mean, float stddev);

功能简介

正态分布随机数(FP16)。生成指定均值和标准差的正态分布随机浮点数(FP32 生成后转换为 FP16)。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::randn_fp16(float, float)
void randn_fp16(float mean, float stddev) { normal_fp16(mean, stddev); }

功能简介

正态分布随机数(FP16),normal_fp16() 的别名函数。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::truncated_normal(float, float, float, float)
void truncated_normal(float mean, float stddev, float lower_limit, float upper_limit);

功能简介

截断正态分布随机数(FP32)。生成指定均值和标准差的正态分布随机数,超出上下限的样本会被拒绝重新采样。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]
lower_limit float - 下限 [in]
upper_limit float - 上限 [in]

返回值

异常

Tensor::truncated_normal_fp16(float, float, float, float)
void truncated_normal_fp16(float mean, float stddev, float lower_limit, float upper_limit);

功能简介

截断正态分布随机数(FP16)。生成指定均值和标准差的正态分布随机数(FP32 生成后转换为 FP16),超出上下限的样本会被拒绝重新采样。

参数

参数名 类型 默认值 说明
mean float - 均值 [in]
stddev float - 标准差 [in]
lower_limit float - 下限 [in]
upper_limit float - 上限 [in]

返回值

异常

深拷贝接口
Tensor::clone()
Tensor clone() const;

功能简介

显式深拷贝,创建包含数据完整副本的新 Tensor。

参数

返回值

异常

注意事项

【性能敏感】涉及内存分配和数据复制,仅用于调试、序列化、数据增强、单元测试等场景。严禁在性能关键路径(如训练循环中频繁 clone)使用。

示例

// [正确] 数据预处理
Tensor original = load_image("input.jpg");
Tensor augmented = original.clone();  // 明确的拷贝语义
apply_augmentation(augmented);

// [正确] 调试检查
Tensor intermediate = compute_something();
Tensor debug_copy = intermediate.clone();  // 保存用于调试
intermediate = compute_next_step(intermediate);

// [错误] 性能关键路径
for (int epoch = 0; epoch < 100; ++epoch) {
    Tensor batch = get_batch();
    Tensor backup = batch.clone();  // 每个batch都拷贝,性能灾难
    train(batch);
}

// [正确] 使用移动语义替代
for (int epoch = 0; epoch < 100; ++epoch) {
    Tensor batch = get_batch();
    train(std::move(batch));  // 零开销转移
}
工厂方法
Tensor::zeros(const Shape&, DType)
static Tensor zeros(const Shape& shape, DType dtype);

功能简介

创建全零张量。构造后自动调用 fill_zero() 初始化。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型 [in]

返回值

异常

Tensor::fill(const Shape&, DType, float)
static Tensor fill(const Shape& shape, DType dtype, float value);

功能简介

创建常数填充张量(FP32/FP16/INT8/INT32 统一接口)。根据 dtype 自动选择对应类型和转换逻辑。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(FP32/FP16/INT8/INT32)[in]
value float - 常数值(浮点数用于 FP32/FP16,会转换为整数用于 INT8/INT32)[in]

返回值

异常

Tensor::uniform_int(const Shape&, DType, int32_t, int32_t)
static Tensor uniform_int(const Shape& shape, DType dtype, int32_t lower, int32_t upper);

功能简介

创建均匀分布随机整数张量(INT8/INT32 统一接口)。根据 dtype 自动选择对应的整数类型,INT8 时会检查范围并转换。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(INT8 或 INT32)[in]
lower int32_t - 下限(INT8 范围:[-128, 127],INT32 范围:任意)[in]
upper int32_t - 上限 [in]

返回值

异常

示例

#include <renaissance.h>
using namespace tr;

const int batch = 128;
const int num_classes = 10;
Tensor h_labels = Tensor::uniform_int(
    Shape{batch, 1, 1, 1}, DType::INT32, 0, num_classes - 1);
Tensor::uniform(const Shape&, DType, float, float)
static Tensor uniform(const Shape& shape, DType dtype, float lower, float upper);

功能简介

创建均匀分布随机数张量(FP32)。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP32)[in]
lower float - 下限 [in]
upper float - 上限 [in]

返回值

异常

Tensor::uniform_fp16(const Shape&, DType, float, float)
static Tensor uniform_fp16(const Shape& shape, DType dtype, float lower, float upper);

功能简介

创建均匀分布随机数张量(FP16)。FP32 生成后转换为 FP16。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP16)[in]
lower float - 下限 [in]
upper float - 上限 [in]

返回值

异常

Tensor::normal(const Shape&, DType, float, float)
static Tensor normal(const Shape& shape, DType dtype, float mean, float stddev);

功能简介

创建正态分布随机数张量(FP32)。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP32)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::randn(const Shape&, DType, float, float)
static Tensor randn(const Shape& shape, DType dtype, float mean, float stddev);

功能简介

创建正态分布随机数张量(FP32),normal() 的别名函数。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP32)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

示例

#include <renaissance.h>
using namespace tr;

// 生成分类 logits:batch=128,num_classes=10
Tensor h_logits = Tensor::randn(Shape{128, 1, 1, 10}, DType::FP32, 0.0f, 1.0f);
Tensor::normal_fp16(const Shape&, DType, float, float)
static Tensor normal_fp16(const Shape& shape, DType dtype, float mean, float stddev);

功能简介

创建正态分布随机数张量(FP16)。FP32 生成后转换为 FP16。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP16)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::randn_fp16(const Shape&, DType, float, float)
static Tensor randn_fp16(const Shape& shape, DType dtype, float mean, float stddev);

功能简介

创建正态分布随机数张量(FP16),normal_fp16() 的别名函数。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP16)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]

返回值

异常

Tensor::truncated_normal(const Shape&, DType, float, float, float, float)
static Tensor truncated_normal(const Shape& shape, DType dtype, float mean, float stddev, float lower_limit, float upper_limit);

功能简介

创建截断正态分布随机数张量(FP32)。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP32)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]
lower_limit float - 下限 [in]
upper_limit float - 上限 [in]

返回值

异常

Tensor::truncated_normal_fp16(const Shape&, DType, float, float, float, float)
static Tensor truncated_normal_fp16(const Shape& shape, DType dtype, float mean, float stddev, float lower_limit, float upper_limit);

功能简介

创建截断正态分布随机数张量(FP16)。FP32 生成后转换为 FP16。

参数

参数名 类型 默认值 说明
shape const Shape& - 形状 [in]
dtype DType - 数据类型(必须是 FP16)[in]
mean float - 均值 [in]
stddev float - 标准差 [in]
lower_limit float - 下限 [in]
upper_limit float - 上限 [in]

返回值

异常

序列化
Tensor::save_tensor(const Tensor&, const std::string&, bool)
static void save_tensor(const Tensor& tensor, const std::string& filename, bool compress = false);

功能简介

保存单个张量到 TSR 文件(文件内仅含 1 个张量)。内部调用 save_tensors 实现;V4.21 后 Tensor 强制紧凑布局,直接写入有效数据并计算 CRC32。

参数

参数名 类型 默认值 说明
tensor const Tensor& - 要保存的张量 [in]
filename const std::string& - 目标文件路径 [in]
compress bool false 是否使用 ZLIB 压缩(false=RAW 模式)[in]

返回值

异常

注意事项

Tensor::save_tensors(const std::vector&, const std::string&, bool)
static void save_tensors(const std::vector<const Tensor*>& tensors, const std::string& filename, bool compress = false);

功能简介

保存多个张量到 TSR 文件(指针版本,零拷贝传参)。V4.21 后 Tensor 强制紧凑布局,直接写入有效数据并计算 CRC32。

参数

参数名 类型 默认值 说明
tensors const std::vector& - 张量指针数组 [in]
filename const std::string& - 目标文件路径 [in]
compress bool false 是否使用 ZLIB 压缩(false=RAW 模式)[in]

返回值

异常

Tensor::save_tensors(const std::vector&, const std::string&, bool)
static void save_tensors(const std::vector<Tensor>& tensors, const std::string& filename, bool compress = false);

功能简介

保存多个张量到 TSR 文件(值引用版本)。内部将引用转换为指针后调用指针版本。

参数

参数名 类型 默认值 说明
tensors const std::vector& - 张量数组 [in]
filename const std::string& - 目标文件路径 [in]
compress bool false 是否使用 ZLIB 压缩(false=RAW 模式)[in]

返回值

异常

Tensor::load_tensors(const std::string&)
static std::vector<Tensor> load_tensors(const std::string& filename);

功能简介

加载 TSR 文件中的所有张量。完整验证文件格式、版本、CRC32、数据完整性。

参数

参数名 类型 默认值 说明
filename const std::string& - TSR 文件路径 [in]

返回值

异常

Tensor::load_first_tensor(const std::string&)
static Tensor load_first_tensor(const std::string& filename);

功能简介

加载 TSR 文件中的首个张量(索引 0)。不检查文件内张量总数,直接返回首个张量。

参数

参数名 类型 默认值 说明
filename const std::string& - TSR 文件路径 [in]

返回值

异常

Tensor::load_tensor(const std::string&)
static Tensor load_tensor(const std::string& filename);

功能简介

严格加载单个张量文件。要求文件内必须且只能包含 1 个张量。

参数

参数名 类型 默认值 说明
filename const std::string& - TSR 文件路径 [in]

返回值

异常

示例

#include <renaissance.h>
using namespace tr;

// 从 TSR 文件加载单个参考张量
Tensor h_logits = Tensor::load_tensor("reference/logits_fp32.tsr");
Tensor h_labels = Tensor::load_tensor("reference/labels_int32.tsr");
比较验证
Tensor::is_close(const Tensor&, const Tensor&, float)
static bool is_close(const Tensor& a, const Tensor& b, float tolerance = 1e-3f);

功能简介

判断两个张量是否数值接近。检查形状和数据类型是否完全相同,对于 INT8/INT32 严格相等比较,对于 FP16/FP32 容忍误差比较(FP16 转 FP32 后再比较)。

参数

参数名 类型 默认值 说明
a const Tensor& - 第一个张量 [in]
b const Tensor& - 第二个张量 [in]
tolerance float 1e-3f 容忍误差(仅对 FP16/FP32 有效)[in]

返回值

异常

示例

#include <renaissance.h>
using namespace tr;

Tensor a = Tensor::fill(Shape{2, 2, 2, 2}, DType::FP32, 1.0f);
Tensor b = Tensor::fill(Shape{2, 2, 2, 2}, DType::FP32, 1.0005f);

bool close = Tensor::is_close(a, b, 1e-3f);  // false,差值 0.0005 > 1e-3
bool close2 = Tensor::is_close(a, b, 1e-2f);  // true
打印输出
Tensor::to_string()
std::string to_string() const;

功能简介

转换为字符串描述(包含摘要信息)。格式:Tensor(shape=[N,H,W,C], dtype=FP32, numel=1000, data=[...])。小张量(≤16 元素)会显示完整数据,大张量只显示摘要。

参数

返回值

异常

Tensor::print(const char*, int)
void print(const char* name = nullptr, int precision = 4) const;

功能简介

打印张量内容(PyTorch 风格)。输出格式完全参照 PyTorch,支持 0D-4D 张量的美观打印。V4.21 版本 Tensor 强制紧凑,自动处理 NHWC 布局。

参数

参数名 类型 默认值 说明
name const char* nullptr 张量名称(可为 nullptr)[in]
precision int 4 浮点数精度(小数位数)[in]

返回值

异常

Tensor::summary()
void summary() const;

功能简介

打印张量摘要信息,显示形状、数据类型、元素数量、内存占用、row_stride 等关键信息。

参数

返回值

异常

class DistributedTensor

概述

分布式张量 —— "一张图纸,八卡共享"的内存抽象。DTensor 是一个纯虚拟概念:只存形状/偏移量/stride,不持有内存、不存指针。同一个 DTensor 指代所有卡上相同的物理内存区域,布局完全相同,但数据可以有别。

头文件: #include

设计定位:

状态:

常用使用路径:

关键约定:

多变体设计(V4.20.2):

典型使用代码:

#include <renaissance.h>
using namespace tr;

SimpleTask task;

// 标准 DTensor(slot_bytes 自动推导)
DTensor d_label = task.alloc(Shape{4, 1, 1, 1}, DType::INT32, Region::I_A_LABEL);
DTensor d_data = task.alloc(Shape{4, 224, 224, 3}, DType::FP16, Region::I_A_DATA);

// 访问属性(finalize 前可访问)
int32_t batch_size = d_label.n();
int64_t num_elements = d_data.numel();
bool is_compact = d_data.is_compact();

// 访问 offset(finalize 后才能访问)
// task.compile();  // 触发 MemoryPlan::finalize
// uint64_t byte_offset = d_data.offset();
基本属性
DistributedTensor::n()
int32_t n() const noexcept;

功能简介

获取 N 维度(批次大小)。返回 shape.n() 的缓存值,提供 O(1) 访问且避免 shape 对象构造。

参数

返回值

异常

注意事项

DistributedTensor::h()
int32_t h() const noexcept;

功能简介

获取 H 维度(高度)。返回 shape.h() 的缓存值。

参数

返回值

异常

DistributedTensor::w()
int32_t w() const noexcept;

功能简介

获取 W 维度(宽度)。返回 shape.w() 的缓存值。

参数

返回值

异常

DistributedTensor::c()
int32_t c() const noexcept;

功能简介

获取 C 维度(通道数)。返回 shape.c() 的缓存值。

参数

返回值

异常

DistributedTensor::numel()
int64_t numel() const noexcept;

功能简介

获取元素总数(N × H × W × C)。

参数

返回值

异常

DistributedTensor::nbytes()
uint64_t nbytes() const noexcept;

功能简介

获取有效数据的逻辑字节数(不含 padding)。恒等关系:nbytes = N × H × W × C × sizeof(dtype)。用于数据拷贝、CRC 校验等需要精确数据长度的场景。

参数

返回值

异常

注意事项

DistributedTensor::valid()
bool valid() const noexcept;

功能简介

判断该 DTensor 是否有效(id ≥ 0)。

参数

返回值

异常

DistributedTensor::is_compact()
bool is_compact() const noexcept;

功能简介

判断该 DTensor 是否为紧凑布局。紧凑的 DTensor 与 Tensor 具有完全相同的内存排布,可直接 memcpy。

参数

返回值

异常

注意事项

DistributedTensor::dsize(DType)
static constexpr size_t dsize(DType dt) noexcept;

功能简介

静态工具函数:根据 DType 返回单个元素的字节数。INT8 返回 1,FP16 返回 2,FP32INT32 返回 4。主要用于 nbytes()padded_bytes() 等内部计算,也可在需要按 dtype 换算字节大小时调用。

参数

参数名 类型 默认值 说明
dt DType - 数据类型 [in]

返回值

异常

注意事项

stride 访问
DistributedTensor::n_stride_cuda()
int64_t n_stride_cuda() const noexcept;

功能简介

CUDA 对齐 stride — 由 padded_c()(cuda_alignment)推导。非紧凑时(FP16+I_A_DATA 等),c_stride_cuda=1, w_stride_cuda=padded_c(>C), h_stride_cuda=padded_cW, n_stride_cuda=padded_cW*H。仅 CUDA 路径使用。

参数

返回值

异常

注意事项

DistributedTensor::h_stride_cuda()
int64_t h_stride_cuda() const noexcept;

功能简介

CUDA 对齐的 H 维度 stride。

参数

返回值

异常

DistributedTensor::w_stride_cuda()
int64_t w_stride_cuda() const noexcept;

功能简介

CUDA 对齐的 W 维度 stride。

参数

返回值

异常

DistributedTensor::c_stride_cuda()
int64_t c_stride_cuda() const noexcept;

功能简介

CUDA 对齐的 C 维度 stride(恒为 1,NHWC 最内层)。

参数

返回值

异常

DistributedTensor::n_stride_cpu()
int64_t n_stride_cpu() const noexcept;

功能简介

CPU 紧凑 stride — 框架保证 CPU 上所有 DTensor 必定紧凑。恒为 HWC / W*C / C / 1,与 cuda_alignment 无关。CPU capture、CPU 算子、oneDNN 路径使用此系列。

参数

返回值

异常

DistributedTensor::h_stride_cpu()
int64_t h_stride_cpu() const noexcept;

功能简介

CPU 紧凑的 H 维度 stride(恒为 W*C)。

参数

返回值

异常

DistributedTensor::w_stride_cpu()
int64_t w_stride_cpu() const noexcept;

功能简介

CPU 紧凑的 W 维度 stride(恒为 C)。

参数

返回值

异常

DistributedTensor::c_stride_cpu()
int64_t c_stride_cpu() const noexcept;

功能简介

CPU 紧凑的 C 维度 stride(恒为 1)。

参数

返回值

异常

对齐推导
DistributedTensor::cuda_alignment()
uint8_t cuda_alignment() const noexcept;

功能简介

C 通道对齐因子(1/4/8)。完全由 dtype + region 决定,不依赖运行时环境。

参数

返回值

异常

注意事项

对齐规则:

DistributedTensor::padded_c()
int64_t padded_c() const noexcept;

功能简介

padding 之后的 C 通道元素数。padded_c = align_up(C, cuda_alignment)。w_stride / h_stride / n_stride 均基于此值。

参数

返回值

异常

槽位大小
DistributedTensor::slot_bytes()
uint64_t slot_bytes() const noexcept;

功能简介

MemoryPlan 划分该 DTensor 所需的最小字节槽位。V4.20.2 关键修改:slot_bytes() 不再根据当前 shape/dtype 实时计算,而是返回构造时存储的常数 slot_bytes_。这保证了跨变体的 offset 一致性。

参数

返回值

异常

注意事项

公式:

DistributedTensor::compute_slot_bytes(const Shape&, DType, Region)
static uint64_t compute_slot_bytes(const Shape& shape, DType dtype, Region region) noexcept;

功能简介

静态纯函数 —— 计算指定 Shape/DType/Region 对应的槽位字节数。不依赖 this,可供 MemoryPlan 和 Compiler 在分配前任意调用。

参数

参数名 类型 默认值 说明
shape const Shape& - 逻辑形状 [in]
dtype DType - 数据类型 [in]
region Region - 所在显存区域 [in]

返回值

异常

示例

#include <renaissance.h>
using namespace tr;

const int batch_size = 4;
// 计算 I_A_LABEL 区域 INT32 标量标签的槽位字节数
size_t label_slot = static_cast<size_t>(DistributedTensor::compute_slot_bytes(
    Shape{batch_size, 1, 1, 1}, DType::INT32, Region::I_A_LABEL));
cuDNN 接口
DistributedTensor::cudnn_dim(int)
int64_t cudnn_dim(int dim_index) const noexcept;

功能简介

以 cuDNN 的 NCHW API 顺序返回逻辑维度。dim_index: 0→N, 1→C, 2→H, 3→W。

参数

参数名 类型 默认值 说明
dim_index int - 维度索引(0-3)[in]

返回值

异常

注意事项

DistributedTensor::cudnn_stride(int)
int64_t cudnn_stride(int dim_index) const noexcept;

功能简介

以 cuDNN 的 NCHW API 顺序返回 stride。dim_index: 0→n_stride, 1→c_stride, 2→h_stride, 3→w_stride。cudnn_stride(1) 返回 c_stride=1——cuDNN 由此知道 C 在最内层 = NHWC。

参数

参数名 类型 默认值 说明
dim_index int - 维度索引(0-3)[in]

返回值

异常

内存偏移
DistributedTensor::offset()
uint64_t offset() const;

功能简介

获取 MemoryPlan 中的字节偏移。finalize 后才能访问,否则抛出异常。

参数

返回值

异常

注意事项

构造
DistributedTensor::DistributedTensor()
DistributedTensor() = default;

功能简介

默认构造函数,创建无效的 DTensor(id = -1)。

参数

返回值

异常

DistributedTensor::DistributedTensor(int32_t, Shape, DType, Region)
DistributedTensor(int32_t i, Shape s, DType d, Region r);

功能简介

标准构造函数 —— slot_bytes 从 shape 自动推导。适用于 base 变体 MemoryPlan 的第一次分配。

参数

参数名 类型 默认值 说明
i int32_t - 全局 ID(由 MemoryPlan 分配)[in]
s Shape - 逻辑形状 [N, H, W, C] [in]
d DType - 数据类型 [in]
r Region - 所在显存区域(决定 cuda_alignment)[in]

返回值

异常

注意事项

DistributedTensor::DistributedTensor(int32_t, Shape, DType, Region, uint64_t)
DistributedTensor(int32_t i, Shape s, DType d, Region r, uint64_t sb);

功能简介

变体构造函数 —— slot_bytes 由 Compiler 显式传入。stride 仍按 s(自身 shape)计算——与 slot_bytes_ 无关。仅 Compiler 通过 MemoryPlan 的私有 alloc 重载调用。

参数

参数名 类型 默认值 说明
i int32_t - 全局 ID [in]
s Shape - 逻辑形状(该变体的实际 shape,用于 stride 推导)[in]
d DType - 数据类型 [in]
r Region - 所在显存区域 [in]
sb uint64_t - 跨变体最大 slot_bytes(保证 offset 一致)[in]

返回值

异常

注意事项

填充计算
DistributedTensor::padded_elems()
uint64_t padded_elems() const noexcept;

功能简介

padding 之后的总元素数(不含 dtype 转换)。padded_elems = N × H × W × padded_c。用于 cuDNN setDim 维度传入、slot_bytes 的 FP16 基准计算、stride 逻辑校验。

参数

返回值

异常

DistributedTensor::padded_bytes()
uint64_t padded_bytes() const noexcept;

功能简介

padding 之后的总字节数。padded_bytes = N × H × W × padded_c × sizeof(dtype)。用于 cuDNN workspace 大小、CUDA 显存需求估算、slot_bytes 计算输入。

参数

返回值

异常

DistributedTensor::cudnn_bytes()
uint64_t cudnn_bytes() const noexcept;

功能简介

同 padded_bytes(),对接 cuDNN API 时的推荐方法名。

参数

返回值

异常

DistributedTensor::cuda_bytes()
uint64_t cuda_bytes() const noexcept;

功能简介

同 padded_bytes(),对接 CUDA API 时的推荐方法名。

参数

返回值

异常

成员字段

DistributedTensor 为结构体,包含以下公开字段:

字段名 类型 默认值 说明
id int32_t -1 全局 ID(由 MemoryPlan 分配)
shape Shape Shape{1,1,1,1} 逻辑形状 [N, H, W, C]
dtype DType DType::FP32 数据类型
region Region Region::DEFAULT 所在显存区域
n_ int32_t 1 shape.n() 的缓存值
h_ int32_t 1 shape.h() 的缓存值
w_ int32_t 1 shape.w() 的缓存值
c_ int32_t 1 shape.c() 的缓存值
init_config InitConfig InitConfig{} 初始化配置(V4.20.3 新增)

注意事项

Graph

板块介绍

Graph 模块是 Tech-Renaissance 的计算图编译与捕获系统,负责从高层模型定义生成可执行的计算图。该模块实现了模型定义 DSL、五阶段编译器、多流 CUDA Graph 捕获、显存布局规划和去重机制。

核心能力包括:

该模块包含以下主要组件:

关键头文件:

内部实现位于:src/graph/


BluePrint

概述

BluePrint 是模型定义的门面类,持有 Layer 树的根节点。它提供了简洁的 DSL 来定义神经网络模型,支持链式组合和高层块定义。

所属头文件#include

设计定位BluePrint 是用户定义模型的唯一入口。通常通过 DeepLearningTask::model() 传入后由框架自动调用 ArchPlan::from_blueprint()Compiler::compile() 完成编译;也可在高级场景中手动调用 ArchPlan::from_blueprint(blueprint) 获取架构规划。

是否有状态BluePrint 本身只持有根 Layer,不维护可变状态。其持有的 Layer 对象不可变。

继承关系:无继承。

典型使用路径:用户通过工厂函数定义模型 → 构造 BluePrint → 传递给 DeepLearningTask::model() → 自动编译为可执行图。

典型使用代码

// 定义 4 层 MLP
BluePrint mlp = seq(
    fc(1024, true), relu(),
    fc(512, true), relu(),
    fc(256, true), relu(),
    fc(10, true)
);

// 定义 ResNet-50 风格模型
BluePrint resnet = seq(
    conv(64, 7, 2, 3), maxpool(3, 2, 1),
    block(64, 256, BlockStyle::RESNET_1_3_1),
    block(128, 512, BlockStyle::RESNET_1_3_1_DS),
    // ...
    gap_fc(1000, true)
);
构造与赋值
BluePrint::BluePrint() = default

签名

BluePrint() = default;

功能简介 默认构造函数,创建空的模型定义。

参数

返回值

异常


BluePrint::BluePrint(Layer root)

签名

BluePrint(Layer root);

功能简介Layer 树构造模型定义(移除了 explicit,允许隐式转换)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | root | Layer | 无 | 模型的根层节点 [in] |

返回值

异常


BluePrint::operator=(Layer root)

签名

BluePrint& operator=(Layer root);

功能简介 赋值 Layer 树,常用于重新定义模型。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | root | Layer | 无 | 新的模型根层节点 [in] |

返回值 返回 *this,支持链式调用

异常


查询接口
BluePrint::empty() const noexcept

签名

bool empty() const noexcept;

功能简介 检查模型定义是否为空。

参数

返回值 返回 true 表示模型定义为空,false 表示有内容

异常


Layer

概述

Layer 是模型树中的节点,轻量级不可变对象。它既可以表示单个网络层(卷积、池化、全连接、激活等),也可以表示容器(seqadd2repeat),因此既可能是叶子节点也可能是内部节点。

所属头文件#include

设计定位Layer 采用 Pimpl 模式,内部使用 std::shared_ptr 共享不可变数据,支持高效的拷贝和组合。

是否有状态:无状态(stateless),所有 Layer 对象都是不可变的。

继承关系:无继承。

典型使用路径:通过工厂函数创建 → 组合为 Layer 树 → 构造 BluePrint

典型使用代码

// 基础层
Layer conv1 = conv(64, 3, 1, 1);
Layer bn1 = bn(0.1, 1e-5);
Layer relu1 = relu();

// 组合为序列
Layer seq1 = seq(conv1, bn1, relu1);

// 高层块(需使用 BlockStyle 枚举作用域)
Layer bottleneck = block(64, 256, BlockStyle::RESNET_1_3_1);
查询接口
Layer::valid() const noexcept

签名

bool valid() const noexcept;

功能简介 检查 Layer 对象是否有效(非空)。

参数

返回值 返回 true 表示 Layer 有效,false 表示为空

异常


enum class Precision

概述

Precision 是精度枚举,目前保留用于未来扩展。

所属头文件#include

设计定位:精度标识,用于后续支持 FP32 / FP16 显式精度选择。

是否有状态:无状态(stateless)。

继承关系:无继承。

枚举值 说明
FP32 32 位浮点精度
FP16 16 位浮点精度

enum class BlockStyle

概述

高层块样式枚举,用于指定 block() 函数创建的块类型。支持 ResNet Bottleneck、BasicBlock 和 MobileNetV2 倒残差块。

所属头文件#include

设计定位:类型安全的块样式标识,用于工厂函数的参数。

是否有状态:无状态(stateless)。

继承关系:无继承。

枚举值 说明
RESNET_1_3_1 ResNet Bottleneck(1x1-3x3-1x1)
RESNET_1_3_1_DS ResNet Bottleneck with downsample
RESNET_3_3 ResNet BasicBlock(3x3-3x3)
RESNET_3_3_DS ResNet BasicBlock with downsample
MB_E1_K3 MobileNetV2 expand=1, kernel=3
MB_E1_K3_DS MobileNetV2 expand=1, kernel=3, downsample
MB_E6_K3 MobileNetV2 expand=6, kernel=3
MB_E6_K3_DS MobileNetV2 expand=6, kernel=3, downsample

enum class LayerKind

概述

LayerKind 是架构规划阶段的层类型枚举,标识 ArchLayer 的算子类别。它与 BluePrint 中的 Layer 不同:LayerKind 出现在 ArchPlan 中,表示已经过归一化/融合后的层类型。

所属头文件#include

设计定位:编译器内部使用的层类型标识,也用于 LayerDescriptor 注册表索引。

是否有状态:无状态(stateless)。

继承关系:无继承。

枚举值 说明
Conv 卷积层
Bn1d 1D BatchNorm
Bn2d 2D BatchNorm
ReLU ReLU 激活
Tanh Tanh 激活
SiLU SiLU 激活
ReLU6 ReLU6 激活
LeakyReLU LeakyReLU 激活
Hardswish Hardswish 激活
ELU ELU 激活
Sigmoid Sigmoid 激活
MaxPool 最大池化
AvgPool 平均池化
GAP 全局平均池化
FC 全连接层
Flatten 展平层
ChannelPadding 通道填充
Identity 恒等映射
SoftmaxCE Softmax 交叉熵损失
Dropout Dropout
Add2Start Add2 结构起点
Add2ShortcutEnd Add2 shortcut 结束
Add2End Add2 结构终点
BottleneckProjection Bottleneck 带下采样投影
BottleneckIdentity Bottleneck 恒等连接
BasicBlockProjection BasicBlock 带下采样投影
BasicBlockIdentity BasicBlock 恒等连接
InvResidualNoShortcut MobileNetV2 倒残差无 shortcut
InvResidualIdentity MobileNetV2 倒残差恒等连接
GapFC GAP + FC 融合
CBR Conv + BN + ReLU 融合

层参数结构体

概述

arch_plan.h 中定义了一组轻量级参数结构体,用于承载 ArchLayer 中各 LayerKind 所需的配置。这些结构体全部可比较(实现了 operator==),并被聚合到 LayerParam std::variant 中。

所属头文件#include

设计定位ArchLayer 的参数字段,由 ArchPlan 在模型展开与融合过程中填充。

是否有状态:无状态(stateless)。

继承关系:无继承。

结构体字段
结构体 字段 类型 默认值 说明
ConvLayerParams out_ch int 0 输出通道数
k int 0 卷积核大小
s int 0 步长
p int 0 填充
PoolLayerParams k int 0 池化核大小
s int 0 步长
p int 0 填充
FCLayerParams out_features int 0 输出特征数
bias bool true 是否使用偏置
DropoutLayerParams p float 0.5f 丢弃率
SoftmaxCELayerParams num_classes int 0 类别数
BottleneckIdentityLayerParams bottleneck_ch int 0 Bottleneck 中间通道数
BottleneckProjectionLayerParams bottleneck_ch int 0 Bottleneck 中间通道数
out_ch int 0 输出通道数
stride int 0 步长
BasicBlockIdentityLayerParams out_ch int 0 输出通道数
BasicBlockProjectionLayerParams out_ch int 0 输出通道数
stride int 0 步长
InvResidualLayerParams expand_ch int 0 扩展通道数
out_ch int 0 输出通道数
stride int 0 步长
has_shortcut bool 是否存在 shortcut
GapFCLayerParams out_features int 0 输出特征数
bias bool true 是否使用偏置
CbrLayerParams out_ch int 0 输出通道数
k int 0 卷积核大小
s int 0 步长
p int 0 填充
eps float 1e-5f BN epsilon
momentum float 0.1f BN 动量
EmptyParams (无字段) 空参数占位

using LayerParam

概述

LayerParamArchLayer 的参数联合体,使用 std::variant 承载上述所有层参数结构体。

所属头文件#include

设计定位:类型安全的 ArchLayer 参数字段。

是否有状态:无状态(stateless)。

继承关系:无继承。

包含的备选类型

ConvLayerParamsPoolLayerParamsFCLayerParamsSoftmaxCELayerParamsDropoutLayerParamsBNParamsBottleneckIdentityLayerParamsBottleneckProjectionLayerParamsBasicBlockIdentityLayerParamsBasicBlockProjectionLayerParamsInvResidualLayerParamsGapFCLayerParamsCbrLayerParamsEmptyParams


struct ArchLayer

概述

ArchLayerArchPlan 中的单层描述,包含层类型、参数、名称、输入/输出形状以及融合相关的标记。

所属头文件#include

设计定位ArchPlan 的内部元素,表示经过展开、归一化、融合后的单个层。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
kind LayerKind 层类型
params LayerParam 层参数
name std::string 层名称
in_shape Shape {1, 224, 224, 3} 输入形状
out_shape Shape {1, 224, 224, 3} 输出形状
in_compact bool false 输入是否为 compact 布局
is_first_layer bool false 是否为首层
src_id int -1 源层索引(用于 Add2 等结构)

ArchPlan

概述

ArchPlan 是架构规划类,从 BluePrint 接收模型定义,经 9 步管线(step2–step10)生成标准化、全融合的架构描述,支持 YAML 序列化往返。

所属头文件#include

设计定位ArchPlan 是编译的中间表示,连接高层模型定义和底层计算图。

是否有状态:有状态(stateful),持有层序列和输入形状。

继承关系:无继承。

典型使用路径:用户无需直接使用,由 Compiler::from_blueprint() 内部调用。

典型使用代码

// 用户通常不直接创建 ArchPlan
// 通过 Compiler::from_blueprint() 自动生成
auto arch = ArchPlan::from_blueprint(blueprint, input_spec);
arch.build(num_classes);
auto yaml = arch.to_yaml();
生命周期
ArchPlan::from_blueprint(const BluePrint& bp, const InputSpec& input = {1, 3, 224, 224}, bool fuse = true)

签名

static ArchPlan from_blueprint(const BluePrint& bp,
                                const InputSpec& input = {1, 3, 224, 224},
                                bool fuse = true);

功能简介BluePrint 创建 ArchPlan,执行模型展开和归一化。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | bp | const BluePrint& | 无 | 模型定义 [in] | | input | const InputSpec& | {1, 3, 224, 224} | 输入规格 [in] | | fuse | bool | true | 是否启用融合 [in] |

返回值 返回构造好的 ArchPlan 对象

异常


ArchPlan::build(int num_classes = 1000)

签名

void build(int num_classes = 1000);

功能简介 执行 9 步编译管线(step2–step10),生成最终的架构描述。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | num_classes | int | 1000 | 分类数量 [in] |

返回值

异常

注意事项 该方法依次调用内部处理步骤:重命名、归一化、形状推导、块融合等。


编译管线步骤

以下方法对应 build() 内部依次执行的 9 步管线(step2–step10)。普通用户通常只需调用 build(),无需单独调用这些步骤;高级调试场景可单独调用以观察中间状态。

ArchPlan::step2_rename_bn()

签名

void step2_rename_bn();

功能简介 重命名 BatchNorm 层,统一命名规范。

参数

返回值

异常


ArchPlan::step3_normalize_softmax_ce(int num_classes)

签名

void step3_normalize_softmax_ce(int num_classes);

功能简介 归一化 SoftmaxCE 层,将其参数化。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | num_classes | int | 无 | 类别数量 [in] |

返回值

异常


ArchPlan::step4_normalize_identity()

签名

void step4_normalize_identity();

功能简介 归一化 Identity 层。

参数

返回值

异常


ArchPlan::step5_normalize_flatten()

签名

void step5_normalize_flatten();

功能简介 归一化 Flatten 层。

参数

返回值

异常


ArchPlan::step6_deduce_shapes()

签名

void step6_deduce_shapes();

功能简介 推导各层的输入/输出形状。

参数

返回值

异常


ArchPlan::step7_merge_blocks()

签名

void step7_merge_blocks();

功能简介 识别并融合 Bottleneck / BasicBlock / InvResidual 块。

参数

返回值

异常


ArchPlan::step8_merge_quadruple()

签名

void step8_merge_quadruple();

功能简介 融合四元模式(如 Add2 相关结构)。

参数

返回值

异常


ArchPlan::step9_merge_triple()

签名

void step9_merge_triple();

功能简介 融合三元模式(如 CBR 等)。

参数

返回值

异常


ArchPlan::step10_merge_binary_and_mark()

签名

void step10_merge_binary_and_mark();

功能简介 融合二元模式并标记首层。

参数

返回值

异常


查询接口
ArchPlan::layers() const

签名

const std::vector<ArchLayer>& layers() const;

功能简介 获取架构中的所有层。

参数

返回值 返回 ArchLayer 向量的常量引用

异常


ArchPlan::first_layer_index() const

签名

int first_layer_index() const;

功能简介 获取首层索引。

参数

返回值 返回首层的索引值

异常


序列化
ArchPlan::to_yaml() const

签名

std::string to_yaml() const;

功能简介 将架构规划序列化为 YAML 字符串。

参数

返回值 返回 YAML 格式的字符串

异常


ArchPlan::from_yaml(const std::string& yaml)

签名

static ArchPlan from_yaml(const std::string& yaml);

功能简介 从 YAML 字符串反序列化架构规划。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | yaml | const std::string& | 无 | YAML 格式的字符串 [in] |

返回值 返回构造好的 ArchPlan 对象

异常


ArchPlan::to_string() const

签名

std::string to_string() const;

功能简介 将架构规划转换为可读字符串(用于调试)。

参数

返回值 返回架构的字符串表示

异常


Compiler

概述

Compiler 是五阶段编译编排器,从 ArchPlan 编译生成 MemoryPlanComputationGraph。它实现了形状推导、显存布局、计算图构建和变体共享。

所属头文件#include

设计定位Compiler 是模型编译的核心,负责从高层架构到底层执行图的完整转换。

是否有状态:无状态(stateless),所有方法都是静态的。

继承关系:无继承。

典型使用路径:用户无需直接调用,由 DeepLearningTask::compile() 内部调用。

典型使用代码

// 用户通常不直接使用 Compiler
// 通过 DeepLearningTask::compile() 自动调用
auto arch = ArchPlan::from_blueprint(bp);
auto base_spec = CompileSpec::from_global_registry();
auto result = Compiler::compile(arch, base_spec, plan_config, variant_specs);
编译接口
Compiler::compile(const ArchPlan& arch, const CompileSpec& base_spec, const PlanConfig& plan_config = PlanConfig{}, const std::vector& variant_specs = {})

签名

static Result compile(const ArchPlan& arch,
                     const CompileSpec& base_spec,
                     const PlanConfig& plan_config = PlanConfig{},
                     const std::vector<CompileSpec>& variant_specs = {});

功能简介 执行五阶段编译流程,从架构规划生成完整的编译结果。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | arch | const ArchPlan& | 无 | 模型架构规划 [in] | | base_spec | const CompileSpec& | 无 | 基准编译参数(train_base) [in] | | plan_config | const PlanConfig& | {} | 内存规划配置 [in] | | variant_specs | const std::vector& | {} | 5 个变体编译参数 [in] |

返回值 返回包含 6 个 Variant 和共享 ComputationGraphResult

异常

注意事项 该方法的五阶段包括:形状推导、最大槽位计算、显存规划创建、计算图构建、指针共享。


Compiler::compile(const ArchPlan& arch, const CompileSpec& base_spec, const PlanConfig& plan_config, Initializer& initializer, const std::vector& variant_specs = {})

签名

static Result compile(const ArchPlan& arch,
                     const CompileSpec& base_spec,
                     const PlanConfig& plan_config,
                     Initializer& initializer,
                     const std::vector<CompileSpec>& variant_specs = {});

功能简介 五阶段编译流程(带 Initializer,支持 ZERO_GAMMA 等初始化策略)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | arch | const ArchPlan& | 无 | 模型架构规划 [in] | | base_spec | const CompileSpec& | 无 | 基准编译参数 [in] | | plan_config | const PlanConfig& | 无 | 内存规划配置 [in] | | initializer | Initializer& | 无 | 初始化器引用 [in,out] | | variant_specs | const std::vector& | {} | 变体编译参数 [in] |

返回值 返回包含 6 个 Variant 和共享 ComputationGraphResult

异常


struct Compiler::Result

概述

Compiler::Result 是编译结果的完整输出,包含 6 个编译变体和共享的计算图。

所属头文件#include

设计定位:编译输出的数据结构,持有所有变体的 MemoryPlan 和共享的 ComputationGraph

是否有状态:有状态(stateful),持有编译产出的所有权。

继承关系:无继承。

典型使用路径:由 Compiler::compile() 返回,传递给 GraphAtlas::build()

成员
字段名 类型 默认值 说明
variants std::vector 6 个编译变体
train_cg ComputationGraph 训练计算图(共享)
infer_cg ComputationGraph 推理计算图(共享)

注意事项 禁止拷贝,允许移动,确保计算图的生命周期安全。


struct Compiler::Variant

概述

Compiler::Variant 是单个编译变体,持有独立的 MemoryPlan 和指向共享计算图的指针。

所属头文件#include

设计定位:变体数据结构,支持多 shape 和多场景的编译优化。

是否有状态:有状态(stateful),持有独立的 MemoryPlan

继承关系:无继承。

典型使用路径:由 Compiler::Result 持有,用于 GraphAtlas 构建。

成员
字段名 类型 默认值 说明
name std::string 变体名称
memory_plan std::unique_ptr 独立显存规划
train const ComputationGraph* nullptr 指向训练图的指针
inference const ComputationGraph* nullptr 指向推理图的指针

注意事项 traininference 是非拥有指针,指向 Result::train_cgResult::infer_cg


CompileSpec

概述

CompileSpec 是单个编译变体的参数集,描述影响形状和拓扑的编译参数。

所属头文件#include

设计定位:编译参数容器,用于区分不同输入 shape 和配置的编译变体。

是否有状态:无状态(stateless),纯数据结构。

继承关系:无继承。

典型使用路径:由 GlobalRegistry 生成或手动构造,传递给 Compiler::compile()

典型使用代码

// 从全局配置生成
auto spec = CompileSpec::from_global_registry();

// 手动构造
CompileSpec spec;
spec.amp_enabled = true;
spec.batch_size = 32;
spec.actual_resolution = 224;
spec.num_color_channels = 3;
成员
字段名 类型 默认值 说明
amp_enabled bool false 混合精度
max_sample_resolution int 0 MemoryPlan 最大槽位预留
actual_resolution int 0 该变体的形状推导分辨率
batch_size int 0 批次大小
num_color_channels int 0 颜色通道数
freeze_first_layer bool false 运行时标志,不影响 MemoryPlan/ComputationGraph
工厂方法
CompileSpec::from_global_registry()

签名

static CompileSpec from_global_registry();

功能简介GlobalRegistry 构造 CompileSpec,自动填充各字段。

参数

返回值 返回填充好的 CompileSpec 对象

异常


查询接口
CompileSpec::get_shape_id() const noexcept

签名

ShapeId get_shape_id() const noexcept;

功能简介 转换为 ShapeId 四元组,用作 Phase B 的 CapturedGraph 去重键。

参数

返回值 返回 {batch_size, actual_resolution, actual_resolution, num_color_channels}ShapeId

异常


ComputationGraph

概述

ComputationGraph 是纯算子拓扑容器,零形状信息,支持多变体共享。它存储图节点序列,供 CapturedGraph 捕获使用。

所属头文件#include

设计定位:计算图的中间表示,只存储拓扑信息,形状和显存布局由 MemoryPlan 管理。

是否有状态:有状态(stateful),持有图节点序列。

继承关系:无继承。

典型使用路径:由 Compiler 构建,传递给 CapturedGraph::capture()

典型使用代码

// 用户通常不直接操作 ComputationGraph
// 由 Compiler 自动构建和使用
ComputationGraph cg;
cg.append(GraphId::DEEP_FWD_BWD, node);
auto nodes = cg.nodes(GraphId::DEEP_FWD_BWD);
构造与赋值
ComputationGraph::ComputationGraph() = default

签名

ComputationGraph() = default;

功能简介 默认构造函数,创建空计算图。

参数

返回值

异常


ComputationGraph::ComputationGraph(const ComputationGraph&) = delete

签名

ComputationGraph(const ComputationGraph&) = delete;

功能简介 拷贝构造函数(已删除)。

参数

返回值

异常

注意事项 禁止拷贝,只允许移动。


ComputationGraph::operator=(const ComputationGraph&) = delete

签名

ComputationGraph& operator=(const ComputationGraph&) = delete;

功能简介 拷贝赋值运算符(已删除)。

参数

返回值

异常

注意事项 禁止拷贝,只允许移动。


ComputationGraph::ComputationGraph(ComputationGraph&&) = default

签名

ComputationGraph(ComputationGraph&&) = default;

功能简介 移动构造函数。

参数

返回值

异常


ComputationGraph::operator=(ComputationGraph&&) = default

签名

ComputationGraph& operator=(ComputationGraph&&) = default;

功能简介 移动赋值运算符。

参数

返回值 返回 *this,支持链式调用

异常


修改接口
ComputationGraph::append(GraphId gid, GraphNode node)

签名

void append(GraphId gid, GraphNode node);

功能简介 向指定 GraphId 桶追加一个节点。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 目标子图标识 [in] | | node | GraphNode | 无 | 待追加的图节点 [in] |

返回值

异常


ComputationGraph::append(GraphId gid, const std::vector& nodes)

签名

void append(GraphId gid, const std::vector<GraphNode>& nodes);

功能简介 向指定 GraphId 桶批量追加节点。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 目标子图标识 [in] | | nodes | const std::vector& | 无 | 待追加的节点序列 [in] |

返回值

异常


ComputationGraph::append(GraphNode node)

签名

void append(GraphNode node);

功能简介 手动绘图模式:向线性节点列表追加节点(SimpleTask 专用)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | node | GraphNode | 无 | 待追加的图节点 [in] |

返回值

异常

注意事项Compiler 自动构图的 GraphId 桶模式物理隔离。


ComputationGraph::append(ComputeOp op, std::vector input_ids, std::vector output_ids, OpParams params = {})

签名

void append(ComputeOp op,
            std::vector<int32_t> input_ids,
            std::vector<int32_t> output_ids,
            OpParams params = {});

功能简介 标准式 append:自动包装为 COMPUTE 节点。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | op | ComputeOp | 无 | 算子类型 [in] | | input_ids | std::vector | 无 | 输入 DTensor ID 列表 [in] | | output_ids | std::vector | 无 | 输出 DTensor ID 列表 [in] | | params | OpParams | {} | 算子参数 [in] |

返回值

异常


ComputationGraph::append_range(GraphId gid, RangeOp op, std::vector inputs, std::vector outputs, OpParams params = {})

签名

void append_range(GraphId gid, RangeOp op,
                  std::vector<MemRange> inputs,
                  std::vector<MemRange> outputs,
                  OpParams params = {});

功能简介 RangeOp 便捷构图接口(V4.21 新增)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 目标子图标识 [in] | | op | RangeOp | 无 | RangeOp 算子 [in] | | inputs | std::vector | 无 | 输入 MemRange 列表(延迟态) [in] | | outputs | std::vector | 无 | 输出 MemRange 列表(延迟态) [in] | | params | OpParams | {} | 算子参数 [in] |

返回值

异常


查询接口
ComputationGraph::nodes(GraphId gid) const

签名

const std::vector<GraphNode>& nodes(GraphId gid) const;

功能简介 获取指定 GraphId 桶的所有节点(只读)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回节点序列的常量引用

异常


ComputationGraph::linear_nodes() const

签名

const std::vector<GraphNode>& linear_nodes() const;

功能简介 获取手动绘图线性节点列表。

参数

返回值 返回线性节点列表的常量引用

异常


ComputationGraph::total_node_count() const noexcept

签名

size_t total_node_count() const noexcept;

功能简介 获取图中全部节点总数。

参数

返回值 返回节点总数

异常


ComputationGraph::has_nccl_ops() const

签名

bool has_nccl_ops() const;

功能简介 检测图中是否包含 NCCL 集合操作(AllReduce 系列)。

参数

返回值 返回 true 表示包含 NCCL 操作,false 表示不包含

异常


ComputationGraph::has_nccl_ops(GraphId gid) const

签名

bool has_nccl_ops(GraphId gid) const;

功能简介 检测指定 GraphId 子图中是否包含 NCCL 集合操作。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回 true 表示包含 NCCL 操作,false 表示不包含

异常


调试接口
ComputationGraph::debug_dump(bool skip_empty = false) const

签名

std::string debug_dump(bool skip_empty = false) const;

功能简介 调试打印:遍历 GraphId 桶 + linear_nodes_

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | skip_empty | bool | false | 为 true 时跳过空的 GraphId 桶 [in] |

返回值 返回调试信息字符串

异常


ComputationGraph::debug_dump_with_regions(bool skip_empty = false) const

签名

std::string debug_dump_with_regions(bool skip_empty = false) const;

功能简介 带 Region 信息的调试打印。与 debug_dump() 类似,但在输出 RANGE 节点时使用 MemRange 中存储的 Region ID,便于查看内存布局。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | skip_empty | bool | false | 为 true 时跳过空的 GraphId 桶 [in] |

返回值 返回带 Region 信息的调试字符串

异常


GraphNode

概述

GraphNode 是计算图的统一节点类型,支持 COMPUTE(DTensor 级)和 RANGE(Region 级)两种操作模式。

所属头文件#include

设计定位:图节点的统一表示,通过 Kind 区分不同操作模式。compute_oprange_op 以 union 形式共享存储空间,具体哪个字段有效由 kind 决定。

是否有状态:有状态(stateful),存储算子、参数和张量 ID。

继承关系:无继承。

典型使用路径:由 Compiler 构建,存储在 ComputationGraph 中。用户通常不直接构造 GraphNode,而是通过 ComputationGraph::append() 系列接口间接创建。

成员
字段名 类型 默认值 说明
kind Kind Kind::COMPUTE 节点类型
compute_op ComputeOp - DTensor 级操作(COMPUTE 态有效)
range_op RangeOp - Region 级操作(RANGE 态有效)
params OpParams - 算子参数
input_ids std::vector - COMPUTE 态:输入 DTensor ID
output_ids std::vector - COMPUTE 态:输出 DTensor ID
input_ranges std::vector - RANGE 态:输入内存范围
output_ranges std::vector - RANGE 态:输出内存范围

enum class GraphNode::Kind

概述

GraphNode::Kind 是节点类型枚举,区分 DTensor 级操作和 Region 级批量操作。

所属头文件#include

设计定位:节点类型的类型安全标识。

是否有状态:无状态(stateless)。

继承关系:无继承。

枚举值 说明
COMPUTE DTensor 级操作
RANGE Region 级批量操作

enum class GraphId

概述

GraphId 是子图标识枚举,定义了 33 张有效子图的标识。

所属头文件#include

设计定位:子图的类型安全标识,用于图索引和多流管理。

是否有状态:无状态(stateless)。

继承关系:无继承。

枚举值 说明
TRANSFER_A H2D 异步传输 A 区(双缓冲前半)
TRANSFER_B H2D 异步传输 B 区(双缓冲后半)
FIRST_LAYER_FWD_A 首层前向 A(低分辨率)
FIRST_LAYER_FWD_B 首层前向 B(高分辨率)
DEEP_FWD_BWD 深层前向+反向融合
ZERO_GRAD 梯度清零(前反向之间)
FIRST_LAYER_BWD_A 首层反向 A(写回 I_A_DATA)
FIRST_LAYER_BWD_B 首层反向 B(写回 I_B_DATA)
FIRST_COMM 首层梯度通信(桶2,仅 AllReduce)
DEEP_COMM 深层梯度通信(桶1,仅 AllReduce)
CAST_DEEP_GRAD_FP16_TO_FP32 AMP 深层卷积梯度 FP16→FP32
CAST_FIRST_GRAD_FP16_TO_FP32 AMP 首层卷积梯度 FP16→FP32
NAN_CHECK_AND_GRAD_SCALING AMP NaN 检查 + 梯度缩放
STATS_COMM BN 统计量通信(仅同步 next_mean/next_var)
UPDATE_STATS 将同步后的 next 统计量复制到 prev
OPTIMIZER 优化器参数更新
EMA_UPDATE EMA 参数更新
INF_MAIN_A 主模型推理 A
INF_MAIN_B 主模型推理 B
INF_EMA_A EMA 模型推理 A
INF_EMA_B EMA 模型推理 B
CAST_MAIN_FP32_TO_FP16 主模型 FP32 权重转 FP16(shape 无关)
CAST_EMA_FP32_TO_FP16 EMA 模型 FP32 权重转 FP16(shape 无关)
ACCUM_METRICS 常规 batch 累积
ACCUM_METRICS_TRAIN_LAST 训练末 batch 累积
ACCUM_METRICS_VAL_LAST 验证末 batch 累积
VAL_RESULT_COMM 验证集 R_RESULT_ACCUMULATED AllReduce
CLEAR_METRICS 累积区清零
SIMPLE_TASK_GRAPH SimpleTask 通用图 ID
LARS_FC_OPT FC 权重 LARS 优化
LARS_FIRST_CONV_OPT 首层卷积 LARS 优化
LARS_DEEP_CONV_OPT 深层卷积 LARS 优化
UPDATE_BN_INF_PARAMS 训练后更新 BN 推理参数
COUNT 哨兵值,总数

using NativeGraph

概述

NativeGraph 是 CUDA 后端图句柄的类型别名,使用 void* 避免在头文件中直接依赖 CUDA 运行时头文件。

所属头文件#include

设计定位:CUDA Graph 执行句柄的跨平台不透明指针。

是否有状态:无状态(stateless)。

继承关系:无继承。

定义

using NativeGraph = void*;

struct CpuOp

概述

CpuOp 是 CPU 后端单个操作的描述,使用裸函数指针替代 std::function,栈分配且零虚调用。

所属头文件#include

设计定位:CPU 后端函数队列的元素。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
fn void ()(CpuOpContext) nullptr 操作函数指针
ctx void* nullptr 操作上下文指针

CapturedGraph

概述

CapturedGraph 是双后端可执行图,统一封装 CUDA Graph 和 CPU 函数队列。它提供了捕获和启动计算图的接口。

所属头文件#include

设计定位:可执行图的统一表示,支持 CUDA 和 CPU 双后端。CUDA 后端使用 NativeGraph(即 void* 封装的 cudaGraphExec_t)按 rank 存储执行句柄;CPU 后端使用 std::vector 存储裸函数指针队列。

是否有状态:有状态(stateful),持有捕获的执行句柄。

继承关系:无继承。

典型使用路径:由 pre_capture() 创建,通过 GraphAtlas 索引,在运行时启动。

典型使用代码

// 用户通常不直接操作 CapturedGraph
// 由 pre_capture() 自动创建和管理
auto graph = CapturedGraph::capture(cg, mp, gid, shape_id, stream, ctx);
graph.launch(rank, stream);
构造与析构
CapturedGraph::CapturedGraph() = default

签名

CapturedGraph() = default;

功能简介 默认构造函数,创建空捕获图。

参数

返回值

异常


CapturedGraph::~CapturedGraph()

签名

~CapturedGraph();

功能简介 析构函数,释放捕获的执行资源。

参数

返回值

异常


CapturedGraph::CapturedGraph(const CapturedGraph&) = delete

签名

CapturedGraph(const CapturedGraph&) = delete;

功能简介 拷贝构造函数(已删除)。

参数

返回值

异常

注意事项 禁止拷贝。


CapturedGraph::CapturedGraph(CapturedGraph&&) noexcept = default

签名

CapturedGraph(CapturedGraph&&) noexcept = default;

功能简介 移动构造函数。

参数

返回值

异常


捕获接口
CapturedGraph::capture(const ComputationGraph& cg, const MemoryPlan& mp, GraphId gid, ShapeId shape_id, StreamKind stream_kind, const DeviceContext& ctx)

签名

static CapturedGraph capture(const ComputationGraph& cg,
                              const MemoryPlan& mp,
                              GraphId gid,
                              ShapeId shape_id,
                              StreamKind stream_kind,
                              const DeviceContext& ctx);

功能简介 单 rank 捕获入口,创建并实例化可执行捕获图。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | cg | const ComputationGraph& | 无 | 纯算子拓扑 [in] | | mp | const MemoryPlan& | 无 | 该变体的 MemoryPlan [in] | | gid | GraphId | 无 | 目标子图标识 [in] | | shape_id | ShapeId | 无 | 输入形状去重键 [in] | | stream_kind | StreamKind | 无 | 流类型 [in] | | ctx | const DeviceContext& | 无 | 设备上下文 [in] |

返回值 返回创建并实例化的可执行捕获图

异常

注意事项 per_rank_execs_ 已 resize(1)。


CapturedGraph::capture(const ComputationGraph& cg, const MemoryPlan& mp, GraphId gid, StreamKind stream, const DeviceContext& ctx)

签名

static CapturedGraph capture(const ComputationGraph& cg,
                              const MemoryPlan& mp,
                              GraphId gid,
                              StreamKind stream,
                              const DeviceContext& ctx);

功能简介 SimpleTask 专用简化捕获接口。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | cg | const ComputationGraph& | 无 | 纯算子拓扑 [in] | | mp | const MemoryPlan& | 无 | MemoryPlan [in] | | gid | GraphId | 无 | 图 ID(必须是 SIMPLE_TASK_GRAPH + N) [in] | | stream | StreamKind | 无 | 执行流 [in] | | ctx | const DeviceContext& | 无 | 设备上下文 [in] |

返回值 返回创建并实例化的可执行捕获图

异常

注意事项 SimpleTask 必须使用 GraphId::SIMPLE_TASK_GRAPH 作为起始 ID。


执行接口
CapturedGraph::launch(int rank, void* stream) const

签名

void launch(int rank, void* stream) const;

功能简介 运行时启动该捕获图在指定 rank 上的执行。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | rank | int | 无 | 目标 GPU rank [in] | | stream | void* | 无 | CUDA 流(CPU 后端忽略) [in] |

返回值

异常


查询接口
CapturedGraph::is_cuda() const noexcept

签名

[[nodiscard]] bool is_cuda() const noexcept;

功能简介 检查是否为 CUDA 后端。

参数

返回值 返回 true 表示 CUDA 后端,false 表示 CPU 后端

异常


CapturedGraph::key() const noexcept

签名

[[nodiscard]] const Key& key() const noexcept;

功能简介 获取捕获图的去重键。

参数

返回值 返回 Key 结构的常量引用

异常


CapturedGraph::num_ranks() const noexcept

签名

[[nodiscard]] size_t num_ranks() const noexcept;

功能简介 获取 rank 数量。

参数

返回值 返回 rank 数量

异常


调试接口
CapturedGraph::debug_dump() const

签名

std::string debug_dump() const;

功能简介 调试打印捕获图信息。

参数

返回值 返回调试信息字符串

异常


struct CapturedGraph::Key

概述

CapturedGraph::Key 是捕获图的去重键,用于 Phase B 的去重和索引。

所属头文件#include

设计定位:去重键数据结构,用于捕获图的哈希和比较。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
cg const ComputationGraph* nullptr 计算图指针
gid GraphId GraphId::TRANSFER_A 子图标识
shape ShapeId {} 形状标识
运算符重载
CapturedGraph::Key::operator==(const Key& o) const noexcept

签名

bool operator==(const Key& o) const noexcept;

功能简介 比较两个去重键是否相等。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | o | const Key& | 无 | 另一个去重键 [in] |

返回值 返回 true 表示相等,false 表示不等

异常


struct CapturedGraph::KeyHash

概述

CapturedGraph::KeyHashCapturedGraph::Key 的哈希函数对象,用于 unordered_map 去重。

所属头文件#include

设计定位:为去重键提供哈希支持。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
CapturedGraph::KeyHash::operator()(const Key& k) const noexcept

签名

size_t operator()(const Key& k) const noexcept;

功能简介 计算 Key 的哈希值。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | k | const Key& | 无 | 去重键 [in] |

返回值 返回哈希值

异常


GraphAtlas

概述

GraphAtlas 是图集映射表,提供 6 变体 × 33 子图的三阶段桥梁。它实现了编译期、预演期和运行期的无缝衔接。

所属头文件#include

设计定位:图集映射表,连接编译、捕获和执行三个阶段。

是否有状态:有状态(stateful),持有映射表。

继承关系:无继承。

典型使用路径:由 GraphAtlas::build() 构建,传递给 pre_capture(),在运行时索引。

典型使用代码

// Phase A: 构建图集
auto atlas = GraphAtlas::build(result, input_shapes);

// Phase B: 填充捕获索引
auto pre_result = pre_capture(atlas, contexts);

// Phase C: 运行时索引
int32_t idx = atlas.index(variant, gid);
if (idx >= 0) {
    captured_graphs[idx].launch(rank, stream);
}
Phase A 接口
GraphAtlas::build(const Compiler::Result& result, const std::array& input_shapes)

签名

static GraphAtlas build(const Compiler::Result& result,
                         const std::array<ShapeId, 6>& input_shapes);

功能简介 构建图集 —— 填入 cg / mp / shape_id。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | result | const Compiler::Result& | 无 | 编译结果 [in] | | input_shapes | const std::array& | 无 | 6 变体的输入 ShapeId [in] |

返回值 返回已填入逻辑归属的 GraphAtlas

异常

注意事项 shape 无关图全部变体指向 base MemoryPlan,shape 相关训练图 4 个训练变体各自 MemoryPlan,val 变体不填训练图,train 变体不填推理图。


Phase A / B 共享接口
GraphAtlas::slot(size_t variant_idx, uint8_t graph_id_idx)

签名

Slot& slot(size_t variant_idx, uint8_t graph_id_idx) noexcept;
const Slot& slot(size_t variant_idx, uint8_t graph_id_idx) const noexcept;

功能简介 获取指定槽位的读写引用。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | variant_idx | size_t | 无 | 变体索引 [in] | | graph_id_idx | uint8_t | 无 | 图 ID 索引 [in] |

返回值 返回槽位的引用

异常

注意事项 Phase A(build)和 Phase B(pre_capture)都需要修改 Slot 不同字段。


Phase C 接口
GraphAtlas::index(size_t variant, GraphId gid) const noexcept

签名

int32_t index(size_t variant, GraphId gid) const noexcept;

功能简介 Phase C 运行时 —— O(1) 数组访问。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | variant | size_t | 无 | 变体索引 0~5 [in] | | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回 captured_ vector 中的索引,-1 表示未捕获/不适用

异常

注意事项 纯数组索引操作,零 hash,零分支,零捕获。


struct GraphAtlas::Slot

概述

GraphAtlas::Slot 是图集中的一格,存储逻辑归属和捕获索引。

所属头文件#include

设计定位:槽位数据结构,在三阶段中逐步填充。

是否有状态:有状态(stateful)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
cg const ComputationGraph* nullptr Phase A: 共享拓扑指针
mp const MemoryPlan* nullptr Phase A: 变体特有 MemoryPlan
shape_id ShapeId {} Phase A: 去重键
stream_kind StreamKind StreamKind::COMP_1 流类型
captured_idx int32_t -1 Phase B: captured_ 中的索引

注意事项 Phase A(编译期):填入 cg, mp, shape_id。Phase B(预演期):填入 captured_idx。


MemoryPlan

概述

MemoryPlan 是基于 69-Region 规范的显存布局引擎,提供一遍线性累加布局和语义化分配接口。它是显存管理的唯一权威。

所属头文件#include

设计定位:显存布局引擎,负责所有 DTensor 的分配和布局。

是否有状态:有状态(stateful),管理显存分配和 DTensor 映射。

继承关系:无继承。

典型使用路径:由 Compiler 构建,传递给 CapturedGraph 和执行器。

典型使用代码

// 用户通常不直接操作 MemoryPlan
// 由 Compiler 自动创建和管理
MemoryPlan mp(config);
mp.alloc_baseline_dtensors(label_shape, data_shape, dtype, opt);
auto w = mp.alloc_first_conv_weight(shape);
mp.finalize();
构造与析构
MemoryPlan::MemoryPlan(const PlanConfig& config)

签名

explicit MemoryPlan(const PlanConfig& config);

功能简介 构造显存规划器。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | config | const PlanConfig& | 无 | 规划配置 [in] |

返回值

异常


MemoryPlan::~MemoryPlan()

签名

~MemoryPlan();

功能简介 析构函数,释放显存规划资源。

参数

返回值

异常

注意事项 禁止拷贝,允许移动。


语义化分配接口
MemoryPlan::alloc_bn_stats(const Shape& shape)

签名

BNStatsBuffers alloc_bn_stats(const Shape& shape);

功能简介 分配 BN 统计量缓冲区(4 个 Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 统计量形状 [in] |

返回值 返回包含 4 个 DTensor 的 BNStatsBuffers 结构

异常

注意事项 一次性分配 4 个 Region(prev_mean, prev_var, next_mean, next_var),Shape 必须一致。


MemoryPlan::alloc_eq_bias(const Shape& shape)

签名

DTensor alloc_eq_bias(const Shape& shape);

功能简介 分配 BN 等效偏置(W_EQ_BIAS Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 偏置形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_eq_scale(const Shape& shape)

签名

DTensor alloc_eq_scale(const Shape& shape);

功能简介 分配 BN 等效缩放(W_EQ_SCALE Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 缩放形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_bn_bias(const Shape& shape)

签名

DTensor alloc_bn_bias(const Shape& shape);

功能简介 分配 BN 偏置参数(W_BN_BIAS Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 偏置形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_bn_weight(const Shape& shape)

签名

DTensor alloc_bn_weight(const Shape& shape);

功能简介 分配 BN 权重参数(W_BN_WEIGHT Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 权重形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_fc_bias(const Shape& shape)

签名

DTensor alloc_fc_bias(const Shape& shape);

功能简介 分配全连接层偏置(W_FC_BIAS Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 偏置形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_first_conv_weight(const Shape& shape)

签名

DTensor alloc_first_conv_weight(const Shape& shape);

功能简介 分配首层卷积权重(W_FIRST_CONV)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 权重形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_deep_conv_weight(const Shape& shape)

签名

DTensor alloc_deep_conv_weight(const Shape& shape);

功能简介 分配深层卷积权重(W_DEEP_CONV)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 权重形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_fc_weight(const Shape& shape)

签名

DTensor alloc_fc_weight(const Shape& shape);

功能简介 分配全连接层权重(W_FC_WEIGHT)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 权重形状 [in] |

返回值 返回分配的 DTensor

异常


EMA 权重分配接口
方法 签名 说明
alloc_ema_bn_bias() DTensor alloc_ema_bn_bias(const Shape& shape) 分配 EMA BN 偏置(E 系列 Region)
alloc_ema_bn_weight() DTensor alloc_ema_bn_weight(const Shape& shape) 分配 EMA BN 权重
alloc_ema_fc_bias() DTensor alloc_ema_fc_bias(const Shape& shape) 分配 EMA FC 偏置
alloc_ema_fc_weight() DTensor alloc_ema_fc_weight(const Shape& shape) 分配 EMA FC 权重
alloc_ema_first_conv() DTensor alloc_ema_first_conv(const Shape& shape) 分配 EMA 首层卷积权重
alloc_ema_deep_conv() DTensor alloc_ema_deep_conv(const Shape& shape) 分配 EMA 深层卷积权重
alloc_ema_fc_weight_fp16() DTensor alloc_ema_fc_weight_fp16(const Shape& shape) 分配 EMA FC FP16 权重
alloc_ema_first_conv_fp16() DTensor alloc_ema_first_conv_fp16(const Shape& shape) 分配 EMA 首层卷积 FP16 权重
alloc_ema_deep_conv_fp16() DTensor alloc_ema_deep_conv_fp16(const Shape& shape) 分配 EMA 深层卷积 FP16 权重

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


AMP FP16 权重分配接口
方法 签名 说明
alloc_amp_fc_weight() DTensor alloc_amp_fc_weight(const Shape& shape) 分配 AMP FC 权重(A 系列 Region)
alloc_amp_first_conv() DTensor alloc_amp_first_conv(const Shape& shape) 分配 AMP 首层卷积权重
alloc_amp_deep_conv() DTensor alloc_amp_deep_conv(const Shape& shape) 分配 AMP 深层卷积权重

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


梯度分配接口
方法 签名 说明
alloc_grad_bn_bias() DTensor alloc_grad_bn_bias(const Shape& shape) 分配 BN 偏置梯度(G 系列 Region)
alloc_grad_bn_weight() DTensor alloc_grad_bn_weight(const Shape& shape) 分配 BN 权重梯度
alloc_grad_fc_bias() DTensor alloc_grad_fc_bias(const Shape& shape) 分配 FC 偏置梯度
alloc_grad_fc_weight() DTensor alloc_grad_fc_weight(const Shape& shape) 分配 FC 权重梯度
alloc_grad_first_conv() DTensor alloc_grad_first_conv(const Shape& shape) 分配首层卷积梯度
alloc_grad_deep_conv() DTensor alloc_grad_deep_conv(const Shape& shape) 分配深层卷积梯度
alloc_grad_fc_weight_fp16() DTensor alloc_grad_fc_weight_fp16(const Shape& shape) 分配 FC 权重 FP16 梯度
alloc_grad_first_conv_fp16() DTensor alloc_grad_first_conv_fp16(const Shape& shape) 分配首层卷积 FP16 梯度
alloc_grad_deep_conv_fp16() DTensor alloc_grad_deep_conv_fp16(const Shape& shape) 分配深层卷积 FP16 梯度

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_feature(const Shape& shape, DType dtype)

签名

DTensor alloc_feature(const Shape& shape, DType dtype);

功能简介 分配特征图(F 特征图 Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 特征图形状 [in] | | dtype | DType | 无 | 数据类型 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_grad_slot(const Shape& shape, DType dtype, int slot_idx)

签名

DTensor alloc_grad_slot(const Shape& shape, DType dtype, int slot_idx);

功能简介 分配梯度槽(G 梯度 Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 梯度形状 [in] | | dtype | DType | 无 | 数据类型 [in] | | slot_idx | int | 无 | 槽索引 [in] |

返回值 返回分配的 DTensor

异常


一阶动量分配接口
方法 签名 说明
alloc_momentum_bn_bias() DTensor alloc_momentum_bn_bias(const Shape& shape) 分配 BN 偏置一阶动量(M 系列 Region)
alloc_momentum_bn_weight() DTensor alloc_momentum_bn_weight(const Shape& shape) 分配 BN 权重一阶动量
alloc_momentum_fc_bias() DTensor alloc_momentum_fc_bias(const Shape& shape) 分配 FC 偏置一阶动量
alloc_momentum_fc_weight() DTensor alloc_momentum_fc_weight(const Shape& shape) 分配 FC 权重一阶动量
alloc_momentum_first_conv() DTensor alloc_momentum_first_conv(const Shape& shape) 分配首层卷积一阶动量
alloc_momentum_deep_conv() DTensor alloc_momentum_deep_conv(const Shape& shape) 分配深层卷积一阶动量

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


二阶动量(速度)分配接口
方法 签名 说明
alloc_velocity_bn_bias() DTensor alloc_velocity_bn_bias(const Shape& shape) 分配 BN 偏置二阶动量(V 系列 Region)
alloc_velocity_bn_weight() DTensor alloc_velocity_bn_weight(const Shape& shape) 分配 BN 权重二阶动量
alloc_velocity_fc_bias() DTensor alloc_velocity_fc_bias(const Shape& shape) 分配 FC 偏置二阶动量
alloc_velocity_fc_weight() DTensor alloc_velocity_fc_weight(const Shape& shape) 分配 FC 权重二阶动量
alloc_velocity_first_conv() DTensor alloc_velocity_first_conv(const Shape& shape) 分配首层卷积二阶动量
alloc_velocity_deep_conv() DTensor alloc_velocity_deep_conv(const Shape& shape) 分配深层卷积二阶动量

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


LARS 范数分配接口
方法 签名 说明
alloc_norm_fc_weight() DTensor alloc_norm_fc_weight(const Shape& shape) 分配 FC 权重 LARS 范数(N 系列 Region)
alloc_norm_first_conv() DTensor alloc_norm_first_conv(const Shape& shape) 分配首层卷积 LARS 范数
alloc_norm_deep_conv() DTensor alloc_norm_deep_conv(const Shape& shape) 分配深层卷积 LARS 范数

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 目标张量形状 [in] |

返回值 返回分配的 DTensor

异常


MemoryPlan::alloc_input_buffers()

签名

InputBuffers alloc_input_buffers();
InputBuffers alloc_input_buffers(const Shape& label_shape,
                                 const Shape& data_shape,
                                 DType dtype);

功能简介 分配输入缓冲区(I 输入 Region)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | label_shape | const Shape& | 无 | 标签形状 [in] | | data_shape | const Shape& | 无 | 数据形状 [in] | | dtype | DType | 无 | 数据类型 [in] |

返回值 返回包含 4 个 DTensor 的 InputBuffers 结构

异常


通用分配接口
MemoryPlan::alloc(const Shape& shape, DType dtype, Region region)

签名

[[nodiscard]] DTensor alloc(const Shape& shape, DType dtype, Region region);

功能简介 通用分配接口(模型编译场景核心入口,对外开放)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | shape | const Shape& | 无 | 张量形状 [in] | | dtype | DType | 无 | 数据类型 [in] | | region | Region | 无 | 内存分区 [in] |

返回值 返回分配的 DTensor

异常

注意事项 这是公开的通用分配接口,用于模型编译和自定义分配场景。


布局锁定
MemoryPlan::finalize()

签名

void finalize();

功能简介 锁定显存布局,计算最终偏移。

参数

返回值

异常

注意事项 锁定后不能再分配新的 DTensor。


MemoryPlan::is_finalized() const noexcept

签名

[[nodiscard]] bool is_finalized() const noexcept;

功能简介 检查是否已锁定布局。

参数

返回值 返回 true 表示已锁定,false 表示未锁定

异常


MemoryPlan::total_bytes() const

签名

[[nodiscard]] uint64_t total_bytes() const;

功能简介 获取显存布局总字节数。

参数

返回值 返回总字节数

异常


运行期查询
MemoryPlan::get_dtensor(int32_t id) const

签名

[[nodiscard]] const DTensor& get_dtensor(int32_t id) const;

功能简介 获取指定 ID 的 DTensor。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | id | int32_t | 无 | DTensor 全局 ID [in] |

返回值 返回 DTensor 的常量引用

异常


MemoryPlan::has_dtensor(int32_t id) const noexcept

签名

[[nodiscard]] bool has_dtensor(int32_t id) const noexcept;

功能简介 检查是否存在指定 ID 的 DTensor。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | id | int32_t | 无 | DTensor 全局 ID [in] |

返回值 返回 true 表示存在,false 表示不存在

异常


MemoryPlan::dtensors() const

签名

[[nodiscard]] const std::vector<DTensor>& dtensors() const;

功能简介 获取所有 DTensor。

参数

返回值 返回 DTensor 向量的常量引用

异常


MemoryPlan::get_region_info(Region region) const

签名

[[nodiscard]] RegionInfo get_region_info(Region region) const;

功能简介 获取指定 Region 的信息。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | region | Region | 无 | 内存分区 [in] |

返回值 返回包含偏移和大小的 RegionInfo 结构

异常


MemoryPlan::get_ids_by_region(Region region) const

签名

[[nodiscard]] const std::vector<int32_t>& get_ids_by_region(Region region) const;

功能简介 获取指定 Region 中的所有 DTensor ID。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | region | Region | 无 | 内存分区 [in] |

返回值 返回 DTensor ID 向量的常量引用

异常


enum class ComputeOp

概述

ComputeOp 是计算算子类型枚举,定义了所有支持的算子类型。

所属头文件#include

设计定位:算子类型的类型安全标识。

是否有状态:无状态(stateless)。

继承关系:无继承。

主要算子类别

基础元素级:IDENTITY_FWDADD_FWDMUL_FWDAXPY_FWD

激活函数:RELU_FP32_FWDRELU_AMP_FWDSILU_FP32_FWDTANH_FP32_FWD

卷积:CONV_FP32_FWDCONV_AMP_FWDCONV_FP32_BWDCONV_AMP_BWD

BatchNorm:BN1D_AMP_FWDBN2D_AMP_FWDBN1D_FP32_FWDBN2D_FP32_FWD

池化:MAXPOOL_FP32_FWDAVGPOOL_FP32_FWDGAP_FP32_FWD

全连接:FC_FP32_FWDFC_AMP_FWD

融合算子:BOTTLENECK_AMP_FWDGAP_FC_FP32_FWDCBR_AMP_FWD

损失函数:SOFTMAX_CE_FP32_FWDSOFTMAX_CE_AMP_FWD

通信:ALLREDUCE_SUMBROADCASTBN_STATS_SYNC

优化器:SGD_UPDATELARS_UPDATEADAMW_UPDATEEMA_UPDATE


enum class RangeOp

概述

RangeOp 是范围算子类型枚举,定义了所有基于内存范围的算子。

所属头文件#include

设计定位:Region 级批量操作的类型安全标识。

是否有状态:无状态(stateless)。

继承关系:无继承。

主要算子类别

数据传输:RANGE_H2D_COPY_ARANGE_H2D_COPY_BRANGE_H2D_COPY_DTENSOR

通信:RANGE_BN_STATS_ALLREDUCERANGE_SUM_ALLREDUCERANGE_MEAN_ALLREDUCE

优化器:RANGE_UPDATE_BIAS_SGDRANGE_UPDATE_WEIGHT_ADAMWRANGE_EMA_PARAM_UPDATE

内存操作:RANGE_CLEARRANGE_D2D_COPY

类型转换:RANGE_CAST_FP32_TO_FP16RANGE_CAST_FP16_TO_FP32

梯度处理:RANGE_CHECK_NANRANGE_GRAD_SCALING


struct OpParams

概述

OpParams 是算子参数包装器,使用 std::variant 支持多种算子参数类型。

所属头文件#include

设计定位:类型安全的算子参数容器。

是否有状态:有状态(stateful),存储算子参数。

继承关系:无继承。

支持的参数类型

ConvParamsPoolParamsFCParamsBNParamsLossParamsUpdateParamsEMAParamsAllReduceParamsAxpyParamsCastParamsFlattenParamsCBRParamsBottleneckParamsGapFCParamsDropoutParamsGradClipParams

成员
字段名 类型 默认值 说明
data std::variant<...> std::monostate{} 参数数据
访问方法
OpParams::is_empty() const

签名

bool is_empty() const;

功能简介 检查参数是否为空。

参数

返回值 返回 true 表示参数为空,false 表示有参数

异常


OpParams::conv() const

签名

const ConvParams& conv() const;

功能简介 获取卷积参数。

参数

返回值 返回卷积参数的常量引用

异常


OpParams::operator==(const ShapeId& o) const noexcept

以下访问器按参数类型提供对应的 getter 方法,语义与 conv() 一致:返回对应参数类型的常量引用。

方法 返回类型 说明
pool() const PoolParams& 获取池化参数
fc() const FCParams& 获取全连接参数
bn() const BNParams& 获取 BN 参数
loss() const LossParams& 获取损失函数参数
update() const UpdateParams& 获取优化器更新参数
ema() const EMAParams& 获取 EMA 参数
allreduce() const AllReduceParams& 获取 AllReduce 参数
axpy() const AxpyParams& 获取 AXPY 参数
cast() const CastParams& 获取类型转换参数
flatten() const FlattenParams& 获取 Flatten 参数
cbr() const CBRParams& 获取 CBR 参数
bottleneck() const BottleneckParams& 获取 Bottleneck 参数
gap_fc() const GapFCParams& 获取 GAP-FC 参数
dropout() const DropoutParams& 获取 Dropout 参数
grad_clip() const GradClipParams& 获取梯度裁剪参数
has_grad_clip() bool 检查是否包含梯度裁剪参数

异常 所有 getter 方法在 variant 类型不匹配时抛出 std::bad_variant_access


struct ShapeId

概述

ShapeId 是形状去重键,显式四元组 (N, H, W, C),用于 CUDA Graph 的跨变体去重。

所属头文件#include

设计定位:确定性去重键,用于捕获图的去重和索引。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
n int32_t 0 batch 维度
h int32_t 0 高度
w int32_t 0 宽度
c int32_t 0 通道数
运算符重载
ShapeId::operator==(const ShapeId& o) const noexcept

签名

bool operator==(const ShapeId& o) const noexcept;

功能简介 相等比较。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | o | const ShapeId& | 无 | 比较对象 [in] |

返回值 返回 true 表示相等,false 表示不等

异常


ShapeId::to_string() const

签名

std::string to_string() const;

功能简介 转换为字符串。

参数

返回值 返回格式为 "{n,h,w,c}" 的字符串

异常


struct MemRange

概述

MemRange 是内存范围描述符,描述 RangeOp 的操作范围。

所属头文件#include

设计定位:范围描述符,用于 Region 级批量操作。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
offset uint64_t 0 起始字节偏移
size uint64_t 0 字节大小
start_region_id int32_t -1 起始区域ID
end_region_id int32_t -1 结束区域ID

struct PreCaptureResult

概述

PreCaptureResult 是 Phase B 输出结构,包含去重后的捕获图和图集。

所属头文件#include

设计定位:Phase B 的输出数据结构。

是否有状态:有状态(stateful)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
graphs std::vector 去重后的捕获图
atlas GraphAtlas 已填充 captured_idx 的图集
total_slots size_t 0 总槽位数
captured size_t 0 捕获数量
reused size_t 0 复用数量

LayerDescriptor

概述

LayerDescriptor 是单层算子的函数指针表,定义了层知识契约。每个 LayerKind 对应一个不可变的 LayerDescriptor 实例。

所属头文件#include

设计定位:层知识契约,实现 Compile 阶段与 Backend 的解耦。

是否有状态:无状态(stateless),只包含函数指针。

继承关系:无继承。

典型使用路径:通过 get_layer_descriptor() 获取,Compiler 通过函数指针调用。

成员
字段名 类型 默认值 说明
infer_tensors InferFn 返回三模式张量并集
build_forward BuildFn 构建前向子图模式
build_backward BuildFn 构建反向子图模式
build_inference BuildFn 构建推理子图模式

struct TensorDesc

概述

TensorDesc 是单个张量的完整描述,包含名称、形状、Region 和数据类型。

所属头文件#include

设计定位:张量描述符,用于编译期的形状推导和验证。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
name std::string 张量语义名称
shape Shape 该变体下的逻辑形状
region Region 所属 65 个 Region 之一
dtype DType 数据类型

struct InferContext

概述

InferContextinfer_tensors 的调用上下文,传递当前编译模式和参数。

所属头文件#include

设计定位:推导上下文,让 LayerDescriptor 根据模式决定所需张量。

是否有状态:无状态(stateless)。

继承关系:无继承。

成员
字段名 类型 默认值 说明
mode GraphMode TRAIN_FORWARD / TRAIN_BACKWARD / INFERENCE
enable_amp bool false 是否启用混合精度
is_first_layer bool false 是否为首层
bn_folded bool false BN 是否折叠入 Conv
batch_size int 1 批次大小

struct SubgraphPattern

概述

SubgraphPattern 是算子子图模式,不含形状信息,只描述算子拓扑。

所属头文件#include

设计定位:子图模式描述符,用于计算图构建。

是否有状态:有状态(stateful),存储节点序列。

继承关系:无继承。

成员
字段名 类型 默认值 说明
nodes std::vector 节点序列

独立函数

概述

Graph 模块提供了一组工厂函数与工具函数。工厂函数用于创建 Layer 对象(包括基础层、容器、预融合模块和高层块);工具函数提供算子/图 ID 字符串转换、输出形状计算、编译辅助等能力。所有函数都在 tr 命名空间中。

所属头文件#include

设计定位:工厂函数是构建模型的唯一方式,每个函数对应一种网络层或组合模式。

是否有状态:无状态(stateless)。

继承关系:无继承。

典型使用路径:直接调用工厂函数 → 返回 Layer 对象 → 组合为复杂模型。

典型使用代码

// 基础层
auto conv_layer = conv(64, 3, 1, 1);
auto bn_layer = bn();
auto relu_layer = relu();

// 容器
auto seq_layer = seq(conv_layer, bn_layer, relu_layer);
auto add_layer = add2(layer1, layer2);
auto repeat_layer = repeat(block_layer, 3);

// 预融合模块
auto cbr_layer = cbr(64, 3, 1, 1);
auto gap_fc_layer = gap_fc(1000, true);
基础层工厂函数
conv(int out_ch, int k, int s = 1, int p = 0)

签名

Layer conv(int out_ch, int k, int s = 1, int p = 0);

功能简介 创建标准 2D 卷积层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | k | int | 无 | 卷积核大小(宽高相同) [in] | | s | int | 1 | 步长 [in] | | p | int | 0 | 填充 [in] |

返回值 返回表示卷积层的 Layer 对象

异常


conv_dw(int k, int s = 1, int p = 0)

签名

Layer conv_dw(int k, int s = 1, int p = 0);

功能简介 创建深度可分离卷积的深度卷积(Depthwise Conv)层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | k | int | 无 | 卷积核大小 [in] | | s | int | 1 | 步长 [in] | | p | int | 0 | 填充 [in] |

返回值 返回表示深度可分离卷积层的 Layer 对象

异常


group_conv(int out_ch, int groups, int k, int s = 1, int p = 0)

签名

Layer group_conv(int out_ch, int groups, int k, int s = 1, int p = 0);

功能简介 创建分组卷积层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | groups | int | 无 | 分组数 [in] | | k | int | 无 | 卷积核大小 [in] | | s | int | 1 | 步长 [in] | | p | int | 0 | 填充 [in] |

返回值 返回表示分组卷积层的 Layer 对象

异常


bn(double momentum = 0.1, double eps = 1e-5)

签名

Layer bn(double momentum = 0.1, double eps = 1e-5);

功能简介 创建 BatchNorm2D 层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | momentum | double | 0.1 | 动量 [in] | | eps | double | 1e-5 | epsilon [in] |

返回值 返回表示 BatchNorm 层的 Layer 对象

异常


relu()

签名

Layer relu();

功能简介 创建 ReLU 激活层。

参数

返回值 返回表示 ReLU 层的 Layer 对象

异常


tanh_act()

签名

Layer tanh_act();

功能简介 创建 Tanh 激活层。

参数

返回值 返回表示 Tanh 层的 Layer 对象

异常


silu()

签名

Layer silu();

功能简介 创建 SiLU(Swish)激活层。

参数

返回值 返回表示 SiLU 层的 Layer 对象

异常


relu6()

签名

Layer relu6();

功能简介 创建 ReLU6 激活层。

参数

返回值 返回表示 ReLU6 层的 Layer 对象

异常


leaky_relu()

签名

Layer leaky_relu();

功能简介 创建 LeakyReLU 激活层。

参数

返回值 返回表示 LeakyReLU 层的 Layer 对象

异常


hardswish()

签名

Layer hardswish();

功能简介 创建 Hardswish 激活层。

参数

返回值 返回表示 Hardswish 层的 Layer 对象

异常


elu()

签名

Layer elu();

功能简介 创建 ELU 激活层。

参数

返回值 返回表示 ELU 层的 Layer 对象

异常


sigmoid()

签名

Layer sigmoid();

功能简介 创建 Sigmoid 激活层。

参数

返回值 返回表示 Sigmoid 层的 Layer 对象

异常


dropout(float p)

签名

Layer dropout(float p);

功能简介 创建 Dropout 层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | p | float | 无 | 丢弃率 [0.0, 1.0) [in] |

返回值 返回表示 Dropout 层的 Layer 对象

异常


flatten(int start_dim = 1)

签名

Layer flatten(int start_dim = 1);

功能简介 创建 Flatten 层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_dim | int | 1 | 开始展平的维度 [in] |

返回值 返回表示 Flatten 层的 Layer 对象

异常


maxpool(int k, int s, int p)

签名

Layer maxpool(int k, int s, int p);

功能简介 创建最大池化层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | k | int | 无 | 池化核大小 [in] | | s | int | 无 | 步长 [in] | | p | int | 无 | 填充 [in] |

返回值 返回表示最大池化层的 Layer 对象

异常


avgpool(int k, int s, int p)

签名

Layer avgpool(int k, int s, int p);

功能简介 创建平均池化层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | k | int | 无 | 池化核大小 [in] | | s | int | 无 | 步长 [in] | | p | int | 无 | 填充 [in] |

返回值 返回表示平均池化层的 Layer 对象

异常


gap()

签名

Layer gap();

功能简介 创建全局平均池化层。

参数

返回值 返回表示 GAP 层的 Layer 对象

异常


fc(int out_features, bool bias)

签名

Layer fc(int out_features, bool bias);

功能简介 创建全连接层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_features | int | 无 | 输出特征数 [in] | | bias | bool | 无 | 是否使用偏置 [in] |

返回值 返回表示全连接层的 Layer 对象

异常


identity()

签名

Layer identity();

功能简介 创建恒等映射层(用于占位或残差连接)。

参数

返回值 返回表示恒等映射的 Layer 对象

异常


channel_padding()

签名

Layer channel_padding();

功能简介 创建通道填充层(用于在通道维度上补齐特征图)。

参数

返回值 返回表示通道填充层的 Layer 对象

异常


容器工厂函数
seq(Args&&... args)

签名

template <typename... Args>
Layer seq(Args&&... args);

功能简介 创建序列容器,按顺序执行多个层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | args | Args&&... | 无 | 任意数量的 Layer 对象 [in] |

返回值 返回表示序列容器的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | 传入空的参数列表 |


seq(std::vector layers)

签名

Layer seq(std::vector<Layer> layers);

功能简介Layer 向量创建序列容器。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | layers | std::vector | 无 | Layer 向量 [in] |

返回值 返回表示序列容器的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | 向量为空 |


add2(Layer lhs, Layer rhs)

签名

Layer add2(Layer lhs, Layer rhs);

功能简介 创建二元加法容器(用于残差连接)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lhs | Layer | 无 | 左操作数 [in] | | rhs | Layer | 无 | 右操作数 [in] |

返回值 返回表示加法容器的 Layer 对象

异常


repeat(Layer body, int times)

签名

Layer repeat(Layer body, int times);

功能简介 创建重复容器,重复执行指定的层。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | body | Layer | 无 | 要重复的层 [in] | | times | int | 无 | 重复次数(必须 >= 1) [in] |

返回值 返回表示重复容器的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | times < 1 |


预融合模块工厂函数
conv_bn_relu(int out_ch, int k, int s, int p, double momentum = 0.1, double eps = 1e-5)

签名

Layer conv_bn_relu(int out_ch, int k, int s, int p,
                   double momentum = 0.1, double eps = 1e-5);

功能简介 创建 Conv-BN-ReLU 融合模块。该函数是 cbr() 的别名,行为完全一致。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | k | int | 无 | 卷积核大小 [in] | | s | int | 无 | 步长 [in] | | p | int | 无 | 填充 [in] | | momentum | double | 0.1 | BN 动量 [in] | | eps | double | 1e-5 | BN epsilon [in] |

返回值 返回表示 Conv-BN-ReLU 融合模块的 Layer 对象

异常


cbr(int out_ch, int k, int s, int p, double momentum = 0.1, double eps = 1e-5)

签名

Layer cbr(int out_ch, int k, int s, int p, double momentum = 0.1, double eps = 1e-5);

功能简介 创建 Conv-BN-ReLU 融合模块(性能优化版本)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | k | int | 无 | 卷积核大小 [in] | | s | int | 无 | 步长 [in] | | p | int | 无 | 填充 [in] | | momentum | double | 0.1 | BN 动量 [in] | | eps | double | 1e-5 | BN epsilon [in] |

返回值 返回表示 CBR 融合模块的 Layer 对象

异常


cbrp(int out_ch, int conv_k, int conv_s, int conv_p, int pool_k, int pool_s, int pool_p)

签名

Layer cbrp(int out_ch, int conv_k, int conv_s, int conv_p,
           int pool_k, int pool_s, int pool_p);

功能简介 创建 Conv-BN-ReLU-Pool 融合模块(性能优化版本)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | conv_k | int | 无 | 卷积核大小 [in] | | conv_s | int | 无 | 卷积步长 [in] | | conv_p | int | 无 | 卷积填充 [in] | | pool_k | int | 无 | 池化核大小 [in] | | pool_s | int | 无 | 池化步长 [in] | | pool_p | int | 无 | 池化填充 [in] |

返回值 返回表示 CBRP 融合模块的 Layer 对象

异常


gap_fc(int out_features, bool bias)

签名

Layer gap_fc(int out_features, bool bias);

功能简介 创建 GAP-FC 融合模块(性能优化版本)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_features | int | 无 | 分类数量 [in] | | bias | bool | 无 | 是否使用偏置 [in] |

返回值 返回表示 GAP-FC 融合模块的 Layer 对象

异常


高层块工厂函数
block(int mid_ch, int out_ch, BlockStyle style)

签名

Layer block(int mid_ch, int out_ch, BlockStyle style);

功能简介 创建 Bottleneck 块(ResNet 风格 1x1-3x3-1x1 结构)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | mid_ch | int | 无 | bottleneck 通道数 [in] | | out_ch | int | 无 | 输出通道数 [in] | | style | BlockStyle | 无 | 块样式(必须为 RESNET_1_3_1 或 RESNET_1_3_1_DS) [in] |

返回值 返回表示 Bottleneck 块的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | style 不是 RESNET_1_3_1 或 RESNET_1_3_1_DS |

注意事项 该函数创建的 Bottleneck 结构应保持为整体融合算子,不应拆分为子图。后端已为此结构实现了专用融合算子。


block(int out_ch, BlockStyle style)

签名

Layer block(int out_ch, BlockStyle style);

功能简介 创建其他类型的高层块(BasicBlock、MobileNetV2 倒残差块等)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | out_ch | int | 无 | 输出通道数 [in] | | style | BlockStyle | 无 | 块样式 [in] |

返回值 返回表示高层块的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | 不支持的 style |


mbconv(int expand_ratio, int out_ch, int stride)

签名

Layer mbconv(int expand_ratio, int out_ch, int stride);

功能简介 创建 MobileNetV2 倒残差块。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | expand_ratio | int | 无 | 扩展比率(1 或 6) [in] | | out_ch | int | 无 | 输出通道数 [in] | | stride | int | 无 | 步长(1 或 2) [in] |

返回值 返回表示倒残差块的 Layer 对象

异常 | 异常类型 | 触发条件 | |:---|:---| | std::invalid_argument | expand_ratio 不是 1 或 6 | | std::invalid_argument | stride 不是 1 或 2 |



工具函数
kind_name(LayerKind k)

签名

const char* kind_name(LayerKind k);

功能简介LayerKind 枚举转换为可读字符串。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | k | LayerKind | 无 | 层类型 [in] |

返回值 返回层类型的字符串表示

异常


graph_id_to_string(GraphId gid) noexcept

签名

inline const char* graph_id_to_string(GraphId gid) noexcept;

功能简介GraphId 枚举转换为语义字符串。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回字符串表示

异常


is_shape_invariant_graph(GraphId gid) noexcept

签名

inline bool is_shape_invariant_graph(GraphId gid) noexcept;

功能简介 判断是否是 shape 无关的子图。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回 true 表示 shape 无关,false 表示 shape 相关

异常


is_train_graph(GraphId gid) noexcept

签名

inline bool is_train_graph(GraphId gid) noexcept;

功能简介 判断是否是训练专用子图。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回 true 表示训练图,false 表示非训练图

异常


is_inference_graph(GraphId gid) noexcept

签名

inline bool is_inference_graph(GraphId gid) noexcept;

功能简介 判断是否是推理专用子图。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | gid | GraphId | 无 | 子图标识 [in] |

返回值 返回 true 表示推理图,false 表示非推理图

异常


get_output_shape(LayerKind kind, const std::vector& descs)

签名

Shape get_output_shape(LayerKind kind, const std::vector<TensorDesc>& descs);

功能简介TensorDesc 列表中提取输出特征图形状。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | kind | LayerKind | 无 | 层类型 [in] | | descs | const std::vector& | 无 | 该层的 TensorDesc 列表 [in] |

返回值 返回输出特征图的 Shape,descs 为空时返回 Shape{}

异常


compile_arch_plan(const ArchPlan& plan, MemoryPlan& memory_plan, Initializer& initializer)

签名

void compile_arch_plan(const ArchPlan& plan, MemoryPlan& memory_plan, Initializer& initializer);

功能简介 从 ArchPlan 编译生成 MemoryPlan(简化版)。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | plan | const ArchPlan& | 无 | 输入的架构规划 [in] | | memory_plan | MemoryPlan& | 无 | 输出的内存规划 [out] | | initializer | Initializer& | 无 | 初始化器 [in,out] |

返回值

异常

注意事项 这是简化版本的编译器,专注于 MemoryPlan 生成。


compute_op_to_string(ComputeOp op)

签名

std::string compute_op_to_string(ComputeOp op);

功能简介ComputeOp 枚举转换为字符串。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | op | ComputeOp | 无 | 计算算子 [in] |

返回值 返回算子的字符串表示

异常


range_op_to_string(RangeOp op)

签名

std::string range_op_to_string(RangeOp op);

功能简介RangeOp 枚举转换为字符串。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | op | RangeOp | 无 | 范围算子 [in] |

返回值 返回算子的字符串表示

异常


format_params(ComputeOp op, const OpParams& p)

签名

std::string format_params(ComputeOp op, const OpParams& p);

功能简介 格式化算子参数为字符串。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | op | ComputeOp | 无 | 计算算子 [in] | | p | const OpParams& | 无 | 算子参数 [in] |

返回值 返回参数的格式化字符串

异常


pre_capture(const GraphAtlas& compile_atlas, const std::vector& contexts)

签名

PreCaptureResult pre_capture(const GraphAtlas& compile_atlas,
                              const std::vector<DeviceContext*>& contexts);

功能简介 Phase B:去重 + 三段式捕获。

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | compile_atlas | const GraphAtlas& | 无 | Phase A 编译期构建的 GraphAtlas [in] | | contexts | const std::vector& | 无 | 每 rank 一个 DeviceContext [in] |

返回值 返回去重后的 PreCaptureResult

异常


get_layer_descriptor(LayerKind kind)

签名

const LayerDescriptor& get_layer_descriptor(LayerKind kind);

功能简介 获取指定 LayerKindLayerDescriptor

参数 | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | kind | LayerKind | 无 | 层类型枚举 [in] |

返回值 返回对应描述符的常量引用

异常

注意事项 集中 switch 注册表,每个 LayerKind 返回一个不可变的 static 描述符。


Algo

板块介绍

Algo 模块提供训练算法的配置接口,包括优化器、学习率调度器和损失函数。

核心能力:

包含的类:

关键头文件:

内部实现: src/algo/optimizer.cppsrc/algo/scheduler.cpp


Optimizer

概述

Optimizer 是优化器配置的值语义包装类,内部持有具体优化器配置的深拷贝,支持类型查询和向下转型。

头文件: #include

设计定位: 用户与 Task 交互的接口,接受 SGD/LARS/Adam/AdamW 构建器构造,提供值语义传递和类型安全的访问。

优化器类型由 Core 模块的 OptimizerKind 枚举定义,取值包括 SGDSGD_MOMENTUMSGD_NESTEROVLARSLARS_NESTEROVADAMADAMW

是否有状态: 有状态(持有配置对象的深拷贝)

典型用法:

#include <renaissance.h>
using namespace tr;

// 通过构建器构造
Optimizer opt = LARS().momentum(0.9f).weight_decay(5e-5f);
task.optimizer(opt);

// 类型安全访问
if (opt.kind() == OptimizerKind::LARS) {
    const LARSConfig* cfg = opt.as<LARSConfig>();
    // 使用 cfg->trust_coefficient 等
}
构造与赋值
Optimizer::Optimizer()

默认构造,创建无效优化器(不持有任何配置)。

异常:


Optimizer::Optimizer(const OptimizerConfig& config)

从具体配置构造(深拷贝配置)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | config | const OptimizerConfig& | - | [in] 具体优化器配置(如 SGDConfig/LARSConfig/AdamConfig/AdamWConfig) |

异常:


Optimizer::Optimizer(const Optimizer& other)

拷贝构造(深拷贝内部配置)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | other | const Optimizer& | - | [in] 另一个 Optimizer 对象 |

异常:


Optimizer::operator=(const Optimizer& other)

拷贝赋值(深拷贝内部配置)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | other | const Optimizer& | - | [in] 另一个 Optimizer 对象 |

返回值: 返回 *this,支持链式调用

异常:


Optimizer::Optimizer(Optimizer&& other)

移动构造。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | other | Optimizer&& | - | [in] 右值引用 |

异常:


Optimizer::operator=(Optimizer&& other)

移动赋值。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | other | Optimizer&& | - | [in] 右值引用 |

返回值: 返回 *this,支持链式调用

异常:


查询接口
Optimizer::valid()

检查是否持有有效配置。

返回值: true 表示持有有效配置,false 表示默认构造的无效优化器

异常:


Optimizer::kind()

获取优化器类型。

返回值: 优化器类型枚举值,如 OptimizerKind::LARSOptimizerKind::ADAMW

异常: RuntimeError 如果未持有有效配置


Optimizer::kind_name()

获取优化器类型名称字符串。

返回值: 类型名称字符串,如 "LARS""AdamW"

异常:


Optimizer::as()

签名

template<typename T>
const T* as() const noexcept;

类型安全的向下转型访问。

模板参数 T: 目标配置类型(SGDConfig/LARSConfig/AdamConfig/AdamWConfig

返回值: 指向具体配置的指针;类型不匹配时返回 nullptr

异常:

示例:

Optimizer opt = AdamW().beta1(0.9f).weight_decay(0.01f);
if (const AdamWConfig* cfg = opt.as<AdamWConfig>()) {
    std::cout << "weight decay: " << cfg->weight_decay << "\n";
}

Optimizer::to_string()

获取配置描述字符串(用于日志与调试)。

返回值: 配置的字符串表示,如 "AdamWConfig{beta1=0.9, beta2=0.999, eps=1e-08, weight_decay=0.01}"

异常:


SGD

概述

SGD 是 SGD with Momentum 优化器配置构建器,支持无动量 SGD、带动量 SGD、Nesterov 动量 SGD 三种变体。

头文件: #include

设计定位: 链式配置构建器,隐式转换为 Optimizer 值包装类。

是否有状态: 有状态(持有 SGDConfig 配置)

变体推断规则:

注意事项: 默认 SGD() 的 momentum 为 0.9f,因此默认构造即表现为 SGD_MOMENTUM。若需要无动量 SGD,必须显式调用 .momentum(0.0f)

典型用法:

#include <renaissance.h>
using namespace tr;

// 无动量 SGD(必须显式将 momentum 设为 0)
task.optimizer(SGD().momentum(0.0f));

// 带动量 SGD(默认 momentum 为 0.9)
task.optimizer(SGD().momentum(0.9f).weight_decay(5e-5f));

// Nesterov 动量
task.optimizer(SGD().momentum(0.9f).nesterov(true));
构造与赋值
SGD::SGD()

默认构造,初始化 momentum = 0.9fweight_decay = 0.0fnesterov = false。默认构造的对象在未显式设置参数时即表现为 SGD_MOMENTUM

异常:


链式配置
SGD::momentum(float v)

设置动量系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 动量值,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


SGD::weight_decay(float v)

设置权重衰减(L2 正则化系数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 衰减系数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


SGD::nesterov(bool v)

设置是否使用 Nesterov 动量。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | - | [in] true=启用 Nesterov,false=普通动量 |

返回值: 返回 *this,支持链式调用

异常:


查询接口
SGD::kind()

根据当前参数推断具体的 OptimizerKind 变体。

返回值: OptimizerKind::SGDOptimizerKind::SGD_MOMENTUMOptimizerKind::SGD_NESTEROV

异常:


SGD::operator Optimizer()

隐式转换为 Optimizer(值语义)。

返回值: 持有当前配置深拷贝的 Optimizer 对象

异常:


LARS

概述

LARS 是 Layer-wise Adaptive Rate Scaling 优化器配置构建器,支持 LARS 及 LARS_NESTEROV 两种变体。

头文件: #include

设计定位: 链式配置构建器,适用于大规模训练(如 MLPerf 基准测试)。

是否有状态: 有状态(持有 LARSConfig 配置)

典型用法:

#include <renaissance.h>
using namespace tr;

// MLPerf Closed Division 配置
task.optimizer(LARS()
    .momentum(0.9f)
    .weight_decay(5e-5f)
    .trust_coefficient(0.001f)
    .nesterov(false)
    .eps(0.0f));

// MLPerf Open Division 配置
task.optimizer(LARS()
    .momentum(0.905f)
    .weight_decay(8e-5f)
    .trust_coefficient(0.001f)
    .nesterov(true)
    .eps(1e-8f));
构造与赋值
LARS::LARS()

默认构造,初始化 momentum = 0.9fweight_decay = 0.0ftrust_coefficient = 0.001feps = 1e-8fnesterov = false

异常:


链式配置
LARS::momentum(float v)

设置动量系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 动量值,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


LARS::weight_decay(float v)

设置权重衰减(L2 正则化系数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 衰减系数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


LARS::trust_coefficient(float v)

设置 LARS trust coefficient(η)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] trust coefficient,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v <= 0


LARS::eps(float v)

设置 LARS epsilon(数值稳定)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] epsilon 值,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


LARS::nesterov(bool v)

设置是否使用 Nesterov 动量。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | - | [in] true=启用 Nesterov |

返回值: 返回 *this,支持链式调用

异常:


查询接口
LARS::kind()

根据当前参数推断具体的 OptimizerKind 变体。

返回值: OptimizerKind::LARSOptimizerKind::LARS_NESTEROV

异常:


LARS::operator Optimizer()

隐式转换为 Optimizer(值语义)。

返回值: 持有当前配置深拷贝的 Optimizer 对象

异常:


Adam

概述

Adam 是 Adaptive Moment Estimation 优化器配置构建器。

头文件: #include

设计定位: 链式配置构建器,提供自适应学习率优化。

是否有状态: 有状态(持有 AdamConfig 配置)

注意: Adam 的 weight_decay 作用于梯度(非 decoupled),如需 decoupled weight decay 请使用 AdamW

典型用法:

#include <renaissance.h>
using namespace tr;

task.optimizer(Adam()
    .beta1(0.9f)
    .beta2(0.999f)
    .eps(1e-8f)
    .weight_decay(0.0f));
构造与赋值
Adam::Adam()

默认构造,初始化 beta1 = 0.9fbeta2 = 0.999feps = 1e-8fweight_decay = 0.0f

异常:


链式配置
Adam::beta1(float v)

设置 beta1(一阶矩衰减率)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 值必须在 (0, 1) 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v 不在 (0, 1) 区间


Adam::beta2(float v)

设置 beta2(二阶矩衰减率)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 值必须在 (0, 1) 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v 不在 (0, 1) 区间


Adam::eps(float v)

设置 epsilon(数值稳定)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v <= 0


Adam::weight_decay(float v)

设置权重衰减(L2 正则化)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 衰减系数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


查询接口
Adam::kind()

获取优化器类型。

返回值: 始终为 OptimizerKind::ADAM

异常:


Adam::operator Optimizer()

隐式转换为 Optimizer(值语义)。

返回值: 持有当前配置深拷贝的 Optimizer 对象

异常:


AdamW

概述

AdamW 是 Adam with decoupled weight decay 优化器配置构建器。

头文件: #include

设计定位: 链式配置构建器,weight decay 直接作用于参数而非梯度。

是否有状态: 有状态(持有 AdamWConfig 配置)

与 Adam 的区别: AdamW 的 weight decay 是 decoupled(解耦)的,直接作用于参数更新,而非像 Adam 那样作用于梯度。这是当前主流的 Adam 使用方式。

典型用法:

#include <renaissance.h>
using namespace tr;

task.optimizer(AdamW()
    .beta1(0.9f)
    .beta2(0.999f)
    .eps(1e-8f)
    .weight_decay(0.01f));
构造与赋值
AdamW::AdamW()

默认构造,初始化 beta1 = 0.9fbeta2 = 0.999feps = 1e-8fweight_decay = 0.0f

异常:


链式配置
AdamW::beta1(float v)

设置 beta1(一阶矩衰减率)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 值必须在 (0, 1) 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v 不在 (0, 1) 区间


AdamW::beta2(float v)

设置 beta2(二阶矩衰减率)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 值必须在 (0, 1) 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v 不在 (0, 1) 区间


AdamW::eps(float v)

设置 epsilon(数值稳定)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---| | v | float | - | [in] 必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v <= 0


AdamW::weight_decay(float v)

设置 decoupled 权重衰减系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | float | - | [in] 衰减系数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 v < 0


查询接口
AdamW::kind()

获取优化器类型。

返回值: 始终为 OptimizerKind::ADAMW

异常:


AdamW::operator Optimizer()

隐式转换为 Optimizer(值语义)。

返回值: 持有当前配置深拷贝的 Optimizer 对象

异常:


LRScheduler

概述

LRScheduler 是学习率调度器抽象基类,采用无状态纯函数设计。

头文件: #include

设计定位: 学习率调度策略的抽象基类,所有调度器继承自此基类。

是否有状态: 无状态(给定 (epoch, batch) 直接计算学习率,不维护 current_step/current_lr 等可变状态)

设计说明:

典型用法:

#include <renaissance.h>
using namespace tr;

// 通过派生类使用
task.scheduler(CosineAnnealingLR()
    .base_lr(0.1f)
    .warmup(5)
    .step_by_batch(true));
构造与赋值
LRScheduler::~LRScheduler()

签名

virtual ~LRScheduler() = default;

虚析构函数,确保派生类多态删除安全。

异常:


链式配置
LRScheduler::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


LRScheduler::warmup(int epochs)

设置 warmup 周期数(epoch 数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


LRScheduler::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0

注意事项: 设置后,warmup 起始学习率为绝对值,覆盖 warmup_start_factor() 的设置。


LRScheduler::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对 base_lr 的比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间

注意事项:warmup_start_lr() 互斥,后设置的覆盖先设置的。


LRScheduler::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进,false=按 epoch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


LRScheduler::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突

注意事项: 此方法等效于 step_by_batch(false),语义更清晰。


生命周期
LRScheduler::prepare(int total_epochs, int steps_per_epoch)

准备调度器,计算总步数和 warmup 步数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | total_epochs | int | - | [in] 总训练 epoch 数,必须 > 0 | | steps_per_epoch | int | - | [in] 每个 epoch 的 batch 数,必须 > 0 |

返回值:

异常: ValueError 如果 total_epochs <= 0steps_per_epoch <= 0

注意事项: 在使用 get_lr_by_batch()get_lr_by_epoch() 之前必须调用此方法。


LRScheduler::is_prepared()

检查是否已调用 prepare()。

返回值: true 表示已准备就绪,false 表示未调用 prepare()

异常:


查询接口
LRScheduler::get_lr_by_batch(int batch_id)

按 batch ID 获取学习率(const 纯函数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | batch_id | int | - | [in] 全局 batch ID,从 0 开始 |

返回值: 该 batch 对应的学习率

异常: RuntimeError 如果未调用 prepare()ValueError 如果 batch_id < 0 或当前未启用 step_by_batch

注意事项: 使用前必须先调用 prepare()。batch_id 为全局累计 batch 数,跨 epoch 连续递增。


LRScheduler::get_lr_by_epoch(int epoch_id)

按 epoch ID 获取学习率(const 纯函数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epoch_id | int | - | [in] epoch ID,从 0 开始 |

返回值: 该 epoch 对应的学习率

异常: RuntimeError 如果未调用 prepare()ValueError 如果 epoch_id < 0

注意事项: 使用前必须先调用 prepare()


LRScheduler::is_step_by_batch()

检查当前是否为按 batch 步进模式。

返回值: true 表示按 batch 步进,false 表示按 epoch 步进

异常:


LRScheduler::total_steps()

获取总训练步数(batch 数)。

返回值: total_epochs × steps_per_epoch

异常:

注意事项: 使用前必须先调用 prepare()


LRScheduler::total_epochs()

获取总训练 epoch 数。

返回值: 传入 prepare() 的 total_epochs

异常:


LRScheduler::steps_per_epoch()

获取每个 epoch 的 batch 数。

返回值: 传入 prepare() 的 steps_per_epoch

异常:


LRScheduler::warmup_steps()

获取 warmup 步数(batch 数)。

返回值: warmup_epochs × steps_per_epoch

异常:


PolynomialLR

概述

PolynomialLR 继承自 LRScheduler,实现多项式衰减学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = end_lr + (base_lr - end_lr) * (1 - decay_step / (total_decay + 1))^power

注意事项: 分母使用 total_decay + 1,对齐 TensorFlow 的 polynomial_decay 行为。

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(PolynomialLR()
    .base_lr(0.1f)
    .power(2.0f)
    .end_lr(0.0001f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
PolynomialLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


PolynomialLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


PolynomialLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


PolynomialLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


PolynomialLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


PolynomialLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


PolynomialLR::power(float p)

设置多项式指数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | p | float | - | [in] 多项式指数,默认 2.0(二次衰减),必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 p <= 0


PolynomialLR::end_lr(float end_lr)

设置结束学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | end_lr | float | - | [in] 衰减结束时的学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 end_lr < 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

CosineAnnealingLR

概述

CosineAnnealingLR 继承自 LRScheduler,实现余弦退火学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = eta_min + (base_lr - eta_min) * 0.5 * (1 + cos(pi * decay_step / total_decay))

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(CosineAnnealingLR()
    .base_lr(0.1f)
    .eta_min(1e-6f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
CosineAnnealingLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


CosineAnnealingLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


CosineAnnealingLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


CosineAnnealingLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


CosineAnnealingLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


CosineAnnealingLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


CosineAnnealingLR::eta_min(float emin)

设置最小学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | emin | float | - | [in] 最小学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 emin < 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

StepLR

概述

StepLR 继承自 LRScheduler,实现阶梯衰减学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = base_lr * gamma^(decay_step // (step_size * steps_per_epoch))

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(StepLR()
    .base_lr(0.1f)
    .step_size(10)
    .gamma(0.1f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
StepLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


StepLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


StepLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


StepLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


StepLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


StepLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


StepLR::step_size(int epochs)

设置衰减步长(epoch 数)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] 每 epoch 数后衰减一次,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs <= 0


StepLR::gamma(float g)

设置衰减系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | g | float | - | [in] 衰减系数,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 g <= 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

ConstantLR

概述

ConstantLR 继承自 LRScheduler,实现恒定学习率调度策略(无衰减)。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = base_lr  // 恒定不变

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(ConstantLR()
    .base_lr(0.001f)
    .warmup(3));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
ConstantLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


ConstantLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


ConstantLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


ConstantLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


ConstantLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


ConstantLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

MultiStepLR

概述

MultiStepLR 继承自 LRScheduler,实现多阶梯衰减学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = base_lr * gamma^count
其中 count 为 decay_step 超过的 milestones 数量

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(MultiStepLR()
    .base_lr(0.1f)
    .milestones({30, 60, 80})
    .gamma(0.1f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
MultiStepLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


MultiStepLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


MultiStepLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


MultiStepLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


MultiStepLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


MultiStepLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


MultiStepLR::milestones(const std::vector& m)

设置衰减里程碑(epoch 列表)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | m | const std::vector& | - | [in] epoch 列表,元素必须 >= 0 且严格递增 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果里程碑元素 < 0 或未严格递增


MultiStepLR::gamma(float g)

设置衰减系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | g | float | - | [in] 衰减系数,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 g <= 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

ExponentialLR

概述

ExponentialLR 继承自 LRScheduler,实现指数衰减学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

lr = base_lr * gamma^epoch
其中 epoch = decay_step // steps_per_epoch(整数除法)

注意事项: 衰减按 epoch 计数,decay_step 为扣除 warmup 后的步数。

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(ExponentialLR()
    .base_lr(0.1f)
    .gamma(0.95f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
ExponentialLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


ExponentialLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


ExponentialLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


ExponentialLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


ExponentialLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


ExponentialLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


ExponentialLR::gamma(float g)

设置衰减系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | g | float | - | [in] 衰减系数,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 g <= 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

WSDLR

概述

WSDLR 继承自 LRScheduler,实现"稳定期+线性衰减"学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

前 80% (decay_start 比例): lr = base_lr
后 20%: lr = base_lr - (base_lr - end_lr) * ((decay_step - decay_start) / (total_decay - decay_start))

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(WSDLR()
    .base_lr(0.1f)
    .decay_start(0.8f)
    .end_lr(0.0f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
WSDLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


WSDLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


WSDLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


WSDLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


WSDLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


WSDLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


WSDLR::decay_start(float fraction)

设置衰减起始位置(占 total_decay 的比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | fraction | float | - | [in] 衰减起始比例,0.8 表示前 80% 为 stable,后 20% 线性衰减,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 fraction 不在 [0, 1] 区间


WSDLR::end_lr(float lr)

设置结束学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 衰减结束时的学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr < 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

CosineAnnealingWithWarmRestartsLR

概述

CosineAnnealingWithWarmRestartsLR 继承自 LRScheduler,实现带热重启的余弦退火学习率调度策略。

头文件: #include

是否有状态: 无状态(纯函数设计)

衰减公式:

每个周期 T_i 内:
  lr = eta_min + (base_lr - eta_min) * 0.5 * (1 + cos(pi * t / T_i))
其中 t 为当前周期内的步数,T_i = T_0 * T_mult^i

典型用法:

#include <renaissance.h>
using namespace tr;

task.scheduler(CosineAnnealingWithWarmRestartsLR()
    .base_lr(0.1f)
    .T_0(10)
    .T_mult(2)
    .eta_min(0.0f)
    .warmup(5));

该类继承 LRScheduler 的全部公共接口,详见 LRScheduler

链式配置
CosineAnnealingWithWarmRestartsLR::base_lr(float lr)

设置基础学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | lr | float | - | [in] 基础学习率,必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 lr <= 0


CosineAnnealingWithWarmRestartsLR::warmup(int epochs)

设置 warmup 周期数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | epochs | int | - | [in] warmup epoch 数,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 epochs < 0


CosineAnnealingWithWarmRestartsLR::warmup_start_factor(float factor)

设置 warmup 起始学习率(相对比例)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | factor | float | - | [in] 比例因子,必须在 [0, 1] 区间 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 factor 不在 [0, 1] 区间


CosineAnnealingWithWarmRestartsLR::warmup_start_lr(float start_lr)

设置 warmup 起始学习率(绝对值)。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | start_lr | float | - | [in] warmup 起始学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 start_lr < 0


CosineAnnealingWithWarmRestartsLR::step_by_batch(bool v = true)

设置为按 batch 步进模式。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | v | bool | true | [in] true=按 batch 步进 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


CosineAnnealingWithWarmRestartsLR::step_by_epoch()

设置为按 epoch 步进模式。

返回值: 返回 *this,支持链式调用

异常: ValueError 如果步进模式已锁定且与当前设置冲突


CosineAnnealingWithWarmRestartsLR::T_0(int t0)

设置初始周期长度。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | t0 | int | - | [in] 初始周期长度(epoch 数或 batch 数),必须 > 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 t0 <= 0


CosineAnnealingWithWarmRestartsLR::T_mult(int tm)

设置周期倍增系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | tm | int | - | [in] 每次重启后周期长度乘以该系数,必须 >= 1 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 tm < 1


CosineAnnealingWithWarmRestartsLR::eta_min(float emin)

设置最小学习率。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | emin | float | - | [in] 最小学习率,必须 >= 0 |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 emin < 0


继承自基类的公共接口
方法 继承自
prepare() LRScheduler
get_lr_by_batch() LRScheduler
get_lr_by_epoch() LRScheduler
is_prepared() LRScheduler
is_step_by_batch() LRScheduler
total_steps() LRScheduler
total_epochs() LRScheduler
steps_per_epoch() LRScheduler
warmup_steps() LRScheduler

CrossEntropyLoss

概述

CrossEntropyLoss 是交叉熵损失函数配置类(一期唯一支持的损失函数)。

头文件: #include

设计定位: 纯配置类,无运行时状态,用于 Task 链式配置中设定损失函数参数。实际计算由后端融合算子完成。

是否有状态: 无状态(仅持有配置参数)

设计约束:

典型用法:

#include <renaissance.h>
using namespace tr;

task.loss(CrossEntropyLoss().label_smoothing(0.1f));
构造与赋值
CrossEntropyLoss::CrossEntropyLoss()

默认构造,初始化 label_smoothing = 0.0f(不使用标签平滑)。

异常:


链式配置
CrossEntropyLoss::label_smoothing(float value)

设置标签平滑系数。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | value | float | - | [in] 标签平滑系数,范围 [0, 0.2] |

返回值: 返回 *this,支持链式调用

异常: ValueError 如果 value 不在 [0, 0.2] 范围内

标签平滑的含义:


查询接口
CrossEntropyLoss::label_smoothing()

获取当前标签平滑系数。

返回值: 当前标签平滑系数

异常:


独立函数

概述

Algo 模块提供若干与优化器/学习率调度器配合的独立工具函数,如将 OptimizerKind 转换为字符串、从优化器类型推导 PlanConfig 等。

所属头文件#include 等。

设计定位:无状态自由函数,直接调用。

优化器工具函数
optimizer_kind_name(OptimizerKind)

签名:

const char* optimizer_kind_name(OptimizerKind kind) noexcept;

功能简介:OptimizerKind 枚举值转换为可读的类型名称字符串,常用于日志输出。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | kind | OptimizerKind | - | [in] 优化器类型枚举 |

返回值: 优化器类型名称字符串,如 "SGD""LARS""AdamW" 等;未知类型返回 "Unknown"

异常:


plan_config_from_optimizer(OptimizerKind, bool)

签名:

PlanConfig plan_config_from_optimizer(OptimizerKind kind, bool has_ema = false);

功能简介: 根据优化器类型推导 PlanConfig 中的优化器相关标志(如是否使用 momentum、Adam、LARS 等),供后端执行计划使用。

参数: | 参数名 | 类型 | 默认值 | 说明 | |:---|:---|:---|:---| | kind | OptimizerKind | - | [in] 优化器类型 | | has_ema | bool | false | [in] 是否使用 EMA |

返回值: 推导得到的 PlanConfig 结构

异常:

注意事项: bn_folded / need_mask 由调用方根据网络结构设置,不在此函数内处理。

Task

板块介绍

Task 模块是 Tech-Renaissance 的任务执行层,提供统一的三阶段状态机(PLANNING → MEMORY_LOCKED → COMPILED)和硬件句柄管理。该模块包含两个面向不同场景的任务门面类:SimpleTask 用于手动构图场景,DeepLearningTask 用于深度学习训练场景。

核心能力:

包含的类/枚举/函数:

关键头文件:

内部实现位置:src/task/


enum class CompileInfo

概述

编译诊断信息级别,位掩码枚举。用于控制 compile() 时打印的诊断信息范围,默认只打印模型架构(ArchPlan)。

枚举值 说明
NONE 不打印诊断信息
ARCH_PLAN 打印模型架构(默认)
MEMORY_PLAN 打印内存布局
TRAIN_GRAPH 打印训练计算图详情
INFER_GRAPH 打印推理计算图详情
ALL 打印所有诊断信息

位运算组合示例:

task.compile(CompileInfo::ARCH_PLAN | CompileInfo::MEMORY_PLAN);  // 打印架构和内存布局
task.compile(CompileInfo::ALL);  // 打印所有信息

TaskBase

概述

任务抽象基类,定义三阶段状态机和核心硬件句柄接口。TaskBase 是整个 Task 模块的基础,强制执行 PLANNING → MEMORY_LOCKED → COMPILED 状态转换,管理 CUDA Graph 生命周期和多 GPU 硬件资源。

头文件:#include

设计定位:TaskBase 是硬件句柄的唯一持有者,通过 protected 接口暴露构图能力给派生类,通过 public 接口暴露运行期能力给用户。

状态管理:有状态,强制三阶段状态机

继承关系:无继承,作为基类被 SimpleTaskDeepLearningTask 继承

典型使用路径:用户通过 SimpleTaskDeepLearningTask 使用,不直接构造 TaskBase

关联类型:本模块使用 Core 模块定义的 Phase 三阶段状态机,以及 MetricTTATrainingResult 等类型。

核心概念:Rank 与 GPU ID 的区别

示例:

GlobalRegistry::instance().use_gpu("2,3,5,7");  // 指定物理 GPU
task.transfer_to_rank(host_tensor, dtensor, 0); // rank 0 → GPU 2
task.fill(dtensor, 1.0f);                       // 所有 rank → GPU (2,3,5,7)

构造、析构与赋值
TaskBase::TaskBase()

签名

TaskBase();

功能简介

protected 默认构造函数,创建处于 Phase::PLANNING 阶段的任务。用户不直接构造 TaskBase,而是通过 SimpleTaskDeepLearningTask 派生类使用。

异常


TaskBase::TaskBase(const TaskBase&)

签名

TaskBase(const TaskBase&) = delete;

功能简介

禁用拷贝构造。


TaskBase::TaskBase(TaskBase&&)

签名

TaskBase(TaskBase&&) = delete;

功能简介

禁用移动构造。


TaskBase::operator=(const TaskBase&)

签名

TaskBase& operator=(const TaskBase&) = delete;
TaskBase& operator=(TaskBase&&) = delete;

功能简介

禁用拷贝赋值与移动赋值。


TaskBase::~TaskBase()

签名

virtual ~TaskBase();

功能简介

虚析构函数,释放硬件资源和 CUDA Graph。由派生类自动调用。

异常


状态查询
TaskBase::phase()

签名

[[nodiscard]] Phase phase() const noexcept;

功能简介

获取当前任务所处阶段。

返回值

当前阶段(Phase::PLANNINGPhase::MEMORY_LOCKEDPhase::COMPILED

异常


TaskBase::memory_plan()

签名

[[nodiscard]] const MemoryPlan& memory_plan() const noexcept;

功能简介

获取当前内存布局计划(只读)。

返回值

MemoryPlan 常量引用,包含所有 DTensor 的布局信息

异常


TaskBase::config()

签名

[[nodiscard]] PlanConfig& config() noexcept;

功能简介

获取内存布局配置(可修改)。

返回值

PlanConfig 引用,可配置 BN 折叠、优化器类型等

异常


TaskBase::debug_mode()

签名

[[nodiscard]] bool debug_mode() const noexcept;

功能简介

检查是否处于调试模式(干运行)。

返回值

true 表示调试模式,false 表示正常运行

异常


TaskBase::is_simple_task()

签名

[[nodiscard]] virtual bool is_simple_task() const;

功能简介

判断当前任务是否为 SimpleTask 类型。

返回值

SimpleTask 实例返回 true,TaskBase 自身及 DeepLearningTask 返回 false

异常


TaskBase::graphs()

签名

[[nodiscard]] const std::unordered_map<std::string, GraphEntry>& graphs() const noexcept;
[[nodiscard]] std::unordered_map<std::string, GraphEntry>& graphs() noexcept;

功能简介

获取所有已注册命名计算图的访问接口。const 重载为只读,非 const 重载允许修改。

返回值

命名图到 GraphEntry 的映射引用。GraphEntry 包含 ComputationGraphStreamKind

异常

注意事项

主要用于测试和调试,普通用户通常通过 run() 间接使用图。


编译接口
TaskBase::compile()

签名

void compile();

功能简介

正常编译模式:分配硬件资源、捕获 CUDA Graph、进入 COMPILED 阶段。

异常

注意事项

必须在 PLANNING 或 MEMORY_LOCKED 阶段调用,调用后进入 COMPILED 阶段。


TaskBase::compile_for_dry_run()

签名

void compile_for_dry_run();

功能简介

干运行编译:仅完成 IR 规划与打印,不分配硬件、不捕获图。用于调试模型架构和内存布局。

异常

注意事项

编译后处于 COMPILED 阶段,但无法执行实际训练。


TaskBase::compile_capture_simple()

签名

void compile_capture_simple();

功能简介

SimpleTask 专用:逐个图独立捕获,不进入 GraphAtlas 预捕获流水线。

异常

注意事项

SimpleTask 可调用此方法。


数据传输
TaskBase::transfer(const Tensor&, const DTensor&)

签名

void transfer(const Tensor& host, const DTensor& dtensor);

功能简介

主机到设备传输:将主机张量数据广播到所有 GPU。

参数

参数名 类型 默认值 说明
host const Tensor& - [in] 主机张量
dtensor const DTensor& - [in] 目标分布式张量

返回值

异常

注意事项

必须在 COMPILED 阶段调用。等价于先 transfer_to_rank(host, dtensor, 0)broadcast_from_rank0(dtensor)


TaskBase::transfer(const std::vector&, const DTensor&)

签名

void transfer(const std::vector<Tensor>& hosts, const DTensor& dtensor);

功能简介

多主机张量传输:每个 GPU 对应一个主机张量,按 Rank 顺序传输。

参数

参数名 类型 默认值 说明
hosts const std::vector& - [in] 主机张量列表
dtensor const DTensor& - [in] 目标分布式张量

返回值

异常

注意事项

必须在 COMPILED 阶段调用。hosts[i] 传输到 rank i。


TaskBase::transfer_to_rank()

签名

void transfer_to_rank(const Tensor& host, const DTensor& dtensor, int rank);

功能简介

仅传输到指定逻辑 Rank(不广播)。

参数

参数名 类型 默认值 说明
host const Tensor& - [in] 主机张量
dtensor const DTensor& - [in] 目标分布式张量
rank int - [in] 目标逻辑 Rank(0 ~ num_gpus-1)

返回值

异常

注意事项

示例

task.transfer_to_rank(h_a, d_a, 0);  // 传输到 rank 0(GPU 2)

TaskBase::broadcast_from_rank0()

签名

void broadcast_from_rank0(const DTensor& dtensor);

功能简介

从逻辑 Rank 0 广播到所有 GPU。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in,out] 要广播的分布式张量

返回值

异常

注意事项

示例

task.broadcast_from_rank0(d_a);  // 广播到所有卡

TaskBase::fetch_from_rank()

签名

[[nodiscard]] Tensor fetch_from_rank(const DTensor& dtensor, int rank);

功能简介

从指定逻辑 Rank 取回数据到 CPU。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in] 源分布式张量
rank int - [in] 源逻辑 Rank(0 ~ num_gpus-1)

返回值

主机张量,包含从指定 Rank 取回的数据

异常

注意事项


TaskBase::fetch()

签名

[[nodiscard]] Tensor fetch(const DTensor& dtensor);

功能简介

从逻辑 Rank 0 取回数据到 CPU(便捷方法)。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in] 源分布式张量

返回值

主机张量,包含从 Rank 0 取回的数据

异常

注意事项

等价于 fetch_from_rank(dtensor, 0)


数据初始化
TaskBase::fill()

签名

void fill(const DTensor& dtensor, float value);

功能简介

用常量值填充分布式张量(所有 Rank)。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in,out] 目标分布式张量
value float - [in] 填充值

返回值

异常

注意事项


TaskBase::zero()

签名

void zero(const DTensor& dtensor);

功能简介

将分布式张量清零(所有 Rank)。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in,out] 目标分布式张量

返回值

异常

注意事项

等价于 fill(dtensor, 0.0f)。必须在 COMPILED 阶段调用。


TaskBase::randn()

签名

void randn(const DTensor& dtensor, uint64_t seed);

功能简介

用正态分布随机数填充分布式张量(所有 Rank)。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in,out] 目标分布式张量
seed uint64_t - [in] 随机种子

返回值

异常

注意事项


TaskBase::init()

签名

void init(const DTensor& dtensor, InitConfig cfg = InitConfig{});

功能简介

InitConfig 配置初始化单个 DTensor。

参数

参数名 类型 默认值 说明
dtensor const DTensor& - [in,out] 目标分布式张量
cfg InitConfig InitConfig{} [in] 初始化配置

返回值

异常

注意事项

示例

task.init(d_w);  // 按 Initializer 策略初始化权重

TaskBase::init_all()

签名

void init_all();

功能简介

初始化 MemoryPlan 中所有参数 DTensor。

返回值

异常

注意事项

按每个 DTensor 的 init_config 配置执行初始化,跳过 InitKind::NONE 的张量。必须在 COMPILED 阶段调用。

示例

task.init_all();  // 初始化所有权重

TaskBase::set_dropout_seed_id()

签名

void set_dropout_seed_id(int32_t id);

功能简介

设置 Dropout per-RANK seed 的 DTensor ID。

参数

参数名 类型 默认值 说明
id int32_t - [in] 已分配的 seed DTensor ID

返回值

异常

注意事项

用于 SimpleTask 测试场景,补充 baseline 注入。DTensor 应在 S_SCALAR_INT32 区域,shape 为 {1,1,1,2}。


策略配置
TaskBase::initializer()

签名

TaskBase& initializer(const Initializer& init);

功能简介

配置初始化策略(必须在 PLANNING 阶段调用,alloc 前)。

参数

参数名 类型 默认值 说明
init const Initializer& - [in] 初始化策略

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 PLANNING 阶段调用,否则配置不生效。

示例

task.initializer(Initializer().conv(TRUNC_NORMAL).bn().fc(FIXED_NORMAL));

TaskBase::initializer() const

签名

[[nodiscard]] const Initializer& initializer() const noexcept;

功能简介

获取当前初始化策略(只读)。

返回值

Initializer 常量引用

异常


TaskBase::scheduler(SchedulerType&& sched)

签名

template<typename SchedulerType>
TaskBase& scheduler(SchedulerType&& sched);

功能简介

配置学习率调度器(模板方法,支持任意派生类)。

参数

参数名 类型 默认值 说明
sched SchedulerType&& - [in] 任意调度器派生类实例

返回值

返回 *this,支持链式调用

异常

注意事项

支持 PolynomialLRCosineAnnealingLRStepLRConstantLR 等所有调度器类型。

示例

task.scheduler(PolynomialLR()
    .base_lr(12.4f)
    .warmup(2)
    .power(2.0f)
    .step_by_batch());

TaskBase::scheduler() const

签名

[[nodiscard]] const LRScheduler* scheduler() const noexcept;

功能简介

获取当前学习率调度器(只读)。

返回值

LRScheduler 指针,未设置时为 nullptr

异常


TaskBase::scheduler()

签名

[[nodiscard]] LRScheduler* scheduler() noexcept;

功能简介

获取当前学习率调度器(可修改)。

返回值

LRScheduler 指针,未设置时为 nullptr

异常


SimpleTask

概述

手动构图门面类,暴露 TaskBase 的手动构图接口,提供极简用户体验。SimpleTask 适用于用户需要显式控制计算图构建的场景,如自定义算子测试、性能基准测试、算法验证等。

头文件:#include

设计定位:面向手动构图场景的任务句柄,通过 using 声明将 TaskBase 的 protected 接口提升为 public。

状态管理:有状态,继承 TaskBase 的三阶段状态机

继承关系:继承自 TaskBase,重写 on_prepare()compile_freeze_global() 钩子

典型使用路径:用户直接构造 SimpleTask,手动调用 alloc()finalize_memory()add_graph()compile()run() 等方法

与 DeepLearningTask 的区别:

典型工作流程:

  1. PLANNING 阶段:调用 alloc() 分配 DTensor
  2. 调用 finalize_memory() 锁定内存布局
  3. MEMORY_LOCKED 阶段:调用 add_graph() 注册计算图
  4. 调用 compile() 编译并捕获 CUDA Graph
  5. COMPILED 阶段:通过 transfer()fill() 初始化数据
  6. 调用 run() 执行图,通过 fetch() 取回结果

构造、析构与赋值
SimpleTask::SimpleTask()

签名

SimpleTask() = default;

功能简介

默认构造函数,创建处于 PLANNING 阶段的手动构图任务。

异常


SimpleTask::SimpleTask(const SimpleTask&)

签名

SimpleTask(const SimpleTask&) = delete;

功能简介

禁用拷贝构造。


SimpleTask::SimpleTask(SimpleTask&&)

签名

SimpleTask(SimpleTask&&) = delete;

功能简介

禁用移动构造。


SimpleTask::operator=(const TaskBase&)

签名

SimpleTask& operator=(const SimpleTask&) = delete;
SimpleTask& operator=(SimpleTask&&) = delete;

功能简介

禁用拷贝赋值与移动赋值。


SimpleTask::~SimpleTask()

签名

~SimpleTask() override = default;

功能简介

析构函数,资源由 TaskBase 和 Backend RAII 管理。

异常


SimpleTask::is_simple_task()

签名

[[nodiscard]] bool is_simple_task() const override;

功能简介

重写基类方法,返回 true 标识当前为 SimpleTask

返回值

true

异常


手动构图接口
SimpleTask::alloc()

签名

using TaskBase::alloc;

功能简介

在 PLANNING 阶段分配分布式张量(继承自 TaskBase)。

参数

参数名 类型 默认值 说明
shape const Shape& - [in] NHWC 逻辑形状
dtype DType DType::FP32 [in] 数据类型
region Region - [in] 显存区域

返回值

DTensor 分布式张量描述符

异常

注意事项

必须在 PLANNING 阶段调用。Region 不能省略,避免 AMP/FP32 静默错配。

示例

DTensor d_a = task.alloc(shape, DType::FP32, Region::F_FEATURE_FP32);

SimpleTask::alloc_scalar()

签名

using TaskBase::alloc_scalar;

功能简介

在 PLANNING 阶段分配标量张量(继承自 TaskBase)。

参数

参数名 类型 默认值 说明
dtype DType DType::FP32 [in] 数据类型

返回值

DTensor 标量分布式张量描述符

异常

注意事项

自动放入 S_SCALAR 区域(FP32 或 FP16)。必须在 PLANNING 阶段调用。

示例

DTensor d_alpha = task.alloc_scalar(DType::FP32);

SimpleTask::finalize_memory()

签名

using TaskBase::finalize_memory;

功能简介

锁定内存布局,从 PLANNING 进入 MEMORY_LOCKED 阶段(继承自 TaskBase)。

返回值

异常

注意事项

调用后不可再 alloc(),必须先 add_graph()compile()


SimpleTask::add_graph()

签名

using TaskBase::add_graph;

功能简介

在 MEMORY_LOCKED 阶段注册命名计算图(继承自 TaskBase)。

参数

参数名 类型 默认值 说明
name const std::string& - [in] 图名称
graph ComputationGraph - [in] 平台无关计算图
stream StreamKind StreamKind::COMP_1 [in] 流类型

返回值

异常

注意事项

必须在 MEMORY_LOCKED 阶段调用,编译阶段不可添加新图。

示例

task.add_graph("xfer", std::move(g_xfer), StreamKind::TRANS);

图执行接口
SimpleTask::run(const std::string&)

签名

void run(const std::string& name);

功能简介

执行单个已注册的图。

参数

参数名 类型 默认值 说明
name const std::string& - [in] 图名称

返回值

异常

注意事项

必须在 COMPILED 阶段调用。

示例

task.run("axpy");

SimpleTask::run(const std::string&, const std::string&)

签名

void run(const std::string& a, const std::string& b);

功能简介

双图并行执行。

参数

参数名 类型 默认值 说明
a const std::string& - [in] 第一个图的名称
b const std::string& - [in] 第二个图的名称

返回值

异常

注意事项

两个图在不同 Stream 上并行执行。必须在 COMPILED 阶段调用。

示例

task.run("xfer", "compute");

SimpleTask::run_iter(const std::string& name, int iterations)

签名

void run_iter(const std::string& name, int iterations);

功能简介

高性能迭代执行单个图(SimpleTask 专用)。

参数

参数名 类型 默认值 说明
name const std::string& - [in] 图名称
iterations int - [in] 迭代次数

返回值

异常

注意事项


SimpleTask::run_iter(const std::string& a, const std::string& b, int iterations)

签名

void run_iter(const std::string& a, const std::string& b, int iterations);

功能简介

高性能迭代执行双图并行(SimpleTask 专用)。

参数

参数名 类型 默认值 说明
a const std::string& - [in] 第一个图的名称
b const std::string& - [in] 第二个图的名称
iterations int - [in] 迭代次数

返回值

异常

注意事项

双图在不同 Stream 上并行执行,GPU 场景下多线程展开。


调试接口
SimpleTask::print_memory_plan()

签名

void print_memory_plan(std::ostream& os = std::cout) const;

功能简介

打印 MemoryPlan 布局信息到指定输出流。

参数

参数名 类型 默认值 说明
os std::ostream& std::cout [in,out] 输出流

返回值

异常

注意事项

必须在 compile() 之后调用。输出包含每个 Region 的偏移、大小,以及其中所有 Tensor 的 ID/偏移/字节数/类型/形状。


SimpleTask::print_computation_graphs()

签名

void print_computation_graphs(std::ostream& os = std::cout) const;

功能简介

打印所有已注册 ComputationGraph 的拓扑信息到指定输出流。

参数

参数名 类型 默认值 说明
os std::ostream& std::cout [in,out] 输出流

返回值

异常

注意事项

必须在 compile() 之后调用。输出包含每张图的名字、Stream、节点总数,以及每个节点的算子/输入/输出。


继承自基类的公共接口

SimpleTask 通过 using 声明继承了 TaskBase 的以下 public 接口,详见 TaskBase 文档:

方法 继承自 说明
phase() TaskBase 获取当前阶段
memory_plan() TaskBase 获取内存布局计划
config() TaskBase 获取内存布局配置
debug_mode() TaskBase 检查调试模式
is_simple_task() TaskBase 判断是否为 SimpleTask
graphs() TaskBase 获取已注册计算图
compile() TaskBase 编译任务
compile_for_dry_run() TaskBase 干运行编译
compile_capture_simple() TaskBase SimpleTask 专用编译
transfer() TaskBase 主机到设备广播传输
transfer_to_rank() TaskBase 传输到指定 Rank
broadcast_from_rank0() TaskBase 从 Rank 0 广播
fill() TaskBase 常量填充
zero() TaskBase 清零
randn() TaskBase 正态分布随机初始化
init() TaskBase 初始化单个 DTensor
init_all() TaskBase 初始化所有 DTensor
set_dropout_seed_id() TaskBase 设置 Dropout seed
initializer() TaskBase 配置初始化策略
scheduler() TaskBase 配置学习率调度器
scheduler() const TaskBase 获取学习率调度器(只读)
scheduler() TaskBase 获取学习率调度器(可修改)
fetch_from_rank() TaskBase 从 Rank 取回数据
fetch() TaskBase 从 Rank 0 取回数据

DeepLearningTask

概述

深度学习训练任务门面类,封装完整训练循环、验证、SEMA、早停与指标收集。DeepLearningTask 适用于标准深度学习训练场景,用户只需配置模型、优化器、调度器等超参数,无需手动构图。

头文件:#include

设计定位:深度学习训练门面,隐藏构图细节,通过 BluePrint 自动生成 IR。

状态管理:有状态,继承 TaskBase 的三阶段状态机

继承关系:继承自 TaskBase,重写 on_prepare() 驱动 Compiler 生成完整 IR

典型使用路径:用户构造 DeepLearningTask,通过链式 API 配置训练参数,调用 compile()run() 执行训练

与 SimpleTask 的区别:

内部执行路径:DeepLearningTaskcompile() 期间通过 build_graph_atlas()build_exec_table()fetch_lr_for_batch()init_variant_scalars() 等内部方法完成图索引、执行表预解析和运行时标量初始化。这些方法为 public,但由编译/训练流程自动调用,普通用户无需直接操作。


构造、析构与赋值
DeepLearningTask::DeepLearningTask()

签名

DeepLearningTask();

功能简介

构造函数,创建处于 PLANNING 阶段的深度学习训练任务。

异常


DeepLearningTask::DeepLearningTask(const DeepLearningTask&)

签名

DeepLearningTask(const DeepLearningTask&) = delete;

功能简介

禁用拷贝构造。


DeepLearningTask::DeepLearningTask(DeepLearningTask&&)

签名

DeepLearningTask(DeepLearningTask&&) = delete;

功能简介

禁用移动构造。


DeepLearningTask::operator=(const DeepLearningTask&)

签名

DeepLearningTask& operator=(const DeepLearningTask&) = delete;
DeepLearningTask& operator=(DeepLearningTask&&) = delete;

功能简介

禁用拷贝赋值与移动赋值。


DeepLearningTask::~DeepLearningTask()

签名

~DeepLearningTask() override;

功能简介

析构函数,释放训练资源和 CUDA Graph。

异常


DeepLearningTask::is_simple_task()

签名

[[nodiscard]] bool is_simple_task() const override;

功能简介

重写基类方法,返回 false 标识当前不是 SimpleTask

返回值

false

异常


链式配置接口
DeepLearningTask::model()

签名

DeepLearningTask& model(const BluePrint& bp);

功能简介

设置模型蓝图。

参数

参数名 类型 默认值 说明
bp const BluePrint& - [in] 模型蓝图

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。


DeepLearningTask::loss()

签名

DeepLearningTask& loss(const CrossEntropyLoss& loss_cfg);

功能简介

设置损失函数。

参数

参数名 类型 默认值 说明
loss_cfg const CrossEntropyLoss& - [in] 损失函数配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。


DeepLearningTask::initializer()

签名

DeepLearningTask& initializer(const Initializer& init);

功能简介

设置权重初始化策略。

参数

参数名 类型 默认值 说明
init const Initializer& - [in] 初始化策略

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。如未设置,on_prepare() 会自动应用默认策略。


DeepLearningTask::optimizer(const LARS&)

签名

DeepLearningTask& optimizer(const LARS& opt);

功能简介

设置 LARS 优化器。

参数

参数名 类型 默认值 说明
opt const LARS& - [in] LARS 优化器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。LARS 适用于大 batch 训练。


DeepLearningTask::optimizer(const SGD&)

签名

DeepLearningTask& optimizer(const SGD& opt);

功能简介

设置 SGD 优化器。

参数

参数名 类型 默认值 说明
opt const SGD& - [in] SGD 优化器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。


DeepLearningTask::optimizer(const Adam&)

签名

DeepLearningTask& optimizer(const Adam& opt);

功能简介

设置 Adam 优化器。

参数

参数名 类型 默认值 说明
opt const Adam& - [in] Adam 优化器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。Adam 自适应学习率,适合大多数场景。


DeepLearningTask::optimizer(const AdamW&)

签名

DeepLearningTask& optimizer(const AdamW& opt);

功能简介

设置 AdamW 优化器。

参数

参数名 类型 默认值 说明
opt const AdamW& - [in] AdamW 优化器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。AdamW 解耦权重衰减,适合Transformer等架构。


DeepLearningTask::scheduler(const PolynomialLR&)

签名

DeepLearningTask& scheduler(const PolynomialLR& sched);

功能简介

设置 PolynomialLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const PolynomialLR& - [in] PolynomialLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。多项式衰减,MLPerf 推荐策略。


DeepLearningTask::scheduler(const CosineAnnealingLR&)

签名

DeepLearningTask& scheduler(const CosineAnnealingLR& sched);

功能简介

设置 CosineAnnealingLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const CosineAnnealingLR& - [in] CosineAnnealingLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。余弦退火,平滑衰减策略。


DeepLearningTask::scheduler(const StepLR&)

签名

DeepLearningTask& scheduler(const StepLR& sched);

功能简介

设置 StepLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const StepLR& - [in] StepLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。阶梯式衰减,按步长降低学习率。


DeepLearningTask::scheduler(const ConstantLR&)

签名

DeepLearningTask& scheduler(const ConstantLR& sched);

功能简介

设置 ConstantLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const ConstantLR& - [in] ConstantLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。恒定学习率,不衰减。


DeepLearningTask::scheduler(const MultiStepLR&)

签名

DeepLearningTask& scheduler(const MultiStepLR& sched);

功能简介

设置 MultiStepLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const MultiStepLR& - [in] MultiStepLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。多阶梯衰减,在指定 epoch 降低学习率。


DeepLearningTask::scheduler(const ExponentialLR&)

签名

DeepLearningTask& scheduler(const ExponentialLR& sched);

功能简介

设置 ExponentialLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const ExponentialLR& - [in] ExponentialLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。指数衰减,每 epoch 按比例降低学习率。


DeepLearningTask::scheduler(const WSDLR&)

签名

DeepLearningTask& scheduler(const WSDLR& sched);

功能简介

设置 WSDLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const WSDLR& - [in] WSDLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。Warmup + Step Decay,先预热再阶梯衰减。


DeepLearningTask::scheduler(const CosineAnnealingWithWarmRestartsLR&)

签名

DeepLearningTask& scheduler(const CosineAnnealingWithWarmRestartsLR& sched);

功能简介

设置 CosineAnnealingWithWarmRestartsLR 学习率调度器。

参数

参数名 类型 默认值 说明
sched const CosineAnnealingWithWarmRestartsLR& - [in] CosineAnnealingWithWarmRestartsLR 调度器配置

返回值

返回 *this,支持链式调用

异常

注意事项

必须在 compile() 前调用。余弦退火 + 热重启,周期性重置学习率。


DeepLearningTask::total_epochs()

签名

DeepLearningTask& total_epochs(int n);

功能简介

设置总训练 epoch 数。

参数

参数名 类型 默认值 说明
n int - [in] 总 epoch 数

返回值

返回 *this,支持链式调用

异常

注意事项

默认值 35。必须在 compile() 前调用。


DeepLearningTask::num_classes()

签名

DeepLearningTask& num_classes(int n);

功能简介

设置输出类别数(ArchPlan::build 使用)。

参数

参数名 类型 默认值 说明
n int - [in] 类别数

返回值

返回 *this,支持链式调用

异常

注意事项

默认值 1000(ImageNet)。必须在 compile() 前调用。


DeepLearningTask::validate_every()

签名

DeepLearningTask& validate_every(int interval, int offset = 0);

功能简介

设置验证频率。

参数

参数名 类型 默认值 说明
interval int - [in] 每多少个 epoch 验证一次(必须 > 0)
offset int 0 [in] 首次验证的 epoch 编号(1-based)

返回值

返回 *this,支持链式调用

异常

注意事项

示例

task.validate_every(4, 2);  // 在 epoch 2, 6, 10, 14, ... 验证

DeepLearningTask::early_stop_by_top1()

签名

DeepLearningTask& early_stop_by_top1(float threshold);

功能简介

设置早停 Top-1 准确率阈值。

参数

参数名 类型 默认值 说明
threshold float - [in] 准确率阈值(0.0 ~ 1.0)

返回值

返回 *this,支持链式调用

异常

注意事项

当验证 Top-1 准确率达到阈值时,训练提前终止。


DeepLearningTask::use_sema()

签名

DeepLearningTask& use_sema(bool enable);

功能简介

是否启用 SEMA(Switch EMA)。

参数

参数名 类型 默认值 说明
enable bool - [in] 是否启用

返回值

返回 *this,支持链式调用

异常

注意事项

SEMA 在每个 epoch 开关将 EMA 权重应用回主模型,提升推理性能。


DeepLearningTask::sema_decay()

签名

DeepLearningTask& sema_decay(float decay);

功能简介

设置 SEMA 衰减系数。

参数

参数名 类型 默认值 说明
decay float - [in] 衰减系数(0.0 ~ 1.0)

返回值

返回 *this,支持链式调用

异常

注意事项

默认值 0.9。控制 EMA 权重的更新速率。


DeepLearningTask::grad_clip()

签名

DeepLearningTask& grad_clip(float max_abs);

功能简介

设置梯度裁剪最大绝对值。

参数

参数名 类型 默认值 说明
max_abs float - [in] 裁剪阈值;<= 0 表示不裁剪

返回值

返回 *this,支持链式调用

异常

注意事项


DeepLearningTask::tta()

签名

DeepLearningTask& tta(TTA mode);

功能简介

设置测试时增强(TTA)模式。

参数

参数名 类型 默认值 说明
mode TTA - [in] TTA 模式

返回值

返回 *this,支持链式调用

异常

注意事项


DeepLearningTask::freeze_first_layer_after()

签名

DeepLearningTask& freeze_first_layer_after(int epoch);

功能简介

设置首层冻结起始 epoch。

参数

参数名 类型 默认值 说明
epoch int - [in] 起始 epoch(-1 表示不冻结)

返回值

返回 *this,支持链式调用

异常

注意事项

冻结后首层权重不再更新,用于迁移学习微调。


DeepLearningTask::progressive_crop()

签名

DeepLearningTask& progressive_crop(int begin_size, int end_size);

功能简介

设置渐进式裁剪训练。

参数

参数名 类型 默认值 说明
begin_size int - [in] 起始裁剪尺寸(像素)
end_size int - [in] 结束裁剪尺寸(像素)

返回值

返回 *this,支持链式调用

异常

注意事项

TODO: 实现渐进式裁剪训练策略。从 begin_size 逐步增长到 end_size,提升模型对尺度的鲁棒性。


DeepLearningTask::progressive_resize()

签名

DeepLearningTask& progressive_resize(int begin_size, int end_size);

功能简介

设置渐进式缩放训练。

参数

参数名 类型 默认值 说明
begin_size int - [in] 起始缩放尺寸(像素)
end_size int - [in] 结束缩放尺寸(像素)

返回值

返回 *this,支持链式调用

异常

注意事项

TODO: 实现渐进式缩放训练策略。从 begin_size 逐步增长到 end_size,提升模型对分辨率的鲁棒性。


DeepLearningTask::metrics()

签名

DeepLearningTask& metrics(Metric m);

功能简介

设置需要收集的指标。

参数

参数名 类型 默认值 说明
m Metric - [in] 指标位掩码

返回值

返回 *this,支持链式调用

异常

注意事项

默认值:Metric::TRAIN_LOSS | Metric::VAL_LOSS | Metric::VAL_TOP1。支持位运算组合。

示例

task.metrics(Metric::VAL_TOP1 | Metric::VAL_TOP5 | Metric::EMA_TOP1);

DeepLearningTask::save_model_at_epoch()

签名

DeepLearningTask& save_model_at_epoch(int epoch, const std::string& path);

功能简介

在指定 epoch 保存模型。

参数

参数名 类型 默认值 说明
epoch int - [in] epoch 编号
path const std::string& - [in] 保存路径

返回值

返回 *this,支持链式调用

异常

注意事项

到达指定 epoch 时自动保存模型检查点。


DeepLearningTask::save_best_model()

签名

DeepLearningTask& save_best_model(const std::string& path);

功能简介

保存最佳模型(自动命名)。

参数

参数名 类型 默认值 说明
path const std::string& - [in] 保存路径(目录)

返回值

返回 *this,支持链式调用

异常

注意事项

验证 Top-1 准确率提升时自动保存最佳模型。


编译与执行接口
DeepLearningTask::compile()

签名

void compile();

功能简介

编译:默认只打印 ArchPlan。

返回值

异常

注意事项

无参版本总是把诊断级别恢复为 CompileInfo::ARCH_PLAN,普通用户调用时输出保持简洁。


DeepLearningTask::compile(CompileInfo)

签名

void compile(CompileInfo info);

功能简介

编译:显式指定诊断信息打印级别。

参数

参数名 类型 默认值 说明
info CompileInfo - [in] 位掩码组合

返回值

异常

注意事项

支持位运算组合,例如 CompileInfo::ARCH_PLAN | CompileInfo::MEMORY_PLAN

示例

task.compile(CompileInfo::ALL);  // 打印所有诊断信息

DeepLearningTask::run()

签名

[[nodiscard]] TrainingResult run();

功能简介

执行完整训练循环。

返回值

TrainingResult 训练结果汇总(best_top1、best_top5、best_epoch 等)

异常

注意事项

示例

auto result = task.run();
std::cout << "Best Top-1: " << result.best_top1 * 100.0f << "%" << std::endl;

DeepLearningTask::dry_run()

签名

[[nodiscard]] TrainingResult dry_run();

功能简介

仅打印配置信息,不执行实际训练(debug 模式)。

返回值

TrainingResult 训练结果汇总(debug 模式下为空值)

异常

注意事项

用于验证配置是否正确,不执行实际训练,耗时极短。


测试接口
DeepLearningTask::test_h2d_copy_correctness()

签名

H2DTestResult test_h2d_copy_correctness();

功能简介

验证 H2D copy 数据正确性(第一个 epoch 的前 2 个 batch)。

返回值

H2DTestResult 测试结果(包含批次数量、数据正确性、标签正确性等)

异常

注意事项

用于验证数据加载管线的正确性,检查 H2D 传输是否损坏数据。


DeepLearningTask::test_h2d_copy_bandwidth()

签名

H2DTestResult test_h2d_copy_bandwidth();

功能简介

测量 H2D copy 等效带宽(第一个 epoch 全部 batch)。

返回值

H2DTestResult 测试结果(包含带宽、延迟等性能指标)

异常

注意事项

用于评估数据加载性能,测量 H2D 传输带宽和平均延迟。


DeepLearningTask::compile_h2d_only()

签名

void compile_h2d_only();

功能简介

只编译 H2D 传输图(TRANSFER_A + TRANSFER_B),不编译训练图。

返回值

异常

注意事项

用于独立测试数据加载管线,不包含前向/反向传播。


DeepLearningTask::run_h2d_only()

签名

H2DRunResult run_h2d_only();

功能简介

只运行 H2D 传输图(联动 Preprocessor/TransferStation,支持多 epoch + val)。

返回值

H2DRunResult 多 epoch H2D 运行结果

异常

注意事项

用于端到端测试数据加载管线,包含训练和验证阶段。


继承自基类的公共接口

DeepLearningTask 继承了 TaskBase 的以下 public 接口,详见 TaskBase 文档:

方法 继承自 说明
phase() TaskBase 获取当前阶段
memory_plan() TaskBase 获取内存布局计划
config() TaskBase 获取内存布局配置
debug_mode() TaskBase 检查调试模式
is_simple_task() TaskBase 判断是否为 SimpleTask
graphs() TaskBase 获取已注册计算图
compile() TaskBase 编译任务
compile_for_dry_run() TaskBase 干运行编译
compile_capture_simple() TaskBase SimpleTask 专用编译
transfer() TaskBase 主机到设备广播传输
transfer_to_rank() TaskBase 传输到指定 Rank
broadcast_from_rank0() TaskBase 从 Rank 0 广播
fill() TaskBase 常量填充
zero() TaskBase 清零
randn() TaskBase 正态分布随机初始化
init() TaskBase 初始化单个 DTensor
init_all() TaskBase 初始化所有 DTensor
set_dropout_seed_id() TaskBase 设置 Dropout seed
initializer() TaskBase 配置初始化策略
initializer() const TaskBase 获取初始化策略(只读)
scheduler() TaskBase 配置学习率调度器
scheduler() const TaskBase 获取学习率调度器(只读)
scheduler() TaskBase 获取学习率调度器(可修改)
fetch_from_rank() TaskBase 从 Rank 取回数据
fetch() TaskBase 从 Rank 0 取回数据

H2DTestResult

概述

H2D copy 测试结果结构体,用于验证数据加载管线 H2D 传输的正确性,以及测量等效带宽和延迟。

头文件:#include

设计定位:DeepLearningTasktest_h2d_copy_correctness()test_h2d_copy_bandwidth() 返回该结构体,属于测试诊断数据。

状态管理:无状态,纯数据容器


成员
字段 类型 默认值 说明
batches int 0 批次数量
elapsed_us double 0.0 总耗时(微秒)
total_bytes size_t 0 总传输字节数
bandwidth_gbps double 0.0 等效带宽(GB/s)
labels_ok bool true 标签数据是否正确
data_ok bool true 图像数据是否正确
avg_lat_us double 0.0 平均延迟(微秒)
min_lat_us double 0.0 最小延迟(微秒)
max_lat_us double 0.0 最大延迟(微秒)

H2DRunResult

概述

多 epoch H2D 运行结果容器,由 DeepLearningTask::run_h2d_only() 返回,包含每个 epoch 的训练和验证 H2D 传输结果。

头文件:#include

设计定位:DeepLearningTask 的 H2D-only 测试模式结果汇总,支持按训练和验证分别聚合。

状态管理:无状态,纯数据容器


成员
字段 类型 默认值 说明
epochs_run int 0 训练 epoch 数
vals_run int 0 验证次数
train_per_epoch std::vector {} 每个 epoch 的训练结果
val_per_epoch std::vector {} 每次验证的结果
total_elapsed_us double 0.0 总耗时(微秒)

方法
H2DRunResult::aggregate_train()

签名

H2DTestResult aggregate_train() const;

功能简介

聚合所有训练 epoch 的 H2D 结果,返回总批次、总字节数、总耗时、平均带宽和延迟统计。

返回值

聚合后的 H2DTestResult

异常


H2DRunResult::aggregate_val()

签名

H2DTestResult aggregate_val() const;

功能简介

聚合所有验证阶段的 H2D 结果,返回总批次、总字节数、总耗时、平均带宽和延迟统计。

返回值

聚合后的 H2DTestResult

异常


参见

Backend

板块介绍

Backend 模块是 Tech-Renaissance 的执行引擎,负责管理硬件设备、内存/显存池、算子执行和多流调度。该模块提供以下核心能力:

关键头文件

本板块条目

内部实现src/backend/


GraphExecutor

概述

GraphExecutor 是 per-rank 运行调度器,实现A/B双缓冲、双图并行和训练/验证工作流。该类由 TaskBase 内部使用,普通用户通常不需要直接操作。

头文件#include

状态:有状态(需要构造和配置)

使用路径:由 TaskBase 在图捕获后创建并管理,用户通过 TaskBase::train_step()TaskBase::val_step() 间接调用

典型用法

// 由 TaskBase 内部创建和管理,用户无需直接构造
// 以下代码仅展示内部使用模式
GraphExecutor exec(rank, device_context, pre_capture_result);
exec.set_optimizer_scalar_ids(scalar_ids);
exec.set_current_lr(0.01f);
exec.run_train_step();  // 执行训练步
构造与配置
GraphExecutor::GraphExecutor(int, const DeviceContext&, const PreCaptureResult&)
GraphExecutor(int rank,
              const DeviceContext& ctx,
              const PreCaptureResult& pre_capture_result);

功能简介:构造函数,初始化图执行器,绑定设备上下文和预捕获结果

参数

参数名 类型 默认值 说明
rank int - 当前进程的rank标识
ctx const DeviceContext& - 设备上下文引用
pre_capture_result const PreCaptureResult& - 预捕获结果引用

异常:无

GraphExecutor::GraphExecutor(const GraphExecutor&) = delete
GraphExecutor(const GraphExecutor&) = delete;

功能简介:禁止拷贝构造

GraphExecutor::operator=(const GraphExecutor&) = delete
GraphExecutor& operator=(const GraphExecutor&) = delete;

功能简介:禁止拷贝赋值

GraphExecutor::set_training(bool)
void set_training(bool v) noexcept;

功能简介:设置执行模式,true为训练模式,false为验证模式

参数

参数名 类型 默认值 说明
v bool - 执行模式标志

异常:无

GraphExecutor::set_last_batch(bool)
void set_last_batch(bool v) noexcept;

功能简介:标记当前是否为最后一个batch,影响训练步的调度路径

参数

参数名 类型 默认值 说明
v bool - 是否为最后一个batch

异常:无

GraphExecutor::set_low_resolution(bool)
void set_low_resolution(bool v) noexcept;

功能简介:设置是否使用低分辨率路径

参数

参数名 类型 默认值 说明
v bool - 是否使用低分辨率

异常:无

GraphExecutor::set_skip_first_bwd(bool)
void set_skip_first_bwd(bool v) noexcept;

功能简介:设置是否跳过首层反向传播

参数

参数名 类型 默认值 说明
v bool - 是否跳过首层反向

异常:无

GraphExecutor::set_optimizer_scalar_ids(const OptimizerScalarIds&)
void set_optimizer_scalar_ids(const OptimizerScalarIds& ids) noexcept;

功能简介:设置优化器标量ID映射,用于学习率、动量等参数的GPU更新

参数

参数名 类型 默认值 说明
ids const OptimizerScalarIds& - 优化器标量ID结构体

异常:无

GraphExecutor::set_current_lr(float)
void set_current_lr(float lr) noexcept;

功能简介:设置当前学习率,用于GPU标量更新

参数

参数名 类型 默认值 说明
lr float - 当前学习率值

异常:无

GraphExecutor::toggle_ab()
void toggle_ab() noexcept;

功能简介:切换A/B双缓冲状态

异常:无

GraphExecutor::reset_ab(bool)
void reset_ab(bool to_a = true) noexcept;

功能简介:重置A/B双缓冲状态

参数

参数名 类型 默认值 说明
to_a bool true true时切换到A缓冲,false时切换到B缓冲

异常:无

查询接口
GraphExecutor::rank() const
[[nodiscard]] int rank() const noexcept;

功能简介:返回当前rank标识

返回值:当前进程的rank

异常:无

GraphExecutor::device_id() const
[[nodiscard]] int device_id() const noexcept;

功能简介:返回关联的设备ID

返回值:设备ID

异常:无

GraphExecutor::is_gpu() const
[[nodiscard]] bool is_gpu() const noexcept;

功能简介:判断是否为GPU模式

返回值:true表示GPU模式,false表示CPU模式

异常:无

执行控制
GraphExecutor::run_train_step()
void run_train_step();

功能简介:执行完整的训练步,包括前向、后向、优化器和通信

异常

GraphExecutor::run_val_step()
void run_val_step();

功能简介:执行验证步,仅执行前向计算

异常

GraphExecutor::launch(GraphId) const
void launch(GraphId gid) const;

功能简介:启动指定的计算图

参数

参数名 类型 默认值 说明
gid GraphId - 要启动的图ID

异常

GraphExecutor::launch_dual(GraphId, GraphId) const
void launch_dual(GraphId gid1, GraphId gid2) const;

功能简介:同时启动两个计算图,用于双图并行(如传输与计算重叠)

参数

参数名 类型 默认值 说明
gid1 GraphId - 第一个要启动的图ID
gid2 GraphId - 第二个要启动的图ID

异常

GraphExecutor::sync_all() const
void sync_all() const;

功能简介:同步所有设备流,等待所有操作完成

异常

工作流内部接口
GraphExecutor::update_lr_scalar()
void update_lr_scalar();

功能简介:将 set_current_lr() 设置的学习率写入GPU标量DTensor

异常

GraphExecutor::check_nan_flag() const
[[nodiscard]] bool check_nan_flag() const;

功能简介:读取GPU上的NaN检测标志

返回值:true表示检测到NaN

异常

GraphExecutor::on_nan_detected()
void on_nan_detected();

功能简介:检测到NaN时的回调,记录警告并跳过本次优化器更新

异常:无


DeviceContext

概述

DeviceContext 是单卡执行上下文,管理流、Workspace、per-stream cuDNN/cuBLAS句柄和DTensor指针解析。该类由 TaskBase 内部使用,普通用户通常不需要直接操作。

头文件#include

状态:有状态(管理硬件资源)

使用路径:由 TaskBase 在初始化时创建,用户通过 TaskBase::context(int rank) 访问

典型用法

// 用户通过 TaskBase 访问 DeviceContext
DeviceContext& ctx = task.context(rank);
void* stream = ctx.stream(StreamKind::COMP_1);
void* cublas_handle = ctx.cublas_handle(StreamKind::COMP_1);
构造与析构
DeviceContext::DeviceContext(int)
explicit DeviceContext(int device_id);

功能简介:构造函数,创建设备上下文并初始化流、cuDNN/cuBLAS句柄

参数

参数名 类型 默认值 说明
device_id int - GPU设备ID(>=0),CPU模式传入-1

异常

注意事项

DeviceContext::~DeviceContext()
~DeviceContext();

功能简介:析构函数,释放流、句柄、workspace等资源

异常:无

DeviceContext::DeviceContext(const DeviceContext&) = delete
DeviceContext(const DeviceContext&) = delete;

功能简介:禁止拷贝构造

DeviceContext::operator=(const DeviceContext&) = delete
DeviceContext& operator=(const DeviceContext&) = delete;

功能简介:禁止拷贝赋值

DeviceContext::DeviceContext(DeviceContext&&) = delete
DeviceContext(DeviceContext&&) = delete;

功能简介:禁止移动构造

DeviceContext::operator=(DeviceContext&&) = delete
DeviceContext& operator=(DeviceContext&&) = delete;

功能简介:禁止移动赋值

查询接口
DeviceContext::device_id() const
[[nodiscard]] int device_id() const noexcept;

功能简介:返回设备ID,GPU模式返回设备编号,CPU模式返回-1

返回值:设备ID

异常:无

DeviceContext::is_gpu() const
[[nodiscard]] bool is_gpu() const noexcept;

功能简介:判断是否为GPU模式

返回值:true表示GPU模式,false表示CPU模式

异常:无

DeviceContext::rank_for_context() const
[[nodiscard]] int rank_for_context() const noexcept;

功能简介:返回当前上下文对应的rank

返回值:rank标识

异常:无

DeviceContext::set_rank(int)
void set_rank(int rank) noexcept;

功能简介:设置当前上下文对应的rank,用于ArenaKeeper指针解析

参数

参数名 类型 默认值 说明
rank int - rank标识

异常:无

DeviceContext::memory_plan() const
[[nodiscard]] const MemoryPlan* memory_plan() const noexcept;

功能简介:返回当前设置的MemoryPlan指针

返回值:MemoryPlan指针,未设置时返回nullptr

异常:无

内存访问
DeviceContext::ptr_at(int) const
[[nodiscard]] void* ptr_at(int dtensor_id) const noexcept;

功能简介:根据DTensor ID获取实际设备指针,支持运行时MemoryPlan切换

参数

参数名 类型 默认值 说明
dtensor_id int - DTensor ID

返回值:实际设备指针

异常:无(Release模式);Debug模式下可能抛出:

注意事项

DeviceContext::set_memory_plan(const MemoryPlan*)
void set_memory_plan(const MemoryPlan* mp) noexcept;

功能简介:设置当前MemoryPlan,支持图集切换

参数

参数名 类型 默认值 说明
mp const MemoryPlan* - MemoryPlan指针

异常:无

流管理
DeviceContext::stream(StreamKind) const
[[nodiscard]] void* stream(StreamKind kind) const;

功能简介:获取指定类型的CUDA流句柄

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

返回值:CUDA流句柄(void*类型),CPU模式下返回nullptr

异常:无

DeviceContext::synchronize_all() const
void synchronize_all() const;

功能简介:同步设备上的所有流

异常

DeviceContext::synchronize_stream(StreamKind) const
void synchronize_stream(StreamKind kind) const;

功能简介:同步指定类型的流

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

异常

DeviceContext::device_sync() const
void device_sync() const;

功能简介:同步整个设备,等价于 synchronize_all()

异常

算子库句柄
DeviceContext::cudnn_handle(StreamKind) const
[[nodiscard]] void* cudnn_handle(StreamKind kind) const noexcept;

功能简介:获取指定流绑定的cuDNN句柄

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

返回值:cuDNN句柄(void*类型),CPU模式下返回nullptr

异常:无

注意事项

DeviceContext::cublas_handle(StreamKind) const
[[nodiscard]] void* cublas_handle(StreamKind kind) const noexcept;

功能简介:获取指定流绑定的cuBLAS句柄

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

返回值:cuBLAS句柄(void*类型),CPU模式下返回nullptr

异常:无

注意事项

Workspace管理
DeviceContext::workspace(StreamKind) const
[[nodiscard]] void* workspace(StreamKind kind) const;

功能简介:获取指定流的Workspace指针

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

返回值:Workspace基地址(void*类型),GPU未分配或CPU模式下返回nullptr

异常:无

DeviceContext::workspace_size(StreamKind) const
[[nodiscard]] size_t workspace_size(StreamKind kind) const;

功能简介:获取指定流的Workspace大小

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举

返回值:Workspace字节数

异常:无

DeviceContext::pre_allocate_workspace(StreamKind, size_t)
void pre_allocate_workspace(StreamKind kind, size_t size);

功能简介:预分配指定流的GPU Workspace(仅首次分配有效,不支持扩容)

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举
size size_t - 预分配的Workspace字节数

异常

注意事项

DeviceContext::ensure_workspace(StreamKind, size_t)
void ensure_workspace(StreamKind kind, size_t req_size);

功能简介:确保指定流的Workspace满足大小要求,首次分配或报错

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举
req_size size_t - 需求的Workspace大小

异常

注意事项

DeviceContext::ensure_workspace_grow(StreamKind, size_t) const
void ensure_workspace_grow(StreamKind kind, size_t req_size) const;

功能简介:精确按需扩容指定流的GPU Workspace(释放旧空间并重新分配)

参数

参数名 类型 默认值 说明
kind StreamKind - 流类型枚举
req_size size_t - 需求的Workspace大小

异常

注意事项

DeviceContext::cpu_workspace() const
[[nodiscard]] void* cpu_workspace() const noexcept;

功能简介:返回CPU全局Workspace基地址

返回值:CPU Workspace指针

异常:无

DeviceContext::cpu_workspace_size() const
[[nodiscard]] size_t cpu_workspace_size() const noexcept;

功能简介:返回CPU全局Workspace大小

返回值:CPU Workspace字节数

异常:无

DeviceContext::ensure_cpu_workspace_grow(size_t) const
void ensure_cpu_workspace_grow(size_t req_size) const;

功能简介:确保CPU Workspace满足大小要求,支持动态扩容

参数

参数名 类型 默认值 说明
req_size size_t - 需求的CPU Workspace大小

异常

注意事项

NCCL通信
DeviceContext::nccl_comm() const
[[nodiscard]] void* nccl_comm() const noexcept;

功能简介:返回关联的NCCL通信句柄

返回值:NCCL通信句柄(void*类型),未设置时返回nullptr

异常:无

DeviceContext::set_nccl_comm(void*)
void set_nccl_comm(void* comm) noexcept;

功能简介:设置NCCL通信句柄

参数

参数名 类型 默认值 说明
comm void* - NCCL通信句柄

异常:无


MemoryArena

概述

MemoryArena 是统一内存/显存池抽象基类,提供对齐分配接口。该类由 ArenaKeeper 管理,用户通常通过 ArenaKeeper::instance() 访问。

头文件#include

状态:有状态(一次性分配,自动回收)

使用路径:通过 ArenaKeeper::instance() 初始化和查询

核心契约

  1. allocate() 只能成功调用一次,再次调用将抛出异常
  2. 不提供public释放接口,资源随对象析构自动回收
  3. usable_size必须能被alignment整除
构造与析构
MemoryArena::MemoryArena(size_t)
explicit MemoryArena(size_t alignment);

功能简介:构造函数,设置对齐字节数

参数

参数名 类型 默认值 说明
alignment size_t - 对齐字节数,必须是2的幂

异常

MemoryArena::~MemoryArena()
virtual ~MemoryArena();

功能简介:虚析构函数,资源由派生类析构时回收

异常:无

MemoryArena::MemoryArena(const MemoryArena&) = delete
MemoryArena(const MemoryArena&) = delete;

功能简介:禁止拷贝构造

MemoryArena::operator=(const MemoryArena&) = delete
MemoryArena& operator=(const MemoryArena&) = delete;

功能简介:禁止拷贝赋值

MemoryArena::MemoryArena(MemoryArena&&) = delete
MemoryArena(MemoryArena&&) = delete;

功能简介:禁止移动构造

MemoryArena::operator=(MemoryArena&&) = delete
MemoryArena& operator=(MemoryArena&&) = delete;

功能简介:禁止移动赋值

分配
MemoryArena::allocate(size_t)
void* allocate(size_t usable_size);

功能简介:分配内存/显存,返回满足对齐要求的可用区域基地址

参数

参数名 类型 默认值 说明
usable_size size_t - 用户请求的可用字节数

返回值:满足对齐要求的可用区域基地址

异常

注意事项

查询接口
MemoryArena::base_ptr() const
[[nodiscard]] void* base_ptr() const noexcept;

功能简介:返回对齐后的可用基地址

返回值:对齐后的基地址

异常:无

MemoryArena::usable_size() const
[[nodiscard]] size_t usable_size() const noexcept;

功能简介:返回用户请求的可用大小

返回值:可用字节数

异常:无

MemoryArena::is_allocated() const
[[nodiscard]] bool is_allocated() const noexcept;

功能简介:判断是否已分配

返回值:true表示已分配,false表示未分配

异常:无

MemoryArena::alignment() const
[[nodiscard]] size_t alignment() const noexcept;

功能简介:返回对齐字节数

返回值:对齐字节数

异常:无


CpuArena

概述

CpuArena 是CPU内存池实现,使用mimalloc作为后端分配器。构造函数为私有,只能通过 ArenaKeeper 创建。

头文件#include

状态:有状态(一次性分配,自动回收)

继承:继承自 MemoryArena

使用路径:通过 ArenaKeeper::instance().initialize() 创建

注意事项

构造与析构
CpuArena::~CpuArena()
~CpuArena() override;

功能简介:析构函数,释放CPU内存池

异常:无


CudaArena

概述

CudaArena 是GPU显存池实现,使用CUDA Runtime作为后端。构造函数为私有,只能通过 ArenaKeeper 创建。

头文件#include

状态:有状态(一次性分配,自动回收)

继承:继承自 MemoryArena

使用路径:通过 ArenaKeeper::instance().initialize() 创建

注意事项

构造与析构
CudaArena::~CudaArena()
~CudaArena() override;

功能简介:析构函数,释放GPU显存池

异常:无

查询接口
CudaArena::device_id() const
[[nodiscard]] int device_id() const noexcept;

功能简介:返回GPU设备ID

返回值:GPU设备ID

异常:无

静态方法
CudaArena::warm_context(int)
static void warm_context(int device_id);

功能简介:预热指定设备的CUDA上下文,消除多线程分配时的锁竞争

参数

参数名 类型 默认值 说明
device_id int - GPU设备ID

异常:无

注意事项


ArenaKeeper

概述

ArenaKeeper 是内存池/显存池的全局管理器,实现多卡并行分配和统一查询。采用Mayer单例模式,全局唯一实例。

头文件#include

状态:有状态(单例,一次性初始化)

使用路径:通过 ArenaKeeper::instance() 访问

典型用法

// 初始化(在TaskBase::prepare_hardware()中调用)
auto& keeper = ArenaKeeper::instance();
keeper.initialize(using_gpu, device_ids, usable_size_per_device);

// 查询(训练期热路径,完全无锁)
void* base = keeper.base_ptr(rank);
void* ptr = keeper.ptr_at(rank, offset);

核心特性

  1. Mayer单例模式,全局唯一
  2. 支持CPU和GPU两种模式
  3. 多GPU并行分配,显著提升初始化速度
  4. 初始化后查询接口完全无锁,零开销
  5. 异常安全,分配失败自动回滚
静态方法
ArenaKeeper::instance()
static ArenaKeeper& instance();

功能简介:获取全局唯一的 ArenaKeeper 实例

返回值ArenaKeeper 单例引用

异常:无

ArenaKeeper::init()
static void init();

功能简介:触发单例初始化(可选调用)

异常:无

构造与赋值
ArenaKeeper::ArenaKeeper(const ArenaKeeper&) = delete
ArenaKeeper(const ArenaKeeper&) = delete;

功能简介:禁止拷贝构造

ArenaKeeper::operator=(const ArenaKeeper&) = delete
ArenaKeeper& operator=(const ArenaKeeper&) = delete;

功能简介:禁止拷贝赋值

ArenaKeeper::ArenaKeeper(ArenaKeeper&&) = delete
ArenaKeeper(ArenaKeeper&&) = delete;

功能简介:禁止移动构造

ArenaKeeper::operator=(ArenaKeeper&&) = delete
ArenaKeeper& operator=(ArenaKeeper&&) = delete;

功能简介:禁止移动赋值

初始化
ArenaKeeper::initialize(bool, const std::vector&, size_t, size_t)
void initialize(bool using_gpu,
                const std::vector<int>& device_ids,
                size_t usable_size_per_device,
                size_t alignment = 256);

功能简介:初始化内存池/显存池,支持多GPU并行分配

参数

参数名 类型 默认值 说明
using_gpu bool - 是否使用GPU
device_ids const std::vector& - 设备ID列表
usable_size_per_device size_t - 每设备的可用字节数
alignment size_t 256 对齐字节数

异常

注意事项

查询接口
ArenaKeeper::base_ptr(int) const
[[nodiscard]] void* base_ptr(int rank) const;

功能简介:返回指定rank的Arena基地址

参数

参数名 类型 默认值 说明
rank int - 设备rank(0 ~ world_size-1)

返回值:指定rank的Arena基地址

异常:无(Release模式);Debug模式下可能抛出:

ArenaKeeper::base_ptr_by_device(int) const
[[nodiscard]] void* base_ptr_by_device(int device_id) const;

功能简介:根据设备ID返回Arena基地址

参数

参数名 类型 默认值 说明
device_id int - 设备ID

返回值:指定设备的Arena基地址

异常:无

ArenaKeeper::usable_size(int) const
[[nodiscard]] size_t usable_size(int rank) const;

功能简介:返回指定rank的可用大小

参数

参数名 类型 默认值 说明
rank int - 设备rank

返回值:可用字节数

异常:无(Release模式);Debug模式下可能抛出:

ArenaKeeper::arena(int) const
[[nodiscard]] MemoryArena* arena(int rank) const;

功能简介:返回指定rank的 MemoryArena 指针

参数

参数名 类型 默认值 说明
rank int - 设备rank

返回值MemoryArena 指针

异常:无(Release模式);Debug模式下可能抛出:

ArenaKeeper::device_id(int) const
[[nodiscard]] int device_id(int rank) const;

功能简介:返回指定rank对应的设备ID

参数

参数名 类型 默认值 说明
rank int - 设备rank

返回值:设备ID

异常:无(Debug模式下可能有边界检查)

ArenaKeeper::rank_of_device(int) const
[[nodiscard]] int rank_of_device(int device_id) const;

功能简介:返回指定设备ID对应的rank

参数

参数名 类型 默认值 说明
device_id int - 设备ID

返回值:rank值

异常

ArenaKeeper::ptr_at(int, size_t) const
[[nodiscard]] void* ptr_at(int rank, size_t offset) const noexcept;

功能简介:根据rank和偏移量获取实际指针(训练期热路径)

参数

参数名 类型 默认值 说明
rank int - 设备rank(0 ~ world_size-1)
offset size_t - 相对Arena基地址的字节偏移

返回值:实际设备/内存指针

异常:无(Release模式);Debug模式下可能抛出:

注意事项

ArenaKeeper::world_size() const
[[nodiscard]] size_t world_size() const noexcept;

功能简介:返回设备总数(world size)

返回值:设备总数

异常:无

ArenaKeeper::is_gpu_mode() const
[[nodiscard]] bool is_gpu_mode() const noexcept;

功能简介:判断是否为GPU模式

返回值:true表示GPU模式,false表示CPU模式

异常:无

ArenaKeeper::is_initialized() const
[[nodiscard]] bool is_initialized() const noexcept;

功能简介:判断是否已初始化

返回值:true表示已初始化,false表示未初始化

异常:无


OptimizerScalarIds

概述

优化器标量ID映射结构,用于 GraphExecutor 设置GPU标量更新参数。

头文件#include

成员
字段名 类型 默认值 说明
lr int32_t -1 学习率scalar ID
beta int32_t -1 Adam动量beta参数ID
beta2 int32_t -1 Adam动量beta2参数ID
tc int32_t -1 Trust region参数ID
wd int32_t -1 权重衰减参数ID
eps int32_t -1 Adam epsilon参数ID
has_nan int32_t -1 NaN检测标志ID
scaling int32_t -1 Loss Scaling参数ID
local_batch_size int32_t -1 本地批次大小ID
last_train_batch_size int32_t -1 上次训练批次大小ID
last_val_batch_size int32_t -1 上次验证批次大小ID
step int32_t -1 训练步数ID(INT32,GPU算子自增)
bias_corr1 int32_t -1 偏差校正1 ID(FP32,1/(1-beta1^step))
bias_corr2 int32_t -1 偏差校正2 ID(FP32,1/(1-beta2^step))

MemRangeInfo

概述

内存范围信息结构,用于 RangeOp 描述输入/输出张量的内存范围。

头文件#include

成员
字段名 类型 默认值 说明
offset uint64_t 0 范围起始偏移量(字节)
size uint64_t 0 范围大小(字节)
start_region_id int32_t -1 起始区域ID
end_region_id int32_t -1 结束区域ID

CpuOpContext

概述

CPU算子执行上下文结构,包含算子执行所需的全部参数和元信息。

头文件#include

成员
字段名 类型 默认值 说明
ctx const DeviceContext* nullptr 设备上下文指针
input_ids int32_t[12] {} 输入DTensor ID数组
output_ids int32_t[12] {} 输出DTensor ID数组
num_inputs int 0 输入数量
num_outputs int 0 输出数量
total_elements int64_t 0 总元素数量
input_shape ShapeId - 输入形状ID
output_shape ShapeId - 输出形状ID
params OpParams - 算子参数
range_op RangeOp RangeOp::UNKNOWN RANGE算子类型
n_stride int64_t 0 N维度stride(DTensor用)
h_stride int64_t 0 H维度stride(DTensor用)
w_stride int64_t 0 W维度stride(DTensor用)
c_stride int64_t 0 C维度stride(DTensor用)
input_ranges MemRangeInfo[12] {} 输入内存范围信息(RangeOp用)
output_ranges MemRangeInfo[12] {} 输出内存范围信息(RangeOp用)
num_input_ranges int 0 输入范围数量
num_output_ranges int 0 输出范围数量

ComputeOpEntry

概述

计算算子注册表条目,包含算子类型和CPU/GPU启动函数指针。

头文件#include

成员
字段名 类型 默认值 说明
op ComputeOp ComputeOp::UNKNOWN 算子类型
launch_cpu void()(CpuOpContext) nullptr CPU启动函数指针
launch_cuda void(*)(const GraphNode&, const MemoryPlan&, const DeviceContext&, MultiStreamCaptureState&) nullptr GPU启动函数指针

注意事项


RangeOpEntry

概述

范围算子注册表条目,包含算子类型和CPU/GPU启动函数指针。

头文件#include

成员
字段名 类型 默认值 说明
op RangeOp RangeOp::UNKNOWN 算子类型
launch_cpu void()(CpuOpContext) nullptr CPU启动函数指针
launch_cuda void(*)(const GraphNode&, const MemoryPlan&, const DeviceContext&, MultiStreamCaptureState&) nullptr GPU启动函数指针

注意事项


CudnnFeGraphCache

概述

cuDNN Frontend图缓存模板,消除Host端开销。

头文件#include

注意事项

成员
template<size_t MAX_SLOTS>
struct CudnnFeGraphCache {
    std::shared_ptr<cudnn_frontend::graph::Graph> graph;
    size_t workspace_size = 0;
    std::unordered_map<std::shared_ptr<cudnn_frontend::graph::Tensor_attributes>, void*> variant_pack;
    void**  slot_vp_addrs[MAX_SLOTS];
    int64_t dtensor_ids[MAX_SLOTS];
    void*   fixed_ptrs[MAX_SLOTS];
    size_t  ptr_offsets[MAX_SLOTS];
    size_t  num_slots = 0;
    
    void register_slot(std::shared_ptr<cudnn_frontend::graph::Tensor_attributes> ta,
                       int64_t init_dt_id,
                       void* fixed_ptr = nullptr,
                       size_t ptr_offset = 0);
};
字段名 类型 默认值 说明
graph std::shared_ptr - cuDNN Frontend图对象
workspace_size size_t 0 该图所需的workspace字节数
variant_pack std::unordered_map<...> - execute阶段使用的variant_pack,预存避免运行时堆分配
slot_vp_addrs void**[MAX_SLOTS] - 预存的variant_pack value地址,execute阶段直接解引用
dtensor_ids int64_t[MAX_SLOTS] - 运行时更新的DTensor ID,支持A/B双缓冲切换
fixed_ptrs void*[MAX_SLOTS] - 固定设备指针(如clamp),nullptr表示动态解析
ptr_offsets size_t[MAX_SLOTS] 0 字节偏移(如bn_stats_offset)
num_slots size_t 0 实际使用的slot数量

核心特性

方法
CudnnFeGraphCache::register_slot(...)
void register_slot(std::shared_ptr<cudnn_frontend::graph::Tensor_attributes> ta,
                   int64_t init_dt_id,
                   void* fixed_ptr = nullptr,
                   size_t ptr_offset = 0);

功能简介:注册一个tensor slot到缓存

参数

参数名 类型 默认值 说明
ta std::shared_ptr - Tensor属性
init_dt_id int64_t - 初始DTensor ID
fixed_ptr void* nullptr 固定设备指针(如clamp)
ptr_offset size_t 0 字节偏移(如bn_stats_offset)

异常:无


TR_CUDNN_FE_CHECK

概述

cuDNN Frontend错误检查宏,检查操作是否成功。

#define TR_CUDNN_FE_CHECK(call, msg)

功能简介

参数

参数名 说明
call cuDNN Frontend函数调用
msg 错误消息描述

异常:在错误时调用 TR_DEVICE_ERROR,抛出 DeviceError

注意事项


TR_CUDNN_CHECK

概述

cuDNN Legacy错误检查宏,检查操作是否成功。

#define TR_CUDNN_CHECK(call)

功能简介

参数

参数名 说明
call cuDNN Legacy函数调用

异常:在错误时调用 TR_DEVICE_ERROR,抛出 DeviceError

注意事项


预定义常量

概述

Backend 模块提供的预定义常量,包括全局算子表容量、LARS 常量等。

constexpr size_t kComputeOpCount = static_cast<size_t>(ComputeOp::COUNT);
constexpr size_t kRangeOpCount   = static_cast<size_t>(RangeOp::COUNT);

说明:全局算子表的最大容量,分别为计算算子和范围算子的总数

extern ComputeOpEntry g_compute_op_table[kComputeOpCount];
extern RangeOpEntry   g_range_op_table[kRangeOpCount];

说明:全局算子注册表数组,由 register_default_ops() 和各 register_op_*() 函数填充。算子启动时通过 op 值作为索引查找对应条目。


namespace lars {
    constexpr int kLarsMaxPartial = 65535;
}

说明:LARS两阶段reduce的最大block数


独立函数

概述

Backend 模块提供算子注册、流策略、cuDNN 辅助等独立函数。

所属头文件:根据具体函数分别位于 graph_executor.hop_registry.hop_stream_policy.hcudnn_utils.h 等。

设计定位:无状态自由函数,直接调用。

流策略函数
gid_to_stream_kind(GraphId gid)
StreamKind gid_to_stream_kind(GraphId gid) noexcept;

功能简介:将 GraphId 映射到默认的 StreamKind,用于图执行时选择流

参数

参数名 类型 默认值 说明
gid GraphId - 图ID

返回值:对应的流类型枚举

异常:无

注意事项


get_op_default_stream(ComputeOp op)
StreamKind get_op_default_stream(ComputeOp op) noexcept;

功能简介:获取计算算子的默认流类型

参数

参数名 类型 默认值 说明
op ComputeOp - 计算算子类型

返回值:默认流类型

异常:无

注意事项


算子注册函数
register_default_ops()
void register_default_ops();

功能简介:注册所有默认算子到全局算子表

异常:无

注意事项


下面函数将对应算子族的 launch 函数指针写入 g_compute_op_tableg_range_op_table

注册函数 算子族 注册的主要 ComputeOp / RangeOp
register_op_relu() 激活函数 RELU_*
register_op_identity() 恒等映射 IDENTITY_FP32/AMP_FWD/BWD
register_op_tanh() 激活函数 TANH_*
register_op_silu() 激活函数 SILU_*
register_op_relu6() 激活函数 RELU6_*
register_op_leaky_relu() 激活函数 LEAKY_RELU_*
register_op_hardswish() 激活函数 HARDSWISH_*
register_op_elu() 激活函数 ELU_*
register_op_sigmoid() 激活函数 SIGMOID_*
register_op_conv() 卷积 CONV_*
register_op_maxpool() 池化 MAXPOOL_*
register_op_avgpool() 池化 AVGPOOL_*
register_op_gap() 全局池化 GAP_*
register_op_fc() 全连接 FC_*
register_op_bn() 批量归一化 BN1D_BN2D_BN_UPDATE_EQ_PARAMS
register_op_cbr() 融合算子 CBR_AMP_*
register_op_softmax_ce() 损失函数 SOFTMAX_CE_*
register_op_dropout() 正则化 DROPOUT_*
register_op_flatten() 形状变换 FLATTEN_*
register_op_channel_padding() 形状变换 CHANNEL_PADDING_*
register_op_axpy() 元素级运算 AXPY_FWD
register_op_lars() LARS 优化器 LARS_* 及流感知变体
register_op_adam_bc() Adam 偏差修正 SCALAR_INCREMENTADAM_BIAS_CORRECTION
register_op_dtensor_copy() DTensor 拷贝 DTENSOR_COPY
register_op_range_h2d() H2D 传输 RANGE_H2D_COPY_*
register_op_range_d2d_copy() D2D 拷贝 RANGE_D2D_COPY
register_op_range_clear() 内存清零 RANGE_CLEAR
register_op_range_cast() 类型转换 RANGE_CAST_FP32_TO_FP16RANGE_CAST_FP16_TO_FP32
register_op_range_allreduce() 分布式通信 RANGE_SUM_ALLREDUCERANGE_MEAN_ALLREDUCERANGE_BN_STATS_ALLREDUCE
register_op_range_optimizer() 优化器更新 RANGE_UPDATE_WEIGHT_RANGE_UPDATE_BIAS_
register_op_range_check_nan() 数值检查 RANGE_CHECK_NAN
register_op_range_grad_scaling() 梯度缩放 RANGE_GRAD_SCALING
register_op_range_accum_metrics() 指标累积 RANGE_ACCUM_METRICS

功能简介:注册单个算子族到全局算子表

异常:无

注意事项


require_warmup(ComputeOp op)
bool require_warmup(ComputeOp op) noexcept;

功能简介:判断指定计算算子是否需要在捕获前进行cuDNN预热

参数

参数名 类型 默认值 说明
op ComputeOp - 计算算子类型

返回值:true表示需要预热

异常:无

注意事项


warmup_single_cudnn_op(const GraphNode& node, const MemoryPlan& mp, DeviceContext& ctx)
void warmup_single_cudnn_op(const GraphNode& node,
                            const MemoryPlan& mp,
                            DeviceContext& ctx);

功能简介:对单个cuDNN算子执行预热,消除首次执行的额外开销

参数

参数名 类型 默认值 说明
node const GraphNode& - 计算图节点
mp const MemoryPlan& - 内存计划
ctx DeviceContext& - 设备上下文

异常

注意事项


shape_from_fe_dim(const std::vector& fe_dim)
inline Shape shape_from_fe_dim(const std::vector<int64_t>& fe_dim);

功能简介:将cuDNN Frontend维度数组转换回 Shape

参数

参数名 类型 默认值 说明
fe_dim const std::vector& - cuDNN Frontend维度数组(N, C, H, W顺序)

返回值:Renaissance Shape 对象

异常:无

注意事项


to_fe_dtype(DType dtype)
inline fe::DataType_t to_fe_dtype(DType dtype);

功能简介:将 DType 转换为cuDNN Frontend的 DataType_t

参数

参数名 类型 默认值 说明
dtype DType - Renaissance数据类型

返回值:cuDNN Frontend数据类型

异常ValueError - 不支持的数据类型

注意事项


to_fe_dim(const Shape& s)
inline std::vector<int64_t> to_fe_dim(const Shape& s);

功能简介:将 Shape 转换为cuDNN Frontend的维度数组

参数

参数名 类型 默认值 说明
s const Shape& - Renaissance形状

返回值:cuDNN Frontend维度数组(N, C, H, W顺序)

异常:无

注意事项


to_fe_stride_nhwc(const Shape& s, DType dt)
inline std::vector<int64_t> to_fe_stride_nhwc(const Shape& s, DType dt);

功能简介:计算NHWC布局的cuDNN Frontend stride数组

参数

参数名 类型 默认值 说明
s const Shape& - Renaissance形状
dt DType - 数据类型

返回值:NHWC布局的stride数组

异常ValueError - 不支持的数据类型

注意事项


create_cudnn_graph(DType dtype)
inline std::shared_ptr<fe::graph::Graph> create_cudnn_graph(DType dtype);

功能简介:创建并配置cuDNN Frontend图对象

参数

参数名 类型 默认值 说明
dtype DType - 数据类型

返回值:配置好的cuDNN Frontend图智能指针

异常:无

注意事项


finalize_cudnn_graph(fe::graph::Graph* graph, cudnnHandle_t handle)
inline void finalize_cudnn_graph(fe::graph::Graph* graph, cudnnHandle_t handle);

功能简介:完成cuDNN Frontend图的构建和编译

参数

参数名 类型 默认值 说明
graph fe::graph::Graph* - cuDNN Frontend图指针
handle cudnnHandle_t - cuDNN句柄

异常

注意事项


to_cudnn_dtype(DType dtype)
inline cudnnDataType_t to_cudnn_dtype(DType dtype);

功能简介:将 DType 转换为cuDNN Legacy的 cudnnDataType_t

参数

参数名 类型 默认值 说明
dtype DType - Renaissance数据类型

返回值:cuDNN Legacy数据类型

异常ValueError - 不支持的数据类型

注意事项



DTensor 算子

概述

DTensor 算子对应 enum class ComputeOp(定义于 include/renaissance/graph/op_kind.h),是 Backend 中基于完整 DTensor 执行的前向/反向/推理计算算子。GraphExecutor 通过 g_compute_op_table 查表获得每个算子的 launch_cpu / launch_cuda 函数指针,并在捕获的 CUDA Graph 或 CPU 回退路径上执行。

实现目录src/backend/ops/dtensor/

注册入口src/backend/op_registry.cpp 中的 register_default_ops(),按族调用 register_op_*()

公共调用约定

未在 ops/dtensor/ 中实现的后端 launch:下列 ComputeOp 枚举值已定义,但当前目录下没有对应的注册/launch 实现,主要由 graph 层占位、分解或未启用: IDENTITY_FWDADD_FWDADD_BWDMUL_FWDALLREDUCE_SUMBROADCASTBN_STATS_SYNCCAST_H2FCAST_F2HSGD_UPDATEADAM_UPDATEADAMW_UPDATEEMA_UPDATEBOTTLENECK_AMP_BASICBLOCK_AMP_INVRESIDUAL_AMP_GAP_FC_


Identity / AXPY / DTensorCopy
IDENTITY_FP32_FWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 x FP32 [N, C, H, W]
输出 0 y FP32 与 x 相同

功能:恒等映射 y = x,逐元素拷贝。CPU 路径依赖 TR_USE_EIGEN

IDENTITY_FP32_BWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 dY FP32 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 与 dY 相同

功能:恒等反向 dX = dY(memcpy)。

IDENTITY_AMP_FWD / IDENTITY_AMP_BWD

同 FP32 变体,数据类型为 FP16,仅支持 CUDA。

AXPY_FWD

输入:2 个 | 输出:1 个 | 参数AXPYParamsalpha: float)

方向 编号 名称 数据类型 形状
输入 0 a FP32 [N, C, H, W]
输入 1 b FP32 [N, C, H, W]
输出 0 c FP32 与 a 相同

功能:二元向量运算 c = α·a + b,非 in-place。支持 CPU/CUDA 双后端。

DTENSOR_COPY

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 src 任意 任意
输出 0 dst 同 src 与 src 相同

功能:DTensor 级别的 D2D 拷贝,用于标签双缓冲等场景。


ReLU

源文件relu_op.cpp / relu_op.cu | 注册函数register_op_relu()

ReLU 是唯一需要输出 INT8 mask 的激活函数,mask 用于反向传播时路由梯度。

RELU_FP32_FWD / RELU_AMP_FWD

输入:1 个 | 输出:2 个

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同
输出 1 mask INT8 [N, C, H, W](x > 0 时为 1)

功能:ReLU 前向 y = max(0, x),同时输出 mask 用于反向传播。

RELU_FP32_BWD / RELU_AMP_BWD

输入:2 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W]
输入 1 mask INT8 [N, C, H, W]
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x 的内存)

功能:ReLU 反向 dX = dY * mask。mask 来自 FWD 阶段。

RELU_FP32_INF / RELU_AMP_INF

输入:1 个 | 输出:2 个(mask 占位但不使用)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同
输出 1 mask INT8 占位,内容未定义

功能:推理模式 ReLU,仅计算 y = max(0, x),mask 输出仅用于保持张量布局一致。


Tanh

源文件tanh_op.cpp / tanh_op.cu | 注册函数register_op_tanh()

所有 Tanh 变体均为 in-place 操作(输出复用输入内存)。BWD 从 dY 重新推导 tanh 值。

TANH_FP32_FWD / TANH_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place 复用 x)

功能y = tanh(x)

TANH_FP32_BWD / TANH_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能dX = dY * (1 - tanh²(x)),从 dY 重算 tanh 值。


SiLU

源文件silu_op.cpp / silu_op.cu | 注册函数register_op_silu()

SILU_FP32_FWD / SILU_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = x * sigmoid(x)(Swish 激活)。

SILU_FP32_BWD / SILU_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:SiLU 反向,重算 sigmoid 后求导。


ReLU6

源文件relu6_op.cpp / relu6_op.cu | 注册函数register_op_relu6()

RELU6_FP32_FWD / RELU6_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = min(max(x, 0), 6)

RELU6_FP32_BWD / RELU6_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:ReLU6 反向,梯度仅在 0 < x < 6 时通过。


LeakyReLU

源文件leaky_relu_op.cpp / leaky_relu_op.cu | 注册函数register_op_leaky_relu()

当前实现使用固定负斜率 0.01LeakyReluParams::alpha,默认 0.01)。

LEAKY_RELU_FP32_FWD / LEAKY_RELU_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = max(0, x) + alpha * min(0, x)

LEAKY_RELU_FP32_BWD / LEAKY_RELU_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:LeakyReLU 反向,对应斜率 1(x ≥ 0)或 alpha(x < 0)。


Hardswish

源文件hardswish_op.cpp / hardswish_op.cu | 注册函数register_op_hardswish()

HARDSWISH_FP32_FWD / HARDSWISH_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = x * ReLU6(x+3) / 6

HARDSWISH_FP32_BWD / HARDSWISH_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:Hardswish 反向。


ELU

源文件elu_op.cpp / elu_op.cu | 注册函数register_op_elu()

当前实现使用默认 α = 1.0EluParams::alpha)。

ELU_FP32_FWD / ELU_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = x (x ≥ 0), α(e^x - 1) (x < 0)

ELU_FP32_BWD / ELU_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:ELU 反向。


Sigmoid

源文件sigmoid_op.cpp / sigmoid_op.cu | 注册函数register_op_sigmoid()

SIGMOID_FP32_FWD / SIGMOID_AMP_FWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place)

功能y = 1 / (1 + exp(-x))

SIGMOID_FP32_BWD / SIGMOID_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W](复用 y 的内存)
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能dX = dY y (1 - y)(重算)。


Dropout

源文件dropout_op.cpp / dropout_op.cu | 注册函数register_op_dropout()

参数DropoutParamsdrop_prob: float 丢弃概率,默认 0.5;seed: uint64_t 随机种子)。Inverted Dropout:训练时按 1/(1-p) 缩放保留元素。

DROPOUT_FP32_FWD / DROPOUT_AMP_FWD

输入:1 个 | 输出:2 个

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place 复用 x)
输出 1 mask INT8 [N, C, H, W](保留/丢弃标记)

功能:Inverted Dropout 前向,以概率 drop_prob 将元素置零,其余元素乘以 1/(1-drop_prob) 保持期望不变。

DROPOUT_FP32_BWD / DROPOUT_AMP_BWD

输入:2 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, H, W]
输入 1 mask INT8 [N, C, H, W]
输出 0 dX FP32 / FP16 与 dY 相同(in-place 复用 x)

功能:按 mask 回传梯度,被丢弃位置的梯度为零。

DROPOUT_FP32_INF / DROPOUT_AMP_INF

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 x FP32 / FP16 [N, C, H, W]
输出 0 y FP32 / FP16 与 x 相同(in-place 复用 x)

功能:推理模式,等价于恒等映射(不丢弃任何元素)。


Conv

源文件conv_op.cpp + conv_op_impl.cpp | 注册函数register_op_conv()

参数ConvParamsout_channels: int, kernel_h: int, kernel_w: int, pad_h: int, pad_w: int, stride_h: int, stride_w: int, groups: int, dilation_h: int, dilation_w: int)。

基于 cuDNN Frontend Graph 实现。FP32 提供 CPU fallback(xnnpack / Eigen / naive),AMP 仅 CUDA。AMP FWD 额外包含 GenStats(sum、sq_sum)用于后续 BN 融合。

CONV_FP32_FWD

输入:2 个 | 输出:3 个(含 sum/sq_sum 占位)

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C, H, W](NHWC)
输入 1 W FP32 [K, C/g, R, S](KRSC)
输出 0 Y FP32 [N, K, OH, OW](NHWC)
输出 1 sum FP32 占位(FP32 路径不使用)
输出 2 sq_sum FP32 占位(FP32 路径不使用)
CONV_AMP_FWD

输入:2 个 | 输出:3 个(含 GenStats)

方向 编号 名称 数据类型 形状
输入 0 X FP16 [N, C, H, W](NHWC)
输入 1 W FP16 [K, C/g, R, S](KRSC)
输出 0 Y FP16 [N, K, OH, OW](NHWC)
输出 1 sum FP32 [K](per-channel 和)
输出 2 sq_sum FP32 [K](per-channel 平方和)
CONV_FP32_BWD

输入:3 个 | 输出:2 个(dX 为 in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 [N, K, OH, OW]
输入 1 W FP32 [K, C/g, R, S]
输入 2 X FP32 [N, C, H, W](in-place 目标)
输出 0 dX FP32 [N, C, H, W](in-place 复用 X)
输出 1 dW FP32 [K, C/g, R, S]
CONV_AMP_BWD

同 FP32 BWD,数据类型为 FP16(dW 为 FP16)。

CONV_FP32_INF / CONV_AMP_INF

输入:2 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 / FP16 [N, C, H, W]
输入 1 W FP32 / FP16 [K, C/g, R, S]
输出 0 Y FP32 / FP16 [N, K, OH, OW]

功能:推理模式卷积,不含 GenStats。

CONV_FP32_BWD_FIRST_LAYER / CONV_AMP_BWD_FIRST_LAYER

输入:3 个 | 输出:2 个(dX 不写入)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, K, OH, OW]
输入 1 W FP32 / FP16 [K, C/g, R, S]
输入 2 X FP32 / FP16 [N, C, H, W]
输出 0 dX FP32 / FP16 占位,不写入
输出 1 dW FP32 / FP16 [K, C/g, R, S]

功能:首层卷积反向,仅计算 dW(Weight Gradient),跳过 dX 计算(首层输入为数据,无需回传梯度)。


MaxPool

源文件maxpool_op.cpp / maxpool_op.cu | 注册函数register_op_maxpool()

参数PoolParamskernel_h: int, kernel_w: int, pad_h: int, pad_w: int, stride_h: int, stride_w: int)。

MAXPOOL_FP32_FWD / MAXPOOL_AMP_FWD

输入:1 个 | 输出:2 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 / FP16 [N, C, H, W]
输出 0 Y FP32 / FP16 [N, C, OH, OW]
输出 1 mask INT8 保存最大值位置,用于 BWD 路由梯度
MAXPOOL_FP32_BWD / MAXPOOL_AMP_BWD

输入:4 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, OH, OW]
输入 1 Y FP32 / FP16 [N, C, OH, OW](前向输出)
输入 2 mask INT8 前向保存的 mask
输入 3 X FP32 / FP16 [N, C, H, W](in-place 目标)
输出 0 dX FP32 / FP16 [N, C, H, W](in-place 复用 X)

功能:根据 mask 将梯度路由到前向最大值位置。

MAXPOOL_FP32_INF / MAXPOOL_AMP_INF

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 / FP16 [N, C, H, W]
输出 0 Y FP32 / FP16 [N, C, OH, OW]

功能:推理模式最大池化,不保存 mask。


AvgPool

源文件avgpool_op.cpp / avgpool_op.cu | 注册函数register_op_avgpool()

参数PoolParams(同 MaxPool)。

AVGPOOL_FP32_FWD / AVGPOOL_AMP_FWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 / FP16 [N, C, H, W]
输出 0 Y FP32 / FP16 [N, C, OH, OW]
AVGPOOL_FP32_BWD / AVGPOOL_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, OH, OW]
输出 0 dX FP32 / FP16 [N, C, H, W](in-place 复用 X)

功能:平均池化反向,梯度均匀分配到池化窗口内各位置。

AVGPOOL_FP32_INF / AVGPOOL_AMP_INF

同 FWD,用于推理。


GAP(Global Average Pooling)

源文件gap_op.cpp / gap_op.cu | 注册函数register_op_gap()

GAP_FP32_FWD / GAP_AMP_FWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 / FP16 [N, C, H, W]
输出 0 Y FP32 / FP16 [N, C, 1, 1]

功能:全局平均池化,将空间维度降为 1×1。

GAP_FP32_BWD / GAP_AMP_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 / FP16 [N, C, 1, 1]
输出 0 dX FP32 / FP16 [N, C, H, W](in-place 复用 X)

功能:全局平均池化反向,梯度均匀广播到所有空间位置。


FC(全连接)

源文件fc_op.cpp / fc_op.cu | 注册函数register_op_fc()

参数FCParamsout_features: int, bias: bool)。

FC 将输入展平为 [batch, in_features](其中 in_features = H W C),然后执行 Y = X @ W^T + B。FP32 路径基于 cuBLAS GEMM + 自定义 bias add kernel,提供 CPU fallback(Eigen / naive 三重循环);AMP 路径使用 cuDNN Frontend 1×1 Conv 图实现(含 clamp 到 FP16 范围),仅 CUDA。AMP BWD 直接输出 FP32 的 dW/dB(cuBLAS 混合精度 GEMM),无需后续 CAST。

FC_FP32_FWD

输入:3 个(bias 固定传入,不使用则为占位) | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C, H, W](内部展平为 [N, CHW]
输入 1 W FP32 [K, CHW, 1, 1](KRSC 布局)
输入 2 B FP32 [K, 1, 1, 1](若 bias=false 则为占位,不使用)
输出 0 Y FP32 [N, K, 1, 1]

功能Y = X_flatten @ W^T + B。GPU 路径使用 cuBLAS cublasGemmEx(FP32),CPU 路径优先使用 Eigen,回退到 naive 三重循环。

FC_FP32_BWD

输入:4 个 | 输出:3 个(dX 为 in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 [N, K, 1, 1]
输入 1 W FP32 [K, CHW, 1, 1]
输入 2 Y_output FP32 占位,不使用
输入 3 X FP32 [N, C, H, W](in-place 目标)
输出 0 dX FP32 [N, C, H, W](in-place 复用 X)
输出 1 dW FP32 [K, CHW, 1, 1]
输出 2 dB FP32 [K, 1, 1, 1](若 bias=false 仍输出占位)

功能:计算 dB = sum(dY, axis=0)dW = dY^T @ XdX = dY @ W。GPU 路径使用三流并行(dB @ COMP_2, dW @ COMP_1, dX @ COMP_3),dX 等待 dW 完成。

FC_AMP_FWD

输入:3 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP16 [N, C, H, W](内部展平为 [N, CHW, 1, 1]
输入 1 W FP16 [K, CHW, 1, 1]
输入 2 B FP32 [K, 1, 1, 1](若 bias=false 则为占位)
输出 0 Y FP16 [N, K, 1, 1]

功能:使用 cuDNN Frontend 1×1 Conv 图实现,含 FP32 累加、bias add(FP32)、clamp 到 FP16 范围。仅 CUDA,CPU 不支持。

FC_AMP_BWD

输入:4 个 | 输出:3 个(dX 为 in-place,dW/dB 为 FP32)

方向 编号 名称 数据类型 形状
输入 0 dY FP16 [N, K, 1, 1]
输入 1 W FP16 [K, CHW, 1, 1]
输入 2 Y_output FP16 占位,不使用
输入 3 X FP16 [N, C, H, W](in-place 目标)
输出 0 dX FP16 [N, C, H, W](in-place 复用 X)
输出 1 dW FP32 [K, CHW, 1, 1]
输出 2 dB FP32 [K, 1, 1, 1](若 bias=false 仍输出占位)

功能:AMP 反向,使用 cuBLAS 混合精度 GEMM(FP16 输入 × FP16,FP32 累加/输出)。与 Conv 不同,dW/dB 直接输出 FP32 无需后续 CAST。三流并行同 FP32 BWD。


BatchNorm

源文件bn_op.cpp / bn_op.cu | 注册函数register_op_bn()

参数BNParamseps: float 默认 1e-5, momentum: float 默认 0.1)。

BN1D 和 BN2D 的 IO 结构完全相同,区别仅在于张量布局:BN1D 操作 [N, C] 形状,BN2D 操作 [N, C, H, W](NHWC)形状。训练模式下 running_mean/var 通过 B_NEXT 原地更新;推理模式使用预计算的 eq_scale/eq_bias。

BN1D_FP32_FWD / BN2D_FP32_FWD

输入:7 个 | 输出:3 个(running_mean/var 原地更新)

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C][N, C, H, W]
输入 1 γ FP32 [C]
输入 2 β FP32 [C]
输入 3 running_mean FP32 [C](原地更新为 next_mean)
输入 4 running_var FP32 [C](原地更新为 next_var)
输入 5 eps FP32 标量(1 元素)
输入 6 momentum FP32 标量(1 元素)
输出 0 Y FP32 与 X 相同
输出 1 saved_mean FP32 [C]
输出 2 saved_inv_var FP32 [C]

功能:训练前向 BN。计算 Y = γ (X - μ) / √(σ² + ε) + β,同时更新 running_mean/var(EMA:new = (1-m)old + m*batch,cuDNN 使用无偏方差)。GPU 基于 cuDNN Frontend Graph,CPU 提供 naive 循环 fallback。

BN1D_FP32_BWD / BN2D_FP32_BWD

输入:5 个 | 输出:3 个(dX 为 in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 与 X 相同
输入 1 γ FP32 [C]
输入 2 saved_mean FP32 [C](来自 FWD)
输入 3 saved_inv_var FP32 [C](来自 FWD)
输入 4 X FP32 与 Y 相同(in-place 目标)
输出 0 dX FP32 与 X 相同(in-place 复用 X)
输出 1 FP32 [C]
输出 2 FP32 [C]

功能:BN 反向,计算 dX、dγ、dβ。GPU 基于 cuDNN Frontend Graph,CPU 提供 naive 循环 fallback。

BN1D_FP32_INF / BN2D_FP32_INF

输入:3 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C][N, C, H, W]
输入 1 eq_scale FP32 [C]
输入 2 eq_bias FP32 [C]
输出 0 Y FP32 与 X 相同

功能:推理模式 Y = X * eq_scale + eq_bias(融合的 affine 变换)。GPU 使用自定义 kernel,CPU 提供 naive 循环。

BN1D_AMP_FWD / BN2D_AMP_FWD

IO 结构同 FP32 FWD,数据类型为 FP16(γ/β/rm/rv/eps/momentum 仍为 FP32)。仅 CUDA,基于 cuDNN Frontend Graph。

BN1D_AMP_BWD / BN2D_AMP_BWD

IO 结构同 FP32 BWD,数据类型为 FP16(γ/saved_mean/saved_inv_var/dγ/dβ 为 FP32)。仅 CUDA。

BN1D_AMP_INF / BN2D_AMP_INF

IO 结构同 FP32 INF,X/Y 为 FP16,eq_scale/eq_bias 为 FP32。仅 CUDA。

BN_UPDATE_EQ_PARAMS

输入:5 个 | 输出:2 个

方向 编号 名称 数据类型 形状
输入 0 γ FP32 [C]
输入 1 β FP32 [C]
输入 2 running_mean FP32 [C]
输入 3 running_var FP32 [C]
输入 4 eps FP32 标量(1 元素,可选)
输出 0 eq_scale FP32 [C]
输出 1 eq_bias FP32 [C]

功能:由训练后的 running stats 计算推理用等效参数。eq_scale = γ / √(rv + ε)eq_bias = β - rm * eq_scale。训练结束后调用一次,之后 INF 路径直接使用。


Flatten

源文件flatten_op.cpp / flatten_op.cu | 注册函数register_op_flatten()

参数FlattenParamsstart_dim: int 默认 1)。

[N, C, H, W] 张量展平为 [N, 1, 1, CHW]。GPU 路径使用逐元素 kernel 正确处理 padding(padded_c ≠ C),CPU 路径 compact 布局下等价于 memcpy。BWD_FIRST_LAYER 变体与 BWD 实现相同,仅在图编译阶段区分调度路径。

FLATTEN_FP32_FWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C, H, W]
输出 0 Y FP32 [N, 1, 1, CHW]

功能:将 NHWC 张量展平为 [N, 1, 1, CHW]。GPU 使用逐元素 kernel 处理 stride,CPU compact 布局下为 memcpy。

FLATTEN_FP32_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 [N, 1, 1, CHW]
输出 0 dX FP32 [N, C, H, W](in-place 复用 X)

功能:将展平梯度还原为原始 NHWC 形状。

FLATTEN_FP32_BWD_FIRST_LAYER

IO 结构同 BWD。实现与 BWD 相同,仅在图编译阶段通过不同枚举值区分调度路径。

FLATTEN_AMP_FWD

IO 结构同 FP32 FWD,数据类型为 FP16。仅 CUDA,CPU 不支持。

FLATTEN_AMP_BWD

IO 结构同 FP32 BWD,数据类型为 FP16。仅 CUDA。

FLATTEN_AMP_BWD_FIRST_LAYER

IO 结构同 AMP BWD。仅 CUDA。


ChannelPadding

源文件channel_padding_op.cpp / channel_padding_op.cu | 注册函数register_op_channel_padding()

将通道维度从 C_in 填充到 C_outC_out 为 8 的倍数),新增通道置零。反向传播时取 dY 的前 C_in 个通道作为 dX。BWD_FIRST_LAYER 变体与 BWD 实现相同。

CHANNEL_PADDING_FP32_FWD

输入:1 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 X FP32 [N, C_in, H, W]
输出 0 Y FP32 [N, C_out, H, W]C_out ≥ C_in,新增通道置零)

功能:将通道数从 C_in 填充到 C_out(向上取整到 8 的倍数),新增通道填充 0。GPU 使用逐元素 kernel,CPU 提供 naive 循环。

CHANNEL_PADDING_FP32_BWD

输入:1 个 | 输出:1 个(in-place)

方向 编号 名称 数据类型 形状
输入 0 dY FP32 [N, C_out, H, W]
输出 0 dX FP32 [N, C_in, H, W](in-place 复用 X)

功能:取 dY 的前 C_in 个通道作为 dX,丢弃填充通道的梯度。

CHANNEL_PADDING_FP32_BWD_FIRST_LAYER

IO 结构同 BWD。实现与 BWD 相同。

CHANNEL_PADDING_AMP_FWD / CHANNEL_PADDING_AMP_BWD / CHANNEL_PADDING_AMP_BWD_FIRST_LAYER

IO 结构同对应 FP32 变体,数据类型为 FP16。仅 CUDA,CPU 不支持。


SoftmaxCrossEntropy

源文件softmax_ce_op.cpp / softmax_ce_op.cu | 注册函数register_op_softmax_ce()

参数LossParamslabel_smoothing: float, num_classes: int)。

标量输入(scaling、batch_size、label_smoothing)由 Compiler Phase 4 注入并绑定到 DTensor ID。FWD 输出 loss、inv_scaling 和 probs;INF 额外输出 top1、top5、pred 用于评估。

SOFTMAX_CE_FP32_FWD

输入:5 个(含标量) | 输出:3 个

方向 编号 名称 数据类型 形状
输入 0 logits FP32 [N, num_classes]
输入 1 labels INT32 [N]
输入 2 scaling FP32 标量(1 元素)
输入 3 batch_size INT32 标量(1 元素)
输入 4 label_smoothing FP32 标量(1 元素)
输出 0 loss FP32 标量(1 元素)
输出 1 inv_scaling FP32 标量(1 元素)
输出 2 probs FP32 [N, num_classes]

功能:训练版 Softmax + CrossEntropy,支持 label smoothing。GPU 使用自定义 kernel(含 partial reduction 用于多卡),CPU 提供 naive fallback。

SOFTMAX_CE_FP32_BWD

输入:5 个(含标量) | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 probs FP32 [N, num_classes](来自 FWD)
输入 1 labels INT32 [N]
输入 2 scaling FP32 标量(1 元素)
输入 3 inv_scaling FP32 标量(1 元素)
输入 4 label_smoothing FP32 标量(1 元素)
输出 0 dlogits FP32 [N, num_classes]

功能:SoftmaxCE 反向,计算 dlogits = (probs - one_hot_with_smoothing) / (N * scaling)

SOFTMAX_CE_FP32_INF

输入:5 个(含标量) | 输出:6 个

方向 编号 名称 数据类型 形状
输入 0 logits FP32 [N, num_classes]
输入 1 labels INT32 [N]
输入 2 scaling FP32 标量(1 元素)
输入 3 batch_size INT32 标量(1 元素)
输入 4 label_smoothing FP32 标量(1 元素)
输出 0 loss FP32 标量(1 元素)
输出 1 inv_scaling FP32 标量(1 元素)
输出 2 probs FP32 [N, num_classes]
输出 3 top1 FP32 标量(1 元素)
输出 4 top5 FP32 标量(1 元素)
输出 5 pred INT32 [N]

功能:推理版,输出完整评估指标(loss、top1、top5、pred)。

SOFTMAX_CE_AMP_FWD / SOFTMAX_CE_AMP_BWD / SOFTMAX_CE_AMP_INF

IO 结构同对应 FP32 变体,logits/probs 为 FP16,scaling/inv_scaling/label_smoothing/loss 为 FP32,labels 为 INT32。仅 CUDA。


CBR(Conv + BN + ReLU 融合)

源文件cbr_op.cpp / cbr_op.cu | 注册函数register_op_cbr()

参数CBRParams(内含 ConvParams + BNParams)。仅 AMP 路径,CPU 不支持。

CBR 将 Conv、BN、ReLU 三个算子融合为单个 cuDNN Frontend Graph,避免中间结果写回显存,显著提升 AMP 训练性能。FWD 额外输出 GenStats(sum、sq_sum)用于后续 BN 融合。

CBR_AMP_FWD

输入:8 个 | 输出:8 个

方向 编号 名称 数据类型 形状
输入 0 X FP16 [N, C, H, W](NHWC)
输入 1 W FP16 [K, C/g, R, S](KRSC)
输入 2 γ FP32 [K]
输入 3 β FP32 [K]
输入 4 running_mean FP32 [K](原地更新为 next_mean)
输入 5 running_var FP32 [K](原地更新为 next_var)
输入 6 eps FP32 标量(1 元素)
输入 7 momentum FP32 标量(1 元素)
输出 0 conv_output FP16 [N, K, OH, OW]
输出 1 sum FP32 [K](GenStats per-channel 和)
输出 2 sq_sum FP32 [K](GenStats per-channel 平方和)
输出 3 bn_output FP16 [N, K, OH, OW]
输出 4 saved_mean FP32 [K]
输出 5 saved_inv_var FP32 [K]
输出 6 relu_output FP16 [N, K, OH, OW]
输出 7 mask INT8 [N, K, OH, OW](ReLU mask,x > 0 时为 1)

功能:训练前向融合 Conv→BN→ReLU。通过 cuDNN Frontend Graph 单次 launch 完成,避免中间张量写回。

CBR_AMP_BWD

输入:7 个 | 输出:6 个

方向 编号 名称 数据类型 形状
输入 0 dY_relu FP16 [N, K, OH, OW]
输入 1 W FP16 [K, C/g, R, S]
输入 2 γ FP32 [K]
输入 3 saved_mean FP32 [K](来自 FWD)
输入 4 saved_inv_var FP32 [K](来自 FWD)
输入 5 mask INT8 [N, K, OH, OW](来自 FWD)
输入 6 X FP16 [N, C, H, W](in-place 目标)
输出 0 dX FP16 [N, C, H, W](in-place 复用 X)
输出 1 dW FP16 [K, C/g, R, S]
输出 2 FP32 [K]
输出 3 FP32 [K]
输出 4 conv_output FP16 [N, K, OH, OW]
输出 5 bn_bwd_out FP16 [N, K, OH, OW]

功能:完整反向融合 ReLU_BWD→BN_BWD→Conv_BWD(dW + dX)。

CBR_AMP_BWD_FIRST_LAYER

输入:7 个 | 输出:6 个(dX 为占位,不写入)

方向 编号 名称 数据类型 形状
输入 0 dY_relu FP16 [N, K, OH, OW]
输入 1 W FP16 [K, C/g, R, S]
输入 2 γ FP32 [K]
输入 3 saved_mean FP32 [K]
输入 4 saved_inv_var FP32 [K]
输入 5 mask INT8 [N, K, OH, OW]
输入 6 X FP16 [N, C, H, W]
输出 0 dX FP16 占位,不写入
输出 1 dW FP16 [K, C/g, R, S]
输出 2 FP32 [K]
输出 3 FP32 [K]
输出 4 conv_output FP16 [N, K, OH, OW]
输出 5 bn_bwd_out FP16 [N, K, OH, OW]

功能:首层融合反向,仅计算 dW(Weight Gradient),跳过 dX(首层输入为数据)。

CBR_AMP_INF

输入:4 个 | 输出:3 个

方向 编号 名称 数据类型 形状
输入 0 X FP16 [N, C, H, W]
输入 1 W FP16 [K, C/g, R, S]
输入 2 eq_scale FP32 [K]
输入 3 eq_bias FP32 [K]
输出 0 conv_output FP16 [N, K, OH, OW]
输出 1 bn_output FP16 [N, K, OH, OW]
输出 2 relu_output FP16 [N, K, OH, OW]

功能:推理融合路径 Conv→BN(INF)→ReLU,使用预计算的 eq_scale/eq_bias。


LARS 优化器更新

源文件lars_op.cpp / lars_op.cu | 注册函数register_op_lars()

LARS(Layer-wise Adaptive Rate Scaling)是 DTensor 算子(非 Range 算子),操作单个权重张量及其梯度。输入中包含若干 1 元素标量 DTensor。不同流变体(_FC_FIRST_DEEP)的 IO 结构完全相同,仅在图编译阶段映射到不同流(COMP_1/COMP_2/COMP_3)以实现流水线并行。

LARS_COMPUTE_TRUST_RATIO

输入:7 或 8 个 | 输出:1 个

方向 编号 名称 数据类型 形状
输入 0 W FP32 [K, C, H, W](权重)
输入 1 G FP32 与 W 相同(梯度)
输入 2 trust_coefficient FP32 标量(1 元素)
输入 3 weight_decay FP32 标量(1 元素)
输入 4 eps FP32 标量(1 元素)
输入 5 loss_scaling FP32 标量(1 元素)
输入 6 has_nan INT32 标量(1 元素)
输入 7 temp FP32 临时缓冲区(两阶段 reduction 用,可选)
输出 0 η FP32 标量(1 元素)

功能:计算 LARS trust ratio η = tc ‖W‖ / (‖G‖/s + wd ‖W‖ + ε),限制在 (0, 100]。GPU 使用两阶段 reduction(Phase1 计算 partial w2/g2,Phase2 归约求 η),CPU 提供 naive 循环 fallback。

LARS_UPDATE

输入:9 个 | 输出:1 个(W 原地更新)

方向 编号 名称 数据类型 形状
输入 0 W FP32 [K, C, H, W](原地更新)
输入 1 G FP32 与 W 相同
输入 2 M FP32 与 W 相同(momentum buffer,原地更新)
输入 3 η FP32 标量(1 元素)
输入 4 lr FP32 标量(1 元素)
输入 5 beta FP32 标量(1 元素)
输入 6 wd FP32 标量(1 元素)
输入 7 loss_scaling FP32 标量(1 元素)
输入 8 has_nan INT32 标量(1 元素)
输出 0 W FP32 与输入 W 相同(原地更新)

功能:LARS 动量更新。M_new = β M + lr η (G/s + wd W)W = W - M_new。若 has_nan 为真则跳过更新。

LARS_NESTEROV_UPDATE

IO 结构同 LARS_UPDATE。Nesterov 变体:M_new = β M + lr η (G/s + wd W)W = W - (lr η (G/s + wd W) + β M_new)

流感知变体
变体后缀 映射流 适用场景
_FC COMP_1 FC 层
_FIRST COMP_2 首层卷积
_DEEP COMP_3 深层卷积

所有流感知变体的 IO 结构同基础变体,仅在图编译阶段通过不同 ComputeOp 枚举值区分调度流。


Adam 偏差修正与标量

源文件adam_bc_op.cpp / adam_bc_op.cu | 注册函数register_op_adam_bc()

SCALAR_INCREMENT

输入:1 个 | 输出:1 个(原地)

方向 编号 名称 数据类型 形状
输入 0 step INT32 标量(1 元素,原地更新)
输出 0 step INT32 标量(1 元素)

功能step += 1,训练步数自增。GPU 使用原子加,CPU 直接递增。

ADAM_BIAS_CORRECTION

输入:3 个 | 输出:2 个

方向 编号 名称 数据类型 形状
输入 0 step INT32 标量(1 元素)
输入 1 β1 FP32 标量(1 元素)
输入 2 β2 FP32 标量(1 元素)
输出 0 bc1 FP32 标量(1 元素)
输出 1 bc2 FP32 标量(1 元素)

功能:计算 Adam 偏差修正因子。bc1 = 1 / (1 - β1^step)bc2 = 1 / (1 - β2^step)。GPU 使用自定义 kernel,CPU 使用 std::pow


Range 算子

概述

Range 算子对应 enum class RangeOp(定义于 include/renaissance/graph/op_kind.h),操作对象是 MemoryPlan 中的内存范围(Region),而不是完整 DTensor。它们负责数据传输、内存清零、类型转换、分布式通信、优化器更新、数值检查与指标累积等辅助任务,由 GraphExecutor 通过 g_range_op_table 调度。

实现目录src/backend/ops/range/

注册入口src/backend/op_registry.cpp 中的 register_default_ops()

公共调用约定

重要说明


H2D Copy
算子变体 输入 输出 数据类型 形状 功能
RANGE_H2D_COPY_A Host 侧 StagingBufferPool A 区(由 start_region_id 决定 label/data) output_ranges[]: 设备端 Region(I_A_LABELI_A_DATA 等) FP32 / INT32 按 range 大小 异步 Host→Device 双缓冲 A
RANGE_H2D_COPY_B Host 侧 StagingBufferPool B 区 output_ranges[]: 设备端 Region(I_B_LABELI_B_DATA 等) FP32 / INT32 按 range 大小 异步 Host→Device 双缓冲 B
RANGE_H2D_COPY_DTENSOR Host 侧 StagingParamPool slot 0(当前 hardcoded) output_ranges[0]: 目标设备内存 FP32 sizeof(float)(目前仅传 LR) 从参数 staging 区拷贝标量到设备

D2D Copy
算子变体 输入 输出 数据类型 形状 功能
RANGE_D2D_COPY input_ranges[]: 源设备内存范围 output_ranges[]: 目标设备内存范围 FP32/FP16 等 range 大小一一对应 通用 Device-to-Device 拷贝

Clear
算子变体 输入 输出 数据类型 形状 功能
RANGE_CLEAR output_ranges[]: 待清零范围 任意 range 大小 将指定内存范围置 0,常用于梯度清零

Cast
算子变体 输入 输出 数据类型 形状 功能
RANGE_CAST_FP32_TO_FP16 input_ranges[]: FP32 范围 output_ranges[]: FP16 范围 FP32→FP16 range 大小 / 2 范围级 FP32 转 FP16
RANGE_CAST_FP16_TO_FP32 input_ranges[]: FP16 范围 output_ranges[]: FP32 范围 FP16→FP32 range 大小 × 2 范围级 FP16 转 FP32

AllReduce
算子变体 输入 输出 数据类型 形状 功能
RANGE_SUM_ALLREDUCE input_ranges[]: 各 rank 数据 output_ranges[]: 归约后数据 FP32 range 大小 NCCL ncclSum AllReduce
RANGE_MEAN_ALLREDUCE 同上 同上 FP32 同上 AllReduce 后按 world_size 平均
RANGE_BN_STATS_ALLREDUCE 同上 同上 FP32 同上 BN stats 专用 AllReduce + 平均

说明:无 NCCL 时 CPU 路径退化为本地拷贝,Mean/BN_STATS 仍做平均。


优化器更新

所有更新均为原地修改权重/偏置范围;标量(lr、wd、beta 等)通过 input_ids 传入 1 元素 DTensor。

算子变体 输入(range + scalar) 输出 数据类型 形状 功能
RANGE_UPDATE_WEIGHT_SGD ranges: W, G
scalars: lr, wd, scaling, has_nan
output_ranges[0]: W(原地) FP32 W 的大小 W -= lr(G/s + wdW)
RANGE_UPDATE_WEIGHT_MOMENTUM ranges: W, G, M
scalars: lr, wd, beta, scaling, has_nan
W(原地)
M(原地)
FP32 W 的大小 SGD + Momentum
RANGE_UPDATE_WEIGHT_NESTEROV ranges: W, G, M
scalars: lr, wd, beta, scaling, has_nan
W(原地)
M(原地)
FP32 W 的大小 SGD + Nesterov
RANGE_UPDATE_WEIGHT_ADAM ranges: W, G, M, V
scalars: lr, wd, β1, β2, eps, scaling, bc1, bc2, has_nan
W(原地)
M/V(原地)
FP32 W 的大小 Adam 更新
RANGE_UPDATE_WEIGHT_ADAMW ranges: W, G, M, V
scalars: lr, wd, β1, β2, eps, scaling, bc1, bc2, has_nan
W(原地)
M/V(原地)
FP32 W 的大小 AdamW 更新
RANGE_UPDATE_BIAS_SGD ranges: B, G
scalars: lr, scaling, has_nan
B(原地) FP32 B 的大小 偏置 SGD(无 wd)
RANGE_UPDATE_BIAS_MOMENTUM ranges: B, G, M
scalars: lr, beta, scaling, has_nan
B/M(原地) FP32 B 的大小 偏置 Momentum
RANGE_UPDATE_BIAS_NESTEROV ranges: B, G, M
scalars: lr, beta, scaling, has_nan
B/M(原地) FP32 B 的大小 偏置 Nesterov
RANGE_UPDATE_BIAS_ADAM ranges: B, G, M, V
scalars: lr, β1, β2, eps, scaling, bc1, bc2, has_nan
B/M/V(原地) FP32 B 的大小 偏置 Adam/AdamW(wd 传 nullptr

CheckNaN
算子变体 输入 输出 数据类型 形状 功能
RANGE_CHECK_NAN input_ranges[0]: 待检查梯度范围
OpParams: 可选 GradClipParams.max_abs
output_ids[0]: has_nan(INT32) FP32 / INT32 has_nan 为 1 元素 检测 NaN/Inf;若 max_abs>0 则同时裁剪

GradScaling
算子变体 输入 输出 数据类型 形状 功能
RANGE_GRAD_SCALING input_ids[0]: has_nan(INT32)
input_ids[1]: scaling(FP32,原地)
output_ids[0]: scaling FP32 / INT32 1 元素 若 has_nan 为真,则 scaling *= 0.5(下限 1.0)

AccumMetrics
算子变体 输入 输出 数据类型 形状 功能
RANGE_ACCUM_METRICS input_ids[0]: batch_size(INT32)
input_ids[1]: loss
input_ids[2]: top1
input_ids[3]: top5
output_ids[0]: accum_loss
output_ids[1]: accum_top1
output_ids[2]: accum_top5
FP32 / INT32 输出为 1 元素 按 batch size 加权累积 loss/top1/top5

已声明、待后端实现
算子变体 当前状态 说明
RANGE_EMA_PARAM_UPDATE 后端未实现 graph 编译阶段生成,用于 EMA 参数更新
RANGE_SEMA_SWITCH 后端未实现 graph 编译阶段生成,用于 EMA 权重与原权重切换

参见