luntergroup / octopus

Bayesian haplotype-based mutation calling
MIT License
301 stars 37 forks source link

problem with conda install #154

Closed Fred-07 closed 3 years ago

Fred-07 commented 3 years ago

Description Installation with the following command completes without problem but octopus can not be run: conda create -n Octopus -c conda-forge -c bioconda python=3.8 octopus conda activate Octopus octopus It reports: Illegal instruction

Version 0.7.2

CentOS 7 (3.10.0-862.el7.x86_64)

dancooke commented 3 years ago

This suggests your CPU doesn't have appropriate SIMD instructions. What's the output of grep flags /proc/cpuinfo | head -1?

Note that the current Bioconda version is old (v0.6.3b) and wasn't built by me. I'm trying to get this updated to v0.7.2.

You can also get the latest version from DockerHub (https://hub.docker.com/r/dancooke/octopus).

Fred-07 commented 3 years ago

Thanks for your reply. The command outputs : flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm nopl pni cx16 hypervisor lahf_lm abm

Not more successful with the container : singularity pull docker:dancooke/octopus singularity exec -B $PWD "octopus_latest.sif" /opt/octopus/bin/octopus -v Running the command outputs nothing.

david-a-parry commented 3 years ago

I have the same Illegal instruction error occuring when submitting to some but not all nodes on our HPC cluster. In case it is helpful I've added information below.

cpuinfo flags nodes where this works:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_pt ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts pku ospke spec_ctrl intel_stibp flush_l1d

cpuinfo flags for nodes getting Illegal instruction:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts spec_ctrl intel_stibp

Flags in first but not second:

'bmi2', 'fma', 'clflushopt', 'cqm_occup_llc', 'avx512cd', 'xgetbv1', 'cqm_mbm_local', 'cdp_l3', 'ospke', 'tsc_adjust', 'mpx', 'flush_l1d', 'sdbg', 'bmi1', 'avx512bw', 'hle', 'avx512vl', 'cqm_llc', 'avx2', 'avx512f', 'movbe', 'intel_pt', 'adx', 'epb', 'pku', 'rtm', 'cat_l3', 'art', 'cqm_mbm_total', 'clwb', 'rdseed', 'rdt_a', 'abm', 'mba', 'invpcid', '3dnowprefetch', 'xsavec', 'cqm', 'avx512dq'

(I have tried building from source but so far can't get this working even after installing required boost libraries and providing the path to compiled htslib).

I don't know if it would be possible to provide a compiled linux binary in a release on github, but I would be immensely grateful if you could!

Fred-07 commented 3 years ago

Both container and conda installation are OK if I run octopus on the cluster and not on the frontend machine.

Cluster CPUs : flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb intel_ppin ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc dtherm ida arat pln pts md_clear spec_ctrl intel_stibp flush_l1d

arch : x86_64

dancooke commented 3 years ago

@david-a-parry Thanks - so it would appear the Bioconda build used AVX2 instructions. This is a bit tricky. Octopus can work with just SSE2, but it will run much faster, particularly in cancer mode, with AVX2. I'm somewhat reluctant to downgrade to SSE2 for the Bioconda build as I'd imagine the majority of HPC's will have AVX2 machines.

@Fred-07 The Docker build also uses AVX2 so that will explain why it's not working on your frontend machine. I'm currently re-building a new image for SandyBridge, so that should work more generally (but slower).

david-a-parry commented 3 years ago

@dancooke That explains it - I've been able to find out from our computing support which are the old nodes that don't support AVX2 and will blacklist them when submitting Octopus jobs, so that's a decent workaround for me at least.

Thank you for explaining!