Неопределенная ссылка Theano на dgemm (Windows 7, WinPython)

Я использую WinPython-64bit-3.5.1.1 и Theano. Импорт Theano работает, и я даже могу обучить рекуррентную нейронную сеть. Однако, когда я пытаюсь использовать сверточную нейронную сеть, я получаю следующую ошибку:

[...] mod.cpp:528: неопределенная ссылка на `dgemm_'\r.[...]

Я предполагаю, что какая-то библиотека отсутствует/недоступна для моего процессора, но я не могу понять, как это исправить. Не могли бы вы сказать мне, какая информация вам нужна, чтобы помочь мне отладить это и, наконец, решить эту проблему?

Например, этот код (с форума kaggle) отлично работает:

import numpy as np
import time
import theano

print('blas.ldflags=', theano.config.blas.ldflags)

A = np.random.rand(1000, 10000).astype(theano.config.floatX)
B = np.random.rand(10000, 1000).astype(theano.config.floatX)
np_start = time.time()
AB = A.dot(B)
np_end = time.time()
X, Y = theano.tensor.matrices('XY')
mf = theano.function([X, Y], X.dot(Y))
t_start = time.time()
tAB = mf(A, B)
t_end = time.time()
print("NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" % (
np_end - np_start, t_end - t_start))
print("Result difference: %f" % (np.abs(AB - tAB).max(), ))

Выход:

blas.ldflags= 
NP time: 0.452026[s], theano time: 0.491028[s] (times should be close when run on CPU!)
Result difference: 0.000000

Я также получаю сообщение об ошибке каждый раз, когда я импортирую theano, но это никогда не останавливало работу моей рекуррентной нейронной сети. Это ошибка:

1 #define _CUDA_NDARRAY_C
2 
3 #include <Python.h>
4 #include <structmember.h>
5 #include "theano_mod_helper.h"
6 
7 #include <numpy/arrayobject.h>
8 #include <iostream>
9 
10 #include "cuda_ndarray.cuh"
11 
[...]
5327 
5328 /*
5329   Local Variables:
5330   mode:c++
5331   c-basic-offset:4
5332   c-file-style:"stroustrup"
5333   indent-tabs-mode:nil
5334   fill-column:79
5335   End:
5336 */
5337 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=79 :
5338 
===============================
nvcc : fatal error : nvcc cannot find a supported version of Microsoft Visual Studio. Only the versions 2008, 2010, and 2012 are supported
ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: ('nvcc return status', 4294967295, 'for cmd', 'nvcc -shared -O3 -Xlinker /DEBUG -D HAVE_ROUND -m64 -Xcompiler -DCUDA_NDARRAY_CUH=mc72d035fdf91890f3b36710688069b2e,-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION,/Zi,/MD -IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\theano\\sandbox\\cuda -IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\numpy\\core\\include -IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\include -IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\theano\\gof -o C:\\Users\\user\\AppData\\Local\\Theano\\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_58_Stepping_9_GenuineIntel-3.5.1-64\\cuda_ndarray\\cuda_ndarray.pyd mod.cu -LC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\libs -LC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64 -lpython35 -lcublas -lcudart')

['nvcc', '-shared', '-O3', '-Xlinker', '/DEBUG', '-D HAVE_ROUND', '-m64', '-Xcompiler', '-DCUDA_NDARRAY_CUH=mc72d035fdf91890f3b36710688069b2e,-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION,/Zi,/MD', '-IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\theano\\sandbox\\cuda', '-IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\numpy\\core\\include', '-IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\include', '-IC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\lib\\site-packages\\theano\\gof', '-o', 'C:\\Users\\user\\AppData\\Local\\Theano\\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_58_Stepping_9_GenuineIntel-3.5.1-64\\cuda_ndarray\\cuda_ndarray.pyd', 'mod.cu', '-LC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64\\libs', '-LC:\\WinPython-64bit-3.5.1.1\\python-3.5.1.amd64', '-lpython35', '-lcublas', '-lcudart']

Я нашел этот поток, в котором говорится о той же проблеме но это просто ссылка на другой сайт. Я могу следовать этим инструкциям, но они предполагают, что я не использую WinPython, устанавливая все с самого начала. Это единственный способ?


person user667804    schedule 10.12.2016    source источник


Ответы (1)


Меня интересуют пустые флаги theano.config.blas.ld. В документации указано, что по умолчанию используется -lblas, а dgemm_ — это BLAS. Попробуйте установить blas и установить эту переменную. Например. для МКЛ:

  1. Установить МКЛ
  2. Убедитесь, что ваш компилятор может найти mkl_rt, установив LIBRARY_PATH
  3. установить theano.config.blas.ldflags='-lmkl_rt'
person DaVinci    schedule 10.12.2016
comment
Ошибка: C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ ld.exe: не могу найти -lmkl_rt Я установил LIBRARY_PATH = C:\Program Files (x86)\IntelSWTools\parallel_studio_xe_2017.0.036\compilers_and_libraries_2017\windows\compiler\lib Это правильно? - person user667804; 11.12.2016
comment
У него есть libmkl_rt? - person DaVinci; 11.12.2016
comment
Хорошо, я исправил путь, но теперь я получаю эту новую ошибку: Исключение: («Произошла следующая ошибка при компиляции узла», Dot22(X, Y), «\n», «Сбой компиляции (возврат статуса = 1): C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2017/windows/mkl/lib/intel64_win/mkl_rt.lib: ошибка добавления символов: Нет ошибки\r.collect2.exe: ошибка: ld вернул 1 статус выхода\r. ', '[Точка22(Х, Y)]') - person user667804; 11.12.2016
comment
какое полезное сообщение об ошибке! Я уверен, что Winpython поставляется с некоторой формой BLAS, вы можете попытаться найти, где он находится, и соответственно установить свой путь и config.blas.ldflags. np.__config__.show() может сообщить вам расположение этой библиотеки BLAS. - person DaVinci; 11.12.2016