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文件中。
说明
使用SummaryCollector时,需要将代码放置到 if __name__ == “__main__” 中运行。
不允许在回调列表中存在多个SummaryCollector实例。
并非所有信息都可以在训练阶段或评估阶段收集。
SummaryCollector始终记录summary算子收集的数据。
SummaryCollector仅支持Linux系统。
编译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_samples 是
128
,这意味着将有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.2/docs/mindspore/code/mnist.py ... ds_train = create_dataset() ... # Define the network structure of LeNet5. Refer to ... # https://gitee.com/mindspore/docs/blob/r2.2/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)