Error: Unable to automatically install 'FFTW' from the respective Artifacts.toml file


Hi, I have been using Julia for quite a long time but, I may be still new to some topics, so bear with me if I don’t make sense.
I have been using Julia as my programming language for a project, for a part which I have to run simulations on a high powered GPU - a supercomputer by connecting to it securely.
I am getting this one error- “Unable to automatically install FFTW from Artiafcts.toml file” constantly and I think I finally discovered the actual reason for it. Online research said that this may be result of certain network issues, or maybe some bad proxy, invalid permissions etc. So, the access to the supercomputer is provided by my institute, when I contacted the respective guys and I found out that there is no internet access to the computing node on which the simulation actually runs.
The Artifacts file contains links to download system specific files, I was able to download the required file manually on the login nodes, but still I don’t know the error persists.
If someone has faced this issues or faced any similar kind of error, please tag along and help me solve this issue.

PS: I am using Julia 1.3.1 specifically as all the scripts are written in this specific version of Julia.
I also had to install various packages of not the latest but a specific older version, although I was unable to install _jll packages of the required version - if anyone can specify the procedure for same, that would be helpful.

The error:
ERROR: Unable to automatically install ‘FFTW’ from ‘/home/19me10057/.julia/packages/FFTW_jll/7HPom/Artifacts.toml’
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] #ensure_artifact_installed#42(::Pkg.BinaryPlatforms.Platform, ::Bool, ::typeof(Pkg.Artifacts.ensure_artifact_installed), ::String, ::Dict{String,Any}, : [3] (::Pkg.Artifacts.var"#kw##ensure_artifact_installed")(::NamedTuple{(:platform, :verbose),Tuple{Pkg.BinaryPlatforms.Linux,Bool}}, ::typeof(Pkg.Artifacts.
[4] #ensure_all_artifacts_installed#43(::Pkg.BinaryPlatforms.Platform, ::Nothing, ::Bool, ::Bool, ::typeof(Pkg.Artifacts.ensure_all_artifacts_installed), :: [5] #ensure_all_artifacts_installed at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/Operations.jl:0 [inlined] [6] #download_artifacts#78(::Pkg.BinaryPlatforms.Linux, ::Bool, ::typeof(Pkg.Operations.download_artifacts), ::Array{String,1}) at /buildworker/worker/packa
[7] #download_artifacts at ./none:0 [inlined]
[8] #download_artifacts#73(::Pkg.BinaryPlatforms.Linux, ::Bool, ::typeof(Pkg.Operations.download_artifacts), ::Array{Pkg.Types.PackageSpec,1}) at /buildwork$
[9] #download_artifacts at ./array.jl:0 [inlined]
[10] #instantiate#114(::Nothing, ::Bool, ::Bool, ::Pkg.BinaryPlatforms.Linux, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::type$
[11] instantiate(::Pkg.Types.Context) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:720
[12] #instantiate#113 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:716 [inlined]
[13] instantiate() at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:716
[14] top-level scope at none:1
ERROR: LoadError: LoadError: InitError: Unable to automatically install ‘FFTW’ from ‘/home/19me10057/.julia/packages/FFTW_jll/7HPom/Artifacts.toml’
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] #ensure_artifact_installed#42(::Pkg.BinaryPlatforms.Platform, ::Bool, ::typeof(Pkg.Artifacts.ensure_artifact_installed), ::String, ::Dict{String,Any}, : [3] (::Pkg.Artifacts.var"#kw##ensure_artifact_installed")(::NamedTuple{(:platform,),Tuple{Pkg.BinaryPlatforms.Linux}}, ::typeof(Pkg.Artifacts.ensure_artifac
[4] do_artifact_str(::String, ::Dict{String,Any}, ::String, ::Module) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/Artif$
[5] #invokelatest#1 at ./essentials.jl:709 [inlined]
[6] invokelatest at ./essentials.jl:708 [inlined]
[7] init() at /home/19me10057/.julia/packages/FFTW_jll/7HPom/src/wrappers/x86_64-linux-gnu.jl:41
[8] _include_from_serialized(::String, ::Array{Any,1}) at ./loading.jl:692
[9] _require_search_from_serialized(::Base.PkgId, ::String) at ./loading.jl:776
[10] _require(::Base.PkgId) at ./loading.jl:1001
[11] require(::Base.PkgId) at ./loading.jl:922
[12] require(::Module, ::Symbol) at ./loading.jl:917
[13] include at ./boot.jl:328 [inlined]
[14] include_relative(::Module, ::String) at ./loading.jl:1105
[15] include at ./Base.jl:31 [inlined]
[16] include(::String) at /home/19me10057/.julia/packages/FFTW/qqcBj/src/FFTW.jl:1
[17] top-level scope at /home/19me10057/.julia/packages/FFTW/qqcBj/src/FFTW.jl:20
[18] include at ./boot.jl:328 [inlined]
[19] include_relative(::Module, ::String) at ./loading.jl:1105
[20] include(::Module, ::String) at ./Base.jl:31
[21] top-level scope at none:2
[22] eval at ./boot.jl:330 [inlined]
[23] eval(::Expr) at ./client.jl:425
[24] top-level scope at ./none:3
during initialization of module FFTW_jll
in expression starting at /home/19me10057/.julia/packages/FFTW/qqcBj/deps/deps.jl:1
in expression starting at /home/19me10057/.julia/packages/FFTW/qqcBj/src/FFTW.jl:19

