215 похожих чатов

Ребята, я тут начал профилировать свой код, и столкнулся с

некоторой непонятной мне особенностью. Есть две строки кода:

> predicted_values = self.class_model(**model_args)
> predicted_values = predicted_values.cpu().numpy().tolist()

Первая делает непосредственно прогон модели, а вторая берёт результат с предыдущего шага и просто перегоняет его в системную память в виде питоновского списка. Перегоняет он немного, там всего лишь батч из 128 семплов по одному флоту на каждый семпл (бинарная классификация).

Однако в ходе профилирования открылось следущее:
Первая строка отнимает всего 5% затраченного скриптом времени, тогда как вторая = 25%. В первом шаге по детализации видны вызовы pytorch, вторая строка не выдаёт вообще никакой детализации по вызовам.

Вопрос - как простой перегон небольшого вектора из ГПУ в ОЗУ занимает больше времени чем вычисления в модели?

У меня есть предположение что там под капотом pytorch идут какие-то отложенные вычисления, но я хз что и в каких количествах нужно перелопатить, чтоб найти подтверждения этого в какой-то документации.

1 ответов

33 просмотра

Так это же известная проблема. Передача данных от ГПУ к ЦПУ и обратно - бутылочное горлышко. По этому все пытаются свести обмен к минимуму. Считать как можно больше на ГПУ и один раз вернуть ответ

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта