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

Support layers without parameters or state #84

Closed
wants to merge 4 commits into from
Closed

Support layers without parameters or state #84

wants to merge 4 commits into from

Conversation

gdalle
Copy link
Contributor

@gdalle gdalle commented Jul 9, 2022

This PR proposes a solution to #83 by adding 2 booleans P and S to the layer types, specifying whether or not they need parameters / states as inputs.

That way, in addition to the generic syntax layer(x, ps, st):

  • a layer without parameters (e.g. Dropout) supports layer(x, st)
  • a layer without state (e.g. Dense) supports layer(x, ps)
  • a layer without parameters or state (e.g. ReshapeLayer) supports layer(x)

@codecov
Copy link

codecov bot commented Jul 9, 2022

Codecov Report

Merging #84 (37f4851) into main (f7ba291) will decrease coverage by 3.87%.
The diff coverage is 51.85%.

@@            Coverage Diff             @@
##             main      #84      +/-   ##
==========================================
- Coverage   71.18%   67.30%   -3.88%     
==========================================
  Files          14       14              
  Lines         989     1043      +54     
==========================================
- Hits          704      702       -2     
- Misses        285      341      +56     
Impacted Files Coverage Δ
src/adapt.jl 34.37% <0.00%> (-28.13%) ⬇️
src/layers/dropout.jl 100.00% <ø> (ø)
src/layers/recurrent.jl 100.00% <ø> (ø)
src/core.jl 65.00% <42.10%> (-35.00%) ⬇️
src/layers/basic.jl 58.73% <100.00%> (-1.27%) ⬇️
src/layers/conv.jl 100.00% <100.00%> (ø)
src/layers/normalize.jl 87.50% <100.00%> (+36.21%) ⬆️
src/layers/display.jl 0.00% <0.00%> (-54.64%) ⬇️
... and 5 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f7ba291...37f4851. Read the comment docs.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 9, 2022

Sofar I haven't added specific tests for these new methods, and they are not documented either. This is just a first draft to agree on the syntax before moving forward

@avik-pal avik-pal added this to the v0.5 milestone Jul 9, 2022
@gdalle
Copy link
Contributor Author

gdalle commented Jul 9, 2022

The main issue I see is for constructs such as Parallel, BranchLayer, PairwiseFusion and Chain. Since those layers are built from potentially heterogeneous NamedTuples, I don't know how to statically determine whether they have parameters / states. One would need to apply a logical OR to the hasparams / hasstate of each element of the NamedTuple, which sounds like it has to be done dynamically since we don't even know its length.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 9, 2022

The main issue I see is for constructs such as Parallel, BranchLayer, PairwiseFusion and Chain.

I may have found a solution. A Chain (or any other similar construct) requires parameters / states if and only if at least one of its components does. If I'm right, the code below can decide that statically (just imagine B is either hasparams or hasstate):

julia> using Test

julia> struct MyLayer{B} end

julia> struct MyChain{B} end

julia> MyChain(t::Tuple{Vararg{MyLayer}}) = MyChainTuple{true}();

julia> MyChain(t::Tuple{Vararg{MyLayer{false}}}) = MyChainTuple{false}();

julia> MyChain(t...) = MyChain(t);

julia> l0, l1 = MyLayer{false}(), MyLayer{true}();

julia> c00 = @inferred MyChain(l0, l0)
MyChainTuple{false}()

julia> c01 = @inferred MyChain(l0, l1)
MyChainTuple{true}()

julia> c11 = @inferred MyChain(l1, l1)
MyChainTuple{true}()

Copy link
Member

@avik-pal avik-pal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made a first pass over the PR.

src/core.jl Outdated Show resolved Hide resolved
src/core.jl Outdated Show resolved Hide resolved
src/core.jl Outdated Show resolved Hide resolved
src/core.jl Outdated Show resolved Hide resolved
src/core.jl Outdated
end

function apply(model::AbstractExplicitLayer{false, false}, x)
return apply(model, x, NamedTuple(), NamedTuple())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is a disconnect between these functions and the original goal. The idea of having these properties in the type, would be to simplify user code. So a stateless layer can define (::Layer)(x, ps). With this the user is still forced to define the original 3 argument api.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After trying this out in the code, I don't necessarily agree.
For the beginners that never define custom layers, having access to the font end syntax layer(x, ps) or layer(x) is a nice feature. But for the advanced users, allowing them to define layers like this in the back end will cause major headaches.
Indeed, if we allow such layer definitions, then layer(x, ps) must only return one output y, whereas layer(x, st) must return two outputs y and new_st. In terms of global coherence and documentation, this is a nightmare. I'd much rather impose that all layers be defined as layer(x, ps, st), and then we add convenience overloads to use them in a simplified manner.

