ООО «ПАВЛИН ТЕХНОЛОГИИ» www.pawlin.ru NNGPULIB™ 1.0 Программный модуль ускорения расчета выхода многослойных нейронных сетей прямого распространения сигнала с применением графического процессора. (С) ООО «ПАВЛИН ТЕХНОЛОГИИ», 2005-2006 г. Москва 2006 СОДЕРЖАНИЕ 1. ПРАВОВАЯ ИНФОРМАЦИЯ ........................................................................................................ 3 1.1. ИНФОРМАЦИЯ О ПРАВООБЛАДАТЕЛЕ ................................................................................................. 3 1.2. ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ. ................................................................................................... 3 2. НАЗНАЧЕНИЕ СИСТЕМЫ ........................................................................................................... 4 2.1. ОСНОВНОЕ ПРИМЕНЕНИЕ. .................................................................................................................. 4 2.2. О ГРАФИЧЕСКИХ ПРОЦЕССОРАХ. ........................................................................................................ 5 3. СИСТЕМНЫЕ ТРЕБОВАНИЯ ...................................................................................................... 6 3.1. АППАРАТНЫЕ ТРЕБОВАНИЯ ................................................................................................................ 6 3.2. ПРОГРАММНЫЕ ТРЕБОВАНИЯ ............................................................................................................. 6 4. ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ ................................................................................. 7 4.1. ОРГАНИЗАЦИЯ ПРОГРАММНОГО МОДУЛЯ NNGPULIB 1.0 И ОГРАНИЧЕНИЯ ............................. 7 4.2. ОПИСАНИЕ ОСНОВНЫХ PUBLIC-МЕТОДОВ КЛАССА NEURALNETGPU ....................................... 7 4.2.1. Конструктор класса ................................................................................................................. 7 4.2.2. Деструктор класса ................................................................................................................... 8 4.2.3. Инициализация весов сети случайными значениями.............................................................. 8 4.2.4. Загрузка входных векторов сети ............................................................................................. 8 4.2.5. Загрузка весовых коэффициентов сети.................................................................................. 8 4.2.6. Нейросетевая обработка ........................................................................................................ 9 4.2.7. Вспомогательные методы ....................................................................................................... 9 4.3. ЗАМЕЧАНИЯ О РЕАЛИЗАЦИИ........................................................................................................ 9 4.4. ИЗВЕСТНЫЕ НЕДОСТАТКИ (KNOWN ISSUES) ................................................................................ 9 5. РЕЗУЛЬТАТЫ ТЕСТОВ НА ПРОИЗВОДИТЕЛЬНОСТЬ И ТОЧНОСТЬ ВЫЧИСЛЕНИЙ.........................................................................................................................................10 5.1. РЕЗУЛЬТАТЫ ИСПЫТАНИЙ НА ПРОИЗВОДИТЕЛЬНОСТЬ ..............................................................10 5.1.1. … для сети «4 входа, N нейронов скрытого слоя, 4 выхода» ..........................................11 5.1.2. … для сети «128 входов, N нейронов скрытого слоя, 4 выхода» ....................................11 5.1.3. … для сети «4 входа, N нейронов скрытого слоя, 128 выходов» ....................................12 5.1.4. … для сети «128 входов, N нейронов скрытого слоя, 128 выходов» ...............................12 5.1.5. … для сети «1020 входов, N нейронов скрытого слоя, 1020 выходов» ...........................13 5.1.6. … для трехслойной сети, с конфигурацией «1020 входов, N нейронов 1-ого скрытого слоя, 1020 нейронов второго скрытого слоя, 1020 выходов» ........................................................13 5.1.7. Выводы по испытаниям ......................................................................................................14 5.2. ИСПЫТАНИЯ НА ТОЧНОСТЬ ВЫЧИСЛЕНИЙ .................................................................................14 6. ИСПОЛЬЗОВАНИЕ NNGPULIB 1.0 ............................................................................................14 6.1. ПРОЦЕДУРА РАЗВЕРТЫВАНИЯ ПРОЕКТА ТЕСТОВОЙ ПРОГРАММЫ .....................................................14 6.1.1. Драйвер расширений OpenGL .................................................................................................15 6.1.3. Библиотека языка Cg ..............................................................................................................15 6.2. АНАЛИЗ РЕЗУЛЬТАТОВ РАБОТЫ ТЕСТОВОЙ ПРОГРАММЫ ..................................................................15 7. ПЕРСПЕКТИВЫ РАЗВИТИЯ .......................................................................................................16 8. СОПУТСТВУЮЩИЕ УСЛУГИ ...................................................................................................16 1. Правовая информация 1.1. Информация о правообладателе Все исключительные авторские и имущественные права на данные разработки принадлежат компании ООО «ПАВЛИН ТЕХНО», юрид. адрес. г. Дубна, Московской обл., ул. Ленина-13/11. Использование настоящей документации, исполняемых кодов и исходных текстов программы в любых целях возможно только при наличии соответствующего лицензионного соглашения с компанией «Павлин Технологии». Все вопросы об использовании программного модуля NNGPULIB 1.0 можно задавать по тел. +74957908117, а также e-mail: [email protected] 1.2. Ограничение ответственности. Данный модуль был протестирован компанией «Павлин Техно», и предполагается его стабильная работа в рамках заявленных показателей при соблюдении указанных требований к системному ПО и аппаратному обеспечению. Однако лицензия на использование данного модуля не предусматривает каких-либо формальных гарантий по работоспособности модуля и не предусматривает ответственности за возможный нанесенный прямой или косвенный материальный или иной ущерб. В любом случае ответственность компании «Павлин Техно» перед физическим или юридическим лицом не может превышать стоимости, уплаченной данным физическим или юридическим лицом за приобретение не эксклюзивных прав на использование данного модуля. 2. Назначение системы 2.1. Основное применение. Модуль NNGPULIB 1.0 предназначен для ускорения алгоритма прямого прохождения сигнала нейронной сети прямого распространения (MLP, Multi Layer Perceptron). Типовой сценарий использования модуля выглядит следующим образом: создание объекта «нейронная сеть» заданной конфигурации (число слоев, число входов сети, число нейронов в каждом слое). загрузка весовых коэффициентов нейронной сети (заранее рассчитанных) загрузка массива входных векторов для обработки (чем больше, тем лучше показатели) обработка данных на GPU (одновременно в параллельных потоках можно производить вычисления на CPU) чтение результатов нейросетевой обработки входных векторов использование результатов Вычисление выходного сигнала нейронной сети происходит по следующей формуле: y(x ) yL y i f (Wi y i 1 bi ), i 1..L y0 x f (a1 ) f (a 2 ) 1 f (a ) . , f (a) 1 exp a . . (1), где L – количество слоев сети x - входной вектор сети1 y( x ) yL - вектор выхода последнего слоя сети (выход сети)2 yi - вектор выхода i-ого слоя сети Wi - матрица весовых коэффициентов i-ого слоя сети (каждая строка матрицы – соответствует одному нейрону, каждый столбец – выходу предыдущего слоя) bi - вектор смещений i-ого слоя сети (каждый элемент вектора – соответствует смещению3 соответствующего нейрона) система обрабатывает сразу много таких входных векторов, в данной формуле это не указывается; аналогично выход сети модуля NNGPULIB 1.0 это поток векторов, где каждый элемент потока выходных векторов соответствует элементу потока входных векторов 3 в иностранной литературе этот термин переводится, как bias 1 2 f(a) – сигмоидальная функция активации нейронов сети 2.2. О графических процессорах. Ускорение расчетов в модуле NNGPULIB осуществляется с применением аппаратных вычислительных возможностей графических плат типа NVIDIA 7800 GT/GTX, содержащих в себе до 24 фрагментных процессоров обработки данных с плавающей точкой (вершинные процессоры в данной версии модуля не используются). Процессоры графических плат работают на тактовой частоте около 400 MHz и при предположении о теоретической возможности выполнять одну операцию с плавающей точкой за один такт, графическая плата NVIDIA 7800 GTX имеет максимальную теоретическую производительность порядка 10 GFLOPS. Объединение двух графических карт на одной материнской плате по технологии SLI позволяет увеличить производительность графической подсистемы приблизительно в 1.8 – 1.9 раз, при этом разработчиками технологии SLI утверждается, что драйвер берет все задачи по распараллеливанию вычислений на две платы на себя и модернизации ПО для использования технологии SLI не требуется. Таким образом, пользователи NNGPULIB могут приблизительно вдвое повысить производительность вычислений (по сравнению с заявленными в документации) с применением 2х плат типа NVIDIA 7800 GTX установленных на SLI-compatible материнской плате. При хорошем стечении обстоятельств, графические процессоры позволяют достигнуть 10-20 кратного ускорения вычислений с плавающей точкой, по сравнению вычислениями того же алгоритма на CPU. Стоит отметить, однако, что распараллеливание вычислений не может происходить «само собой» и даже на специально оборудованном аппаратном обеспечении (кластерах) требуется специальная переработка алгоритмов, для обеспечения возможности использовать все ресурсы параллельной вычислительной платформы. Что касается GPU, то здесь ситуация обстоит еще сложнее, так как архитектура GPU не специализирована под параллельные вычисления общего назначения, а весьма «заточена» на графические применения. Таким образом, для распараллеливания алгоритмов с плавающей точкой на GPU их приходится представлять в «графическом базисе», например, массивы становятся текстурами, сложение превращается в наложение текстур, и т.п. Могут возникнуть сомнения в целесообразности подобной, узко специализированной, деятельности. Однако затраты на применение GPU для ускорения вычислений окупаются по следующим соображениям: отношение продуктивность к стоимости у GPU систем на порядок лучше, чем у кластерных, многопроцессорных систем; GPU платы относительно компактны и доступны обычному потребителю (можно пойти и купить в магазине бытовой техники, в отличие от кластера); компания «Павлин Технологии» специально выпускает модуль NNGPULIB для того, чтобы вы могли абстрагироваться от специфики GPU и воспользоваться скоростью вычислений, не заботясь о необходимости изучать тысячи страниц спецификаций для освоения техники распараллеливания вычислений на GPU. 3. Системные требования 3.1. Аппаратные требования Настоящий модуль имеет достаточно низкие аппаратные требования к центральному процессору (CPU) и высокие требования к графическому процессору (Graphics Processing Unit, сокращенно GPU). Улучшение конфигурации центрального процессора слабо сказываются на продуктивности работы модуля NNGPULIB, в то время как улучшение показателей графического процессора (в основном, скорость работы с памятью, скорость обмена данными между GPU и CPU, число и тактовая частота фрагментных процессоров) существенно влияет на показатели производительности. Минимальные аппаратные требования приведены в таблице 3.1. Таблица 3.1. Аппаратные требования Тип ПЭВМ IA-32 compatible Графическая карта NVIDIA 7800 GT/GTX compatible, 256Мб RAM или более Центральный процессор Intel Pentium III compatible и выше Память центрального процессора 128 Мб Мощность блока питания 500W материнской платы 3.2. Программные требования Для работы программного модуля требуется выполнение следующей конфигурации (таблица 3.2). Таблица 3.2. Программные требования ОС Windows 2000/ XP Драйверы OpenGL Драйверы графической карты OpenGL 2.0 Дополнительные DLL - Необходимые поддерживаемые расширения OpenGL 2.0 - - - Соответствующие DLL для поддержки Cg Intel Digital Signal Processing Library – только для замера производительности по сравнению с SSE командами Pentium IV поддержка текстур с размерами не кратными степени 2 (GL_TEXTURE_RECTANGLE_NV) поддержка 4х канальных (RGBA) текстур с представлением данных в формате с плавающей точкой (GL_FLOAT_RGBA32_NV) FrameBufferObject (GL_FRAMEBUFFER_EXT) GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT0_EXT Точность вычислений с плавающей точкой на GPU ARBFP40 fragment program profile FRAGMENT PROGRAM TEXTURE UNITS > 2 32 разряда Рекомендуемое средство разработки ПО – Microsoft Developer Studio .NET 2003 4. Функциональные возможности 4.1. Организация программного модуля NNGPULIB 1.0 и ограничения Программный модуль NNGPULIB организован в виде C++ класса под названием NeuralNetGPU. Его декларация содержится в файле NeuralNetGPU.h, а имплементация в NeuralNetGPU.cpp соответственно. Модуль не использует статических данных, однако используется несколько #define констант: #define MAX_VECTORS 4096 // максимальное число загружаемых входных векторов #define MAX_DIMENSION 1020 //максимальное число нейронов в слое сети Ввиду оптимизации работы системы по скорости, размерность входного вектора сети должна быть кратна 4 и не может превышать MAX_DIMENSION. Для внутренних целей библиотеки используются буферы данных с плавающей точкой. Номера буферов так же определены через символические константы для лучшей читаемости кода. #define #define #define #define #define #define TEMP_WEIGHTS 0 TEMP_BUF1 1 TEMP_BUF2 2 TEMP_INPUTS 3 TEMP_OUTPUTS 4 TEMP_COMPARE 5 Для внутренних целей также определен тип указателя на float. typedef float *floatptr; 4.2. Описание основных public-методов класса NeuralNetGPU Примечание – модификатор virtual опущен. 4.2.1. Конструктор класса NeuralNetGPU(int inputdimension, int layers, int config[]) int inputdimension – размерность входного сигнала сети (должна быть кратна 4), не может превышать 512. int layers – число слоев сети >= 2 int config[] – массив, элементы которого означают число нейронов в каждом слое сети Создает объект типа NeuralNetGPU. В каждый момент времени рекомендуется иметь только один объект данного типа. 4.2.2. Деструктор класса NeuralNetGPU::~NeuralNetGPU(void) Освобождает память, занимаемую в графической плате, а также память, выделенную под временные буферы. 4.2.3. Инициализация весов сети случайными значениями void initRandomWeights(); В настоящий момент этот метод используется исключительно для средств измерения производительности. В будущих версиях предполагается, что данный метод будет задавать начальные значения весовых коэффициентов перед запуском алгоритма обучения сети. 4.2.4. Загрузка входных векторов сети void uploadInputVectors(int vectors, float *sourcedata) int vectors – количество загружаемых векторов float *sourcedata – указатель на массив данных, откуда будут загружаться входные вектора В памяти входные вектора представлены n отрезками по m чисел с плавающей точкой, где m – входная размерность сети, n = vectors. То есть сначала индексируются элементы векторов, затем уже сами вектора. 4.2.5. Загрузка весовых коэффициентов сети Загрузка весовых коэффициентов осуществляется путем вызова одного из следующих методов: void uploadLayerWeights(int layer, float *layerweights) void uploadLayerBiases(int layer, float *biases) либо void uploadAllWeights(float *source) Первые два метода загружают весовые коэффициенты (множительные веса – Weights, смещения – Biases) для каждого нейрона заданного параметром layer слоя сети. Последний метод загружает сразу все весовые коэффициенты сети. Последний метод, предполагает, что в памяти весовые коэффициенты хранятся в такой последовательности. Вначале хранятся все смещения для всех нейронов всех весов. Затем хранятся множительные коэффициенты каждого входа каждого нейрона каждого слоя сети. Для более четкого представления о работе этих методов следует обратиться к их исходному тексту, он является их самым лучшим описанием. 4.2.6. Нейросетевая обработка void processforwardGPU(int vectors) int vectors – количество обрабатываемых входных векторов Данный метод вызывает собственно процесс обработки входных векторов нейронной сети. Выходной сигнал нейронной сети хранится в памяти графической платы. Для извлечения результирующих данных необходимо воспользоваться методом void readback(float *target, int vectors_amount), где float *target – указатель на место в памяти, куда выгружать результаты int vectors_amount – количество выгружаемых векторов (должно быть равно или меньше числу обрабатываемых векторов) 4.2.7. Вспомогательные методы Данный класс также содержит ряд вспомогательных методов, смысл которых следует из их названия. Наилучшим описанием этих методов является их исходный код, находящийся в файле NeuralNetGPU.cpp int checkconfig(); int requiredFLOPS(); int getMaximumDimension(); 4.3. Замечания о реализации Класс NeuralNetGPU так же имеет скрытую (protected) функциональность, связанную с непосредственной реализацией алгоритма преобразования нейросетевых вычислений в базис графического процессора (образно говоря). В protected-методах класса содержится функциональность по инициализации и остановке большого количества функций графической платы, методы загрузкивыгрузки данных из текстур, и т.п. Воспользоваться напрямую или изменить эту функциональность можно путем наследования от класса NeuralNetGPU и переопределения соответствующих методов, а также написания следующих. Планируется, что следующие версии модуля NNGPULIB будут также выполнены как наследники базового класса NeuralNetGPU. 4.4. Известные недостатки (known issues) К известным недостаткам системы, которые планируется разрешить в следующих версиях модуля можно отнести следующее: низкие показатели продуктивности на малых сетях и в задачах с малым числом обрабатываемых входных векторов, в таком случае продуктивность сравнима с работой центрального процессора. Стоит отметить, однако, что, как правило, задача ускорения нейросетевых алгоритмов актуальна для больших сетей и для больших объемов обрабатываемых данных. ограничения по размерности входного сигнала и количества нейронов в каждом слое (кратность 4 и ограничение сверху, не более 1020). Для приложений, где, например, требуется только один вход или только один выход, необходимо все равно создавать сеть с 4 входами и 4 выходами, и в таком случае, модуль будет выполнять лишние операции. Однако замеры производительности показывают, что при достаточно большом числе нейронов в скрытых слоях и большом объеме обрабатываемых данных, все равно получается выигрыш в производительности по сравнению с CPU. Если для ваших проектов эти проблемы критичны, компания «Павлин Технологии» может помочь вам в их решении (см. раздел 8). 5. Результаты тестов на производительность и точность вычислений Производительность вычислений измеряется в GFLOPs (миллиардов операций с плавающей точкой). При этом операции типа регистр-регистр, загрузка из памяти и в память, также считаются наравне с математическими операциями, так как они тоже требуют соответствующее число команд процессора. В классе NeuralNetGPU определен метод для вычисления требуемого количества операций с плавающей точкой int requiredFLOPS(). При необходимости его можно переопределить. Методика замера производительности заключалась в следующем: создается набор случайных весовых коэффициентов создается набор из М случайных входных векторов путем вызова метода NeuralNetGPU:: compare() производится расчет выхода сети заданной структуры, и замер времени (с механизмом повторения расчетов и усреднения) время вычислений делится на количество требуемых операций и получается производительность в GFLOPs 5.1. Результаты испытаний на производительность Далее в графическом виде представлены диаграммы зависимости коэффициента ускорения вычислений на GPU по сравнению c вычислениями на CPU. 5.1.1. … для сети «4 входа, N нейронов скрытого слоя, 4 выхода» 9 8 7 6 5 4 3073 2 2305 7-8 6-7 5-6 4-5 1-2 0-1 1 1537 644 516 388 260 132 4 1 900 0 769 772 количество обрабатываемых векторов 8-9 3-4 2-3 3 3841 ускорение нейроны скрытого слоя 5.1.2. … для сети «128 входов, N нейронов скрытого слоя, 4 выхода» 8 7 6 5 4 3841 3073 2305 900 772 644 516 388 260 132 1 нейроны скрытого слоя 5-6 4-5 3-4 2-3 2 1-2 0-1 0 769 4 количество обрабатываемых векторов 7-8 6-7 3 1 1537 ускорение 5.1.3. … для сети «4 входа, N нейронов скрытого слоя, 128 выходов» 8 ускорение 7 6 5 4 2305 3-4 2-3 2 1-2 0-1 1 1537 644 516 388 260 132 4 1 900 0 769 772 количество обрабатываемых векторов 5-6 4-5 3 3841 3073 7-8 6-7 нейроны скрытого слоя 5.1.4. … для сети «128 входов, N нейронов скрытого слоя, 128 выходов» 14 ускорение 12 10 8 6 3841 4 3073 2 2305 1537 900 644 516 388 260 132 1 772 0 769 4 количество обрабатываемых векторов нейроны скрытого слоя 12-14 10-12 8-10 6-8 4-6 2-4 0-2 5.1.5. … для сети «1020 входов, N нейронов скрытого слоя, 1020 выходов» 14 ускорение 12 10 8 6 3841 1537 644 516 388 260 132 4 1 900 0 769 772 количество обрабатываемых векторов 0-2 2 2305 8-10 6-8 4-6 2-4 4 3073 12-14 10-12 нейроны скрытого слоя 5.1.6. … для трехслойной сети, с конфигурацией «1020 входов, N нейронов 1-ого скрытого слоя, 1020 нейронов второго скрытого слоя, 1020 выходов» 14 ускорение 12 10 8 6 3841 4 3073 2 2305 1537 900 644 516 388 260 132 1 772 0 769 4 количество обрабатываемых векторов нейроны скрытого слоя 12-14 10-12 8-10 6-8 4-6 2-4 0-2 5.1.7. Выводы по испытаниям По порядку величины зависимость коэффициента ускорения от параметров сети можно описать так M N MN 4 (2), 100 200 где M – количество обрабатываемых входных векторов, N – минимальная размерность входного сигнала каждого слоя сети. 5.2. Испытания на точность вычислений Вычисления с плавающей точкой на GPU несколько отличаются от вычислений на CPU и не совсем соответствуют стандарту IEEE по операциям с плавающей точкой. Это приводит к накоплению ошибки в вычислениях. При вычислениях выхода маленьких сетей эта ошибка очень мала и составляет менее 0.000010, для больших сетей погрешность вычислений накапливается и доходит до 0.000020. Для проверки точности вычислений можно использовать метод compare(). При превышении размерности входного сигнала слоя сети 1020, погрешность в вычислениях резко увеличивается (до 1%), с этим и связано текущее ограничение на максимальное число нейронов в слое и максимальную размерность входного сигнала. 6. Использование NNGPULIB 1.0 Поставка модуля NNGPULIB 1.0 состоит из проекта для среды разработки Microsoft Developer Studio .NET 2003. Проект представляет собой консольное приложение и имеет функцию main(), носящую демонстративный характер. В качестве примера использования программы служит исходный файл NNGPULIB.cpp, в функции main() которой осуществляется замер скорости работы модуля в различных условиях. 6.1. Процедура развертывания проекта тестовой программы В целом, ваш проект должен быть сконфигурирован для работы с технологией OpenGL 2.0. Поэтому рекомендуем изучить материал по ссылке http://www.opengl.org/resources/faq/getting_started.html В частности, ваш компилятор должен находить свежие (с точки зрения opengl.org) версии файлов: #include <gl/gl.h> #include <gl/glext.h> #include "glut.h" Для использования класса NeuralNetGPU в вашем проекте должны быть следующие файлы NeuralNetGPU.h NeuralNetGPU.cpp glut32.lib – библиотека GLUT (http://www.opengl.org/resources/libraries/glut.html) 6.1.1. Драйвер расширений OpenGL Убедитесь, что на вашем компьютере установлена графическая карта и ее драйвер, поддерживающий OpenGL2.0. Проверить возможности поддержки расширений OpenGL вашей картой (и драйвером) помогает утилита под названием OpenGL Extensions Viewer, http://www.realtech-vr.com/glview/ Для запуска NNGPULIB требуется файл OglExt.dll не считая основных библиотек OpenGL 2.0, которые устанавливаются в системе при установке графической карты. OglExt.lib – статическая библиотека расширений OpenGL OglExt.dll – динамическая библиотека расширений OpenGL http://www.julius.caesar.de/oglext/ 6.1.3. Библиотека языка Cg Для кодирования фрагментных процессоров графической карты используется язык Cg, который необходимо установить с сайта компании NVIDIA www.nvidia.com/cg В среде разработки потребуется прописать путь к include-файлу #include <cg/cgGL.h> А также потребуется подключить библиотеки cg.lib, cggl.lib (находятся в поставке Cg) 6.2. Анализ результатов работы тестовой программы Рассмотрим простое приложение типа «hello, world»: #include ".\NeuralNetGPU.h" void main() { int config[2] = {512,512}; NeuralNetGPU network(1020,2, config); network.compare(1024,5); } На выходе данной программы можно получить время расчета прогона 1024 входных векторов размерности 1020 через двухслойную сеть по 512 нейронов в каждом слое (значит, выход сети имеет размерность 512). Сеть инициализируется случайными весовыми коэффициентами. Вычисления будут повторяться по 5 раз для усреднения показателей. Время расчета (с учетом повторений вычислений 5 раз) выдается для CPU, затем для GPU. В обоих случаях считается достигаемая производительность в GFLOPS, а также максимальное расхождение в выходных векторах между CPU и GPU. Пример кода для загрузки данных в сеть и чтения результатов обратно может быть получен из метода compare(). 7. Перспективы развития В следующих версиях библиотеки NNGPULIB планируется добавление следующих возможностей: ускоренная настройка коэффициентов нейронной сети алгоритмом обратного распространения ошибки; ускоренная настройка сети другими методами (например, методами второго порядка) функции считывания весовых коэффициентов нейронной сети из памяти графической платы в память материнской платы; использование вершинных процессоров графической платы ускоренная обработка больших сетей (число нейронов в слое > 512) ускоренная обработка малых сетей (число нейронов в слое < 128) использование одновременно GPU & CPU для задействования всех ресурсов процессора другие полезные функции. Пользователи версии 1.0 получают существенную скидку при приобретении следующих версий системы. 8. Сопутствующие услуги Компания «Павлин Технологии» предлагает вашей организации следующие услуги по данному направлению: проведение образовательных семинаров по обучению технологии ускорения вычислений на графических процессорах; выполнение разработок по внедрению модуля NNGPULIB в расчетное ПО; выполнение иных заказных разработок, связанных с ускорением вычислений на графических процессорах, в том числе на графических кластерных системах; тренинги по теории нейронных сетей; выполнение разработок, связанных с нейросетевыми вычислениями. Желаем приятного использования! Искренне ваш, Павел Скрибцов, Генеральный Директор, «ООО ПАВЛИН ТЕХНОЛОГИИ» http://www.pawlin.ru e-mail: [email protected] тел. +7 495 790 8117 факс. +7 495 601 1277