mindspore.SummaryCollector

class mindspore.SummaryCollector(summary_dir, collect_freq=10, num_process=32, collect_specified_data=None, keep_default_action=True, custom_lineage_data=None, collect_tensor_freq=None, max_file_size=None, export_options=None)[源代码]

SummaryCollector可以帮助收集收集一些常用信息,比如loss、学习率、计算图等。

SummaryCollector还可以允许通过 summary算子 将数据收集到summary文件中。

说明

  1. 不允许在回调列表中存在多个SummaryCollector实例。

  2. 并非所有信息都可以在训练阶段或评估阶段收集。

  3. SummaryCollector始终记录summary算子收集的数据。

  4. SummaryCollector仅支持Linux系统。

  5. 编译MindSpore时,设置 -s on 关闭维测功能后,SummaryCollector不可用。

参数:
  • summary_dir (str) - 收集的数据将存储到此目录。如果目录不存在,将自动创建。

  • collect_freq (int) - 设置数据收集的频率,频率应大于零,单位为 step 。如果设置了频率,将在(current steps % freq)=0时收集数据,并且将总是收集第一个step。需要注意的是,如果使用数据下沉模式,单位将变成 epoch 。不建议过于频繁地收集数据,因为这可能会影响性能。默认值: 10

  • num_process (int) - 设置保存Summary数据的进程数,进程越多性能越好,设置进程多可能会出现Host内存不足的问题。默认值: 32

  • collect_specified_data (Union[None, dict]) - 对收集的数据进行自定义操作。您可以使用字典自定义需要收集的数据类型。例如,您可以设置{'collect_metric':False}不去收集metrics。支持控制的数据如下。默认值: None ,收集所有数据。

    • collect_metric (bool) - 表示是否收集训练metrics,目前只收集loss。把第一个输出视为loss,并且算出其平均数。默认值: True

    • collect_graph (bool) - 表示是否收集计算图。目前只收集训练计算图。默认值: True

    • collect_train_lineage (bool) - 表示是否收集训练阶段的lineage数据,该字段将显示在MindInsight的 lineage页面 上。默认值: True

    • collect_eval_lineage (bool) - 表示是否收集评估阶段的lineage数据,该字段将显示在MindInsight的 lineage页面 。默认值: True

    • collect_input_data (bool) - 表示是否为每次训练收集数据集。目前仅支持图像数据。如果数据集中有多列数据,则第一列应为图像数据。默认值: True

    • collect_dataset_graph (bool) - 表示是否收集训练阶段的数据集图。默认值: True

    • histogram_regular (Union[str, None]) - 收集参数分布页面的权重和偏置,并在MindInsight中展示。此字段允许正则表达式控制要收集的参数。不建议一次收集太多参数,因为这会影响性能。注:如果收集的参数太多并且内存不足,训练将会失败。默认值: None ,表示只收集网络的前五个超参。

    • collect_landscape (Union[dict, None]) - 表示是否收集创建loss地形图所需要的参数。如果设置 None ,则不收集任何参数。默认收集所有参数并且将会保存在 {summary_dir}/ckpt_dir/train_metadata.json 文件中。

      • landscape_size (int) - 指定生成loss地形图的图像分辨率。例如:如果设置为128,则loss地形图的分辨率是128*128。注意:计算loss地形图的时间随着分辨率的增大而增加。默认值: 40 。可选值:3-256。

      • unit (str) - 指定训练过程中保存checkpoint时,下方参数 intervals 以何种形式收集模型权重。例如:将 intervals 设置为[[1, 2, 3, 4]],如果 unit 设置为 step ,则收集模型权重的频率单位为step,将保存1-4个step的模型权重,而 unit 设置为epoch,则将保存1-4个epoch的模型权重。默认值: step 。可选值:epoch/step。

      • create_landscape (dict) - 选择创建哪种类型的loss地形图,分为训练过程loss地形图(train)和训练结果loss地形图(result)。默认值: {"train": True, "result": True}。可选值: True / False

      • num_samples (int) - 创建loss地形图所使用的数据集的大小。例如:在图像数据集中,您可以设置 num_samples128 ,这意味着将有128张图片被用来创建loss地形图。注意:num_samples 越大,计算loss地形图时间越长。默认值: 128

      • intervals (List[List[int]]) - 指定loss地形图的区间。例如:如果用户想要创建两张训练过程的loss地形图,分别为1-5epoch和6-10epoch,则用户可以设置[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]。注意:每个区间至少包含3个epoch。

  • keep_default_action (bool) - 此字段影响 collect_specified_data 字段的收集行为。 True :表示设置指定数据后,其他数据按默认设置收集。 False :表示设置指定数据后,只收集指定数据,不收集其他数据。默认值: True

  • custom_lineage_data (Union[dict, None]) - 允许您自定义数据并将数据显示在MindInsight的 lineage页面 。在自定义数据中,key支持str类型,value支持str、int和float类型。默认值: None ,表示不存在自定义数据。

  • collect_tensor_freq (Optional[int]) - 语义与 collect_freq 的相同,但仅控制TensorSummary。由于TensorSummary数据太大,无法与其他summary数据进行比较,因此此参数用于降低收集量。默认情况下,收集TensorSummary数据的最大step数量为20,但不会超过收集其他summary数据的step数量。例如,给定 collect_freq=10 ,当总step数量为600时,TensorSummary将收集20个step,而收集其他summary数据时会收集61个step。但当总step数量为20时,TensorSummary和其他summary将收集3个step。另外请注意,在并行模式下,会平均分配总的step数量,这会影响TensorSummary收集的step的数量。默认值: None ,表示要遵循上述规则。

  • max_file_size (Optional[int]) - 可写入磁盘的每个文件的最大大小(以字节为单位)。例如,如果不大于4GB,则设置 max_file_size=4*1024**3 。默认值: None ,表示无限制。

  • export_options (Union[None, dict]) - 表示对导出的数据执行自定义操作。注:导出的文件的大小不受 max_file_size 的限制。您可以使用字典自定义导出的数据。例如,您可以设置{'tensor_format':'npy'}将tensor导出为 npy 文件。支持控制的数据如下所示。默认值: None ,表示不导出数据。

    • tensor_format (Union[str, None]) - 自定义导出的tensor的格式。支持["npy", None]。默认值: None ,表示不导出tensor。

      • npy - 将tensor导出为NPY文件。

