用途:管理张量在多个 CUDA 流之间的生命周期,判断 record_stream 是否可避免。缓存分配器只在分配该块的流上复用它,因此张量若在其他流使用,释放前需要同步。
主要能力:区分两类做法。(a) 从侧流同步回创建流,如事件或 creation_stream.wait_stream(side_stream),行为确定;(b) record_stream() 或 CUDACachingAllocator::recordStream(),分配器在后续分配时轮询已记录的流,是否复用取决于 GPU 进度,CPU 跑太快时内存可能膨胀。资料建议尽量用 (a)。
使用方式:按场景判断。可避免时,在最后一次侧流使用后记录事件,让创建流等待后再释放引用,不要用 record_stream,FSDP2 即如此。当前 API 下不可避免时,张量交给任意用户代码、释放时机未知,record_stream 是正确工具。若 API 尚可修改,可考虑返回带 wait() 的句柄、在调用者流上分配输出并同步侧流、内部持有缓冲区等设计;c10d 中集合通信在 Work 对象里保活直到 wait() 同步,而 isend 不要求 wait(),故回退到 recordStream。难以避免时,如 autograd 引擎在来自前向的流之间搬运梯度,用户钩子可持有梯度,无法确定最后使用点,此时应说明缺少哪些信息才能确定同步点。
限制:资料未提供安装命令、平台与收费信息。