Accumulation
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 28/100
- Type d'issue
- Refactorisation
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- julia
- Domaine
- performance
Piste de recherche
Commencez par reproduire les benchmarks Julia de l’issue et examinez comment Diffractor gère les thunks renvoyés pendant l’accumulation. Comparez le comportement avec ChainRulesCore.add!! et les pull requests référencées de Zygote et ChainRulesCore. Le travail est considéré comme terminé lorsque l’approche d’accumulation est décidée et que les résultats des benchmarks montrent si les allocations excessives ont été corrigées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
At present Diffractor may return thunks, but doesn't seem use them (or anything else) to accumulate effciently:
julia> @btime gradient(x -> sum(x), $(rand(100, 100))) |> first |> typeof
min 1.829 μs, mean 1.869 μs (8 allocations, 368 bytes)
ChainRulesCore.InplaceableThunk{ChainRulesCore.Thunk...
julia> @btime gradient(x -> sum(x) + sum(x), $(rand(100, 100))) |> first |> typeof
min 8.917 μs, mean 28.032 μs (22 allocations, 235.03 KiB)
Matrix{Float64} (alias for Array{Float64, 2})
julia> @btime copy($(rand(100, 100)));
min 1.262 μs, mean 4.120 μs (2 allocations, 78.17 KiB)
julia> 235.03 / 78.17
3.00665216835103
Should this change, perhaps to use ChainRulesCore.add!!? In which case it might it be easiest to change now, while there is nothing downstream to break.
Note aside that add!! is slower than expected here, 3 copies not 1:
julia> g1 = gradient(x -> sum(x), (rand(100, 100)))[1]; g2 = deepcopy(g1);
julia> @btime ChainRulesCore.add!!($(g1), $(g2));
min 4.719 μs, mean 21.300 μs (8 allocations, 234.55 KiB)
julia> 234.55 / 78.17
3.0005117052577717
julia> @btime ChainRulesCore.add!!($(randn(100, 100)), $(g2));
min 3.318 μs, mean 3.438 μs (0 allocations)
Or do we count on ImmutableArray and compiler improvements?
Xref https://github.com/FluxML/Zygote.jl/pull/981 which retrofits Zygote to accumulate in-place.
Xref also https://github.com/JuliaDiff/ChainRulesCore.jl/pull/539 which alters + on two thunks to be more efficient.
- Langage dominant
- Julia
- Étoiles
- 453
- Forks
- 33
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de JuliaDiff/Diffractor.jl
-
Difficulté 2/5 1-3 heures Accessibilité débutants 25/100
JuliaDiff/Diffractor.jl#302 · 2 commentaires ·
-
Wrong derivative of exp(cos(x))Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 52/100
JuliaDiff/Diffractor.jl#294 ·
-
Incorrect Jacobian calculationOuvertebug
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
JuliaDiff/Diffractor.jl#293 ·
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
JuliaDiff/Diffractor.jl#290 · 8 commentaires ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
JuliaDiff/Diffractor.jl#280 · 1 commentaire ·
Toutes les issues de JuliaDiff/Diffractor.jl
Issues similaires
-
Add more snippets to R and JuliaOuverteenhancement good first issue help wanted
Difficulté 2/5 Une demi-journée Accessibilité débutants 82/100
-
authority-vechtstromen ready-for-agent
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
Deltares/Ribasim-NL#890 ·
Les mainteneurs répondent en général sous 1 jour
-
Precompilation fails on Julia 1.14 nightly: HessenbergQ lmul! methods overwrite LinearAlgebra'sOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
JuliaLinearAlgebra/GenericLinearAlgebra.jl#183 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
oscar-system/GAP.jl#1455 ·
Les mainteneurs répondent en général sous 1 jour