src/core.jl Outdated Show resolved Hide resolved
src/core.jl Outdated Show resolved Hide resolved
@avik-pal
Copy link
Member

avik-pal commented Jul 9, 2022

Also if we are to simplify user code, we will have to define functions like (l::AbstractExplicitLayer{false}(x, ps, st) = l(x, st), (l::AbstractExplicitLayer{hasparams, false}(x, ps, st) = l(x, ps), st, (l::AbstractExplicitLayer{false, false}(x, ps, st) = l(x), st

@avik-pal
Copy link
Member

avik-pal commented Jul 9, 2022

Also tagging @ChrisRackauckas, @ToucheSir for thoughts on this

@avik-pal
Copy link
Member

avik-pal commented Jul 9, 2022

One would need to apply a logical OR to the hasparams / hasstate of each element of the NamedTuple, which sounds like it has to be done dynamically since we don't even know its length.

That information is available during compilation, I don't think it will lead to a dynamic dispatch. Worst case if the compiler can't do that, we can just use a generated function. Also, I wouldn't care too much about it since it is never going to appear in a performance-critical section of the code.

@ToucheSir
Copy link
Contributor

I don't see any scenario where you'd need a generated function either, as the aforementioned bool type logic happens at construction. Have you considered whether it makes sense to add type aliases for some of the more common combinations?

@ChrisRackauckas
Copy link
Contributor

I'm not sure I like the high level call changes with this. There's something simple about always needing f(x,p,st). If you start being able to drop some in some cases, then a lot of docs will be like "oh yeah it's just f(x,p)" (most SciML examples), but then the user goes to put in a BatchNorm and suddenly their code throws an odd error which they don't understand. I think there's simplicity in having only one calling convention.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

I'm not sure I like the high level call changes with this.

@ChrisRackauckas I think that depending on your use of the library, those changes might make a lot of sense. For instance, the notion of layer state is not obvious to beginners, and when they don't need it (eg. for a simple CNN without dropout), carrying it along makes the code heavier and less readable.
As mentioned by @avik-pal in #83, it's mostly about quality of life, and to help people get started with Lux.jl. Of course, as soon as you get more familiar with the syntax, you will start adding a state everywhere. But to ease first contact with the code, leaving the state aside for simple networks is a clear improvement to me.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

That information is available during compilation, I don't think it will lead to a dynamic dispatch.

I tried the following approach:

struct Parallel{P, S, F, T <: NamedTuple} <:
       AbstractExplicitContainerLayer{(:layers,), P, S}
    connection::F
    layers::T
end

function Parallel(connection::F, layers...) where {F}
    names = ntuple(i -> Symbol("layer_$i"), length(layers))
    layers_nt = NamedTuple{names}(layers)
    P = maximum(hasparams, layers_nt)
    S = maximum(hasstate, layers_nt)
    T = typeof(layers_nt)
    return Parallel{P, S, F, T}(connection, layers_nt)
end

Apparently, the compiler infers P and T without issues. However, type inference for the NamedTuple layer field no longer works (as opposed to the previous constructor). This in turn made all the tests fail, probably due to the generated functions that are used to apply Parallel.

Any idea how to fix it?

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

Also, I wouldn't care too much about it since it is never going to appear in a performance-critical section of the code.

I'm not sure I agree. There are cases where you want to create a neural network inside a hot loop, and faulty type inference at construction can mess up everything that follows.

@ChrisRackauckas
Copy link
Contributor

As I mentioned, no example I have written (which now is like 30 tutorials or so that use Lux) would require state. So the SciML uses of the library would definitely fall into the category that you are trying to target. But even with that, I don't think it's a good idea because this is so pervasive that I think it will make the cases with state confusing. If no tutorials ever include the state, then how are you ever expected to know that it exists? What I foresee happening is that there will be some layers that users will get confused by, like BatchNorm will just throw "mysterious" errors, when in reality the mystery is that the tutorials are all focused on a special case.

Now this is somewhat hidden in some cases like NeuralPDE and DiffEqFlux since in those cases users are rarely doing the call themselves. But SciMLSensitivity will definitely have this as an extra documentation issue, and either the solution will be to change our tutorials to showcase state in what will then be a non-standard way (i.e. include state even when it's nothing), always use layers with state in tutorials as a matter of training for the most "robust" form, or just ignoring it as a Lux issue and answering a bunch of issues with "oh, that's a Lux thing. If you use xxx then you have st and ...". I hate doing the latter because it quickly leads to 20 emails to answer everyday with the same thing, and by now I've learned that styles which require answering people's questions are just not scalable.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

What I foresee happening is that there will be some layers that users will get confused by, like BatchNorm will just throw "mysterious" errors

I also think that this is a foreseeable problem, but one that can be fixed with explicit error messages on the Lux.jl side when the wrong methods are called. Something like

Your neural network contains a layer that relies on a state variable.
You probably tried to call it with `network(x, ps)`, but instead you need to use `network(x, ps, st)`.
See [...] in the documentation for more details.

Anyway, I only started working on this because @avik-pal agreed it would be a welcome feature. If he ends up agreeing it's not, then I'll simply close the PR

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

Another justification for this feature would be easing the transition from Flux.jl to Lux.jl. Since you announced that SciML would be using Lux.jl, I've been convinced that this transition is a good thing. And to get people hooked to Lux.jl, the fewer visible differences with Flux.jl, the better. Then, when models get more complex and they're in too deep, we can drop the bomb with the additional state argument and they won't be able to escape 😅

@ChrisRackauckas
Copy link
Contributor

The transition is pretty much done BTW, so check out

which all bumped majors and removed FastChain from everything (well, DiffEqFlux is keeping the depwarns around for awhile to help the updates). 🎉

Almost everything is Lux now (SciML/NeuralPDE.jl#533 and SciML/NeuralPDE.jl#533 pretty much sealed the deal), except a notable issue with Lux on GPUs (due to ComponentArrays not broadcasting on GPUs correctly). There is an on-going thread about if we're happy with the new coding styles these updates gave, so I encourage you to chime in (https://julialang.slack.com/archives/CN04R7WKE/p1657113244013009).

Indeed, one of the things that was missing from FastChain was state, so when doing these updates we had to add state in. And right now it doesn't look nice, it's using globals, which Chris Elrod wasn't too keen on, and there are some @ignore_derivatives points which seem to be correct for every case I discussed with @avik-pal though I do wonder whether derivatives w.r.t. state are something that may be required for something (and would love to hear if there is a case). For some things like NeuralODE it would be good to disallow models that have some form of state that we know would be incorrect (for example, LSTMs in a NeuralODE are bad because the neural ODE doesn't step forward, and so the adaptivity means an LSTM-defined neural ODE does not have a well-defined solution if it rejects steps!), but disallowing all models with state goes too far (normalization layers for example should be fine in the theory that the state is fixed for each ODE solve).

However, even with all of those new issues arising because of state, I think we need to just fine what coding behaviors and habits do it well. For example, always make a callable struct to enclose the state in an ODE definition? We're still working it out, but I think it would be best to find what the nice styles are here and use it everywhere. Otherwise it might just be one "advanced" example that shows it, with other examples showing "worse" coding styles, or even worse, coding styles that have some unnecessary complexity when no state is there (but done anyways for consistency with the cases where it is?).

That said, I will be willing to give it a try since it would simplify docs and such, though I am worried that in all tutorials of these 3 libraries, we would just remove state to match this PR. And if we do that, 😅 state examples will seem like magic. A good error message may be enough though.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 10, 2022

The transition is pretty much done BTW

I know the transition is done for SciML (kudos on the massive change!), but there's lots of other people using Flux out there that we could still convince to switch 😉

That said, I will be willing to give it a try since it would simplify docs and such, though I am worried that in all tutorials of these 3 libraries, we would just remove state to match this PR.

I'm not necessarily advocating for the layer(x, ps) to become the default (recommended) syntax, as a matter of fact I'm not sure it should.
And as I stated in this comment, I think that for people who define new layers, sticking to the three-argument syntax makes more sense.
The change I'm proposing is mostly for people who use pre-defined stateless layers, to which we can give additional options.

@avik-pal
Copy link
Member

I kind of agree with Chris here that having a consistent API, even if it is not beginner-friendly, might be the way to go. Flux is great in that you can pretty much throw anything its way, and it will work, but for Lux, that is not the case. It relies on a pretty strict convention on how you should be writing your julia/zygote code.

Originally I was thinking about how to make it easier for people writing custom layers, in which case managing states is quite cumbersome and, in most cases, can be auto-generated. See #46, which kind of already does that (my only concern with merging that PR even though its nearly complete, users will not check the generated code and slap it around places where it might not work correctly)

Also in my experience, it doesn't matter if you show users the "correct" way to do something (especially after introducing a partially correct easier version). They tend to gravitate towards the easier (and in this particular case) the wrong way to do things. Anecdotally, flax which also operates similarly to lux (actually the other way around), introduces a non-state managed API first. And even after two months of using it, I still can't remember how to handle states properly.

@gdalle
Copy link
Contributor Author

gdalle commented Jul 12, 2022

Okay, so do we just close this and move on?

@gdalle
Copy link
Contributor Author

gdalle commented Jul 12, 2022

I must say the discussion also swayed me towards keeping the state around

@avik-pal
Copy link
Member

Okay, so do we just close this and move on?

I think yeah. Also, I should have tagged people in the other issue before you put all this effort in. My bad.

@gdalle gdalle closed this Jul 12, 2022
avik-pal pushed a commit that referenced this pull request Nov 3, 2024
* isleaf

* exclude

* add tests and docs

* more tests

* import functors

* fix test

* chore: reduce min compat

* chore: run formatter

* chore: bump version for release
avik-pal added a commit that referenced this pull request Nov 3, 2024
* perf: cleanup the benchmarking script

* perf: add benchmarks for Zygote

* perf: try reclaiming memory

* fix: incorrect system parameters

* perf: temporarily disable non-dense benchmarks

[skip tests]

* ci(benchmark): allow proceed on failure

[skip tests]

* perf: update polyalg selection for matmul and matmuladd

* test: ensure no additional allocations for matmul

* fix: typo in AMDGPU batched matmul

* perf: restore running all benchmarks

* docs: add link to benchmarks

* ci: fix benchmarks config

* test: run allocs test only on CPU

* fix: mixed-precision use Octavian if possible

* feat: add traits to fuse activation functions

[skip ci]

* perf: selective vectorization of operations bias_add/activation

* perf: fused bias activation for certain operations

* perf: optimize batchnorm implementation

* perf: don't fuse tanh

* perf: run specific benchmarks

* perf: be conservative while fusing activation functions

* refactor: qualify CPU functions with `_cpu`

* perf: restore running all benchmarks

* fix(tracker): expand custom Tracker AD for wrapper types

* fix: subtyping correction

* test: ignore tests for batched_vec (not our code)

* perf: faster version of groupnorm

* ci: run downstream testing only on pull requests

* refactor: remove unnecessary forced inlining

* refactor: move PartialFunctions into a module

* refactor: move utilities into Utils

* refactor: move device agnostic functions to `DeviceAgnostic`

* test: separate out the testing project file

* refactor: move internal functions into separate modules

* test: separate out the testing project file

* fix: incorrect internal calls

* refactor: remove unnecessary turbo loop

* perf: don't rely on compile time branch removal for KA

* perf: static ndrange kernel launches

* perf: let it autotune

* refactor: use multiple dispatch for cleaner kernels

* refactor: disable cpu codegen for kernels

* fix: nicer information for fallback mixed-precision matmul

* fix: allow zero-sized arrays in bias_activation

* fix: don't restrict bias_act to number

* fix: don't restrict traits/ext/utils to number

* fix: more aggressive type specialization

* chore: update version

* fix: broken qa tests

* fix: use `fmap_with_path` to correctly identify all internal states

* chore: apply formatting suggestion

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: don't error on detecting arrays with undefined entries

* refactor: move ChainRulesCore into an extension

* fix: skip enzyme tests if it is a pre-release

* chore: bump version for release

* fix: decide internal operation based on unwrapped arrays

* fix: avoid wrappers for SVector using `insert_batch_dim`

* fix: enzyme forward mode with octavian

* feat: swap Enzyme forward rules along with reverse

* test: simple enzyme forward test to check no crash

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add `unsafe_free!`

* feat: add DeviceIterator (and support parallel Device DataLoader)

* test: basic tests for free-ing data

* refactor: simplify parallel dataloader

* test: DataLoader aggressive freeing

* docs: add docstrings for `DeviceIterator`

* refactor: deprecate "Explicit" in favor of "Lux"

* chore: add deprecation for the single arg outputsize

* fix: remove old uses of Explicit

* fix!: remove deprecations

* chore: add exports for abstract layers

* refactor: move Functors and Setfield into ext

* fix!: remove hacky version of outputsize

* feat: add `AbstractLuxWrapperLayer`

* refactor: cleanup extension usage

* test: update test to new API

* test: extension loading errors

* feat: support functors for WrappedLayer

* test: LuxWrappedLayer tested

* test: don't qualify unnecessarily

* refactor: cleanup internal functions

* fix!: remove default slow handling of outputsize

* fix: update removed API

* test: update old tests

* fix!: remove unused `inputsize`

* fix: add fmap_with_path support

* chore: fix formatting

* feat: default call for wrapper layers

* fix: remove hacky usage of module getproperty rrules

* fix: accidental dual usage of `ofeltype_array`

* feat: auto-training mode and strict checks

* chore: bump compat for LuxCore to 1, (keep existing compat) (#147)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* feat: extend the layernorm API

* test: more detailed layernorm testing

* chore: bump version for release

* fix!: remove deprecations for 1.0 release

* chore!: remove Reexport of NNlib (will be done via Lux)

* perf: add NNlib to benchmarks deps

* fix: remove unused explicit imports

* chore: update to using LuxCore@1.0

* fix!: remove dropout branching based on size

* fix!: change the default layernorm dims

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add enzyme reverse rules for `fused_dense!`

* test: add tests for the enzyme fused_dense rules

* fix: typo in reverse rule

* test: run tests with more activations

* feat: instancenorm with running statistics

* fix: fixes for testing

* fix: modify the dropout testing

* fix: windows testing for dropout

* chore(deps): bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7 (#19)

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* test: add tests comparing the fused op with unfused op

* fix: improve load times by moving CRC to ext

* fix: remove UnrolledUtilities dep

* fix: remove UnrolledUtilities dep

* chore: bump minimum MLDataDevices version

* fix: dropout tests are no longer broken

* chore: accidentally left deprecations file

* fix: missing enzyme rules for matmuladd! (CUDA support)

* test: incorrect condition

* test: incorrect function name

* fix: zero out shadows

* fix: enzyme reverse bias needs a check on Const

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: better test integration in test_gradients

* feat: add test_gradients macro

* chore: apply formatting suggestion

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: update to use test_gradients macro

* fix: bias needs to add accum gradients

* chore: bump `EnzymeCore` version

* CompatHelper: bump compat for EnzymeCore in [weakdeps] to 0.8, (keep existing compat)

* chore: bump version for release

---------

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* chore: install latest enzyme version

* chore: update Enzyme version

* chore: bump minimum versions

* ci: update buildkite settings

* feat: wider support for batched_matmul

* perf: benchmark fallback batched_matmul

* feat: slow fallback conv impl

* feat: parallel fallback batchedmm

* ci(buildkite): add GPU testing for Metal and oneAPI

* test: check for FP64 support

* fix: convert element type before broadcasting

* fix: dispatch for NNlib conv

* ci(buildkite): disable testing for Metal and oneAPI

* chore: bump version

* feat: update minimum version of Enzyme to 0.13

* feat: support within_gradient for Enzyme

* refactor: rename within_gradient to within_autodiff

* fix: update forward rules to new API

* fix: use known on the return type

* fix: forward enzyme rules

* fix: broken enzyme tests

* feat: support runtime activity for enzyme

* fix: check was accidentally broken

* chore(deps): bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: rollback custom gelu implementation

* feat: XLADevice via Reactant

* chore: apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: bump version

* feat: more extensive testing of XLA backend

* fix: incorrect function call

* test: rename

* test: incorrect env var

* fix: copy to XLA in main thread

* fix: don't support pre-moving the data

* fix: urgent patch for reactant breakage

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.24.6 to 1.25.0 (#41)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.26.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: run on `1.10` and `1` (#57)

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1` (#81)

* ci: run on 1.10 and 1

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1` (#43)

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* test: mark truncated normal on Metal as unbroken

* ci: run buildkite on `1.10` and `1`

* chore: bump peter-evans/create-pull-request from 6 to 7 (#40)

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: run tests only on `1.10` for now (#172)

* fix: relax cublaslt types (#173)

* docs: add Flux.jl to the README (#83)

After FluxML/Flux.jl#2492 also Flux relies on MLDataDevices.

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#58)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#44)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#174)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump compat for GPUArrays in [weakdeps] to 11, (keep existing compat) (#86)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* chore: bump version for release

* chore: bump compat for GPUArrays in [weakdeps] to 11, (keep existing compat) (#46)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* chore: bump compat for GPUArraysCore to 0.2, (keep existing compat) (#47)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* chore: bump version for release

* feat: add fallbacks for unknown objects (#87)

* feat: add fallbacks for unknown objects

* feat: handle RNGs and undef arrays gracefully

* test: RNG movement

* test: functions and closures

* refactor: move `JuliaSIMD` deps to extensions (#175)

* fix: remove LV.vmap! usage

* fix: remove LV handling for bias_activation

* fix: remove LV usage in dropout

* refactor: move LV and octavian behind an extension

* docs: add docs for loading packages

* refactor: move SLEEFPirates to an ext

* fix: enzyme rules for batched matmul

* fix: patch more enzyme issues

* feat: add a preference to disable loop vectorization

* fix: incorrect dispatch called

* fix: enzyme segfault bypass

* feat: define isleaf (#84)

* isleaf

* exclude

* add tests and docs

* more tests

* import functors

* fix test

* chore: reduce min compat

* chore: run formatter

* chore: bump version for release

* fix: handle bitstypes and wrapped arrays in isleaf (#88)

* bitstype and wrapped arrays

* fixes

* fix import

* bound

* cleanup

* chore: fix min version of LinearAlgebra

* chore: run formatter

---------

Co-authored-by: Avik Pal <avik.pal.2017@gmail.com>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* fix: task switching in AMDGPU complex batched_matmul (#178)

* ci(buildkite): add downstream testing for NeuralOperators

* perf: restore old batched_mul

* fix: disable threading for certain devices

* revert: "perf: restore old batched_mul"

This reverts commit a8c0f3b4615f96a8773577e16fac61ba310d8123.

* fix: correctly handle adjoints of wrapped arrays (#90)

* fix: correctly handle adjoints of wrapped arrays

* fix: use fast paths for adapt

* fix: adapt ranges to JuliaGPU/Adapt.jl#86

* chore(deps): bump crate-ci/typos from 1.25.0 to 1.26.8 (#44)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#49)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#60)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: missing import; fixes #179 (#180)

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#93)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: merge LuxCUDA testing scripts

* ci: merge LuxCore testing scripts

* ci: merge WeightInitializers testing scripts

* ci: add WI to pipeline launch

* ci: add MLDataDevices to pipeline launch

* ci: change 1.10 to "lts"

* test: LuxCore test fixes

* ci: soft fail MLDataDevices

* ci: add a central downstream testing

* ci: partially migrate LuxLib CI

* ci: remove name field

* ci: minor fixes to build scripts

* ci: move LuxTestUtils CI scripts

* ci: update LuxLib workflow

* ci: update LuxLib workflows

* ci: split out downstream testing

* ci: fix certain pipelines

* ci: minor tweaks

* fix: workflows

* test: use local LuxCUDA for tests

* fix: use develop

* docs: update

* fix: add dev packages

* docs: dev required packages

* perf: merge the benchmarks

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Christopher Rackauckas <accounts@chrisrackauckas.com>
Co-authored-by: Carlo Lucibello <carlo.lucibello@gmail.com>
avik-pal added a commit that referenced this pull request Nov 3, 2024
* perf: cleanup the benchmarking script

* perf: add benchmarks for Zygote

* perf: try reclaiming memory

* fix: incorrect system parameters

* perf: temporarily disable non-dense benchmarks

[skip tests]

* ci(benchmark): allow proceed on failure

[skip tests]

* perf: update polyalg selection for matmul and matmuladd

* test: ensure no additional allocations for matmul

* fix: typo in AMDGPU batched matmul

* perf: restore running all benchmarks

* docs: add link to benchmarks

* ci: fix benchmarks config

* test: run allocs test only on CPU

* fix: mixed-precision use Octavian if possible

* feat: add traits to fuse activation functions

[skip ci]

* perf: selective vectorization of operations bias_add/activation

* perf: fused bias activation for certain operations

* perf: optimize batchnorm implementation

* perf: don't fuse tanh

* perf: run specific benchmarks

* perf: be conservative while fusing activation functions

* refactor: qualify CPU functions with `_cpu`

* perf: restore running all benchmarks

* fix(tracker): expand custom Tracker AD for wrapper types

* fix: subtyping correction

* test: ignore tests for batched_vec (not our code)

* perf: faster version of groupnorm

* ci: run downstream testing only on pull requests

* refactor: remove unnecessary forced inlining

* refactor: move PartialFunctions into a module

* refactor: move utilities into Utils

* refactor: move device agnostic functions to `DeviceAgnostic`

* test: separate out the testing project file

* refactor: move internal functions into separate modules

* test: separate out the testing project file

* fix: incorrect internal calls

* refactor: remove unnecessary turbo loop

* perf: don't rely on compile time branch removal for KA

* perf: static ndrange kernel launches

* perf: let it autotune

* refactor: use multiple dispatch for cleaner kernels

* refactor: disable cpu codegen for kernels

* fix: nicer information for fallback mixed-precision matmul

* fix: allow zero-sized arrays in bias_activation

* fix: don't restrict bias_act to number

* fix: don't restrict traits/ext/utils to number

* fix: more aggressive type specialization

* chore: update version

* fix: broken qa tests

* fix: use `fmap_with_path` to correctly identify all internal states

* chore: apply formatting suggestion

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: don't error on detecting arrays with undefined entries

* refactor: move ChainRulesCore into an extension

* fix: skip enzyme tests if it is a pre-release

* chore: bump version for release

* fix: decide internal operation based on unwrapped arrays

* fix: avoid wrappers for SVector using `insert_batch_dim`

* fix: enzyme forward mode with octavian

* feat: swap Enzyme forward rules along with reverse

* test: simple enzyme forward test to check no crash

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.23.6 to 1.24.1

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.23.6 to 1.24.1.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.23.6...v1.24.1)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add `unsafe_free!`

* feat: add DeviceIterator (and support parallel Device DataLoader)

* test: basic tests for free-ing data

* refactor: simplify parallel dataloader

* test: DataLoader aggressive freeing

* docs: add docstrings for `DeviceIterator`

* refactor: deprecate "Explicit" in favor of "Lux"

* chore: add deprecation for the single arg outputsize

* fix: remove old uses of Explicit

* fix!: remove deprecations

* chore: add exports for abstract layers

* refactor: move Functors and Setfield into ext

* fix!: remove hacky version of outputsize

* feat: add `AbstractLuxWrapperLayer`

* refactor: cleanup extension usage

* test: update test to new API

* test: extension loading errors

* feat: support functors for WrappedLayer

* test: LuxWrappedLayer tested

* test: don't qualify unnecessarily

* refactor: cleanup internal functions

* fix!: remove default slow handling of outputsize

* fix: update removed API

* test: update old tests

* fix!: remove unused `inputsize`

* fix: add fmap_with_path support

* chore: fix formatting

* feat: default call for wrapper layers

* fix: remove hacky usage of module getproperty rrules

* fix: accidental dual usage of `ofeltype_array`

* feat: auto-training mode and strict checks

* chore: bump compat for LuxCore to 1, (keep existing compat) (#147)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* feat: extend the layernorm API

* test: more detailed layernorm testing

* chore: bump version for release

* fix!: remove deprecations for 1.0 release

* chore!: remove Reexport of NNlib (will be done via Lux)

* perf: add NNlib to benchmarks deps

* fix: remove unused explicit imports

* chore: update to using LuxCore@1.0

* fix!: remove dropout branching based on size

* fix!: change the default layernorm dims

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.1 to 1.24.3

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.1...v1.24.3)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add enzyme reverse rules for `fused_dense!`

* test: add tests for the enzyme fused_dense rules

* fix: typo in reverse rule

* test: run tests with more activations

* feat: instancenorm with running statistics

* fix: fixes for testing

* fix: modify the dropout testing

* fix: windows testing for dropout

* chore(deps): bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7 (#19)

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump peter-evans/create-pull-request from 6 to 7

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.5

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.5.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.5)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* test: add tests comparing the fused op with unfused op

* fix: improve load times by moving CRC to ext

* fix: remove UnrolledUtilities dep

* fix: remove UnrolledUtilities dep

* chore: bump minimum MLDataDevices version

* fix: dropout tests are no longer broken

* chore: accidentally left deprecations file

* fix: missing enzyme rules for matmuladd! (CUDA support)

* test: incorrect condition

* test: incorrect function name

* fix: zero out shadows

* fix: enzyme reverse bias needs a check on Const

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: better test integration in test_gradients

* feat: add test_gradients macro

* chore: apply formatting suggestion

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: update to use test_gradients macro

* fix: bias needs to add accum gradients

* chore: bump `EnzymeCore` version

* CompatHelper: bump compat for EnzymeCore in [weakdeps] to 0.8, (keep existing compat)

* chore: bump version for release

---------

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* chore: install latest enzyme version

* chore: update Enzyme version

* chore: bump minimum versions

* ci: update buildkite settings

* feat: wider support for batched_matmul

* perf: benchmark fallback batched_matmul

* feat: slow fallback conv impl

* feat: parallel fallback batchedmm

* ci(buildkite): add GPU testing for Metal and oneAPI

* test: check for FP64 support

* fix: convert element type before broadcasting

* fix: dispatch for NNlib conv

* ci(buildkite): disable testing for Metal and oneAPI

* chore: bump version

* feat: update minimum version of Enzyme to 0.13

* feat: support within_gradient for Enzyme

* refactor: rename within_gradient to within_autodiff

* fix: update forward rules to new API

* fix: use known on the return type

* fix: forward enzyme rules

* fix: broken enzyme tests

* feat: support runtime activity for enzyme

* fix: check was accidentally broken

* chore(deps): bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.3 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.3 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.3...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.5 to 1.24.6

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.5 to 1.24.6.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.5...v1.24.6)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: rollback custom gelu implementation

* feat: XLADevice via Reactant

* chore: apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: bump version

* feat: more extensive testing of XLA backend

* fix: incorrect function call

* test: rename

* test: incorrect env var

* fix: copy to XLA in main thread

* fix: don't support pre-moving the data

* fix: urgent patch for reactant breakage

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump crate-ci/typos from 1.24.6 to 1.25.0 (#41)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.25.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.25.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.25.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump crate-ci/typos from 1.24.6 to 1.26.0

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.6 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.24.6...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: run on `1.10` and `1` (#57)

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1` (#81)

* ci: run on 1.10 and 1

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1` (#43)

* ci: run on `1.10` and `1`

* ci: run on `1.10` and `1`

* test: mark truncated normal on Metal as unbroken

* ci: run buildkite on `1.10` and `1`

* chore: bump peter-evans/create-pull-request from 6 to 7 (#40)

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](peter-evans/create-pull-request@v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: run tests only on `1.10` for now (#172)

* fix: relax cublaslt types (#173)

* docs: add Flux.jl to the README (#83)

After FluxML/Flux.jl#2492 also Flux relies on MLDataDevices.

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#58)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#44)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.25.0 to 1.26.0 (#174)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump compat for GPUArrays in [weakdeps] to 11, (keep existing compat) (#86)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* chore: bump version for release

* chore: bump compat for GPUArrays in [weakdeps] to 11, (keep existing compat) (#46)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>

* chore: bump compat for GPUArraysCore to 0.2, (keep existing compat) (#47)

Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* chore: bump version for release

* feat: add fallbacks for unknown objects (#87)

* feat: add fallbacks for unknown objects

* feat: handle RNGs and undef arrays gracefully

* test: RNG movement

* test: functions and closures

* refactor: move `JuliaSIMD` deps to extensions (#175)

* fix: remove LV.vmap! usage

* fix: remove LV handling for bias_activation

* fix: remove LV usage in dropout

* refactor: move LV and octavian behind an extension

* docs: add docs for loading packages

* refactor: move SLEEFPirates to an ext

* fix: enzyme rules for batched matmul

* fix: patch more enzyme issues

* feat: add a preference to disable loop vectorization

* fix: incorrect dispatch called

* fix: enzyme segfault bypass

* feat: define isleaf (#84)

* isleaf

* exclude

* add tests and docs

* more tests

* import functors

* fix test

* chore: reduce min compat

* chore: run formatter

* chore: bump version for release

* fix: handle bitstypes and wrapped arrays in isleaf (#88)

* bitstype and wrapped arrays

* fixes

* fix import

* bound

* cleanup

* chore: fix min version of LinearAlgebra

* chore: run formatter

---------

Co-authored-by: Avik Pal <avik.pal.2017@gmail.com>
Co-authored-by: Avik Pal <avikpal@mit.edu>

* fix: task switching in AMDGPU complex batched_matmul (#178)

* ci(buildkite): add downstream testing for NeuralOperators

* perf: restore old batched_mul

* fix: disable threading for certain devices

* revert: "perf: restore old batched_mul"

This reverts commit a8c0f3b4615f96a8773577e16fac61ba310d8123.

* fix: correctly handle adjoints of wrapped arrays (#90)

* fix: correctly handle adjoints of wrapped arrays

* fix: use fast paths for adapt

* fix: adapt ranges to JuliaGPU/Adapt.jl#86

* chore(deps): bump crate-ci/typos from 1.25.0 to 1.26.8 (#44)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.25.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.25.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#49)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#60)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: missing import; fixes #179 (#180)

* chore: bump crate-ci/typos from 1.26.0 to 1.26.8 (#93)

Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.26.0 to 1.26.8.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.26.0...v1.26.8)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: merge LuxCUDA testing scripts

* ci: merge LuxCore testing scripts

* ci: merge WeightInitializers testing scripts

* ci: add WI to pipeline launch

* ci: add MLDataDevices to pipeline launch

* ci: change 1.10 to "lts"

* test: LuxCore test fixes

* ci: soft fail MLDataDevices

* ci: add a central downstream testing

* ci: partially migrate LuxLib CI

* ci: remove name field

* ci: minor fixes to build scripts

* ci: move LuxTestUtils CI scripts

* ci: update LuxLib workflow

* ci: update LuxLib workflows

* ci: split out downstream testing

* ci: fix certain pipelines

* ci: minor tweaks

* fix: workflows

* test: use local LuxCUDA for tests

* fix: use develop

* docs: update

* fix: add dev packages

* docs: dev required packages

* perf: merge the benchmarks

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Christopher Rackauckas <accounts@chrisrackauckas.com>
Co-authored-by: Carlo Lucibello <carlo.lucibello@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants