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

CUDA: add support for onehot #2203

Closed
yolhan83 opened this issue Dec 16, 2024 · 14 comments
Closed

CUDA: add support for onehot #2203

yolhan83 opened this issue Dec 16, 2024 · 14 comments

Comments

@yolhan83
Copy link

yolhan83 commented Dec 16, 2024

Is Enzyme supposed to differentiate through KA kernels ? I wanted to try it on this simple exemple and I get an error GPU compilation of MethodInstance for (::GPUArrays.var"#34#36")(::CUDA.CuKernelContext, ::CuDeviceVector{…}, ::Base.Broadcast.Broadcasted{…}, ::Int64) failed KernelError: passing and using non-bitstype argument

using KernelAbstractions,CUDA
using DifferentiationInterface
import Enzyme
bck = AutoEnzyme(mode=Enzyme.Reverse)
uin() = 0.0f0
uout() = 0.0f0
@kernel inbounds=true function diffkernel!(du, u)
    i = @index(Global, Linear)
    if i == 1
        ug = uin()
        ud = u[i+1]
    elseif i == length(u)
        ug = u[i-1]
        ud = uout()
    else
        ug = u[i-1]
        ud = u[i+1] 
    end
    du[i] = ug + ud -2*u[i]
end
function Diffusion(u)
    bck_kernel = get_backend(u)
    du = zero(u)
    ker = diffkernel!(bck_kernel)
    ker(du, u, ndrange=length(du))
    return du
end
u = CUDA.rand(1000)
jacobian(Diffusion, bck,u)
@yolhan83
Copy link
Author

Also, in forward, I get the error Scalar indexing is disallowed. Invocation of setindex! resulted in scalar indexing of a GPU array. This is typically caused by calling an iterating implementation of a method. Such implementations *do not* execute on the GPU, but very slowly on the CPU, and therefore should be avoided.

@wsmoses
Copy link
Member

wsmoses commented Dec 16, 2024

It does explicitly support KA.

Can you post a MWE without DifferentiationInterface?

@yolhan83
Copy link
Author

yolhan83 commented Dec 16, 2024

Yes, here it is

using KernelAbstractions,CUDA
import Enzyme
uin() = 0.0f0
uout() = 0.0f0
@kernel inbounds=true function diffkernel!(du, u)
    i = @index(Global, Linear)
    if i == 1
        ug = uin()
        ud = u[i+1]
    elseif i == length(u)
        ug = u[i-1]
        ud = uout()
    else
        ug = u[i-1]
        ud = u[i+1] 
    end
    du[i] = ug + ud -2*u[i]
end
function Diffusion(u)
    bck_kernel = get_backend(u)
    du = zero(u)
    ker = diffkernel!(bck_kernel)
    ker(du, u, ndrange=length(du))
    return du
end
u = CUDA.rand(1000)
Enzyme.jacobian(Enzyme.Reverse, Diffusion, u)
Enzyme.jacobian(Enzyme.Forward, Diffusion, u)

Same errors (takes a lot more times to throw for some reason). I don't remember how to make a jacobian from autodiff which is why I stayed on high level jacobian.

@yolhan83
Copy link
Author

full error :

forward

ERROR: Scalar indexing is disallowed.
Invocation of setindex! resulted in scalar indexing of a GPU array.
This is typically caused by calling an iterating implementation of a method.
Such implementations *do not* execute on the GPU, but very slowly on the CPU,
and therefore should be avoided.

If you want to allow scalar iteration, use `allowscalar` or `@allowscalar`
to enable scalar iteration globally or for the operations in question.
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] errorscalar(op::String)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:155
  [3] _assertscalar(op::String, behavior::GPUArraysCore.ScalarIndexing)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:128
  [4] assertscalar(op::String)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:116
  [5] setindex!
    @ C:\Users\yolha\.julia\packages\GPUArrays\qt4ax\src\host\indexing.jl:58 [inlined]
  [6] #110
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:137 [inlined]
  [7] macro expansion
    @ .\ntuple.jl:72 [inlined]
  [8] ntuple(f::Enzyme.var"#110#111"{CuArray{Float32, 1, CUDA.DeviceMemory}, Int64}, ::Val{1000})
    @ Base .\ntuple.jl:69
  [9] onehot
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:133 [inlined]
 [10] macro expansion
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:440 [inlined]
 [11] create_shadows
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:418 [inlined]
 [12] gradient(::EnzymeCore.ForwardMode{…}, ::typeof(Diffusion), ::CuArray{…})
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:577
 [13] #jacobian#128
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:784 [inlined]
 [14] jacobian(::EnzymeCore.ForwardMode{…}, ::Function, ::CuArray{…})
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:783