异常:
  • ValueError - 编译MindSpore时,设置 -s on 关闭了维测功能。

样例:

>>> import mindspore as ms
>>> from mindspore import nn, SummaryCollector
>>> from mindspore.train import Model, Accuracy
>>>
>>> if __name__ == '__main__':
...     # If the device_target is GPU, set the device_target to "GPU"
...     ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
...     mnist_dataset_dir = '/path/to/mnist_dataset_directory'
...     # Create the dataset taking MNIST as an example. Refer to
...     # https://gitee.com/mindspore/docs/blob/r2.4.1/docs/mindspore/code/mnist.py
...     ds_train = create_dataset()
...     # Define the network structure of LeNet5. Refer to
...     # https://gitee.com/mindspore/docs/blob/r2.4.1/docs/mindspore/code/lenet.py
...     network = LeNet5(10)
...     net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
...     net_opt = nn.Momentum(network.trainable_params(), 0.01, 0.9)
...     model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}, amp_level="O2")
...
...     # Simple usage:
...     summary_collector = SummaryCollector(summary_dir='./summary_dir')
...     model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False)
...
...     # Do not collect metric and collect the first layer parameter, others are collected by default
...     specified={'collect_metric': False, 'histogram_regular': '^conv1.*'}
...     summary_collector = SummaryCollector(summary_dir='./summary_dir', collect_specified_data=specified)
...     model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False)