想看如下几个问题:
好像只能搜到参数,看不到在哪里起作用?
可借鉴的是 quick start 和 bencharmk vgg 的部分,有提到 ncc-test 的用法
代码中把这个特性叫做 gradient as bucket view(do flatten),更能精准表达含义。这个并不能减少那次拷贝,但是会增强程序的局部性。跟 LS 里把所有 param 和 grad 放到一个超大 tensor 里类似的机制
没找到,这里有个 warmup iterations,但看起来是benchmark 里用的。
讲道理应该是看通信、计算的情况,来分配如何做才是最高效的 ddp
把多个参数的更新,融合到一个或更少的更新里,为了达成这个,用户需要:
- 把同组的多个参数扁平化(do_flatten=True)
- perform a fused parameter update by calling fuse_step
这样做好处是减少了参数更新时, kernel 的 overhead
挂钩子在
bagua_build_params
if param.requires_grad 即可找出用户希望计算梯度的,然后给他的 .grad_fn.next_functions[0][0].register_hook()
warmup_times, max_samples
看起来主要是输出这几个参数?
"NCCL_MIN_NCHANNELS": 0,
"NCCL_SOCKET_NTHREADS": 0,
"NCCL_NSOCKS_PERTHREAD": 0,
"nccl_buffsize_2p": 0,
好像也不是,主要是 recommended buckets