Установка Keras и Theano на Windows 10 с поддержкой GPU. Часть 2 — TechCave

Оглавление В предыдущей статье мы установили Visual Studio, CUDA, MinGW и Python. Теперь давайте установим Theano. Theano 0.8.2 Версия 0.8.2

Установка Keras и Theano на Windows 10 с поддержкой GPU. Часть 2

Machine Learning/Data Mining/Big Data

Установка Keras и Theano на Windows 10 с поддержкой GPU. Часть 2

Оглавление

В предыдущей статье мы установили Visual Studio, CUDA, MinGW и Python. Теперь давайте установим Theano.

Theano 0.8.2

Версия 0.8.2? Почему бы просто не установить последнюю версию Theano, поскольку она, очевидно, должна работать лучше, не так ли? Но мы ставим эту версию потому, что так будет проще воспроизводить чужие исследования и наработки. Если ваши коллеги по работе или товарищи по Kaggle команде установят последнюю версию отличающуюся от вашей это увеличит вероятность того, что даже если вы будете использовать те же входные данные, вы получите разные результаты. Только по этой причине, мы настоятельно рекомендуем применять только релизы.

Клонируйте стабильный релиз Theano (0.8.2) на локальный компьютер из GitHub, используя следующие команды:

$ cd /c/toolkits
$ git clone https://github.com/Theano/Theano.git theano-0.8.2 --branch rel-0.8.2

Эти команды должны склонировать Theano 0.8.2 в c:\toolkits\theano-0.8.2:

Установите его следующим образом:

$ cd /c/toolkits/theano-0.8.2
$ python setup.py install --record installed_files.txt

Список установленных файлов можно посмотреть тут.

Проверить установку Theano в списке установленных пакетов Anaconda можно так:

$ conda list | grep -i theano

OpenBLAS 0.2.14

Если мы собираемся использовать GPU, то зачем нам устанавливать CPU оптимизированную библиотеку линейной алгебры? В нашей сборке, большая часть вычислений для глубокого обучения будет осуществляется с помощью GPU, и это правильно, но процессор также не будет простаивать. Большая часть конкурсов Kaggle на основе изображений требует их предварительной обработки, например нормализации. Также, довольно часто требуется применение фильтров (удаление шума, выравнивания гистограммы и т.д.). Вы, конечно, можете использовать GPU для этой цели и сохранить результаты в файл. Но на практике, однако, эти операции часто выполняются параллельно на процессоре, в то время как GPU занят обучением весов глубокой нейронной сети. По этой причине мы настоятельно рекомендуем установить библиотеку OpenBLAS.

Согласно документации Theano, многопоточная библиотеки OpenBLAS работает гораздо лучше, чем не оптимизированная стандартная BLAS (Basic Linear Algebra Subprograms) библиотека, поэтому мы используем именно ее.

Загрузите OpenBLAS отсюда и распакуйте файлы в c:\toolkits\openblas-0.2.14-int32
  1. Задайте системную переменную OPENBLAS_HOME значением c:\toolkits\openblas-0.2.14-int32
  2. Добавьте %OPENBLAS_HOME%\bin в PATH

Переключение между CPU и GPU режимом

Создайте две переменные окружения:

  • THEANO_FLAGS_CPU со следующим значением:
floatX=float32,device=cpu,lib.cnmem=0.8,blas.ldflags=-LC:/toolkits/openblas-0.2.14-int32/bin -lopenblas
  • THEANO_FLAGS_GPU со значением:
floatX=float32,device=gpu,dnn.enabled=False,lib.cnmem=0.8,blas.ldflags=-LC:/toolkits/openblas-0.2.14-int32/bin -lopenblas

Theano отслеживает только переменную THEANO_FLAGS. Теперь все что нам нужно сделать, чтобы сказать Theano использовать CPU или GPU, это установить THEANO_FLAGS в THEANO_FLAGS_CPU или THEANO_FLAGS_GPU. Вы можете проверить, что эти переменные среды были успешно добавлены с помощью следующей команды:

$ env | grep -i theano

Замечание: Флаг THEANO_FLAGS_GPU_DNN мы рассмотрим в разделе по cuDNN.

Проверка установки OpenBLAS

Для этого используем программу из документации по Theano.

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("numpy 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(), ))

Сохраните приведенный выше код в файл с именем openblas_test.py в текущем каталоге и выполните следующие команды:

$ THEANO_FLAGS=$THEANO_FLAGS_CPU
$ python openblas_test.py

Примечание: Если вы получаете ошибку global name 'CVM' is not defined, то это может быть потому, что неправильно установлен THEANO_FLAGS_CPU. Попробуйте поменять floatX = float32 и floatX = float64.

Проверка установки Theano вместе с GPU.

Для этого выполним следующую программу из документации Theano и сравним производительность GPU установки по сравнению с использованием Theano в CPU-режиме. Сохраните код в файл с именем cpu_gpu_test.py в текущем каталоге и выполните команды:

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 range(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')

Во-первых, давайте посмотрим, какие результаты мы получим от Theano в режиме CPU:

$ THEANO_FLAGS=$THEANO_FLAGS_CPU
$ python cpu_gpu_test.py

Далее, давайте выполним ту же программу на GPU:

$ THEANO_FLAGS=$THEANO_FLAGS_GPU
$ python cpu_gpu_test.py

Отлично, вот мы закончили с настройкой Theano 0.8.2.

Оглавление

11:51
3496

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Seangle
Галя Рубцова
Ольга Телюкова
Zhenya
Лариса Аксиненко
Dmitry Loginov
Dimas Potapov
Ваня Берёзкин
Володя Рудомаха