reverse

ERROR: Enzyme compilation failed due to an internal error.
 Please open an issue with the code to reproduce and full error log on github.com/EnzymeAD/Enzyme.jl
 To toggle more information for debugging (needed for bug reports), set Enzyme.Compiler.VERBOSE_ERRORS[] = true (default false)

Stacktrace:
 [1] setindex!
   @ .\array.jl:987
 [2] _sort!
   @ .\sort.jl:831
 [3] multiple call sites
   @ unknown:0

Stacktrace:
  [1] (::Enzyme.Compiler.var"#getparent#69"{…})(v::LLVM.Value, offset::LLVM.Value, hasload::Bool)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\llvm\transforms.jl:888
  [2] (::Enzyme.Compiler.var"#getparent#69"{…})(v::LLVM.Value, offset::LLVM.Value, hasload::Bool)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\llvm\transforms.jl:777
  [3] nodecayed_phis!(mod::LLVM.Module)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\llvm\transforms.jl:891
  [4] optimize!(mod::LLVM.Module, tm::LLVM.TargetMachine)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler\optimize.jl:582
  [5] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing) 
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:4107
  [6] codegen
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:3239 [inlined]
  [7] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:5288
  [8] _thunk
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:5288 [inlined]
  [9] cached_compilation
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:5340 [inlined]
 [10] thunkbase(mi::Core.MethodInstance, World::UInt64, FA::Type{…}, A::Type{…}, TT::Type, Mode::Enzyme.API.CDerivativeMode, width::Int64, ModifiedBetween::NTuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, edges::Vector{…})
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:5451
 [11] thunk_generator(world::UInt64, source::LineNumberNode, FA::Type, A::Type, TT::Type, Mode::Enzyme.API.CDerivativeMode, Width::Int64, ModifiedBetween::NTuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, self::Any, fakeworld::Any, fa::Type, a::Type, tt::Type, mode::Type, width::Type, modifiedbetween::Type, returnprimal::Type, shadowinit::Type, abi::Type, erriffuncwritten::Type, runtimeactivity::Type)
    @ Enzyme.Compiler C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\compiler.jl:5636
 [12] autodiff_thunk
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\Enzyme.jl:975 [inlined]
 [13] jacobian(mode::EnzymeCore.ReverseMode{…}, f::typeof(Diffusion), x::CuArray{…}; n_outs::Val{…}, chunk::Nothing)
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:908
 [14] jacobian
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:841 [inlined]
 [15] #jacobian#129
    @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:856 [inlined]
 [16] jacobian(mode::EnzymeCore.ReverseMode{…}, f::typeof(Diffusion), x::CuArray{…})
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\sugar.jl:841
 [17] top-level scope
    @ c:\Users\yolha\Desktop\juju_tests\AutoDiff\main.jl:29
Some type information was truncated. Use `show(err)` to see complete types.

@yolhan83
Copy link
Author

yolhan83 commented Dec 16, 2024

works like a charm on cpu btw

using KernelAbstractions,CUDA
import Enzyme
uin() = 0.0f0
uout() = 0.0f0
@kernel inbounds=true function diffkernel!(du, u)
    i = @index(Global, Linear)
    if i == 1
        ug = uin()
        ud = u[i+1]
    elseif i == length(u)
        ug = u[i-1]
        ud = uout()
    else
        ug = u[i-1]
        ud = u[i+1] 
    end
    du[i] = ug + ud -2*u[i]
end
function Diffusion(u)
    bck_kernel = get_backend(u)
    du = zero(u)
    ker = diffkernel!(bck_kernel)
    ker(du, u, ndrange=length(du))
    return du
end
u = rand(Float32,1000)
Enzyme.jacobian(Enzyme.Forward, Diffusion, u)
Enzyme.jacobian(Enzyme.Reverse, Diffusion, u)

@wsmoses
Copy link
Member

wsmoses commented Dec 16, 2024

the reverse error I tjhink is a 1.11 issue, can you try 1.10?

For forward mode, it looks like we just ought add a onehot implementation for a CuArray

@yolhan83
Copy link
Author

