使能跨流内存复用

基本原理

当前PyTorch框架默认的多流内存复用机制,会导致被通信流依赖的延迟释放,内存复用不及时。在torch_npu中提供了一个多流内存复用的增强功能,提早释放被通信流占用的内存,使得内存能有效利用。

使用场景

可以通过采集每个step的内存状态数据,如果active_bytes.all.peak比allocated_bytes.all.peak大很多,可以尝试配置环境变量优化。采集内存状态,网络脚本修改,在每次训练结束后采集记录内存状态:

memory_stats = []
memory_stats.append(torch_npu.npu.memory_stats(device=0))
for step, batch_data in enumerate(train_loader):
    train(batch_data)
    memory_stats.append(torch_npu.npu.memory_stats(device=0))
if torch.npu.current_device() == 0:
    import pandas as pd
    df = pd.DataFrame.from_records(memory_stats)
    df.to_csv(f'npu_memory_stats.csv', index=False)

操作步骤

配置环境变量:

export MULTI_STREAM_MEMORY_REUSE=1