Математическое и компьютерное

Вот неко­то­рые дума­ют, что если вычис­ле­ния пере­не­сти на ГПУ вме­сто ЦПУ, то:

1. Всё сра­зу зара­бо­та­ет в сто раз быст­рее.
2. Будет сра­зу рабо­тать луч­ше.

Авот­шЫш. Не все­гда, и не вез­де.

Вот сде­лал я ней­ро­сеть, модель оди­на­ко­вая, доволь­но неслож­ная, пяти­слой­ная, сто ней­ро­нов в каж­дом слое, ито­го 50 тысяч пара­мет­ров — по нынеш­ним мер­кам вооб­ще три копей­ки.

Запус­каю на ЦПУ — сеть тре­ни­ру­ет­ся за три мину­ты, и выда­ёт доволь­но нор­маль­ный резуль­тат, с точ­но­стью в пре­де­лах 0.7%

Запус­каю на ГПУ — сеть тре­ни­ру­ет­ся уже за пять минут, а не за три, а резуль­тат у ней — замет­но хре­но­вей, с погреш­но­стью уже 1.23%

Я пола­гаю, что послед­нее это пото­му, что TensorFlow, будучи запу­щен­ным на ГПУ, по умол­ча­нию до сих пор исполь­зу­ет 16 бит для пред­став­ле­ния чисел с пла­ва­ю­щей запя­той, вме­сто 32 бит или даже 64. Надо будет погля­деть, мож­но ли его заста­вить исполь­зо­вать боль­ше бит. Хотя, конеч­но, мате­ма­ти­ка на ком­пью­те­рах — она дело такое, что вооб­ще-то никто гаран­тии, что резуль­тат вычис­ле­ний будет оди­на­ко­вым, если про­грам­ма запус­ка­ет­ся на про­цес­со­рах раз­ной архи­тек­ту­ры, нико­гда не давал. Осо­бен­но, если чис­ла такие, что пред­ста­вить их точ­но в фор­ма­те IEEE-754 невоз­мож­но (напри­мер, деся­тич­ная дробь 0.2).

А вот поче­му оно ничуть не быст­рее рабо­та­ет на ГПУ, чем на ЦПУ — для меня уже загад­ка. RTX3080 вро­де как пошЫр­ше дол­жен быть во флоп­сах, чем i9-11900k @ 3.5GHz. Может быть, такая малень­кая модель его про­сто нагру­зить тол­ком не в состо­я­нии.

И да, «что­бы два раза не вста­вать».

Как наи­бо­лее пра­виль­но счи­тать и пред­став­лять сред­нюю ошиб­ку в вычис­ле­ни­ях?

Вот, напри­мер, если в одном пред­ска­за­нии из двух про­грам­ма ошиб­лась на +100%, а во вто­ром — на ‑100%, вряд­ли заяв­ле­ние о том, что сред­няя ошиб­ка состав­ля­ет 0% (100−100)÷2, будет пред­став­лять­ся нам истин­ным.
Но с дру­гой сто­ро­ны, если тупо счи­тать ошиб­ки по моду­лю, а про­грам­ма при этом ста­биль­но оши­ба­ет­ся то на +1%, то на ‑1%, ста­ти­сти­че­ски-то ведь она, мож­но ска­зать, что не оши­ба­ет­ся вовсе.
Как обыч­но дей­ству­ют, вдруг кто зна­ет?