Как проверить, использует ли Spark OpenBlas?

Недавно я скачал и собрал Spark 2.3.1. Я использовал эти команды для загрузки и выбора версии 2.3.1.

git clone https://github.com/apache/spark.git   
cd spark
git checkout tags/v2.3.1

Я стремлюсь улучшить производительность своего приложения и наткнулся на статьи, в которых предлагалось обновить распределенную версию OpenBLAS, поэтому при сборке spark я использовал параметр -Pnetlib-lgpl для установки netlib-java.

Это команда, которую я использовал.

build/mvn -Pyarn -Phive -Phive-thriftserver  -DskipTests -Pnetlib-lgpl clean package

Как мне узнать/убедиться, что spark теперь использует OpenBLAS из netlib-java, который я установил с помощью приведенной выше команды, а не той, которая распространяется с Ubuntu? Кроме того, это правильный способ обновить OpenBLAS или я что-то упускаю?

ПС

Я выполнил следующие команды, чтобы убедиться, что он правильно установлен.

import com.github.fommil.netlib.BLAS
println(BLAS.getInstance().getClass().getName())

приводит к

com.github.fommil.netlib.NativeSystemBLAS

Я использовал следующее для ссылок

sudo update-alternatives --display liblapack.so
sudo update-alternatives --install /usr/lib64/libblas.so libblas.so /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/libblas.so.3 libblas.so.3 /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/liblapack.so liblapack.so /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/liblapack.so.3 liblapack.so.3 /usr/lib64/atlas/libtatlas.so.3 1000

Я использую Убунту

Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:    16.04
Codename:   xenial

person Clock Slave    schedule 17.09.2019    source источник


Ответы (1)


Теперь, когда вы убедились, что Spark использует родную библиотеку BLAS, используйте lsof, чтобы узнать, какая именно загружена процессом JVM, на котором размещен рабочий процесс. Загруженные библиотеки отображаются как обычные файлы с отображением памяти в выводе lsof. Вот пример Spark с использованием Intel MKL:

$ lsof -n -p 10202
...
java  10202 ubuntu  mem  REG  8,1  70211598  519025 /opt/intel/compilers_and_libraries_2019.3.199/linux/mkl/lib/intel64_lin/libmkl_core.so
java  10202 ubuntu  mem  REG  8,1    902768  521066 /opt/intel/compilers_and_libraries_2019.3.199/linux/mkl/wrapper/mkl_wrapper.so
...

10202 — это PID процесса JVM. Выходные данные содержат полный путь к каждому открытому файлу, поэтому вы можете легко определить, используется ли правильная библиотека.

person Hristo Iliev    schedule 17.09.2019