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

Huber Loss Fails with Metal GPU #2305

Closed
jeremiahpslewis opened this issue Aug 6, 2023 · 0 comments · Fixed by #2306
Closed

Huber Loss Fails with Metal GPU #2305

jeremiahpslewis opened this issue Aug 6, 2023 · 0 comments · Fixed by #2306

Comments

@jeremiahpslewis
Copy link
Contributor

jeremiahpslewis commented Aug 6, 2023

I think it's related to JuliaGPU/GPUArrays.jl#484
MWE:

using UUIDs
using Preferences

if Sys.isapple()
    flux_uuid = UUID("587475ba-b771-5e3f-ad9e-33799f191a9c")
    set_preferences!(flux_uuid, "gpu_backend" => "Metal")

    using Metal
else
    using CUDA, cuDNN
    CUDA.allowscalar(false)
end

using Test
using Metal
using Flux

using Statistics
using Flux: _greek_ascii_depwarn, ofeltype
using Flux.Losses: huber_loss, _check_sizes, mse
using Zygote

X = Flux.gpu(Float32[1,1])
Y = Flux.gpu(Float32[1,1])

function _huber_metric(abs_error, δ)
    #TODO: remove ignore_derivatives when Zygote can handle this function with CuArrays
    temp = Zygote.ignore_derivatives(abs_error .<  δ)
    x = ofeltype(abs_error, 0.5)
    ((abs_error * abs_error) * temp) * x + δ * (abs_error - x * δ) * (1 - temp)
end

function huber_loss_alternate(ŷ, y; agg = mean, delta::Real = 1, δ = nothing)
    delta_tmp = _greek_ascii_depwarn=> delta, :huber_loss, "δ" => "delta")
    δ = ofeltype(ŷ, delta_tmp)
    _check_sizes(ŷ, y)
    abs_error = abs.(ŷ .- y)

    agg(_huber_metric.(abs_error, δ))
 end


Flux.gradient(X, Y) do a,b # Works
    mse(a,b)
end

Flux.gradient(X, Y) do a,b # Works
    huber_loss_alternate(a,b)
end


Flux.gradient(X, Y) do a,b # Fails
    huber_loss(a,b)
