`vect` rrule pullbacks index a thunked cotangent once per argument (quadratic), same pattern as #860
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 85/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- julia
- Lĩnh vực
- performance
Hướng nghiên cứu
Ba phương thức vect_pullback nằm trong src/rulesets/Base/array.jl. Thêm ȳ = unthunk(ȳ) vào đầu mỗi phương thức, phản chiếu bản sửa #861 cho reduce. Xác nhận bằng benchmark của issue: thời gian thunked back(...) nên giảm xuống gần với đo lường unthunked.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Follow-up to #860 / #861. The rrules for Base.vect (src/rulesets/Base/array.jl, three methods) read the input cotangent once per argument (projects[n](ȳ[n]), ȳ[n], NTuple{N}(ȳ)). When ȳ is a thunk, each access re-evaluates the thunk, so the pullback is quadratic in the number of arguments. This is the same pattern as the reduce(vcat/hcat) pullbacks fixed in #861.
using ChainRules, ChainRulesCore
for N in (256, 1024, 4096)
X = ntuple(i -> iseven(i) ? 1.0 : 1.0f0, N) # hits the Union{Number,AbstractArray{<:Number}} method
y, back = rrule(Base.vect, X...)
dY = @thunk(ones(length(y)))
back(dY); back(unthunk(dY))
t1 = minimum(@elapsed(back(dY)) for _ in 1:20); t2 = minimum(@elapsed(back(unthunk(dY))) for _ in 1:20)
println("N=$N thunk: ", round(t1*1e6, digits=1), " µs unthunked: ", round(t2*1e6, digits=1), " µs")
end
| N | thunk | after unthunk |
|---|---|---|
| 256 | 28.1 µs | 6.0 µs |
| 1024 | 217 µs | 24.2 µs |
| 4096 | 2389 µs | 95.7 µs |
At N = 2048 all three methods (mixed numbers, Any, and uniform Float64) were measured at roughly 600 to 670 µs with a thunk against roughly 40 µs after unthunk. ChainRules 1.74.8, ChainRulesCore 1.26.8, Julia 1.13.2.
Proposal: ȳ = unthunk(ȳ) at the top of each vect_pullback. Downstream in Zygote the cotangent arriving from sum is a thunk, as in FluxML/Zygote.jl#1686.
🧔♂️🤖 Assisted by AI
- Ngôn ngữ chính
- Julia
- Star
- 479
- Fork
- 100
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 10
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của JuliaDiff/ChainRules.jl
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
JuliaDiff/ChainRules.jl#863 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 55/100
JuliaDiff/ChainRules.jl#818 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
refactoring
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
JuliaDiff/ChainRules.jl#815 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
JuliaDiff/ChainRules.jl#810 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
stack overflow issueĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
JuliaDiff/ChainRules.jl#809 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của JuliaDiff/ChainRules.jl
Issue tương tự
-
release preparation spack
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
Maintainer thường phản hồi trong vòng 1 ngày
-
30-minutes algorithm any-language codewars dart easy elixir hackerrank hacktoberfest haskell help wanted interview-prep julia leetcode lua open-source r scala students zig
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Huerte/algo-solutions-python#163 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
QuantumSavory/QuantumClifford.jl#853 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
JuliaPackaging/Yggdrasil#15441 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
JuliaSmoothOptimizers/Penelopt.jl#260 ·
Maintainer thường phản hồi trong vòng 1 ngày