uncomplicate / neanderthal

Fast Clojure Matrix Library
http://neanderthal.uncomplicate.org
Eclipse Public License 1.0
1.06k stars 56 forks source link

undefined symbol: omp_get_num_procs on clean Ubuntu install #118

Closed warrenronsiek closed 2 years ago

warrenronsiek commented 2 years ago

I'm trying to run Neanderthal on Ubuntu 18 on a clean AWS ec2 instance. I have the following setup script with MKL install steps taken directly from the intel site:

# Update stuff, install java
sudo apt update
sudo apt -y install cmake pkg-config build-essential openjdk-8-jre-headless

# install clojure, leiningen
curl -O https://download.clojure.org/install/linux-install-1.10.3.1020.sh
chmod +x linux-install-1.10.3.1020.sh
sudo ./linux-install-1.10.3.1020.sh
sudo apt -y install leiningen

# install MKL
cd /tmp
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main"
sudo apt -y install intel-basekit
. /opt/intel/oneapi/setvars.sh
unset CLASSPATH # because otherwise lein complains
export LD_LIBRARY_PATH=/opt/intel/oneapi/mkl/latest/lib/intel64/

# create the app
lein new app
cd app
echo '
(defproject app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.10.1"]
                 [nrepl "0.8.3"]
                 [uncomplicate/neanderthal "0.43.1"]
                 [com.cognitect.aws/api      "0.8.524"]
                 [com.cognitect.aws/endpoints "1.1.12.93"]
                 [com.cognitect.aws/ec2 "814.2.1008.0"]])' > project.clj

cd src/app/ && echo '
(ns app.core
    (:require [uncomplicate.commons.core :refer [with-release]]
              [uncomplicate.neanderthal
               [native :refer [dv dge]]
               [core :refer [mv mv!]]])
    (:gen-class))' > core.clj
cd ../..
lein repl 

results in:

/usr/lib/jvm/java-8-openjdk-amd64/bin/java: symbol lookup error: /opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_intel_thread.so.1: undefined symbol: omp_get_num_procs
Exception in thread "Thread-1" clojure.lang.ExceptionInfo: Subprocess failed {:exit-code 127}
    at clojure.core$ex_info.invokeStatic(core.clj:4617)
    at clojure.core$ex_info.invoke(core.clj:4617)
    at leiningen.core.eval$fn__8116.invokeStatic(eval.clj:264)
    at leiningen.core.eval$fn__8116.invoke(eval.clj:260)
    at clojure.lang.MultiFn.invoke(MultiFn.java:234)
    at leiningen.core.eval$eval_in_project.invokeStatic(eval.clj:366)
    at leiningen.core.eval$eval_in_project.invoke(eval.clj:356)
    at leiningen.repl$server$fn__12516.invoke(repl.clj:244)
    at clojure.lang.AFn.applyToHelper(AFn.java:152)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invokeStatic(core.clj:646)
    at clojure.core$apply.invoke(core.clj:641)
    at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1890)
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1881)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invokeStatic(core.clj:650)
    at clojure.core$apply.invoke(core.clj:641)
    at clojure.core$bound_fn_STAR_$fn__13275.doInvoke(core.clj:1912)
    at clojure.lang.RestFn.invoke(RestFn.java:397)
    at clojure.lang.AFn.run(AFn.java:22)
    at java.lang.Thread.run(Thread.java:748)

Whats going wrong here? AFAIKT, I'm doing everything exactly right.

warrenronsiek commented 2 years ago

Switched to using [org.bytedeco/mkl-platform-redist "2020.3-1.5.4"] dependency, it now works.

warrenronsiek commented 2 years ago

To whom it may concern, the final script to make this work on a vanilla, Ubuntu EC2, c5.large:

sudo apt update
sudo apt -y install cmake pkg-config build-essential openjdk-8-jre-headless
curl -O https://download.clojure.org/install/linux-install-1.10.3.1020.sh
chmod +x linux-install-1.10.3.1020.sh
sudo ./linux-install-1.10.3.1020.sh
sudo apt -y install leiningen
cd /tmp
lein new app
cd app
echo '
(defproject app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :main app.core
  :repl-options {:init-ns app.core}
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.10.1"]
                 [nrepl "0.8.3"]
                 [org.bytedeco/mkl-platform-redist "2020.3-1.5.4"]
                 [uncomplicate/neanderthal "0.43.1"]])' > project.clj
echo '
(ns app.core
  (:require [uncomplicate.commons.core :refer [with-release]]
              [uncomplicate.neanderthal
               [native :refer [dv dge]]
               [core :refer [mv mv!]]])
  (:gen-class))' > ./src/app/core.clj
lein repl