Анаконда R, похоже, не может использовать OpenBLAS. Только МКЛ? Зачем?
Главный вопрос (№ 1):
Есть ли секретная уловка для получения Anaconda R в частности (не с другим R, пожалуйста, нет проблем с другими R), чтобы использовать резидентную подсистему BLAS в Ubuntu?
Другие числовые приложения (Octave) на том же хосте демонстрируют правильность установки подсистемы BLAS и высокую производительность, как и ожидалось, для операций с числовыми матрицами в зависимости от значения переменной среды OMP_NUM_THREADS. Для подключения этого не-анакондного программного обеспечения к резидентной подсистеме BLAS не потребовалось никаких специальных приемов.
Связанный вопрос (№ 2):
Распространяется ли подсистема Intel MKL BLAS с anaconda и может ли она использоваться anaconda R в качестве запасного варианта от OpenBLAS? В таком случае как активировать MKL BLAS?
программа htop
показывает 100% -ное использование одного ядра Anaconda R во время теста производительности. Неожиданно Anaconda R не может использовать OpenBLAS для параллельного матричного кода. Наблюдается резкое замедление> 40 раз по сравнению с эталонной машиной, использующей обычный R, а не Anaconda R. Это неприемлемая проблема производительности.
Сама установка подсистемы blas была подтверждена как правильная и полностью функциональная с использованием пакета GNU Octave, выполнив числовой тест, демонстрирующий отличное улучшение, как и ожидалось OMP_NUM_THREADS=1
был изменен на OMP_NUM_THREADS=16
, что является подходящим значением для тестового оборудования.
Последний вопрос (№ 3):
Является ли поставщик сопровождающих Anaconda намеренно собирает двоичный файл R для использования только с Intel MKL, исключая подсистему OpenBLAS?
Спасибо за прочтение.
Просите, чтобы любые ответы были ограничены людьми с опытом, фактически использующим MKS или OpenBLAS только с пакетами программного обеспечения anaconda. Спасибо за понимание.
Не стесняйтесь использовать мой тест:
# Plain old R, OpenBLAS, OMP_NUM_THREADS=4, Intel Core i7-920, 4 HW cores:
n=5e3
print(system.time({ x <- replicate(n, rnorm(n)); tcrossprod(x) }))
# elapsed: 6.1
# Anaconda R, OpenBLAS, OMP_NUM_THREADS=16, 2 x Intel Xeon-2690, 16 HW cores:
n=5e3
print(system.time({ x <- replicate(n, rnorm(n)); tcrossprod(x) }))
# elapsed: 291.8
GNU Octave benchmarks on same machine 2 x Intel Xeon-2690:
**Note GNU Octave is outside of anaconda**
ga@ga-HP-Z820:~/projects/blas_bench$ bash octave_benchmark.sh
Run program in octave using NVBLAS GPU-parallel algebra code, not CPU. LD_PRELOAD=libnvblas.so:
[NVBLAS] NVBLAS_CONFIG_FILE environment variable is set to 'nvblas.conf'
[NVBLAS] NVBLAS_CONFIG_FILE environment variable is set to 'nvblas.conf'
Elapsed time:
0.012405
Gigaflops:
7.0905e+05
Run program in octave using OpenBLAS CPU-parallel algebra code. OMP_NUM_THREADS=16 LD_PRELOAD=libblas.so.3:
Elapsed time:
17.559
Gigaflops:
500.95
Same but without LD_PRELOAD=libblas.so.3, does it still really run fast, indicating OpenBLAS is still used? OMP_NUM_THREADS=16:
Elapsed time:
16.063
Gigaflops:
547.61
Run program in almost plain old octave: This might still use OpenBLAS since its default ON on this host. Setting OMP_NUM_THREADS=1 so its nearly stock.
Elapsed time:
233.34
Gigaflops:
37.696
(Пожалуйста, не обращайте внимания на NVBLAS, которая не завершила тест из-за того, что в какой-то момент автоматическое обновление Ubuntu было повреждено установкой проприетарного видео драйвера NVIDIA.)