mindspore.SummaryRecord
- class mindspore.SummaryRecord(log_dir, file_prefix='events', file_suffix='_MS', num_process=32, network=None, max_file_size=None, raise_exception=False, export_options=None)[源代码]
SummaryRecord用于记录summary数据和lineage数据。
该方法将在一个指定的目录中创建summary文件和lineage文件,并将数据写入文件。
它通过执行 record 方法将数据写入文件。除了通过 summary算子 记录网络的数据外,SummaryRecord还支持通过 自定义回调函数和自定义训练循环 记录数据。
说明
使用SummaryRecord时,需要将代码放置到 if __name__ == “__main__” 中运行。
确保在最后关闭SummaryRecord,否则进程不会退出。请参阅下面的示例部分,了解如何用两种方式正确关闭SummaryRecord。
每次训练只允许创建一个SummaryRecord实例,否则会导致数据写入异常。
SummaryRecord仅支持Linux系统。
编译MindSpore时,设置 -s on 关闭维测功能后,SummaryRecord不可用。
- 参数:
log_dir (str) - log_dir 是用来保存summary文件的目录。
file_prefix (str) - 文件的前缀。默认值:
'events'
。file_suffix (str) - 文件的后缀。默认值:
'_MS'
。num_process (int) - 设置保存Summary数据的进程数,进程越多性能越好,设置进程多可能会出现Host内存不足的问题。默认值:
32
。network (Cell) - 表示用于保存计算图的网络。默认值:
None
。max_file_size (int, 可选) - 可写入磁盘的每个文件的最大大小(以字节为单位)。例如,预期写入文件最大不超过4GB,则设置 max_file_size=4*1024**3 。默认值:
None
,表示无限制。raise_exception (bool, 可选) - 设置在记录数据中发生RuntimeError或OSError异常时是否抛出异常。默认值:
False
,表示打印错误日志,不抛出异常。export_options (Union[None, dict]) - 可以将保存在summary中的数据导出,并使用字典自定义所需的数据和文件格式。注:导出的文件大小不受 max_file_size 的限制。例如,您可以设置{‘tensor_format’:’npy’}将Tensor导出为 npy 文件。支持导出的数据类型如下所示。默认值:
None
,表示不导出数据。tensor_format (Union[str, None]) - 自定义导出的Tensor的格式。支持[“npy”, None]。默认值:
None
,表示不导出Tensor。npy:将Tensor导出为NPY文件。
- 异常:
TypeError - max_file_size 不是整型,或 file_prefix 和 file_suffix 不是字符串。
ValueError - 编译MindSpore时,设置 -s on 关闭了维测功能。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... # use in with statement to auto close ... with ms.SummaryRecord(log_dir="./summary_dir") as summary_record: ... pass ... ... # use in try .. finally .. to ensure closing ... try: ... summary_record = ms.SummaryRecord(log_dir="./summary_dir") ... finally: ... summary_record.close()
- add_value(plugin, name, value)[源代码]
添加需要记录的值。
- 参数:
plugin (str) - 数据类型标签。
graph:代表添加的数据为计算图。
scalar:代表添加的数据为标量。
image:代表添加的数据为图片。
tensor:代表添加的数据为张量。
histogram:代表添加的数据为直方图。
train_lineage:代表添加的数据为训练阶段的lineage数据。
eval_lineage:代表添加的数据为评估阶段的lineage数据。
dataset_graph:代表添加的数据为数据图。
custom_lineage_data:代表添加的数据为自定义lineage数据。
LANDSCAPE:代表添加的数据为地形图。
name (str) - 数据名称。
value (Union[Tensor, GraphProto, TrainLineage, EvaluationLineage, DatasetGraph, UserDefinedInfo,LossLandscape]) - 待存储的值。
当plugin为”graph”时,参数值的数据类型应为”GraphProto”对象。具体详情,请参见 mindspore/ccsrc/anf_ir.proto 。
当plugin为”scalar”、”image”、”tensor”或”histogram”时,参数值的数据类型应为”Tensor”对象。
当plugin为”train_lineage”时,参数值的数据类型应为”TrainLineage”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto 。
当plugin为”eval_lineage”时,参数值的数据类型应为”EvaluationLineage”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto 。
当plugin为”dataset_graph”时,参数值的数据类型应为”DatasetGraph”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto 。
当plugin为”custom_lineage_data”时,参数值的数据类型应为”UserDefinedInfo”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto 。
当plugin为”LANDSCAPE”时,参数值的数据类型应为”LossLandscape”对象。具体详情,请参见 mindspore/ccsrc/summary.proto 。
- 异常:
ValueError - plugin 的值不在可选值内。
TypeError - name 不是非空字符串,或当 plugin 为”scalar”、”image”、”tensor”或”histogram”时,value 的数据类型不是”Tensor”对象。
样例:
>>> import mindspore as ms >>> from mindspore import Tensor >>> if __name__ == '__main__': ... with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \ ... as summary_record: ... summary_record.add_value('scalar', 'loss', Tensor(0.1))
- close()[源代码]
将缓冲区中的数据立刻写入文件并关闭SummaryRecord。请使用with语句或try…finally语句进行自动关闭。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... try: ... summary_record = ms.SummaryRecord(log_dir="./summary_dir") ... finally: ... summary_record.close()
- flush()[源代码]
刷新缓冲区,将缓冲区中的数据写入磁盘。
调用该函数以确保所有挂起事件都已写入到磁盘。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \ ... as summary_record: ... summary_record.flush()
- property log_dir
获取日志文件的完整路径。
- 返回:
str,日志文件的完整路径。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \ ... as summary_record: ... log_dir = summary_record.log_dir
- record(step, train_network=None, plugin_filter=None)[源代码]
记录summary。
- 参数:
step (int) - 表示当前的step。
train_network (Cell) - 表示用于保存计算图的训练网络。默认值:
None
,表示当原始网络的图为None时,不保存计算图。plugin_filter (Callable[[str], bool], 可选) - 过滤器函数,用于过滤需要写入的标签项。默认值:
None
。
- 返回:
bool,表示记录是否成功。
- 异常:
TypeError - step 不为整型,或 train_network 的类型不为 mindspore.nn.Cell 。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \ ... as summary_record: ... result = summary_record.record(step=2)
- set_mode(mode)[源代码]
设置模型运行阶段。不同的阶段会影响记录数据的内容。
- 参数:
mode (str) - 待设置的网络阶段,可选值为”train”或”eval”。
train:代表训练阶段。
eval:代表评估阶段,此时 summary_record 不会记录summary算子的数据。
- 异常:
ValueError - mode 的值不在可选值内。
样例:
>>> import mindspore as ms >>> if __name__ == '__main__': ... with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \ ... as summary_record: ... summary_record.set_mode('eval')