Использование технологий 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);