def approx_step(x_outer, y_outer, model, criterion, scorer):
    """Compute approximate meta gradient (no inner step).

    Arguments:
        x_outer (torch.Tensor): input to obtain meta learner gradient.
        y_outer (torch.Tensor): target to obtain meta learner gradient.
        model (Warp): warped model.
        criterion (fun): task loss criterion.
        scorer (fun): scoring function (optional).
    """
    device = next(model.parameters()).device

    x_outer = x_outer.to(device, non_blocking=True)
    y_outer = y_outer.to(device, non_blocking=True)
    pred_outer = model(x_outer, cache_parameters=False)
    loss_outer = criterion(pred_outer, y_outer)

    score_outer = None
    if scorer is not None:
        score_outer = scorer(pred_outer.detach(), y_outer.detach())

    return loss_outer, score_outer