Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TracerArrayConversionError with proximal scalar optimization #1403

Closed
ddudt opened this issue Nov 20, 2024 · 1 comment · Fixed by #1419
Closed

TracerArrayConversionError with proximal scalar optimization #1403

ddudt opened this issue Nov 20, 2024 · 1 comment · Fixed by #1419
Assignees
Labels
optimization Adding or improving optimization methods P3 Highest Priority, someone is/should be actively working on this

Comments

@ddudt
Copy link
Collaborator

ddudt commented Nov 20, 2024

Minimal working example:

eq = get("precise_QA")
optimizer = Optimizer("proximal-fmintr")
objective = ObjectiveFunction(AspectRatio(eq=eq, target=5))
constraints = (
    FixCurrent(eq=eq),
    FixPressure(eq=eq),
    FixPsi(eq=eq),
    ForceBalance(eq=eq),
)
[eq], _ = optimizer.optimize(things=eq, objective=objective, constraints=constraints)

Error message:

Traceback (most recent call last):
  File "/home/dudt/DESC/debug.py", line 21, in <module>
    [eq], _ = optimizer.optimize(things=eq, objective=objective, constraints=constraints)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/optimizer.py", line 314, in optimize
    result = optimizers[method]["fun"](
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/_desc_wrappers.py", line 360, in _optimize_desc_fmin_scalar
    result = fmintr(
             ^^^^^^^
  File "/home/dudt/DESC/desc/optimize/fmin_scalar.py", line 191, in fmintr
    f = fun(x, *args)
        ^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/_constraint_wrappers.py", line 244, in compute_scalar
    return self._objective.compute_scalar(x, constants)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/objectives/objective_funs.py", line 518, in compute_scalar
    f = jnp.sum(self.compute_scaled_error(x, constants=constants) ** 2) / 2
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/_constraint_wrappers.py", line 836, in compute_scaled_error
    xopt, _ = self._update_equilibrium(x, store=False)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/_constraint_wrappers.py", line 752, in _update_equilibrium
    xopt = f_where_x(x, self._allx, self._allxopt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dudt/DESC/desc/optimize/utils.py", line 523, in f_where_x
    x, xs, fs = map(np.asarray, (x, xs, fs))
    ^^^^^^^^^
jax.errors.TracerArrayConversionError: The numpy.ndarray conversion method __array__() was called on traced array with shape float64[300]
The error occurred while tracing the function compute_scalar at /home/dudt/DESC/desc/objectives/objective_funs.py:501 for jit. 
See https://jax.readthedocs.io/en/latest/errors.html#jax.errors.TracerArrayConversionError

Similar error with other scalar optimizers, such as the SciPy ones. Error does not occur with "proximal-lsq-exact".

Using JAX v0.4.35

@ddudt ddudt added bug optimization Adding or improving optimization methods P3 Highest Priority, someone is/should be actively working on this labels Nov 20, 2024
@ddudt ddudt changed the title TracerArrayConversionError with scalar optimization TracerArrayConversionError with proximal scalar optimization Nov 20, 2024
@dpanici
Copy link
Collaborator

dpanici commented Nov 20, 2024

Add compute_scalar method to ProximalProjection class (dont jit compile it)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
optimization Adding or improving optimization methods P3 Highest Priority, someone is/should be actively working on this
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants