Почему флаг floatX влияет на использование графического процессора в Theano?

Я тестирую Theano с графическим процессором, используя скрипт, представленный в руководстве. для этой цели:

# Start gpu_test.py
# From http://deeplearning.net/software/theano/tutorial/using_gpu.html#using-gpu
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in xrange(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')
# End gpu_test.py

Если я укажу floatX=float32, он будет работать на GPU:

francky@here:/fun$ THEANO_FLAGS='mode=FAST_RUN,device=gpu2,floatX=float32' python gpu_test.py
Using gpu device 2: GeForce GTX TITAN X (CNMeM is disabled)
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(Gp
Looping 1000 times took 1.458473 seconds
Result is [ 1.23178029  1.61879349  1.52278066 ...,  2.20771813  2.29967761
  1.62323296]
Used the gpu

Если я не укажу floatX=float32, он работает на процессоре:

francky@here:/fun$ THEANO_FLAGS='mode=FAST_RUN,device=gpu2'
Using gpu device 2: GeForce GTX TITAN X (CNMeM is disabled)
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 3.086261 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the cpu

Если я укажу floatX=float64, он будет работать на процессоре:

francky@here:/fun$ THEANO_FLAGS='mode=FAST_RUN,device=gpu2,floatX=float64' python gpu_test.py
Using gpu device 2: GeForce GTX TITAN X (CNMeM is disabled)
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 3.148040 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the cpu

Почему флаг floatX влияет на использование графического процессора в Theano?

Я использую:

  • Theano 0.7.0 (согласно pip freeze),
  • Python 2.7.6 64 бита (согласно import platform; platform.architecture()),
  • Nvidia-smi 361.28 (по данным nvidia-smi),
  • CUDA 7.5.17 (согласно nvcc --version),
  • GeForce GTX Titan X (по данным nvidia-smi),
  • Ubuntu 14.04.4 LTS x64 (согласно lsb_release -a и uname -i).

Я прочитал документацию на floatX, но это не помогло. Он просто говорит:

config.floatX
Строковое значение: либо "float64", либо "float32"
Значение по умолчанию: "float64"

Это устанавливает dtype по умолчанию, возвращаемый tensor.matrix(), tensor.vector() и подобными функциями. Он также устанавливает битовую ширину theano по умолчанию для аргументов, передаваемых как числа с плавающей запятой Python.


person Franck Dernoncourt    schedule 14.03.2016    source источник


Ответы (2)


Насколько я знаю, это потому, что они еще не реализовали float64 для графических процессоров.

http://deeplearning.net/software/theano/tutorial/using_gpu.html :

Только вычисления с типом данных float32 могут быть ускорены. Ожидается, что в будущем оборудовании будет улучшена поддержка float64, но вычисления с плавающей запятой по-прежнему выполняются относительно медленно (январь 2010 г.).

person Neil G    schedule 14.03.2016

Из http://deeplearning.net/software/theano/tutorial/using_gpu.html#gpuarray-backend Я читал, что на графическом процессоре можно выполнять вычисления с плавающей запятой 64, но вы должны установить libgpuarray из исходного кода.

Мне удалось его установить, см. этот скрипт, я использовал virtualenv, вам даже не обязательно иметь sudo.

После установки вы можете использовать старый бэкэнд с флажком конфигурации device=gpu и новый бэкэнд с device=cuda.

Новый бэкенд может выполнять 64-битные вычисления, но у меня он работает по-другому. Некоторые операции перестали работать. ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law :)

person BGabor    schedule 21.04.2016
comment
Спасибо, интересно. - person Franck Dernoncourt; 22.04.2016
comment
обновление: github.com/ Теано/Теано/вики/ - person BGabor; 07.02.2017