mindspore.train.FlopsUtilizationCollector
- class mindspore.train.FlopsUtilizationCollector(data_size=None, computility=1, full_flops=True, enable_ma_collector=False)[源代码]
FlopsUtilizationCollector接口统计模型利用率信息MFU,硬件利用率信息HFU。 当前接口只统计MatMul、BatchMatMul、FlashAttentionScore、Conv2D算子的正反向flops信息。 只支持静态图静态shape模式。
- 参数:
data_size (int) - 表示每隔多少个step打印一次信息, 默认值为None。
computility (int) - 表示每张计算卡的峰值算力。默认值:
1
。full_flops (bool) - 表示是否统计完整的模型信息,如果设置为True,会统计完整的模型信息,如果设置为False,将会统计对应每张卡的分片模型信息。默认值:
True
。enable_ma_collector (bool) - 表示是否是否将flops写日志,提供给云上任务进行采集。默认值:
False
。
- 异常:
TypeError - data_size 不是正整数。
TypeError - full_flops 不是布尔类型。
TypeError - enable_ma_collector 不是布尔类型。
AssertionError - 训练模式不是静态图或者不是静态shape。
样例:
>>> import numpy as np >>> import mindspore.dataset as ds >>> from mindspore import nn >>> from mindspore.train import Model, FlopsUtilizationCollector >>> from mindspore import context >>> context.set_context(mode=context.GRAPH_MODE) >>> data = {"x": np.float32(np.random.rand(64, 10)), "y": np.random.randint(0, 5, (64,))} >>> train_dataset = ds.NumpySlicesDataset(data=data).batch(32) >>> net = nn.Dense(10, 5) >>> crit = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> opt = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> flops_callback = FlopsUtilizationCollector(train_dataset.get_dataset_size(), computility=10e6) >>> model = Model(network=net, optimizer=opt, loss_fn=crit, metrics={"recall"}) >>> model.train(2, train_dataset, callbacks=[flops_callback]) Full model flops is 6400, Full hardware flops is 6400, Shard model flops is 6400, Shard hardware flops is 6400 Train per step time: 135.572 ms, mfu:0.47% hfu:0.47% Train per step time: 1.317 ms, mfu:48.59% hfu:48.59%
- step_begin(run_context)[源代码]
在step开始时记录时间。
- 参数:
run_context (RunContext) - 包含模型的相关信息。详情请参考
mindspore.train.RunContext
。
- step_end(run_context)[源代码]
在step结束时打印模型利用率信息MFU,硬件利用率信息HFU。
- 参数:
run_context (RunContext) - 包含模型的相关信息。详情请参考
mindspore.train.RunContext
。