Использование технологий NVIDIA для решения задач глубокого обучения

Материал из MachineLearning.

Перейти к: навигация, поиск
Статья, посвященная использованию графических ускорителей NVIDIA для решения задач глубокого обучения будет размещена в течение мая. Категория: Инструменты и технологии. --Strijov 15:57, 20 апреля 2015 (MSD)


Ниже приведен обзор методов построения сетей глубокого обучения на графических акселераторах. Решаются задачи машинного обучения: распознавания образов, речи, классификация сигналов. Для решения задач используются программные пакеты Torch, Theano, Caffe, cuDNN, предназначенные для работы с графическими ускорителями NVIDIA. Сравнивается работа ускорителей, Tesla X и [наш], на серверах mvr.jmlda.org и Amazon S3.

Matlab Parallel Computing Toolbox

Запуск функций CUDA в Matlab

Parallel Computing Toolbox в Matlab предоставляет фреймворк для вычислений на GPU.

Для того, чтобы разместить структуру данных Matlab (массив или матрицу численного типа) в памяти GPU, используется функция gpuArray(). Вызов этой функции создает объект Matlab в памяти GPU:

N = 6;
M = magic(N);
G = gpuArray(M);

Для того, чтобы вернуть массив из памяти GPU в Matlab workspace, используется функция gather():

G = gpuArray(ones(100,'uint32'));
D = gather(G);

Для работы со структурами данных gpuArray в Matlab предусмотрено несколько вариантов. Одним из вариантов (наиболее низкоуровневом) является запуск предварительно скомпилированной функции ядра CUDA с расширением .cu. Для запуска функции в Matlab необходимо создать объект CUDAKernel и выполнить следующую последовательность действий:

1. Скомпилировать файл с расширением .ptx для функции ядра myfun.cu с помощью, например, компилятора nvcc в NVIDIA CUDA Toolkit:

nvcc -ptx myfun.cu

2. Создать объект CUDAKernel с аргументами .ptx, .cu:

k = parallel.gpu.CUDAKernel('myfun.ptx','myfun.cu');

3. Присвоить объекту CUDAKernel параметры, необходимые для выполнения на GPU:

k.GridSize = [8 1];
k.ThreadBlockSize = [16 1];

4. Вызвать функцию feval для выполнения CUDAKernel:

g1 = gpuArray(in1); % Input gpuArray.
g2 = gpuArray(in2); % Input gpuArray.
 
result = feval(k,g1,g2);
Личные инструменты