yolhan83 commented Dec 16, 2024

not working in 1.10 but different error (for reverse)

LoadError: MethodError: no method matching lookup_world(::Type{Tuple{typeof(gpu_diffkernel!), KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}, CuDeviceVector{Float32, 1}, CuDeviceVector{Float32, 1}}}, ::UInt64, ::Core.Compiler.CachedMethodTable{Core.Compiler.OverlayMethodTable}, ::Base.RefValue{UInt64}, ::Base.RefValue{UInt64})

Closest candidates are:
  lookup_world(::Type, ::UInt64, ::Core.Compiler.OverlayMethodTable, ::Ref{UInt64}, ::Ref{UInt64})
   @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\utils.jl:215
  lookup_world(::Type, ::UInt64, ::Core.Compiler.InternalMethodTable, ::Ref{UInt64}, ::Ref{UInt64})
   @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\utils.jl:204
  lookup_world(::Type, ::UInt64, ::Union{Nothing, Core.MethodTable}, ::Ref{UInt64}, ::Ref{UInt64})
   @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\utils.jl:184

Stacktrace:
 [1] my_methodinstance
   @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\utils.jl:241 [inlined]
 [2] my_methodinstance (repeats 2 times)
   @ C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\utils.jl:256 [inlined]
 [3] tape_type(::GPUCompiler.CompilerJob{GPUCompiler.PTXCompilerTarget, CUDA.CUDACompilerParams}, ::EnzymeCore.ReverseModeSplit{true, true, false, 0, (false, false, true, false), EnzymeCore.FFIABI, false, false, false}, ::Type{EnzymeCore.Const{typeof(gpu_diffkernel!)}}, ::Type{EnzymeCore.Const{Nothing}}, ::Type{EnzymeCore.Const{KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}}}, ::Type{EnzymeCore.Duplicated{CuDeviceVector{Float32, 1}}}, ::Type{EnzymeCore.Duplicated{CuDeviceVector{Float32, 1}}})
   @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\QVjE5\src\Enzyme.jl:1249
 [4] _create_tape_kernel(::KernelAbstractions.Kernel{CUDABackend, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, typeof(gpu_diffkernel!)}, ::EnzymeCore.ReverseModeSplit{true, true, false, 0, (false, false, true, false), EnzymeCore.FFIABI, false, false, false}, ::Type, ::Type, ::Tuple{Int64}, ::KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}, ::EnzymeCore.Duplicated{CuArray{Float32, 1, CUDA.DeviceMemory}}, ::Vararg{EnzymeCore.Duplicated{CuArray{Float32, 1, CUDA.DeviceMemory}}})
   @ EnzymeExt C:\Users\yolha\.julia\packages\KernelAbstractions\0r40T\ext\EnzymeCore08Ext.jl:97
 [5] #augmented_primal#7
   @ C:\Users\yolha\.julia\packages\KernelAbstractions\0r40T\ext\EnzymeCore08Ext.jl:255
in expression starting at c:\Users\yolha\Desktop\juju_tests\AutoDiff\main.jl:31

@wsmoses
Copy link
Member

wsmoses commented Dec 16, 2024

Try with this? #2204

@yolhan83
Copy link
Author

new one hehe

ERROR: type CachedMethodTable has no field world
Stacktrace:
 [1] getproperty
   @ .\Base.jl:37 [inlined]
 [2] lookup_world
   @ C:\Users\yolha\.julia\packages\Enzyme\rwEsE\src\utils.jl:222 [inlined]
 [3] my_methodinstance
   @ C:\Users\yolha\.julia\packages\Enzyme\rwEsE\src\utils.jl:252 [inlined]
 [4] my_methodinstance (repeats 2 times)
   @ C:\Users\yolha\.julia\packages\Enzyme\rwEsE\src\utils.jl:267 [inlined]
 [5] tape_type(::GPUCompiler.CompilerJob{…}, ::ReverseModeSplit{…}, ::Type{…}, ::Type{…}, ::Type{…}, ::Type{…}, ::Type{…})
   @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\rwEsE\src\Enzyme.jl:1249
 [6] _create_tape_kernel(::KernelAbstractions.Kernel{…}, ::ReverseModeSplit{…}, ::Type, ::Type, ::Tuple{…}, ::KernelAbstractions.NDIteration.NDRange{…}, ::Duplicated{…}, ::Vararg{…})
   @ EnzymeExt C:\Users\yolha\.julia\packages\KernelAbstractions\0r40T\ext\EnzymeCore08Ext.jl:97
 [7] #augmented_primal#7
   @ C:\Users\yolha\.julia\packages\KernelAbstractions\0r40T\ext\EnzymeCore08Ext.jl:255
Some type information was truncated. Use `show(err)` to see complete types.

@wsmoses
Copy link
Member

wsmoses commented Dec 16, 2024

pushed again, retry?

@yolhan83
Copy link
Author

I still get the same error for now, maybe I need to gc some stuff wait a sec

@yolhan83
Copy link
Author

ok so back to scalar indexing even in reverse

LoadError: Scalar indexing is disallowed.
Invocation of getindex resulted in scalar indexing of a GPU array.
This is typically caused by calling an iterating implementation of a method.
Such implementations *do not* execute on the GPU, but very slowly on the CPU,
and therefore should be avoided.

If you want to allow scalar iteration, use `allowscalar` or `@allowscalar`
to enable scalar iteration globally or for the operations in question.
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] errorscalar(op::String)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:155
  [3] _assertscalar(op::String, behavior::GPUArraysCore.ScalarIndexing)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:128
  [4] assertscalar(op::String)
    @ GPUArraysCore C:\Users\yolha\.julia\packages\GPUArraysCore\GMsgk\src\GPUArraysCore.jl:116
  [5] getindex(A::CuArray{Float32, 1, CUDA.DeviceMemory}, I::Int64)
    @ GPUArrays C:\Users\yolha\.julia\packages\GPUArrays\qt4ax\src\host\indexing.jl:50
  [6] #130
    @ C:\Users\yolha\.julia\packages\Enzyme\Kzk9s\src\sugar.jl:930 [inlined]
  [7] macro expansion
    @ .\ntuple.jl:72 [inlined]
  [8] ntuple
    @ .\ntuple.jl:69 [inlined]
  [9] jacobian(mode::ReverseMode{false, false, FFIABI, false, false}, f::typeof(Diffusion), x::CuArray{Float32, 1, CUDA.DeviceMemory}; n_outs::Val{(1000,)}, chunk::Nothing)
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\Kzk9s\src\sugar.jl:924
 [10] jacobian
    @ C:\Users\yolha\.julia\packages\Enzyme\Kzk9s\src\sugar.jl:841 [inlined]
 [11] #jacobian#129
    @ C:\Users\yolha\.julia\packages\Enzyme\Kzk9s\src\sugar.jl:856 [inlined]
 [12] jacobian(mode::ReverseMode{false, false, FFIABI, false, false}, f::typeof(Diffusion), x::CuArray{Float32, 1, CUDA.DeviceMemory})
    @ Enzyme C:\Users\yolha\.julia\packages\Enzyme\Kzk9s\src\sugar.jl:841
 [13] top-level scope
    @ c:\Users\yolha\Desktop\juju_tests\AutoDiff\main.jl:29
 [14] eval
    @ .\boot.jl:385 [inlined]
 [15] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .\loading.jl:2139
 [16] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
    @ Base .\essentials.jl:892
 [17] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base .\essentials.jl:889
 [18] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:271
 [19] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:181
 [20] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:276
 [21] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:179
 [22] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\repl.jl:38
 [23] (::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:150
 [24] with_logstate(f::Function, logstate::Any)
    @ Base.CoreLogging .\logging.jl:515
 [25] with_logger
    @ .\logging.jl:627 [inlined]
 [26] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:263
 [27] #invokelatest#2
    @ .\essentials.jl:892 [inlined]
 [28] invokelatest(::Any)
    @ Base .\essentials.jl:889
 [29] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer c:\Users\yolha\.vscode\extensions\julialang.language-julia-1.127.2\scripts\packages\VSCodeServer\src\eval.jl:34
in expression starting at c:\Users\yolha\Desktop\juju_tests\AutoDiff\main.jl:29

@wsmoses
Copy link
Member

wsmoses commented Dec 17, 2024

ok awesome, yeah these are resolvable as well, we just should override the equivalent of onehot

@wsmoses wsmoses changed the title Enzyme on KA kernel CUDA: add support for onehot Dec 23, 2024
@wsmoses
Copy link
Member

wsmoses commented Dec 23, 2024

resolved by #2220

@wsmoses wsmoses closed this as completed Dec 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants