ConvNetJS — это библиотека на JavaScript для построения и обучения сверточных нейронных сетей. Она предоставляет возможность работы как на CPU, так и с аппаратным ускорением через WebGL, что значительно повышает производительность при обработке больших объемов данных и сложных сетевых архитектур.
WebGL в ConvNetJS активируется путем инициализации
convnetjs.Vol с флагом use_gpu. Важно
убедиться, что браузер поддерживает WebGL и что видеокарта способна
работать с необходимыми текстурами.
var convnetjs = require('convnetjs');
var opts = { gpu: true }; // Включение режима GPU
var layer_defs = [
{type:'input', out_sx:28, out_sy:28, out_depth:1},
{type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'},
{type:'pool', sx:2, stride:2},
{type:'softmax', num_classes:10}
];
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
Флаг gpu: true заставляет библиотеку использовать WebGL
для всех операций над тензорами, включая свертки, пулинги и матричные
умножения. ConvNetJS автоматически создает GPU-буферы для хранения
данных каждого слоя.
Хранение данных в виде текстур: Каждый объем
данных (Vol) на GPU представлен текстурой WebGL. Это
позволяет выполнять операции параллельно, используя фрагментные
шейдеры.
Минимизация копирования между CPU и GPU:
Передача данных между памятью процессора и видеокарты дорогая по
времени. ConvNetJS старается минимизировать это, используя GPU-только
операции. Например, при обучении через Trainer веса
обновляются на GPU без возврата в CPU до завершения итерации.
Параллельные свертки: Сверточные слои на WebGL выполняются с использованием шейдеров, которые обрабатывают все фильтры одновременно. Это критически ускоряет вычисление больших сетей, особенно с фильтрами высокой размерности и большим количеством каналов.
Trainer
на GPUTrainer в ConvNetJS поддерживает обучение на GPU, используя стандартные алгоритмы стохастического градиентного спуска (SGD) и его модификации, включая momentum и RMSProp.
var trainer = new convnetjs.Trainer(net, {
method: 'adadelta',
batch_size: 64,
l2_decay: 0.001,
momentum: 0.9
});
var x = new convnetjs.Vol(28, 28, 1); // Пример входного объема
var y = 3; // Метка класса
trainer.train(x, y);
При включенном GPU весь процесс обучения происходит на видеокарте.
Trainer автоматически использует GPU-оптимизированные
функции для вычисления градиентов, обновления весов и расчета
потерь.
ConvNetJS предоставляет объект convnetjs.gpu, содержащий
функции низкого уровня для работы с GPU-тензорами, включая:
convnetjs.gpu.clone(vol) — клонирование объема на
GPUconvnetjs.gpu.add(vol1, vol2) — поэлементное
сложениеconvnetjs.gpu.mul(vol1, scalar) — умножение на
скалярИспользование этих функций позволяет создавать кастомные слои или операции, полностью выполняемые на видеокарте, без переключений на CPU.
gpu: true практически всегда ускоряет обучение.Vol через vol.delete() или
gpu.free(vol).WebGL в ConvNetJS представляет собой мощный инструмент для ускорения нейросетевых вычислений в браузере. Грамотное использование GPU-режима позволяет обрабатывать большие объемы данных и строить сложные сверточные сети с минимальными задержками.