end
Metal does not support Float64 values, try using Float32 instead
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] MtlVector{Float64, Metal.MTL.MTLResourceStorageModePrivate}(::UndefInitializer, dims::Tuple{Int64})
    @ Metal ~/.julia/packages/Metal/qeZqc/src/array.jl:45
  [3] (MtlVector{Float64})(::UndefInitializer, dims::Tuple{Int64})
    @ Metal ~/.julia/packages/Metal/qeZqc/src/array.jl:94
  [4] (MtlArray{Float64})(::UndefInitializer, dims::Tuple{Int64})
    @ Metal ~/.julia/packages/Metal/qeZqc/src/array.jl:106
  [5] similar(::Type{MtlArray{Float64}}, dims::Tuple{Int64})
    @ Base ./abstractarray.jl:874
  [6] similar(::Type{MtlArray{Float64}}, shape::Tuple{Base.OneTo{Int64}})
    @ Base ./abstractarray.jl:873
  [7] similar(bc::Base.Broadcast.Broadcasted{Metal.MtlArrayStyle{1}, Tuple{Base.OneTo{Int64}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, Tuple{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}, ::Type{Float64})
    @ Metal ~/.julia/packages/Metal/qeZqc/src/broadcast.jl:11
  [8] copy
    @ GPUArrays ~/.julia/packages/GPUArrays/5XhED/src/host/broadcast.jl:37 [inlined]
  [9] materialize
    @ GPUArrays ./broadcast.jl:903 [inlined]
 [10] map(::ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate})
    @ GPUArrays ~/.julia/packages/GPUArrays/5XhED/src/host/broadcast.jl:84
 [11] (::ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}})(dx::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate})
    @ ChainRulesCore ~/.julia/packages/ChainRulesCore/0t04l/src/projection.jl:236
 [12] _project
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/compiler/chainrules.jl:189 [inlined]
 [13] unbroadcast(x::MtlVector{Int64, Metal.MTL.MTLResourceStorageModePrivate}, x̄::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate})
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/lib/broadcast.jl:59
 [14] (::Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Int64, Metal.MTL.MTLResourceStorageModePrivate}})(Δ::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate})
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/lib/broadcast.jl:93
 [15] (::Zygote.var"#3798#back#1201"{Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Int64, Metal.MTL.MTLResourceStorageModePrivate}}})(Δ::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate})
    @ Zygote ~/.julia/packages/ZygoteRules/OgCVT/src/adjoint.jl:71
 [16] #huber_loss#16
    @ Zygote ~/.julia/packages/Flux/r3RWW/src/losses/functions.jl:105 [inlined]
 [17] (::Zygote.Pullback{Tuple{Flux.Losses.var"##huber_loss#16", typeof(mean), Int64, Nothing, typeof(huber_loss), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.var"#3798#back#1201"{Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{Int64, MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.Pullback{Tuple{typeof(ofeltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float64}, Tuple{Zygote.Pullback{Tuple{typeof(float), Type{Float32}}, Tuple{}}, Zygote.ZBack{Zygote.var"#convert_pullback#326"}, Zygote.Pullback{Tuple{typeof(eltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.ZBack{ChainRules.var"#typeof_pullback#45"}, Zygote.ZBack{ChainRules.var"#eltype_pullback#385"}}}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.ZBack{ChainRules.var"#times_pullback2#1346"{Float32, Float32}}, Zygote.ZBack{ChainRulesCore.var"#ignore_derivatives_pullback#91"}, Zygote.var"#3878#back#1235"{Zygote.var"#1231#1234"{2, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcasted), typeof(<), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32}, Tuple{Zygote.var"#2877#back#684"{Zygote.var"#map_back#678"{typeof(Base.Broadcast.broadcastable), 1, Tuple{Tuple{}}, Tuple{Val{0}}, Tuple{}}}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{NTuple{4, Nothing}, Tuple{}}, Zygote.var"#4161#back#1420"{Zygote.var"#1386#1388"}}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing, Nothing}, Tuple{}}, Zygote.var"#combine_styles_pullback#1162"{Tuple{Nothing, Nothing, Nothing}}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), Float32}, Tuple{}}, Zygote.var"#2013#back#200"{typeof(identity)}}}, Zygote.ZBack{Flux.var"#_greek_ascii_depwarn_pullback#385"{Tuple{Pair{Nothing, Int64}, Symbol, Pair{String, String}}}}, Zygote.Pullback{Tuple{Type{Pair}, Nothing, Int64}, Any}, Zygote.var"#1922#back#157"{Zygote.var"#153#156"}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32}}, Zygote.ZBack{Flux.Losses.var"#_check_sizes_pullback#12"}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.ZBack{ChainRules.var"#times_pullback#1498"{Float32, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}, ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}}}, Zygote.var"#3830#back#1213"{Zygote.ZBack{ChainRules.var"#times_pullback#1505"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}, ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}}}}, Zygote.var"#3798#back#1201"{Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Int64, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcasted), typeof(abs), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing, Nothing, Nothing}, Tuple{}}, Zygote.var"#4161#back#1420"{Zygote.var"#bc_fwd_back#1394"{MtlVector{ForwardDiff.Dual{Nothing, Float32, 1}, Metal.MTL.MTLResourceStorageModePrivate}, Tuple{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Val{1}}}}}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing}, Tuple{}}, Zygote.var"#combine_styles_pullback#1162"{Tuple{Nothing, Nothing}}}}, Zygote.var"#2877#back#684"{Zygote.var"#map_back#678"{typeof(Base.Broadcast.broadcastable), 1, Tuple{Tuple{}}, Tuple{Val{0}}, Tuple{}}}}}, Zygote.Pullback{Tuple{typeof(ofeltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Int64}, Tuple{Zygote.Pullback{Tuple{typeof(float), Type{Float32}}, Tuple{}}, Zygote.ZBack{Zygote.var"#convert_pullback#326"}, Zygote.Pullback{Tuple{typeof(eltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.ZBack{ChainRules.var"#typeof_pullback#45"}, Zygote.ZBack{ChainRules.var"#eltype_pullback#385"}}}}}, Zygote.Pullback{Tuple{Type{Pair}, String, String}, Any}, Zygote.ZBack{ChainRules.var"#mean_pullback#1807"{Int64, ChainRules.var"#sum_pullback#1648"{Colon, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}, Zygote.var"#3750#back#1177"{Zygote.var"#1171#1175"{Tuple{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}}}})(Δ::Float32)
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/compiler/interface2.jl:0
 [18] huber_loss
    @ Flux.Losses ~/.julia/packages/Flux/r3RWW/src/losses/functions.jl:97 [inlined]
 [19] #6
    @ Main ./REPL[16]:2 [inlined]
 [20] (::Zygote.var"#75#76"{Zygote.Pullback{Tuple{var"#6#7", MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.Pullback{Tuple{typeof(huber_loss), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.Pullback{Tuple{Flux.Losses.var"##huber_loss#16", typeof(mean), Int64, Nothing, typeof(huber_loss), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.var"#3798#back#1201"{Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{Int64, MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Bool, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.Pullback{Tuple{typeof(ofeltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float64}, Tuple{Zygote.Pullback{Tuple{typeof(float), Type{Float32}}, Tuple{}}, Zygote.ZBack{Zygote.var"#convert_pullback#326"}, Zygote.Pullback{Tuple{typeof(eltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.ZBack{ChainRules.var"#typeof_pullback#45"}, Zygote.ZBack{ChainRules.var"#eltype_pullback#385"}}}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.ZBack{ChainRules.var"#times_pullback2#1346"{Float32, Float32}}, Zygote.ZBack{ChainRulesCore.var"#ignore_derivatives_pullback#91"}, Zygote.var"#3878#back#1235"{Zygote.var"#1231#1234"{2, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcasted), typeof(<), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32}, Tuple{Zygote.var"#2877#back#684"{Zygote.var"#map_back#678"{typeof(Base.Broadcast.broadcastable), 1, Tuple{Tuple{}}, Tuple{Val{0}}, Tuple{}}}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{NTuple{4, Nothing}, Tuple{}}, Zygote.var"#4161#back#1420"{Zygote.var"#1386#1388"}}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing, Nothing}, Tuple{}}, Zygote.var"#combine_styles_pullback#1162"{Tuple{Nothing, Nothing, Nothing}}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), Float32}, Tuple{}}, Zygote.var"#2013#back#200"{typeof(identity)}}}, Zygote.ZBack{Flux.var"#_greek_ascii_depwarn_pullback#385"{Tuple{Pair{Nothing, Int64}, Symbol, Pair{String, String}}}}, Zygote.Pullback{Tuple{Type{Pair}, Nothing, Int64}, Any}, Zygote.var"#1922#back#157"{Zygote.var"#153#156"}, Zygote.var"#3766#back#1185"{Zygote.var"#1181#1184"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32}}, Zygote.ZBack{Flux.Losses.var"#_check_sizes_pullback#12"}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.materialize), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.ZBack{ChainRules.var"#times_pullback#1498"{Float32, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}, ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}}}, Zygote.var"#3830#back#1213"{Zygote.ZBack{ChainRules.var"#times_pullback#1505"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Float32, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}, ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}}}}, Zygote.var"#3798#back#1201"{Zygote.var"#1197#1200"{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Int64, Metal.MTL.MTLResourceStorageModePrivate}}}, Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcasted), typeof(abs), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.Pullback{Tuple{typeof(Base.Broadcast.broadcastable), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{}}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing, Nothing, Nothing}, Tuple{}}, Zygote.var"#4161#back#1420"{Zygote.var"#bc_fwd_back#1394"{MtlVector{ForwardDiff.Dual{Nothing, Float32, 1}, Metal.MTL.MTLResourceStorageModePrivate}, Tuple{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Val{1}}}}}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.var"#2013#back#200"{typeof(identity)}, Zygote.var"#2169#back#289"{Zygote.var"#287#288"{Tuple{Tuple{Nothing}, Tuple{}}, Zygote.var"#combine_styles_pullback#1162"{Tuple{Nothing, Nothing}}}}, Zygote.var"#2877#back#684"{Zygote.var"#map_back#678"{typeof(Base.Broadcast.broadcastable), 1, Tuple{Tuple{}}, Tuple{Val{0}}, Tuple{}}}}}, Zygote.Pullback{Tuple{typeof(ofeltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, Int64}, Tuple{Zygote.Pullback{Tuple{typeof(float), Type{Float32}}, Tuple{}}, Zygote.ZBack{Zygote.var"#convert_pullback#326"}, Zygote.Pullback{Tuple{typeof(eltype), MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}, Tuple{Zygote.ZBack{ChainRules.var"#typeof_pullback#45"}, Zygote.ZBack{ChainRules.var"#eltype_pullback#385"}}}}}, Zygote.Pullback{Tuple{Type{Pair}, String, String}, Any}, Zygote.ZBack{ChainRules.var"#mean_pullback#1807"{Int64, ChainRules.var"#sum_pullback#1648"{Colon, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{Float32, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}, Zygote.var"#3750#back#1177"{Zygote.var"#1171#1175"{Tuple{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}}}}}}}}}}})(Δ::Float32)
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/compiler/interface.jl:45
 [21] gradient(::Function, ::MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}, ::Vararg{MtlVector{Float32, Metal.MTL.MTLResourceStorageModePrivate}})
    @ Zygote ~/.julia/packages/Zygote/JeHtr/src/compiler/interface.jl:97
 [22] top-level scope
    @ REPL[16]:1
 [23] top-level scope
    @ ~/.julia/packages/Metal/qeZqc/src/initialization.jl:51
ulia> versioninfo()
Julia Version 1.10.0-beta1
Commit 6616549950e (2023-07-25 17:43 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 10 × Apple M1 Pro
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, apple-m1)
  Threads: 4 on 8 virtual cores
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

Successfully merging a pull request may close this issue.

1 participant