R и nvblas.dynlib (на Mac)

У меня R на моем Mac установлен через CRAN. У меня также есть openblas, установленный через доморощенный. Я могу переключаться между реализациями BLAS следующим образом:

Ссылка блас (нетлиб я думаю):

ln -sf /Library/Frameworks/R.framework/Resources/lib/libRblas.0.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib

vecLib (Apple BLAS):

 ln -sf /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib

openblas (предоставляется через homebrew):

brew link openblas --force
ln -sf /usr/local/lib/libopenblas.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib

Из 3-х вариантов openblas кажется самым быстрым (хотя vecLib - очень близкая секунда).

Тем не менее, я хочу попробовать больше силы:

Больше силы

Я установил CUDA 6.5 от NVIDIA. Это загружает кучу файлов в /Developer/NVIDIA/ и связывает некоторые из них с /usr/local/cuda, Я устанавливаю переменные окружения cuda в ~/.profile:

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib:$LD_LIBRARY_PATH"
export CUDA_ROOT="/usr/local/cuda/bin"
export CUDA_HOME="/usr/local/cuda"
export NVBLAS_CONFIG_FILE="/Users/me/nvblas.conf"

Затем я сделал "/Users/me/nvblas.conf" со следующими записями:

NVBLAS_CPU_BLAS_LIB /usr/local/lib/libopenblas.dylib
NVBLAS_GPU_LIST ALL0
NVBLAS_TILE_DIM 2048
NVBLAS_AUTOPIN_MEM_ENABLED

В теории это должно указывать nvblas.dylib вернуться к libopenblas.dylib для функций BLAS, которые не включены в nvblas.dylib,

Все идет нормально. Следующий шаг - связать R с nvblas.dylib:

ln -sf /usr/local/cuda/lib/libnvblas.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib

Тем не менее, когда я начинаю R, кажется, что libRlapack.dylib не могу найти все функции BLAS, которые он ищет:

me:~ me$ R
[NVBLAS] Using devices :0 
[NVBLAS] Config parsed

R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/stats/libs/stats.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/stats/libs/stats.so, 6): Symbol not found: _dasum_
  Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib
  Expected in: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRblas.dylib
 in /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib
During startup - Warning message:
package ‘stats’ in options("defaultPackages") was not found 

openblas прекрасно работает сам по себе и предоставляет все функции, которые ищет R, поэтому я думаю, что ошибка в том, что libnvblas.dylib неправильно возвращается к libopenblas.dylib,

Это происходит независимо от того, какой процессор BLAS I указывает libnvblas.dylib at (netlib, vecLib, openblas). Может кто-нибудь помочь мне разобраться с этой ошибкой? Что-нибудь еще, что я должен добавить к своему пути или ссылке, чтобы получить libnvblas.dylib правильно работает с R на Mac?

Вероятно, соответствующая ошибка:

Symbol not found: _dasum_
Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib
Expected in: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRblas.dylib

Что выглядит как nvblas не пересылать _dasum_ в openblas.

/редактировать:

otool -L /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib

Урожайность:

/Library/Frameworks/R.framework/Resources/lib/libRblas.dylib:
    @rpath/libnvblas.6.5.dylib (compatibility version 0.0.0, current version 6.5.14)
    @rpath/libcublas.6.5.dylib (compatibility version 0.0.0, current version 6.5.14)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 635.21.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

1 ответ

Решение

У меня была такая же проблема, как и у вас. При переопределении OSX библиотека вместо замены библиотеки в R.framework решила проблему для меня:

$ DYLD_FORCE_FLAT_NAMESPACE=y DYLD_INSERT_LIBRARIES=/Developer/NVIDIA/CUDA-7.0/lib/libnvblas.7.0.dylib R
Другие вопросы по тегам