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

Java and amd 64 errors when running illumination #560

Open
eisele24 opened this issue Sep 24, 2024 · 1 comment
Open

Java and amd 64 errors when running illumination #560

eisele24 opened this issue Sep 24, 2024 · 1 comment

Comments

@eisele24
Copy link

Hi there,

I am currently trying to run the illumination correction code for McMicro and I am running into an error regarding both Java and amd64/arm64 platforms. I confirmed that I have Java 21 installed and increased by CPU/memory in docker to handle the code, which was an error I was running into prior to this one. I have pasted the error message below, thank you!

Caprice

Java VM: OpenJDK 64-Bit Server VM (25.322-b06 mixed mode linux-amd64 compressed oops)

executor > local (14)
[- ] staging:phenoimager2mc -
[be/1ed321] illumination (13) | 9 of 9, failed: 1
[- ] registration:ashlar -
[- ] background:backsub -
[- ] dearray:coreograph -
[- ] dearray:roadie:runTask -
[- ] segmentation:roadie:runTask -
[- ] segmentation:worker -
[- ] segmentation:s3seg -
[- ] quantification:mcquant -
[- ] downstream:worker -
[- ] viz:autominerva -
ERROR ~ Error executing process > 'illumination (5)'

Caused by:
Process illumination (5) terminated with an error exit status (134)

Command executed:

/opt/fiji/Fiji.app/ImageJ-linux64 --ij2 --headless --run /opt/fiji/imagej_basic_ashlar.py 'filename="CC1033_Panel05.czi",output_dir=".",experiment_name="CC1033_Panel05.czi"'

Command exit status:
134

Command output:

A fatal error has been detected by the Java Runtime Environment:

Internal Error (safepoint.cpp:388), pid=8, tid=0x00002aab40588700

guarantee(PageArmed == 0) failed: invariant

JRE version: OpenJDK Runtime Environment (8.0_322-b06) (build 1.8.0_322-b06)

Java VM: OpenJDK 64-Bit Server VM (25.322-b06 mixed mode linux-amd64 compressed oops)

Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

An error report file with more information is saved as:

hs_err_pid8.log

If you would like to submit a bug report, please visit:

http://bugreport.java.com/bugreport/crash.jsp

Command error:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release

A fatal error has been detected by the Java Runtime Environment:

Internal Error (safepoint.cpp:388), pid=8, tid=0x00002aab40588700

guarantee(PageArmed == 0) failed: invariant

JRE version: OpenJDK Runtime Environment (8.0_322-b06) (build 1.8.0_322-b06)

Java VM: OpenJDK 64-Bit Server VM (25.322-b06 mixed mode linux-amd64 compressed oops)

Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

An error report file with more information is saved as:

hs_err_pid8.log

If you would like to submit a bug report, please visit:

http://bugreport.java.com/bugreport/crash.jsp

qemu: uncaught target signal 6 (Aborted) - core dumped
.command.sh: line 2: 8 Aborted /opt/fiji/Fiji.app/ImageJ-linux64 --ij2 --headless --run /opt/fiji/imagej_basic_ashlar.py 'filename="CC1033_Panel05.czi",output_dir=".",experiment_name="CC1033_Panel05.czi"'

Work dir:
/Users/eisele.24/work/d6/619e39cc988f9c04654cae30873232

Tip: you can replicate the issue by changing to the process work dir and entering the command bash .command.run

-- Check '.nextflow.log' file for details

@ArtemSokolov
Copy link
Collaborator

Hi @eisele24,

The root cause of the issue is:

qemu: uncaught target signal 6 (Aborted) - core dumped

which is described in more detail here

Long story short, containers for individual MCMICRO modules were built on the x86 chip architecture. They cannot natively run on M1 chips. Docker relies on qemu to provide an emulation layer, but as you can see, this layer is somewhat limited in its capabilities.

The best workaround at the moment is to rebuild the container directly on your M1 machine. You can do this with the following commands:

# Clone the module repository
https://github.com/labsyspharm/basic-illumination

# Build the container
cd basic-illumination
docker build -t labsyspharm/basic-illumination:1.1.1 .

# Verify that the container has been built by inspecting the output of
docker images

A small explanation: The container tag labsyspharm/basic-illumination:1.1.1 is taken from MCMICRO's configuration file. When you run MCMICRO, Nextflow will check for the presence of that container tag on the system and pull it from the cloud only if it's not detected. By building the container on your system, you are "fooling" Nextflow into thinking that the container tag was already pulled, so it will simply run the M1 version that you built.

The long-term solution is of course to provide an arm64 alternative for all containers. However, individual modules were developed by different labs, so it will likely take some time to synchronize everybody. I will think about whether there can be a more centralized container building solution.

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