当前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