(trace_mode)
| 151 | |
| 152 | |
| 153 | def run_syncbn(trace_mode): |
| 154 | x = F.ones([2, 16, 4, 4], dtype="float32") |
| 155 | |
| 156 | net = Sequential( |
| 157 | Conv2d(16, 16, 1), SyncBatchNorm(16), Conv2d(16, 16, 1), SyncBatchNorm(16), |
| 158 | ) |
| 159 | |
| 160 | gm = ad.GradManager().attach( |
| 161 | net.parameters(), callbacks=dist.make_allreduce_cb("MEAN") |
| 162 | ) |
| 163 | opt = optimizer.SGD(net.parameters(), 1e-3) |
| 164 | |
| 165 | def train_func(x): |
| 166 | with gm: |
| 167 | y = net(x) |
| 168 | loss = y.mean() |
| 169 | gm.backward(loss) |
| 170 | opt.step().clear_grad() |
| 171 | return loss |
| 172 | |
| 173 | if trace_mode is not None: |
| 174 | train_func = trace(train_func, symbolic=trace_mode) |
| 175 | |
| 176 | for _ in range(3): |
| 177 | loss = train_func(x) |
| 178 | loss.numpy() |
| 179 | |
| 180 | |
| 181 | @pytest.mark.require_ngpu(2) |
no test coverage detected