Quantização é o processo de redução da precisão de um sinal digital, geralmente de um formato de maior precisão para um formato de menor precisão. Essa técnica é amplamente utilizada em vários campos, incluindo processamento de sinais, compactação de dados e aprendizado de máquina.
A quantização é uma técnica utilizada em grandes modelos de linguagem (LLMs) para converter pesos e valores de ativação de dados de alta precisão, geralmente de ponto flutuante de 32 bits (FP32) ou ponto flutuante de 16 bits (FP16), em dados de precisão mais baixa, como números inteiros de oito bits (INT8).
Os dados de alta precisão (em relação ao FP32 e FP16) recebem esse nome porque os modelos que usam esses tipos de dados geralmente têm maior precisão. Isso ocorre porque quando os dados são compactados em algo como INT8, eles são “espremidos” em um tamanho menor. Na prática, isso resulta em uma menor precisão, também chamada de erro de quantização. Um valor de ativação é um número (entre zero e um) atribuído ao neurônio artificial da rede neural. Esse número atribuído é chamado de valor de ativação.
A quantização de oito bits geralmente é o objetivo, mas dados quantizados de números inteiros de quatro bits (INT4) e menores já foram alcançados com êxito. Essencialmente, o processo de quantização usa técnicas de compactação em uma rede neural para converter um grande número de bits em um pequeno número de bits. 1
Os requisitos computacionais para operar um LLM usando o FP32 podem ser imensos. Concomitantemente ao aumento dos requisitos computacionais, também pode ocorrer a diminuição da velocidade de inferência (o processo de geração da resposta à consulta do usuário pelo LLM).
A quantização pode ser uma ótima ferramenta de otimização para reduzir a carga computacional e também aumentar a velocidade de inferência do LLM. O processo de quantização gira em torno da premissa de converter os pesos em um tipo de dados de precisão mais baixa, embora o desempenho do modelo permaneça quase idêntico. A conversão dos pesos para um tipo de dados de precisão menor resultará em menos custos computacionais, pois há um número menor de bits a serem processados cada vez que o modelo é executado. Menos bits em processamento também se traduz em mais rapidez no processamento das consultas ao LLM.
Ao utilizar a quantização para converter os tipos de dados de ponto flutuante em números inteiros, é possível aumentar a rapidez na realização dos cálculos. Isso diminui a latência geral do modelo e leva a uma melhoria na velocidade de inferência em relação à precisão. Essa gestão das desvantagens é crucial em qualquer aplicação em tempo real, especialmente quando executada em CPUs móveis. 2
A quantização é crucial ao tentar executar modelos de aprendizado de máquina em dispositivos que não conseguem lidar com requisitos computacionais maiores. Quando a quantização converte a representação de ponto flutuante em número inteiro, ela reduz as demandas computacionais do modelo de aprendizado de máquina. Isso possibilita a utilização desses modelos quantizados em aplicações do mundo real em notebooks, tablets e smartphones. 2
Normalmente, os modelos quantizados têm requisitos computacionais menores. Portanto, a quantização resulta em maior eficiência energética, o que é fundamental para executar esses modelos em notebooks, tablets e telefones celulares. 3
A utilização da quantização permite que os modelos atuais de aprendizado de máquina sejam executados usando operações com números inteiros. Isso torna os modelos quantizados compatíveis com plataformas mais antigas sem suporte a operações de ponto flutuante. Isso também torna esses modelos muito mais acessíveis, possibilitando sua execução em GPUs comuns. 4
Há cerca de 4 bilhões de valores dentro do conjunto de valores possíveis do FP32, variando de -3,4 1038 a 3,4 1038. Com o INT8, por sua vez, temos apenas 256 valores dentro do conjunto de valores possíveis, que vão de -128 a 128.
Devido à quantidade significativamente menor de valores no último conjunto, a multiplicação de matrizes pode ocorrer muito mais rápido. Devido ao imenso custo computacional dos modelos baseados em deep learning, é essencial ter algoritmos precisos e eficientes.
O processo de quantização ocorre primeiro determinando-se a rota ideal da projeção dos valores de ponto flutuante de 32 bits no campo INT8. Para isso, há vários algoritmos para quantizar o modelo. Daremos uma olhada em dois métodos de quantização: quantização máxima absoluta e afim.
Para calcular o mapeamento entre o número de ponto flutuante e seu número INT8 correspondente na quantização máxima absoluta, você deve primeiro dividir pelo valor máximo absoluto do tensor e, em seguida, multiplicar pelo intervalo total do tipo de dados.
Por exemplo, aplicaremos o algoritmo de quantização máxima absoluta ao seguinte vetor [1,6, -0,7, -3,4, 1,7, -2,9, 0,5, 2,3, 6,2]. Você extrai o máximo absoluto dele, que é 6,2 nesse caso. O INT8 tem um intervalo de [-127, 127], então dividimos 127 por 6,2 e obtemos 20,5 para o fator de escala. Portanto, multiplicando o vetor original pelo fator de escala, obtém-se o vetor de dados quantizado [33, -14, -70, 35, -59, 10, 47, 127]. Como esses números são arredondados, ocorre uma certa perda de precisão. 5
Para implementar o algoritmo de quantização afim, definiremos nosso intervalo de valores de ponto flutuante de 32 bits como [a, b]. O algoritmo de quantização afim é o seguinte:
𝑥𝑞 = round ((1/𝑆)𝑥+𝑍)
- 𝑥𝑞 é o valor INT8 quantizado que corresponde ao valor de ponto flutuante de 32 bits x.
- S é um fator de escala FP32 e é um ponto flutuante positivo de 32 bits.
- Z é o ponto zero. Esse será o valor INT8 que corresponde a zero no campo de ponto flutuante de 32 bits.
- round se refere ao arredondamento do valor resultante para o inteiro mais próximo.
Para estabelecer o [min., máx.] dos nossos valores de ponto flutuante de 32 bits, precisamos levar em consideração todos os valores discrepantes. Ignorá-los pode fazer com sejam mapeados como mínimo ou máximo, o que pode distorcer a precisão do modelo quantizado. Para evitar isso, o modelo pode ser quantizado em blocos. Os pesos podem ser divididos em grupos de 64 ou 128. Em seguida, esses grupos são quantizados para levar em conta os valores discrepantes e minimizar o risco de redução da precisão. 6
A quantização pós-treinamento (PTQ) ocorre quando ela é aplicada a um modelo existente. Isso converte o modelo de uma representação de ponto flutuante em um número inteiro de ponto fixo de precisão inferior sem a necessidade de retreinamento. Esse método não exige tantos dados quanto o treinamento consciente de quantização (QAT) e é muito mais rápido.
No entanto, como um modelo já existente está basicamente sendo convertido em um tamanho menor, a quantização pós-treinamento pode levar à queda do desempenho. Um exemplo de quando utilizar a PTQ seria quando você já tem um modelo em funcionamento e deseja aumentar a velocidade e a eficiência. Isso ocorre porque a PTQ ocorre depois que o modelo é treinado (ou seja, um modelo já existente), portanto, não é necessária uma grande quantidade de dados de treinamento para esse processo. 7
O treinamento consciente de quantização incorpora a conversão de peso durante o pré-treinamento ou o ajuste fino do LLM. Isso permite um desempenho melhor, mas exige uma grande quantidade de poder computacional e requer dados de treinamento representativos. No geral, o treinamento consciente de quantização geralmente produz um modelo com maior desempenho, mas é mais caro e exigirá muito mais poder de computação.
Um exemplo de quando usar o QAT seria quando você possui uma quantidade adequada de dados de treinamento e um orçamento maior. Também é bom lembrar que esse processo ocorre durante o estágio de treinamento do modelo; portanto, não faz sentido usar esse método com um modelo já treinado. 7
O objetivo dessas duas técnicas é como a faixa de corte, ou calibração, como é frequentemente chamada, será selecionada. Durante essa quantização dinâmica, a faixa de corte é calculada dinamicamente para cada ativação. Normalmente, esse tipo de técnica de quantização resulta em uma maior precisão.
Como seu nome indica, a quantização estática utiliza uma faixa de corte fixa para todos os inputs. Essa forma de quantização é usada com mais frequência como quantização dinâmica e pode ser muito cara.
Quando os pesos são convertidos durante a quantização, às vezes há uma perda de precisão nos valores quantizados com modelos de aprendizado de máquina quantizados. O tamanho do modelo deve ser levado em consideração, pois ao quantizar LLMs excepcionalmente grandes com inúmeros parâmetros e camadas, há o risco de acúmulo significativo de erros de quantização. 8
O treinamento em escala de modelos de aprendizado de máquina pode ser extremamente caro, especialmente com o treinamento consciente de quantização (QAT). Isso torna a quantização pós-treinamento (PTQ) a melhor escolha do ponto de vista da relação custo-benefício. No entanto, isso limita o modelo em alguns aspectos, pois o QAT normalmente produz um modelo mais preciso. 9
Conheça o IBM® Granite, nossa família de modelos abertos de IA de alto desempenho, confiáveis e personalizados para a empresa e otimizados para escalar suas aplicações de IA. Explore as opções de linguagem, código, séries temporais e proteções.
Saiba como selecionar o modelo de base de IA mais adequado para seu caso de uso.
Mergulhe nos artigos, blogs e tutoriais do IBM Developer para aprofundar seu conhecimento sobre LLMs.
Saiba como incentivar sempre as equipes a melhorar o desempenho do modelo e superar a concorrência utilizando as técnicas e infraestrutura mais recentes de IA.
¹ Dong Liu, Meng Jiang, Kaiser Pister, "LLMEasyQuant - An Easy to Use Toolkit for LLM Quantization", https://arxiv.org/pdf/2406.19657v2.
² Benoit Jacob, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, Dmitry Kalenichenko, "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference", https://arxiv.org/pdf/1712.05877v1.
³ Ravi Kishore Kodali, Yatendra Prasad Upreti, Lakshmi Boppana, "A Quantization Approach for the Reduced Size of Large Language Models", https://ieeexplore.ieee.org/document/10499664.
⁴ Xiao Sun, Naigang Wang, Chia-yu Chen, Jia-min Ni, Ankur Agrawal, Xiaodong Cui, Swagath Venkataramani, Kaoutar El Maghraoui, Vijayalakshmi Srinivasan, "Ultra-Low Precision 4-bit Training of Deep Neural Networks", https://research.ibm.com/publications/ultra-low-precision-4-bit-training-of-deep-neural-networks
⁵ Tim Dettmers, Mike Lewis, Younes Belkada, Luke Zettlemoyer, "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale", https://arxiv.org/pdf/2208.07339
⁶ Amir Gholami, Sehoon Kim, Zhen Dong, Zhewei Yao, Michael W. Mahoney, Kurt Keutzer, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2103.13630
⁷ Hao Wu, Patrick Judd, Xiaojie Zhang, Mikhail Isaev, Paulius Micikevicius, "A Survey of Quantization Methods for Efficient Neural Network Inference", https://arxiv.org/pdf/2004.09602
⁸ Zhuocheng Gong, Jiahao Liu, Jingang Wang, Xunliang Cai, Dongyan Zhao, Rui Yan, "What Makes Quantization for Large Language Models Hard? An Empirical Study from the Lens of Perturbation", https://arxiv.org/pdf/2403.06408v1.
⁹ Sehoon Kim, Coleman Hooper, Amir Gholami, Zhen Dong, Xiuyu Li, Sheng Shen, Michael W. Mahoney, Kurt Keutzer, "SqueezeLLM: Dense-and-Sparse Quantization", https://arxiv.org/pdf/2306.07629v4.
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com, openliberty.io