the first thing to try would be using a more modern Julia version. 1.6 is the current lts, and 1.8 is the latest stable release. all Julia 1.x versions are backwards compatible, so upgrading Julia shouldn’t break anything.

That can be a possible solution, but I cannot use it. I am restricted to use Julia 1.3 version for my project. I am trying to generate some simulations from pre-existing code, which was written compatible to Julia 1.3 version. So, I won’t be able to use any other version of Julia other than 1.3

Quick Update:
I tried running my project scripts using the Julia 1.6.7 version. Unfortunately the errors still persists, the simulation kind of ran for a couple of minutes and then stopped because of the same error. “Unable to automatically install FFTW from Artifacts.Toml file”.

it’s probably some sort of firewall issue but I’m not exactly sure what.

I found out that there is no internet access to the computing node on which the simulation actually runs.

They say there’s no internet access on this computer, in the original message. They also say

The Artifacts file contains links to download system specific files, I was able to download the required file manually on the login nodes

but I’m not sure where exactly they placed those downloaded files.

Is this a usecase for Overrides.toml?

Yes, it isn’t clear what @Sai_Sandeep did exactly. I presume login and compute nodes share the same filesystem with same paths? Also, I know on some systems compute nodes may not have access to the home directory, which is where the Julia depot would live by default, unless you configured to be somewhere else. Is that the case also for your system?

Yeah, I apologize for the confusion. My institution has denied access on computing nodes for the purpose of safety. Where as on login nodes - where the user can perform limited tasks, login nodes do have the access to internet so that the user can successfully download the files/programs/softwares etc needed for his/her work.
I have traced the Artifacts.toml file and downloaded whatever was intended on /home/ directory, but these files should ideally be present somewhere in the /.julia/ directory. The problem is I don’t know where. Hence it was of no use.

Yes. The login and compute nodes share the same file system (Lustre parallel filesystem) with different paths(I presume). The computing node does have the access to the login nodes. The path to Julia is specified in batch scripts submitted to the computing node.
I hope I was able to clear the confusion, please let me know if you need anything else.

@giordano @digital_carver @Oscar_Smith
I humbly request all of you to please have a look at this problem and let me know of any kind of possible solution, if exists. I can provide you with more information regarding the problem if anything is insufficient.
It has been almost 5d since anyone has replied to this thread.

try installing the package on the login node.

Can you instantiate the project on the login node? Typically on shared filesystem clusters this is what needs to be done. This should ideally install everything correctly.

If you don’t have a project.toml file, even then you can install all dependencies manually on the login node

this shouldn’t be the case. Unless your code used undocumented Julia internal API, it should always be backward compatible. This is automatically the case for your packages btw, cuz you can always install the same old version of those packages. So you have to have some really hacky stuff in your very own code for this to be true.

I did that, but now I don’t know where to move it. Because the compiler will definitely not search for package in the login node. I also tried moving it to /.julia/packages/ but still the error was present.

1 Like

figure out where the compute node has it’s .julia folder and copy the whole thing. I think the part you need to copy is .julia/artifacts but I’m not 100% sure.

Yes, I have instantiated the project. And also to double check I have manually installed each dependency taking reference from the projects.toml file.
But there was one thing I couldn’t figure out and maybe this could be the cause.
All the dependencies to be installed had a particular version listed with them in the projects.toml file, so I did everything manually on the login node in the Julia REPL using pkg.add(PackageSpec(name=“name of the package”; version=“version mentioned”))
I was able to successfully install all the dependencies, but there were these _jll packages/dependencies, that had invalid format of version according to Julia REPL. Their version was like “3.3.9+5”, the extra added “+5” was leading to errors - saying version is not in the correct format. I had to install it without specifying the version, so some version of this FFTW_jll package was installed.
Maybe this was causing the compiler to look at Artifacts.toml to download the original package version. I knew this because the link in artifacts.toml file were to the download of this particular version.
I don’t know further how to install this with accurate version.

Yes I have tried that. But still the error was there, I kind of moved the respective files from login node to each directory of /.julia and ran the simulation to check which move was correct. All the cases still returned the same error.

@jling What do you mean by undocumented Julia internal API, can you give some elaboration please.

What he’s trying to say is that you as long as you are using documented API rather than something you found by probing the internal Julia source code, then code written for Julia 1.3 should work fine in Julia 1.6.7.

My suspicion here is that perhaps the environment on the login node differs slightly from the environment on the compute nodes. As you can see below we have some very specific artifacts available for FFTW:

What we need to do is figure exactly what artifact the compute nodes are trying to download.

Perhaps there is an issue with your Manifest.toml which can happen when you switch Julia versions.You may want to try moving your Manifest.toml to a temporary location, and then doing the following with Julia 1.6.7 on the login node.

using Pkg
Pkg.activate("your/environment/location")
Pkg.resolve()
Pkg.instantiate(verbose=true)