Skip to content

Mooncake issue with large NamedTupleDists #505

Description

@philippeller

Mooncake AD fails on _flat_ntd_eff_accessors / _flat_ntd_orig_accessors for large NamedTupleDist

Summary

When using Mooncake (reverse-mode AD) with BAT's bat_findmode / OptimizationAlg, the optimization crashes with a MooncakeRuleCompilationError during rule compilation for _flat_ntd_eff_accessors. This happens when the NamedTupleDist prior has many fields (~50 parameters). Smaller priors (~23 parameters) work fine.

Environment

  • Julia 1.12.1
  • BAT v4.0.4
  • ValueShapes v0.11.4
  • Mooncake v0.5.23

Minimal reproducer

using BAT, Distributions, ValueShapes, Mooncake, ADTypes

# Build a NamedTupleDist with ~50 fields (mix of Normal, Truncated, Uniform, ConstValueDist)
prior_nt = (;
    (Symbol("param_$i") => Normal(0, 1) for i in 1:30)...,
    (Symbol("trunc_$i") => truncated(Normal(1, 0.1), 0.5, 1.5) for i in 1:10)...,
    (Symbol("unif_$i") => Uniform(0, 1) for i in 1:5)...,
    (Symbol("fixed_$i") => 0.5 for i in 1:5)...,   # these become ConstValueDist
)

prior = distprod(; prior_nt...)
likelihood = let
    params -> begin
        logpdf(Normal(0, 1), sum(values(params))) # dummy
    end
end

posterior = PosteriorMeasure(BAT.logfuncdensity(likelihood), prior)
init = (; (k => rand(v) for (k,v) in pairs(prior))...)

set_batcontext(ad = AutoMooncake(Mooncake.Config()))
bat_findmode(posterior, OptimizationAlg(optalg=Optimization.LBFGS(), init=ExplicitInit([init])))

Error

MooncakeRuleCompilationError: an error occurred while Mooncake was compiling
a rule to differentiate something.

To replicate this error run the following:

Mooncake.build_rrule(
    Mooncake.MooncakeInterpreter(Mooncake.ReverseMode),
    Tuple{
        Type{ValueShapes.NamedTupleShape},
        Type{NamedTuple},
        @NamedTuple{field1::ValueShapes.ArrayShape{Real, 1}, ...50 fields...}
    };
    debug_mode=false
)

The stacktrace points to:

_flat_ntd_eff_accessors
  @ BAT/src/transforms/distribution_transform.jl:658
dist_trafo_impl
  @ BAT/src/transforms/distribution_transform.jl:701-708

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions