Ставим Theano на Windows
Theano — популярная библиотека для работы с нейронными сетями. И как многие полезные Machine Learning инструменты, на Windows она просто так не ставится.
В заметке описан самый простой из известных мне на данный момент способов установки Theano на Windows, благодаря которому у меня получилось поставить на Python 3.5 x64
пакет Theano 0.9.0.rc3
с работающей поддержкой GPU, система win8.1 x64
.
Еще можно воспользоваться официальной документацией или альтернативной инструкцией.
Установка Theano
1. Нам понадобится Conda, которая идет в пакете Anaconda для ML в Python. Я использую Anaconda 3
и Python 3.5
.
2. В консоли ставим нужные пакеты.
conda install mingw libpython
3. Клонируем репозиторий Theano. (Естественно понадобится Git)
git clone https://github.com/Theano/Theano.git
4. Устанавливаем Python пакет.
cd Theano
python setup.py install
Готово.
Theano должен быть установлен. Для проверки корректности можно попробовать выполнить простой скрипт в интерпретаторе.
>>> import theano.tensor as T
>>> from theano import function
>>> x = T.dscalar('x')
>>> y = T.dscalar('y')
>>> z = x + y
>>> f = function([x, y], z)
>>> f(2, 3)
# array(5.0)
Если выполнилось — Theano нормально установлен. Но работает он только на процессоре (CPU), значит сети будут считаться очень медленно. Настроим работу с видеокартой (GPU).
Настраиваем работу Theano с GPU
1. Нам понадобится Visual Studio. Я использовал Enterprise edition 2013
.
Можно попробовать использовать Community version студии и MS SDK for Win7.
VS 2015 использовать не стоит, она не поддерживает CUDA 7.5.
2. Устанавливаем CUDA 7.5 Toolkit. Придется зарегистрироваться на сайте NVidia.
3. Добавляем в домашнюю директорию пользователя (например C:\Users\re9ulus
) файл .theanorc.txt
с содержимым:
#!sh
[global]
device = gpu
floatX = float32
[nvcc]
compiler_bindir=D:\soft\dev\vs2013\VC\bin
где compiler_bindir
— путь к папке bin
в установленной Visual Studio.
Готово. Теперь Theano должна использовать GPU. Проверить можно с помощью примера из официальной документации:
from theano import function, config, shared, sandbox
import theano.sandbox.cuda.basic_ops
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), 'float32'))
f = function([], sandbox.cuda.basic_ops.gpu_from_host(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,))
print("Numpy result is %s" % (numpy.asarray(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')