Pull to refresh

Comments 5

В этой задаче обучение на GPU давало результат сильно хуже, чем на CPU.
Извините за нубский вопрос, но почему так происходит? Какая разница между вычислениями на GPU и CPU, кроме скорости? Округления?
Вот описание всех параметров катбуста. В правой колонке указано, применим ли параметр только к
CPU, только к GPU или к обоим. Можно быстро прогартать и посмотреть, что достаточно много параметров применимы только к CPU.
В нашем случае я настраивал random_strength и model_size_reg, которые можно настраивать только для CPU. Но на самом деле даже при одинаковых параметрах девайсы ведут себя по разному. Дело в том, что все численные признаки, в том числе полученные из категориальных, катбуст бинаризует на разное количество bin-ов.
Параметр border_count:
CPU — от 1 до 65535 бинов. 254 по умолчанию.
GPU — от 1 до 255 бинов. 128 по умолчанию.

И я думаю, что есть ещё какие-то нюансы, которые я не учёл.
Я не настоящий сварщик, но вроде бы так — в GPU изначально продвинутое произведение матриц (это требуется игровым движкам).

Все задачи из ML и NN — чаще всего можно и нужно векторизировать — то есть вместо циклов делать умножение матриц. Поэтому и так востребованы именно GPU вычисления.

Я могу быть неправ (!), учтите это (-:

В первом приближении -это так.


Плюс GPU часто дает чуть-чуть другой результат для тех же входных данных.

CPU — последовательная обработка данных
GPU- параллельная обработка данных
Так как обучение — это подгонка результата под некоторый критерий, то разница в обучении на CPU и GPU возможна из-за разной эффективности такой подгонки, т е либо худшего алгоритма, либо более низкой производительности или точности вычислений.

Sign up to leave a comment.