KJNodes/memorygenerated
开始记录 CUDAMemory History(StartRecordCUDAMemoryHistory)
此节点调用 PyTorch 的 torch。
Start Record CUDA Memory History
input
input
COMBO
enabled
all
context
all
stacks
all
max_entries
100000
KJNodes
Start Recording CUDAMemory History 节点用于启动对 CUDA 内存分配和释放历史的追踪记录。此节点始终运行,无论处于绕过还是禁用状态。它是一个诊断工具,旨在帮助用户深入了解模型运行时的 GPU 内存使用情况,为后续的性能分析和内存泄漏排查提供数据基础。该节点通常与 EndRecordCUDAMemoryHistory 节点配对使用,以完成一个完整的记录周期。
节点功能
该节点通过调用 PyTorch 的 torch.cuda.memory._record_memory_history 接口来实现核心功能。用户可以配置记录的范围(enabled)、调用栈信息的详细程度(context 和 stacks)以及记录条目的最大数量(max_entries)。在开始记录前,节点会执行软清空缓存和重置峰值内存统计的操作,以确保记录数据的准确性。
节点参数说明 - Start Recording CUDAMemory History
连接输入 (Inputs)
| 参数名称 | 数据类型 | 必填 | 默认值 | 取值范围/选项 | 说明 |
|---|---|---|---|---|---|
input | IO | 是 | - | - | 将接收到的输入数据原样传递至下游节点,保持工作流的连通性。 |
控件参数 (Parameters)
| 参数名称 | 数据类型 | 必填 | 默认值 | 取值范围/选项 | 说明 |
|---|---|---|---|---|---|
enabled | COMBO | 是 | all | "all", "state", "None" | 控制内存历史记录的范围。可选值为 "all"(记录所有内存事件)、"state"(仅记录已分配内存的信息)或 "None"(禁用记录)。 |
context | COMBO | 是 | all | "all", "state", "alloc", "None" | 控制哪些内存操作记录其调用栈。可选值为 "all"(记录所有操作)、"alloc"(为分配调用记录)、"state"(为已分配内存记录)或 "None"(不记录调用栈)。 |
stacks | COMBO | 是 | python | "python", "all" | 决定调用栈信息记录的详细程度。可选值为 "python"(仅记录 Python/TorchScript/inductor 框架)或 "all"(同时记录 C++ 框架)。 |
max_entries | INT | 是 | 100000 | 1000 - 10000000 | 记录条目的最大数量。 |
输出 (Output)
| 参数名称 | 数据类型 | 说明 |
|---|---|---|
| input | ANY | 将接收到的输入数据原样传递至下游节点,保持工作流的连通性。 |
使用场景
当你在构建一个复杂的图像生成或模型推理工作流,并怀疑存在内存泄漏或希望优化内存使用效率时,可以将此节点插入到工作流的起始位置。随后,在流程的末端使用 EndRecordCUDAMemoryHistory 节点来停止记录并保存快照文件。最后,通过分析工具(如 torch.cuda.memory._snapshot())来查看详细的内存事件历史。
注意事项
请注意,此节点属于实验性功能,其底层 API 可能随 PyTorch 版本更新而变动。启用详细的历史记录(尤其是 stacks 设为 "all")可能会带来一定的运行时性能开销,并消耗额外的内存来存储记录信息。
Start Recording CUDAMemory History 节点源码链接
Start Recording CUDAMemory History 节点来自 ComfyUI-KJNodes 节点包。
评论
使用 GitHub 登录后即可参与讨论。