From 847cc84c9f07427d6984fdfc38ac291409ad0cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8B=9C=EC=9B=90?= Date: Thu, 7 May 2026 21:36:21 +0900 Subject: [PATCH] try torch jl mlp criterion retry Co-Authored-By: Codex --- docs/research/julia_port_evaluation.md | 28 +- experiments/julia_torch_mlp/Manifest.toml | 511 ++++++++++++++++++ experiments/julia_torch_mlp/Project.toml | 3 + experiments/julia_torch_mlp/README.md | 33 ++ experiments/julia_torch_mlp/bench_torch.jl | 17 + experiments/julia_torch_mlp/results.json | 7 + .../julia_torch_mlp/src/JuliaTorchMLP.jl | 3 + 7 files changed, 599 insertions(+), 3 deletions(-) create mode 100644 experiments/julia_torch_mlp/Manifest.toml create mode 100644 experiments/julia_torch_mlp/Project.toml create mode 100644 experiments/julia_torch_mlp/README.md create mode 100644 experiments/julia_torch_mlp/bench_torch.jl create mode 100644 experiments/julia_torch_mlp/results.json create mode 100644 experiments/julia_torch_mlp/src/JuliaTorchMLP.jl diff --git a/docs/research/julia_port_evaluation.md b/docs/research/julia_port_evaluation.md index bc581a3..117aa4f 100644 --- a/docs/research/julia_port_evaluation.md +++ b/docs/research/julia_port_evaluation.md @@ -123,6 +123,26 @@ PyTorch, outside the ±20% PASS band. bs=1 and bs=256 are also ~2× slower, outside the ±30% bands. Criterion 5 was not run after this FAIL because the full Julia-port decision rule is already blocked. +### 2026-05-07 — Torch.jl MLP forward retry (criterion 4) + +Path: `experiments/julia_torch_mlp/`. + +Torch.jl was tested as a possible replacement for Flux/CUDA on the same +DeepCFRMLP forward benchmark. The measurement could not start because +Torch.jl v0.1.3 fails during package load/precompile on this Julia +1.11.9 environment: + +```text +UndefVarError: libtorch_c_api not defined in Torch.Wrapper +``` + +This occurs before model construction or timing, so there is no +Torch.jl forward result to compare against PyTorch. + +**Verdict on criterion 4 after Torch.jl retry:** unchanged FAIL. Flux.jl +misses the performance threshold, and Torch.jl is blocked by package +load failure rather than providing a successful re-measurement. + ## Pass/fail thresholds (decided in advance) These are explicit so that the moment a measurement lands, the decision @@ -195,9 +215,11 @@ purpose. No full Julia port on the current evidence. The completed benchmarks remove the main risk (GC under recursion) and confirm compute parity, -but criterion 3 is only PARTIAL and criterion 4 is FAIL. Per the -decision rule, a full port would spend months to replace a PyTorch GPU -path that is already ~2× faster for the exact model shape we use. +but criterion 3 is only PARTIAL and criterion 4 is FAIL. The Torch.jl +retry did not reverse criterion 4 because Torch.jl failed to load in +this Julia environment. Per the decision rule, a full port would spend +months to replace a PyTorch GPU path that is already ~2× faster than +Flux for the exact model shape we use. Recommended next path: stay on Python/Cython and pursue Option B (per-worker interleaved traversal) as the GIL-escape path. A narrower diff --git a/experiments/julia_torch_mlp/Manifest.toml b/experiments/julia_torch_mlp/Manifest.toml new file mode 100644 index 0000000..76a12bb --- /dev/null +++ b/experiments/julia_torch_mlp/Manifest.toml @@ -0,0 +1,511 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.11.9" +manifest_format = "2.0" +project_hash = "579fa340c95c082639d68e6dbaf74bf9014ca354" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "0761717147821d696c9470a7a86364b2fbd22fd8" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.5.2" + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + + [deps.Adapt.weakdeps] + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "b8651b2eb5796a386b0398a20b519a6a6150f75c" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "1.1.3" + + [deps.Atomix.extensions] + AtomixCUDAExt = "CUDA" + AtomixMetalExt = "Metal" + AtomixOpenCLExt = "OpenCL" + AtomixoneAPIExt = "oneAPI" + + [deps.Atomix.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" + oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CPUInfo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0cfc3fab6a2e0fa133295f083f851c7f6c7dc8e7" +uuid = "48a17e46-e8cd-5edf-9ac6-c264fe76544e" +version = "0.0.20201217+0" + +[[deps.CUDA_Driver_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "TOML"] +git-tree-sha1 = "3b759ec65ac87ad192c2925114fa5c126657a5bd" +uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" +version = "13.2.1+0" + +[[deps.CUDA_Runtime_jll]] +deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "c0314d9fb0ebd00e404feba4c3fbc04c9975abc1" +uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" +version = "0.21.0+1" + +[[deps.CUDNN_jll]] +deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "4a5e8f9da1895378427f079c3313897349565942" +uuid = "62b44479-cb7b-5706-934f-f13b2eb2e645" +version = "8.9.7+0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "12177ad6b3cad7fd50c8b3825ce24a99ad61c18f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.26.1" + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + + [deps.ChainRulesCore.weakdeps] + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + + [deps.FillArrays.weakdeps] + PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.Gloo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "45ada5205663c68381882260397a251074a1a74f" +uuid = "5909ec93-c24e-5240-9f48-bc73cd7db194" +version = "0.0.20210521+0" + +[[deps.HashArrayMappedTries]] +git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" +uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74" +version = "0.2.0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + +[[deps.JSON]] +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "fe23330af47b8ab4e135b2ff65f7398c3a2bfc65" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "1.5.2" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "MacroTools", "PrecompileTools", "Requires", "StaticArrays", "UUIDs"] +git-tree-sha1 = "f2e76d3ced51a2a9e185abc0b97494c7273f649f" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.41" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + LinearAlgebraExt = "LinearAlgebra" + SparseArraysExt = "SparseArrays" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.LAPACK_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "libblastrampoline_jll"] +git-tree-sha1 = "47a6ccfc4b78494669cd7c502ba112ee2b24eb45" +uuid = "51474c39-65e3-53ba-86ba-03b1b862ec14" +version = "3.12.0+3" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "eb62a3deb62fc6d8822c0c4bef73e4412419c5d8" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.8+0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.6.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.7.2+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.11.0" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.6+0" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.12.12" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Random", "ScopedValues", "Statistics"] +git-tree-sha1 = "78cd28dbd5f03f99ccaba45c987107adcb61c115" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.34" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + NNlibFFTWExt = "FFTW" + NNlibForwardDiffExt = "ForwardDiff" + NNlibMetalExt = "Metal" + NNlibSpecialFunctionsExt = "SpecialFunctions" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NVTX_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "af2232f69447494514c25742ba1503ec7e9877fe" +uuid = "e98f9f5b-d649-5603-91fd-7774390e6439" +version = "3.2.2+0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OpenBLAS32_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dd0d9979377e43918a80486a562ddedcc6d9bdf3" +uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" +version = "0.3.33+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.27+1" + +[[deps.PThreadPool_jll]] +deps = ["Artifacts", "CPUInfo_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "adbf56d192bd8a4bb34ddd305ac66cbe3ef0e725" +uuid = "a74eb8f4-56fd-5a14-80e9-60c06ef4dc0e" +version = "0.0.20210414+0" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "5d5e0a78e971354b1c7bff0655d11fdc1b0e12c8" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.4" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.11.0" + + [deps.Pkg.extensions] + REPLExt = "REPL" + + [deps.Pkg.weakdeps] + REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SLEEF_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "07cef603c092cb16ab9adf10f17eb72c241b2024" +uuid = "63e82ce6-3d80-5af4-a84c-484b71ab98bb" +version = "3.9.0+0" + +[[deps.ScopedValues]] +deps = ["HashArrayMappedTries", "Logging"] +git-tree-sha1 = "67a144433c4ce877ee6d1ada69a124d6b1ecf7be" +uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" +version = "1.6.2" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.18" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + + [deps.Statistics.weakdeps] + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "dd974aefe288ef2898733aecf40858dc86742d74" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.8.1" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Torch]] +deps = ["CEnum", "FillArrays", "Libdl", "LinearAlgebra", "NNlib", "Requires", "Statistics", "TorchCAPI_jll", "ZygoteRules"] +git-tree-sha1 = "ea79b7cfd6791e991cb38ea35d7d9595dc74d083" +uuid = "6a2ea274-3061-11ea-0d63-ff850051a295" +version = "0.1.3" + +[[deps.TorchCAPI_jll]] +deps = ["Artifacts", "CUDA_Runtime_jll", "CUDNN_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML", "Torch_jll"] +git-tree-sha1 = "6b3c727dab4161b46d6ddc51a30c511852c4214c" +uuid = "dc5d5603-8d5e-5430-85a9-2783500f9f77" +version = "0.2.0+0" + +[[deps.Torch_jll]] +deps = ["Artifacts", "CPUInfo_jll", "CUDA_Runtime_jll", "CUDNN_jll", "CompilerSupportLibraries_jll", "Gloo_jll", "JLLWrappers", "LAPACK_jll", "LazyArtifacts", "Libdl", "NVTX_jll", "OpenBLAS32_jll", "PThreadPool_jll", "Pkg", "SLEEF_jll", "TOML", "XNNPACK_jll", "protoc_jll"] +git-tree-sha1 = "9078c2d5d80f05eb689aae65e81e8f7d5fd87bb0" +uuid = "c12fb04c-f5e9-5c82-b5d6-b53f8f8d9a32" +version = "1.10.2+1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "0f30765c32d66d58e41f4cb5624d4fc8a82ec13b" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.3.1" + + [deps.UnsafeAtomics.extensions] + UnsafeAtomicsLLVM = ["LLVM"] + + [deps.UnsafeAtomics.weakdeps] + LLVM = "929cbde3-209d-540e-8aea-75f648917ca0" + +[[deps.XNNPACK_jll]] +deps = ["Artifacts", "CPUInfo_jll", "JLLWrappers", "Libdl", "PThreadPool_jll", "Pkg"] +git-tree-sha1 = "ce09ca73cd486eaf5496c03ba1cf1ee8496b71f1" +uuid = "55708af3-2096-517b-81a3-3917441130f6" +version = "0.0.20210622+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "434b3de333c75fc446aa0d19fc394edafd07ab08" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.7" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.11.0+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.59.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.protoc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f5c36f1ae0c683961cb3a41974374e3a2a83ec84" +uuid = "c7845625-083e-5bbe-8504-b32d602b7110" +version = "3.13.0+0" diff --git a/experiments/julia_torch_mlp/Project.toml b/experiments/julia_torch_mlp/Project.toml new file mode 100644 index 0000000..b4efecc --- /dev/null +++ b/experiments/julia_torch_mlp/Project.toml @@ -0,0 +1,3 @@ +[deps] +JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +Torch = "6a2ea274-3061-11ea-0d63-ff850051a295" diff --git a/experiments/julia_torch_mlp/README.md b/experiments/julia_torch_mlp/README.md new file mode 100644 index 0000000..70e7626 --- /dev/null +++ b/experiments/julia_torch_mlp/README.md @@ -0,0 +1,33 @@ +# Julia Torch MLP Forward Benchmark + +Attempted Criterion 4 re-measurement using Torch.jl for the same +`DeepCFRMLP` shape used in `experiments/julia_flux_mlp/`: + +- input dim: 365 +- hidden size: 512 +- hidden layers: 3 +- output dim: 22 +- activation: ReLU + +Run: + +```bash +tools/julia/current/bin/julia --project=experiments/julia_torch_mlp \ + experiments/julia_torch_mlp/bench_torch.jl +``` + +## Result (2026-05-07) + +Torch.jl could not be loaded on this host: + +```text +Torch.jl v0.1.3 failed to precompile: +UndefVarError: libtorch_c_api not defined in Torch.Wrapper +``` + +This happens before any model construction or timing is possible, so no +DeepCFRMLP forward benchmark could be run. + +**Verdict:** BLOCKED. Criterion 4 remains FAIL based on the completed Flux.jl +measurement. Torch.jl does not reverse the decision because it is not usable in +the current Julia 1.11.9 environment. diff --git a/experiments/julia_torch_mlp/bench_torch.jl b/experiments/julia_torch_mlp/bench_torch.jl new file mode 100644 index 0000000..0ec7735 --- /dev/null +++ b/experiments/julia_torch_mlp/bench_torch.jl @@ -0,0 +1,17 @@ +using JSON + +function main() + try + @eval using Torch + catch err + result = Dict( + "backend" => "Torch.jl", + "status" => "BLOCKED", + "error" => sprint(showerror, err), + ) + println(JSON.json(result)) + exit(1) + end +end + +main() diff --git a/experiments/julia_torch_mlp/results.json b/experiments/julia_torch_mlp/results.json new file mode 100644 index 0000000..d366920 --- /dev/null +++ b/experiments/julia_torch_mlp/results.json @@ -0,0 +1,7 @@ +{ + "backend": "Torch.jl", + "julia_version": "1.11.9", + "status": "BLOCKED", + "error_summary": "Torch.jl v0.1.3 failed to precompile: UndefVarError: libtorch_c_api not defined in Torch.Wrapper", + "criterion_4_verdict": "UNCHANGED_FAIL" +} diff --git a/experiments/julia_torch_mlp/src/JuliaTorchMLP.jl b/experiments/julia_torch_mlp/src/JuliaTorchMLP.jl new file mode 100644 index 0000000..5476342 --- /dev/null +++ b/experiments/julia_torch_mlp/src/JuliaTorchMLP.jl @@ -0,0 +1,3 @@ +module JuliaTorchMLP + +end