Supporting Linear Algebraic Primitives
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 20/100
Rechercherichtung
Beginne mit der Durchsicht der bestehenden skalaren DiffRules-Schnittstelle und der zugehörigen Diskussion zu DiffLinearAlgebra, einschließlich der vorgeschlagenen Unterscheidung zwischen Tensoren und Skalaren, In-Place-Methoden und adjungierten Variablen. Das Issue nennt keine Dateien oder Tests; als abgeschlossen würde eine festgelegte Schnittstelle und ein Implementierungsplan für Linear-Algebra-Primitiven und deren Regeln für den Vorwärts- und Rückwärtsmodus erforderlich sein.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
(continued from https://github.com/invenia/Nabla.jl/issues/81, cc @willtebbutt)
This means that we would need a slightly more general interface for linear algebra, and would certainly require different forward- and reverse- mode expressions, than is currently provided by DiffRules.
Agreed, DiffRules only properly handles scalar kernels now. To support linear algebra, we need to add a notion of tensor/scalar, allowing in-place methods, marking adjoint variables, etc. to DiffRules.
Regarding the where possible statement above, there are certainly operations (such as the Cholesky factorisation) for which symbolic expressions might be a bit unweildy (see here). Now that I think about this a bit more, I'm not sure whether these larger implementations are going to be problematic or not.
Anyway, my point is that given symbolic expressions for the linear algebra operations I agree that it's reasonable to hope that compiler optimisations can eliminate redundant code when compiling custom kernel implementations, and that this is a significantly better idea than hand-coding lots of optimisations. (The issue I linked in my previous comment is a good example of this. I would definitely prefer to be able to just forget about this). However, I would contend that you simply can't handle linear algebra properly without a number of hand-coded symbolic expressions for the forward- and reverse-mode sensitivities because they aren't written in Julia. If at some point in the future we have native Julia implementation of (for example) LAPACK, then it would be a really good idea to try and produce an AD tool which is able to produce reasonably-well optimised kernels for each operation. To the best of my knowledge, we shouldn't expect this to happen any time soon (and almost certainly never for BLAS), so a symbolic version of the current implementation of DiffLinearAlgebra will be necessary for Capstan to be able to differentiate arbitrary Julia code even reasonably efficiently.
I think there might've been a misunderstanding with my previous post 😛I definitely am not arguing that we should express e.g. complex LAPACK kernels symbolically, and I didn't mean to imply that DiffRules/DiffLinearAlgebra were directly competing approaches. On the contrary, I think they're quite complementary - if DiffLinearAlgebra didn't exist, I eventually would need to make a "DiffKernels.jl" anyway. DiffRules is useful for mapping primal functions to derivative functions, and is thus useful when generating e.g. instruction primitives/computation graphs within downstream tools (i.e. it solves the problem "what kernels should I call and how should I call them?"). DiffLinearAlgebra (as it stands) is useful for providing implementations of these kernels (i.e. solves the problem "how do I execute the kernels that I'm calling?"). They're both necessary components of the AD ecosystem.
As for deciding what computations should be primitives, I think we're already on the same page; a computation should be defined as a primitive if either/both of the following applies:
- it is difficult to express the computation as a composition of existing primitives
- a hand-optimized kernel for the computation is sufficiently more performant than the equivalent composition of existing primitives, even after taking into account potential compiler-level optimizations.
- Vorherrschende Sprache
- Julia
- Sterne
- 74
- Forks
- 36
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus JuliaDiff/DiffRules.jl
-
Package extensionsEvtl. vergeben @devmotion hat das vor 28 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
JuliaDiff/DiffRules.jl#106 · 2 Kommentare · 2 Reaktionen ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
JuliaDiff/DiffRules.jl#104 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
JuliaDiff/DiffRules.jl#102 · 2 Kommentare ·
-
Problems with the `DEFINED_DIFFRULES` implementationEvtl. vergeben @devmotion hat das vor 28 Tagen übernommen. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
JuliaDiff/DiffRules.jl#90 · 1 Reaktion ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
JuliaDiff/DiffRules.jl#68 · 2 Kommentare ·
Alle Issues in JuliaDiff/DiffRules.jl
Ähnliche Issues
-
enhancement good first issue help wanted
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 82/100
-
authority-vechtstromen ready-for-agent
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 75/100
Deltares/Ribasim-NL#890 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
Precompilation fails on Julia 1.14 nightly: HessenbergQ lmul! methods overwrite LinearAlgebra'sOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
JuliaLinearAlgebra/GenericLinearAlgebra.jl#183 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Maintainer antworten meist innerhalb von 1 Tag