a gente sabe que o tamanho dos modelos de Inteligência Artificial afetam muito o desempenho em computadores menores só que tem técnicas pra gente poder reduzir o tamanho desse modelos como vocês podem ver aqui reduzir de 943 m para 471 M E aí você pode pensar Nossa nós perdeu muita qualidade Engano seu nesse vídeo aqui eu vou te mostrar como você consegue fazer isso reduzir o tamanho desse modelo de Inteligência Artificial sem perder tanta qualidade assim e a isso a gente dá o nome de quantização beleza Hoje eu vou te explicar tudo que você precisa saber
sobre quantização vou te mostrar também exemplos aqui na prática então funcionando a quantização aqui na prática só que antes de vir pra prática eu vou precisar de uma pequena paciência sua pra gente poder falar um pouco da teoria para eu poder te apresentar para você poder entender como é possível a gente reduzir o tamanho desse modelo de linguagem tá outros modelos de inteligência artificial em geral mas a gente vai focar bastante em modelo de linguagem como llms slms a gente focar bastante nisso em até 75% que a gente consegue reduzir beleza e sem perder tanta
qualidade assim é basicamente isso que a gente chama de quantização como vocês podem ver aqui eu coloquei essa imagem essa imagem é muito boa para poder representar a quantização é quando você tem aqui um modelo então tá vendo aqui você tem um modelo e esse modelo pesa 487 M você reduz ele para 168 M só que o que que é o melhor da quantização é você não perder tanta qualidade assim e aqui que tá o ouro é aqui que tá o ouro porque você reduz o tamanho e reduzindo o tamanho você também aumenta a eficiência
do modelo só que sem perder tanta qualidade entendeu E claro que a gente não existe almoço grátis né a gente vai perder um pouco de qualidade mas não é tanto assim e eu vou te explicar como que é possível fazer isso Beleza bom antes de começar vamos fazer uma pequena analogia aqui eu vou pegar uma analogia de imagem essa analogia aqui provavelmente vocês vão conseguir e entender muito bem quando a gente tem uma imagem aqui em alta resolução como você podem ver essa aqui da Tartaruga a gente consegue comprimir essa imagem e a imagem comprimida
ela vai ter com certeza perda de qualidade como vocês podem ver aqui ó isso aqui que antes era era fluido né agora esse background aqui esse fundo aqui da Tartaruga Ele ficou todo dividido então a gente pode ver que perdeu a qualidade da imagem bastante tá vendo e aí o que que acontece galera essa compressão da imagem a gente também Tenta fazer isso para quê pros modelos de ência artificial e tem duas técnicas principais para poder comprimir esses modelos de inteligência artificial qual que é a primeira delas é o que a gente chama de pruning
tá bom pruning é basicamente uma poda que você vai fazer no modelo tem dois tipos de pruning que eu vou explicar para vocês basicamente a gente tem o pruning não estruturado e o pruning estruturado tá o pruning não estruturado é quando você tem aqui as conexões na rede neural tá bom E se você não sabe o que que é rede neural aqui no canal na aba ao vivo vivo você vai ter cara uma imersão gratuita que eu fiz falando todos os fundamentos da inteligência artificial para você poder entender uma aula gratuita mesmo vai aqui no
canal na AB ao vivo que tem uma aula lá de 3 horas me explicando todo o fundamento das inteligências artificiais beleza mas você tem aqui várias conexões nessa rede neural né e cada conexão dessa a gente sabe que tem um peso então aqui a gente tem um peso que é o weight beleza em inglês eu vou representar como W Então aqui tem um peso aqui tem um outro peso então vou colocar peso um aqui peso zero aqui a gente tem um outro peso aqui embaixo ó conectando esse aqui que é o peso dois e a
gente tem vários e vários pesos o pruni não estruturado ele não vai mexer na estrutura da nossa rede neural só que ele vai zerar alguns desses pesos por isso você pode ver que tem algumas linhas aqui que tão o quê Tão sublinhadas ou seja ele esse peso aqui é zero então qualquer valor que chegar aqui O resultado vai dar zero então é como se esse essa conexão de dois neurônios artificiais não tivesse ativa entendeu então isso é o que a gente chama de pruning não estruturado ou E no caso aqui a poda não estruturada das
das nossas redes neurais e dessa forma a gente consegue comprimir o tamanho do nosso modelo Por que que a gente consegue comprimir o modelo porque antes e aí só lembrando também essa representação aqui da sedos neurais são representados por matrizes e essas matrizes aqui tem os pesos Então aqui tem o peso um peso peso dois peso TRS e o que que são matrizes Ah não matrizes são nada mais nada menos que tabelas de números então aqui você tem várias e várias tabela de números ó aqui eu tenho vamos supor que eu tenho uma matriz aqui
3 por3 né porque 3 por3 três linhas e aqui três colunas beleza é uma tabela como se fosse uma tabela do Excel que tem vários números e o que que acontece quando você pega e coloca vários pesos como sendo zero então aqui vou colocar esse peso como sendo zero a gente chama isso aqui de e aqui no caso quando a gente tem muitos zeros na verdade né que a gente chama desse nome quando a gente tem muitos e muitos zeros a gente chama de uma matriz esparsa é uma matriz que tem muitos e muitos zeros
entendeu e cara matrizes espaços para cálculos em gpus por exemplo em placas de vídeo que é o que acontece por exemplo aqui no caso das redes neurais perde muito a eficiência entendeu E por isso a gente não tem tanta não tem tanta e é vantagem assim em utilizar a poda não estruturar Não que seja ruim não que seja ruim muito pelo contrário é muito boa técnica só que acaba tornando Nossa Matriz esparsas então não existe almoço gratos a gente ganha em algo e perde em outro beleza Isso é o que a gente chama de no
caso aqui poda não estruturada e a gente tem também a poda estruturada onde a gente vai mexer na estrutura da nossa rede neural então ao invés de zerar aqui os pesos a gente vai cortar alguns neurônios da nossa rede neural então por exemplo antes esse cara aqui se conectava com com esse cara esse cara se conectava com esse cara esse cara que também foi eh tirado fora conectava com esse cara então todo todas essas conexões aqui querendo ou não acabaram saindo fora mas por quê Porque a gente dii diminuiu o número de neurônios artificiais na
nossa rede neural entendeu E isso a gente chama de poda estruturada e querendo ou não também vai comprimir aqui é o nosso o nosso o nosso modelo beleza e aí qual que é a desvantagem disso ah não de fazer a poda estruturada a desvantagem é que o seu modelo vai ter menos neurônios vai ter menos parâmetros e tendo menos parâmetros ele vai ficar eu não vou falar e mais burro mas ele não vai ter ele não vai conseguir capturar todas as nuances que por exemplo o modelo com mais parâmetros conseguiria capturar entendeu então é basicamente
isso que acontece quando a gente tem aqui eh essa poda estruturada Beleza então Essa é uma das técnicas que a gente tem hoje de melhores técnicas para poder fazer compressão de modelo de para você poder de fato reduzir o tamanho ali do modelo né porque bom se a gente tem aqui e na verdade nesse caso aqui não vai reduzir tanto o tamanho assim né porque a gente vai ter o peso igual a zero nesse caso mas a gente continua armazenando zero que er endon não na nossa memória né mas a gente tem aqui por exemplo
nesse caso a gente reduz bastante o tamanho do nosso modelo porque a gente tá tirando esses neurônios de fora e cortando todos esses pesos que estariam aqui entendeu então querendo ou não nesse caso aqui a gente é reduz bastante bante o peso do modelo e além também desse método de poda para poder comprimir modelos de a a gente tem o que a gente chama de destilação de conhecimento tá é um outro método que a gente tem para poder de fato comprimir modelos de ar que a gente chama de destilação de conhecimento e o que que
ele faz cara essa técnica aqui é muito boa e eu gosto eu gostei bastante eu eu fiquei bastante impressionado com essa técnica quando eu vi é porque o que que eles fizeram basicamente eles pegaram um modelo chamado modelo estudante e o modelo professor e esse modelo estudante é o nosso modelo com menos parâmetros o nosso modelo mais leve e ai ele vai pegar por exemplo um modelo muito pesado Vamos pensar aí o GPT então ele pega o GPT 4 ou Cloud mesmo e ele faz perguntas aqui pro GPT e ele vai pegar a resposta desse
GPT beleza e ele vai fazer a mesma pergunta aqui pro nosso modelo menor e ele vai treinar esse modelo menor para responder a mesma coisa que o modelo Professor respondeu entendeu Então ele faz essa destilação de conhecimento pro nosso modelo menor aqui que é o nosso modelo estudante poder aprender e esse modelo estudante ele tem uma estrutura Bem Mais Simples ele tem uma estrutura quantizada que a gente vai falar um pouco mais sobre isso e ele tem no caso aqui a mesma estrutura e a mesma estrutura e você pode pensar o seguinte Ah que que
aqui tá falando que tem uma uma estrutura simplificada aqui uma estrutura quantizada a mesma estrutura ou uma estrutura menor porque é os vários tipos de que você pode tornar o modelo professor e o modelo estudante entendeu então você pode construir uma arquitetura mais simples por exemplo tirando aqui fazendo algumas podas na na arquitetura do modelo Professor você pode fazer outra coisa que é no caso a estrutura só que quantizada então você vai manter todos esses caros aqui só que você vai quantizar esses parâmetros e a gente vai ver exatamente o que que significa isso tá
E então você vai meio que reduzir o tamanho que cada parâmetro desse armazena na nossa memória Então se por exemplo cada parâmetro aqui consome e aqui eu vou colocar 4 bytes de memória você pode fazer com que esses caras eh gastem por exemplo um byte entendeu para poder armazenar ali o valor na nossa memória Então já reduz quatro vezes isso é uma estrutura quantizada você pode manter a mesma estrutura tá nesse caso aqui ou você pode colocar uma estrutura menor que é otimizada e condensada Beleza então o foco é esse modelo estudante ele vai ser
menor entendeu E ele vai ser treinado no output do modelo professor é basicamente isso que a gente chama de compressão essas duas técnicas aqui são o que a gente chama de State of the art né são as melhores técnicas que a gente tem hoje para poder fazer a compressão de modelo de A então é basicamente isso que eu queria que você soubessem e e tem uma coisa muito importante agora pra gente poder falar que é sobre cara sobre quantização de Fato né O que que é a quantização aqui eu te dei o background de compressão
as técnicas de compressão de modelo Como que você consegue comprimir modelo de a Só que nesse caso a gente vai falar da quantização em si e olha só lembra desses neurônios aqui todos esses neurônios aqui a gente consegue representar ele meio que dando um zoom dessa forma Então esse neurônio ele vai receber os inputs ou seja as entradas do neurônio cada conexão vai ter o seu próprio peso então lembra ali do W do weight do peso então aqui eu tenho peso um peso 2 tem aqui o peso 3 e todos esses caras vão ser multiplicados
ou seja vou fazer o seguinte X1 x W1 + X2 x W2 + X3 x W3 mas o que a gente chama de nesse caso aqui é o nosso viés o Bias por isso é representado pela letra b então aqui ó Bias é o nosso viés tá bom que a gente chama esse cara que é na matemática a gente chama também isso aqui de o nosso é o nosso coeficiente linear Tá bom então a gente tem por exemplo uma função Ax + B aí se você não lembra das aulas de matemática do Seu ensino médio
pode ficar bem tranquilo tá a gente tem aqui o nosso coeficiente angular que vai controlar por exemplo aqui qual que é a inclinação da nossa reta e a gente tem o nosso coeficiente angular que por exemplo mantendo a mesma inclinação a gente consegue subir esse cara no gráfico ou descer esse cara no gráfico que é justamente o que esse cara aqui controla então a gente chama ele aqui no no campo de machine learning de viés Beleza então a gente vai fazer o seguinte cara a gente vai receber esses essas entradas aqui e por exemplo quais
são as entradas desse cara a saída desse cara a saída desse cara e a saída desse cara entendeu são as entradas são o X1 o X2 e o X3 que tá entrando nesse cara aqui beleza e aí você vai ter os pesos Então essa conexão aqui ela tem um peso deixa eu até colocar de outra cor essa conexão tem um peso essa conexão tem um outro peso então W1 W2 e essa conexão aqui tem um outro peso que eu vou chamar de W3 entendeu então ele vai fazer a multiplicação desses caras com as respectivas entradas
vai somar tudo incluindo viés e é basicamente o que a gente chama aqui do nosso output então cada neurônio artificial nada mais é do que uma função matemática entendeu só que geralmente o que que acontece a gente pega esse cara que é esse resultado todo e joga ele dentro de uma função que a gente chama de função sigmoide tá E essa função sigmoide ela tem essa cara aqui essa cara aqui ela começa aqui Opa deixa colocar aqui de outra cor ela faz isso aqui beleza Opa Deixa eu fazer assim na verdade deixa eu só estender
esse gráfico aqui ela tem esse comportamento ó a nossa função sigmoid por quê Porque ela cruza justamente aqui no 0.5 ela cruza no 0.5 e ela não alcança ela tende mas ela não alcança o um e ela tende mas ela não alcança o zero beleza é o que a gente chama de assíntota horizontal e na matemática mas ela nunca alcança ela sempre vai ficar muito próxima do um mas nunca vai alcançar vai ficar muito próxima do zero mas nunca vai alcançar Beleza então no caso a gente fala que o um é uma assíntota horizontal e
o o zero também é uma assíntota horizontal show de bola Y = 1 e y = 0 isso é termo matemático Vocês não precisam saber só tô explicando para quem de fato quisesse aprofundar um pouco mais tá é mas por que que a gente joga esse cara aqui né porque ele vai retornar pra gente uma probabilidade entendeu ele vai retornar pra gente aqui uma probabilidade geralmente não é essa função sigmod que a gente coloca aqui por exemplo no meio das camadas geralmente a gente coloca uma função que a gente chama de relu essa função aqui
relu qual que é a cara da função relu ano agora eu fiquei curioso PR você poder me falar ou você pode estar pensando Nossa an para de falar de matemática a função relu ela é o seguinte para todo valor abaixo de zero ela também retorna Zero Só que para todo valor que é maior que zero ela retorna O próprio valor então assim ó ela é uma função y tal que se x for menor que zer E aí a gente representa assim né se é aqui no caso zero para todo x que for menor ou igual
a zer e x para todo x maior que 0 ou seja Ah eu joguei aqui por exemplo o output desse cara a multiplicação aqui né desses caras eh que eu vou chamar de y resultado então por exemplo vamos supor aqui que gerou um y no final esse Y eu vou jogar ele aqui dentro da função relu entendeu e se esse Y por exemplo ele for -3 Opa vai me retornar zero porque -3 tá aqui entendeu Então a nossa função relu vai retornar zero ah não mas o y ele deu igual a seete Opa foi maior
que zero se foi maior que zero então ele vai retornar sete pra gente entendeu Essa é uma das funções mais utilizadas quando a gente tá falando aqui é dentro de fato das das redes neurais só que quando a gente quer colocar aqui um output ó então aqui vamos supor que a gente tem um neurônio final e a gente quer retornar uma probabilidade aqui no final Opa a gente joga aqui numa função sigmoide porque ela vai retornar sempre o número entre zero e 1 Beleza então é basicamente isso aqui eu dei uma aprofundada de fato Tá
mas não precisava mas é porque eu quero que vocês entendam o que que acontece aqui nos neurônios show de bola e é muito importante que agora vocês já tenham fixado que os e os neurônios eles têm intrinsecamente os pesos dentro dele Beleza então el tem o W1 tem o W2 tem o W3 e esses pesos eles são quantizados então esses caras aqui que estão nas linhas ó eu vou eu vou simplificar isso porque eu acho que vai dar para entender bastante esses caras que ão nas linhas que são os pesos do modelo eles são quantizados
Então é ele que a gente vai quantizar beleza e aí só a fins exemplares Olha só um modelo com 100 milhões de parâmetros o que hoje não é nada o que hoje é um modelo minúsculo tá é com cada um ocupando 4 by na memória ocupariam um total de 382 MB Então pensa nisso apenas com 100 milhões de parâmetros 100 milhões hoje por exemplo o o GPT 4 o o geminii do Google né o Gemini do Google todos esses modelos tem mais de 1 trilhão de parâmetros mais de 1 trilhão Vocês estão entendendo isso mais
de 1 trilhão de parâmetros e aqui ó 1 trilhão aqui a gente tem 100 milhões 100 milhões se a gente multiplicar por por 10 a gente tem 1 bilhão 10 bilhões e a gente vai ter aqui 100 bilhões olha só a gente tá falando de um aumento de 10.000 vezes o tamanho de um modelo pro outro então aqui você pode multiplicar por 10.000 também na memória entendeu Então olha o tanto que o modelo desse é grande né que ocupa de memória um modelo de 1 trilhão de parâmetros E aí o que que acontece a gente
vai mexer justamente nisso aqui na quantidade de bytes que cada parâmetro vai ocupar na nossa memória Então você tá vendo aqui ó com cada um ocupando quatro byes de memória cada um quem parâmetro e o parâmetro a gente tá falando dos pesos Beleza e como que a gente consegue mexer nisso né primeiro vou ter que explicar um pouco como que é a memória de computador funciona basicamente a sua memória Ela é desse jeito aqui né a sua memória não a memória do seu computador né a nossa memória é o nosso cérebro então aqui a gente
tem por exemplo a memória do nosso computador e cada quadradinho desse aqui ó cada quadradinho desse é o que a gente chama de byte na verdade desculpa é o que a gente chama de bit então tem uma diferença muito grande tem aqui o byte olha só tem o byte e tem o bit E aí tem uma coisa muito importante que é o quê 8 bits 8 bits é igual a 1 byte Beleza então a gente tem essa relação aí 8 bits equivale a 1 byte e vamos supor que a gente tem 8 bits de memória
aqui nessa É nesse slot da nossa memória né pensea que isso aqui cara a sua memória ela tem muito disso aqui tá ela tem muito disso aqui na verdade sua memória é desse jeito ela é uma matriz mas eu vou representar como sendo assim Beleza então ó ela tem muito disso aqui aqui eu vou fazer oito só paraa gente poder representar então 1 eh 2 3 aqui eu tenho 1 2 3 4 5 6 7 8 beleza temos oito Slots aqui ou seja temos oito bits eu vou até colocar aqui ó eh 1 2 na
verdade eu vou começar do zero tá vocês vão entender o porquê 1 2 0 1 2 3 4 5 6 7 então aqui a gente na nossa memória tem oito bits show de bola e cada bit desse bom Ocupa um bit né E como que funciona no nosso computador quando a gente escreve por exemplo número oito ele é colocado em código de máquina também chamado de código binário Beleza o nosso computador utiliza o código binário eh para poder enfim realizar todas as operações dentro dele e aí o binário ele é uma base eh numérica Beleza
então quando a gente tem por exemplo número 11 aqui a gente coloca esse 10 implicitamente a gente tá falando que tá na base decimal que é o que a gente tá acostumado porque o 11 ele ele é 10 na verdade ele é 1 x 10 + 1 entendeu só que aí por exemplo o número 123 na base 10 ele é o quê 1 x 100 + 2 x 10 + 3 Porque aqui fica 100 aqui fica 20 e aqui fica 3 entendeu então isso é a base decimal show de bola só que a gente consegue
simplificar a gente consegue colocar 1 x 10 elev 2 + 2 x elev 1 + 3 x 10 elev 0 lembra que qualquer número diferente de 0 elevado a 0 é 1 show de bola então -1 elevado a 0 1 - 3 elevado a 0 1 10 elevado 0 1 que é basicamente 3 mado por 1 é 3 então 3 m 10 elevado a 0 que é 3 m 1 também vai dar 3 então a gente resume é isso aqui só que quando a gente fala de número binário a gente não tem mais por exemplo
o 2 o 3 por qu na base desse nossos números vão até onde vão até o no Então a gente tem de 0 1 2 3 4 5 6 7 8 9 Esses são os números que a gente tá acostumado por quê Porque a gente naturalmente trabalha com a base decimal e aqui a gente tem quantos números 1 2 3 4 5 6 7 8 9 10 temos 10 números aqui você entenderam onde que eu quero chegar na base binária a gente vai ter só dois números Então a gente vai ter dois números na nossa
representação que vão ser quais vão ser os números zero e o número um com esses dois caras na base binária a gente consegue representar qualquer outro número qualquer outro número a gente consegue representar eu vou mostrar para vocês por exemplo número oito Como que o número oito ele é representado bom na base aqui e binária ele é representado como sendo isso aqui oai ano você tá falando tipo aqui no caso né Desculpa o o8 decim ele é o 1000 da base binária você pode pensar Ah não entendi nada vamos fazer a mesma coisa que a
gente fez aqui olha só 1 x 2 elevado 3 aqui no caso mais 0 x 2 elev 2 + 0 x 2 elev 1 + 0 x 2 elevado 0 Ô olha aqui olha aqui que interessante cara aqui em cima a gente começou do zero e a gente foi até o final até o maior né então 0 1 2 Opa aqui a gente tem o 0 1 2 3 Então a gente vai começar ó 1 x 2 elev 3 2 elev 3 8 Então 1 x 8 mais 0 ve qualquer coisa 0 0 vez qualquer
coisa 0 e aqui 0 ve qualquer coisa 0 então a gente tem aqui no final 8 entendeu então para transformar da base binária para base decimal a gente faz isso aqui entendeu então esse número binário representa 8 e olha que interessante agora cada dígito aqui na nossa memória vai ocupar um bit Ou seja quando a gente tem por exemplo no nosso computador um espaço de 8 bits de memória ou seja 8 bits que equivale a 1 byte um byte de memória a gente ocupa né com o número oito desse jeito aqui ó desse jeito então
isso aqui na nossa memória é o número oito o nosso computador entende que isso é o número oito por quê Porque aqui vai dar eh é justamente esse cálculo que eu fiz né então é o 1000 na base binária que a gente faz isso aqui e chega no oito então nosso computador entende isso como sendo oito show de bola e onde que eu quero chegar com isso por que que você tá me explicando tudo isso cara porque nos tipos de dados que a gente manipula dentro aqui do Python por exemplo Ó você pode dar uma
olhada aqui ó float 16 float 32 o que que é isso Anor por padrão e geralmente isso acontece tá de todos os números que a gente manipula dentro do Python dentro da linguagem de programação eles geralmente vê em float 32 que que é esse 32 o número de bits é o número de bits que para cada número com que é um float 32 cada número desse vai ocupar 32 bits na memória e 32 di por 8 é 4 bytes então para cada parâmetro sendo que cada parâmetro tem o tipo float 32 cada parâmetro vai ocupar
vai ocupar 4 by e é justamente dessa forma que eu fiz aqui o nosso cálculo entendeu Então se antes a gente ocupava 4 byes ou seja 32 Slots desse eu quero que o meu o meu número ele tipo fique com menos possível né então que fique com por exemplo é oito aqui só que eu consiga diminuir isso que eu consiga reduzir a quantidade de memória armazenada e aqui tem uma coisa muito interessante que eu preciso falar para vocês também que é o quê vocês poem pensando Tá mas qual que é o número máximo que eu
cons consigo por exemplo colocar aqui em oito né em 8 bits bom tudo como sendo um vai ser o maior né porque se multiplicar por zero vai dar zero então coloco tudo como sendo um e essa conta aqui vai dar o quê Vai dar 2 elevado a 7 + 2 elevado a 6 + 2 elevado a 5 mais até 2 elevado a 1 + 2 elevado a 0 sabe quanto que isso aqui dá isso aqui dá 2 elevado a quantos bits a gente tinha mesmo opa a gente tinha 8 bits então 2 elev 88 -
1 show de bola e 2 elevado 8 a gente sabe que é 256 então 256 - 1 255 a gente consegue armazenar Então esse número aqui ó 1 2 3 4 5 6 7 8 esse número na base binária que é o maior número que eu consigo representar com 8 bits ele é 255 Beleza então ah is se eu tenho por exemplo 16 bits de memória ou seja 2 bytes de memória memória eu consigo representar até 2 elev 16 - 1 Ah e naquele caso que eu tenho 32 que é o padrão né se eu
tô falando aqui de um número inteiro eu tenho isso aqui só que não necessariamente a gente trabalha sempre com inteiro né o inteiro é tipo 1 - 3 é não é um número quebrado um float que a gente chama é um número decimal é um número quebrado então float é o quê 3,4 no caso é 1.4 né a gente coloca aqui - 7.89 isso aqui é um float ele é representado de uma maneira diferente tá por exemplo um float aqui de 32 bits que eu tava conversando com vocês Cadê aqui então um float de 32
bits ele é armazenado com 1 bit de sinal tá bom bit de sinal 23 bits na sua mantia mantia e aqui no caso 8 bits no que a gente chama de expoente tá expoente Então olha só aqui no caso 1 + 8 vai dar 9 9 + 23 32 então ele armazena isso aqui na memória e a mantia é justamente toda a parte decimal do seu número então a parte decimal aqui de um número por exemplo Eh vamos pegar um número bem quebrado - 7.897 4 é 98 entendeu Pensa esse número aqui quando a gente
reduz o tamanho dessa mantia a gente reduz a precisão desse cara e é por isso que a gente perde um pouco de qualidade porque a gente perde um pouco de informação quando a gente quantia o modelo entendeu justamente Como como que a gente tá fazendo aqui reduzindo a precisão dos números é isso que acontece por traz dos panos então por exemplo aqui é um float 32 se fosse um float 16 E aí eu não vou lembrar os números de cor eu só lembro do 32 mas a gente vai ter um bit pro sinal tá bom
sempre quando a gente quer armazenar números positivos e negativos a gente coloca um bit de sinal por se for igual a um a gente tá falando que é negativo negativo então o nosso computador ele vai entender quando o primeiro bit é um que o nosso número é negativo E se for zero a gente tá falando de um número positivo Beleza então ele armazena esse sinal depois ele vai armazenar o expoente o valor do expoente ali que tá acontecendo e depois e a nossa mantia né que é a quantidade aqui que no caso é o nosso
valor decimal show de bola e quando a gente reduz isso bom vamos supor que a a gente vai continuar tendo um bit de sinal e aqui eu vou chutar tá eu não sei esses números mas a gente tá trabalhando aqui com 16 bits né então float 16 nesse caso e aí vamos supor vamos supor que aqui a gente tem 4 bits 4 bits aqui no expoente E aí sobra quanto sobra 11 bits aqui paraa mantia entendeu então o que que vai acontecer galera antes a precisão que a gente tinha com 23 bits a gente vai
perder reduzindo para 11 bits que é justamente o que acontece quando você passa de um float 32 para um float 16 Olha só esse exemplo aqui na prática agora quando eu executar esse cara aqui ó tá vendo aqui eu eu eu criei né Alguns alguns tensores que basicamente é uma lista de números tá na verdade não é isso mas para resumir é uma lista de números e aqui eu criei uma que é um float 32 e aqui eu criei uma que é um float 16 agora olha só o mesmo cara o mesmo cara tipo quando
eu multiplico né Por exemplo float 32 com float 32 e float 16 com float 16 que é basicamente são os mesmos números só que aqui eles estão comprimidos para 16 bits entendeu então eu tô tirando um pouco de precisão deles e tô transformando aqui em 16 bits que que vai acontecer com essa multiplicação olha só aqui deu 329 quando eu consigo armazenar mais informação Vocês estão vendo aqui que eu tô armazenando muito mais informação a precisão tá muito maior do que aqui quando eu faço essa redução então reduzi para 16 bits perdi informação e agora
eu tenho somente aqui esse resultado final entendeu que é menos preciso do que o outro só que é muito próximo e é por isso que a qualidade dos modelos não é tão afetada assim por quê Porque a gente de fato aqui vai reduzir a precisão só que o resultado final não é tão diferente assim você pode ver que é 0.1 de diferença aproximadamente né 0.09 sendo um pouco mais preciso então é muito pouco a diferença é muito pouca aqui quando a gente fala da da precisão dos tipos de dados né e bom quando a gente
fala da redução eh e para poder reduzir o modelo de fato bom aqui eu posso aplicar para vocês isso na prática né peguei esse modelo aqui que é o blip image captioning que que ela faz você joga uma imagem pro modelo e ele vai de fato falar o que que tá naquela imagem né o modelo original Original aqui que tem e tem 247 milhões de parâmetros ele tem 943 megas de armazenamento você precisa de 943 mb para poder armazenar esse modelo show de bola e aí Olha só eu vou mostrar aqui os parâmetros esse modelo
aqui eu tenho as camadas então aqui ó tenho várias e várias camadas nesse modelo você consegue ver ó em badging classing beding possui float aqui é 16 por que que possui float 16 ano porque eu já quantize ele já executei ele duas vezes então ele meio que substituiu Então vou executar aqui de novo acho que deu para executar de novo e vou listar olha só ele tem na verdade float 32 é que eu já tinha quantizado mas aqui ó float 32 que é justamente nesse caso aqui que eu tava comentando com vocês e aí o
que que eu vou fazer ó ele armazena 943 M eu vou transformar esses caras eu vou transformar esses caras aqui em um float 16 Olha só agora eu tô especificando que eu quero o tipo de dado float 16 show de bola então aqui na verdade que tá B float 16 você pode pensando ah o que que é esse b antes é o que a gente chama de Brain float 16 esse tipo de dado quando a gente tem o Brain antes ele é otimizado para poder aumentar a velocidade do tramento das redes neurais Beleza então aqui
é o Brain float 16 e aqui a gente então tá reduzindo o quê a precisão dos nossos parâmetros e claro que o nosso modelo ele vai vai ser afetado na qualidade mas vocês vão ver que nem tanto vai mudar uma coisa minúscula na no desempenho final né só que no no geral a gente tem uma economia de memória de mais de 50% você pode ver que na verdade eu nem sei se é mais de 50% Deixa eu fazer essa conta direita para não falar bobagem deixa eu pegar esse cara deixa eu pegar esse cara olha
só a gente tem exatamente a gente reduziu pela metade o o consumo aqui de memória né até porque a gente partiu de float 32 para float 16 então de fato é aqui antes a gente estava com 4 bytes de memória né 4 bytes de memória aqui a gente tá cada parâmetro tá armazenando somente 2 bytes então reduziu pela metade mesmo tá E é isso e é isso agora a gente vai testar na prática o quê eu vou pegar essa imagem aqui que vocês estão vendo ó Então essa imagem de uma mulher com enfim brincando com
um cachorro show de bola e eu quero que o nosso modelo coloque a legenda dessa imagem eu vou mandar a imagem pro modelo beleza aqui primeiro pro modelo de float 32 e depois pro modelo de float 16 e quero ver o que que eles vão gerar de legenda aqui no caso eu já fiz já executei e gerou o seguinte ó o modelo de float 32 ele falou a seguinte frase uma mulher sentada na praia com o cachorro dela então with her Dog beleza aqui no flow 32 então modelo de flor de 32 ele legendou a
imagem eh falando assumindo que o cachorro era dela assumiu o cachorro era dela E aí por que bom provavelmente porque tem aqui uma coleira que ela tá brincando enfim com o cachorro né então ele fez isso e o modelo de float 16 ele falou uma mulher sentada na praia então daqui para trás é a mesma coisa ó na verdade Daqui para trás é a mesma coisa e ele muda só no with a dog Então tá falando aqui com um cachorro não tá falando que é o cachorro dela só mudou isso só mudou isso e a
gente reduziu 50% do tamanho do nosso modelo entendeu 50% do tamanho aqui eu tô utilizando modelo de visão computacional mas poderia ser um modelo de linguagem tá bom poderia ser um modelo de linguagem como Falcon que é open source como lama como enfim vários e vários outros o Queen que é chinês você pode pegar vários modelos e quantizar entendeu E aqui ó tem uma coisa que eu quero explicar agora que é o que a gente chama de quantização linear Beleza vou explicar para vocês aqui um pouco sobre quantização linear vamos supor que a gente tem
essas matrizes aqui então aqui ó eu tenho essa Matriz que é basicamente pensa que o quê Deixa eu só colar aqui De novo pensa que você tem uma rede neural e a rede neural tem esses parâmetros aqui beleza são os pesos aqui vocês lembram são esses números aqui que estão na na ligação Então vamos supor que você tem esses números tá toda sua rede neural e aqui a gente tá falando de modelos como GPT por exemplo eles vão ter o quê eles vão ter trilhões de números aqui nesse caso eu tô Resumindo a 1 2
3 1 2 3 eu tô Resumindo a 9 3 x 3 né então tem nove números aqui e eu vou reduzir um modelo de linguagem como sendo a isso Beleza E todos eles t a precisão de float 32 tem uma técnica muito maneira que a gente consegue sair de um Flow de 32 e transformar em um int 8 ou seja ocupando somente um by aqui a gente ocupava quatro e aqui a gente ocupa 1 byte ou seja uma redução de quatro vezes do tamanho quatro vezes o tamanho como que a gente consegue fazer isso através
que a gente chama de quantização linear que é o que eu tô explicando aqui quantização linear você faz da seguinte forma vocês lembram que eu falei para vocês que quando a gente tem por exemplo aqui 8 bits a gente consegue de no máximo né de 0 até quanto até 2 elevado a 8 - 1 lembra que dá 255 então a gente consegue de zero até 255 Ou seja a gente tem 256 números no total que a gente consegue armazenar 0 1 2 3 lembra que começa do zero né então no total a gente armazena 256
valores distintos só que quando a gente trabalha com números negativos também esse valor ele é dividido pela metade Então a gente vai aqui de - 127 até 120 e Putz acho que aqui vai ter 128 até o zero Então até 128 É isso mesmo ou até menos ou é isso aqui né né ou é isso aqui eu esqueci agora se O negativo vai até menos 128 e o positivo até 127 vamos supor que é isso aqui tá vamos supor que é isso aqui que vai de - 128 até 127 que também totaliza 256 números no
total só que agora metade vai pro negativo e metade vai pro positivo beleza é basicamente isso aqui que que tá acontecendo Então o que que vai acontecer galera eu tô transformando de um Flow 32 para um 28 para um 28 aquela forma que a gente viu Que eu apliquei aqui em cima a gente não tá fazendo quantização linear a gente tá na na força bruta meio que só tirando ali a precisão entendeu a gente não tá mapeando um valor de float 32 para um valor em float 16 a gente não tá mapeando a gente tá
só meio que cara eu tô forçando ele a colocar como sendo float 16 a gente não tá fazendo nenhuma nada de inteligente nisso só que aqui a gente vai fazer uma coisa inteligente o que vai Claro melhorar a performance então quanto mais inteligência você coloca na parada mais é melhor fica né e o que que a gente faz aqui na quantização linear a gente vai pegar o maior cara daqui da Matriz então o maior parâmetro do nosso modelo Qual que é o maior parâmetro aqui é 728 Então a gente vai pegar aqui 728.0 beleza E
esse cara ele vai corresponder ao nosso maior valor que a gente consegue atingir com o 28 e é quem 127 que a gente assumiu né considerando os negativos e qual que é o menor valor aqui do do nosso modelo original né o menor valor é o -184 então vou chegar aqui e vou colocar - 1884 ó - 1884 show de bola então Ó vou fazer isso aqui beleza E esse cara corresponde a quem ao menor valor do wi8 que é o -18 que a gente tinha conversado show de bola então acontece isso aqui na prática
e agora galera o que que vai acontecer vamos supor que você quer transformar um um parâmetro Então você quer transformar o 295.2 295.2 em um valor x que a gente tem aqui entendeu E a gente vai utilizar essa técnica aqui essa conti matemática para poder chegar nesse valor de x e eu vou fazer ela com vocês Tá então Ó aqui no nosso modelo tipo substituído eu já vou pegar o resultado del dele para vocês ele fica da seguinte forma olha só deixa eu pegar e colar aqui deixa eu copiar a imagem vou colar aqui show
de bola ó vai ficar dessa forma eu deixa eu colocar aqui só pra gente poder ver direitinho Então olha só o 728.0 ele foi substituído por quem vocês lembram ele corresponde ao maior porque a gente pegou maior desse e pegou maior desse cara aqui que é 127 Ahí o -184 Ana bom corresponde ao -18 a gente já viu e agora a gente tá falando que o 25.5 corresponde a 5 por qu vou fazer o cálculo aqui é uma é uma continha matemática B básica né O que que a gente vai fazer aqui nesse caso basicamente
a gente vai pegar aqui esse cara menos esse cara então deixa eu até fazer de outra cor aqui é aula de matemática agora galera então ó 728 p6 Men -184 beleza é equivalente a e aqui eu vou colocar uma divisão antes é equivalente 127 Men - 128 dividido por e agora a gente vai fazer uma outra equivalência isso aqui então é equivalente a 295.2 men - 1884 que é equivalente a X Men - 128 pronto A partir disso a gente consegue encontrar aqui esse valor e eu não vou fazer as contas aqui Mas confia em
mim vai dar um número Quebrado só que arredondando vai dar C ele é um valor muito próximo de c a gente arredonda aqui e é isso por que que a gente arredondou e não deixou com casa decimal porque a gente tá falando de números inteiros aqui beleza é isso galera isso é quantização linear é muito tranquilo de poder entender e vai reduzir muito até quatro vezes eu mostrei aqui o tamanho do seu modelo então se antes você tinha um modelo de 1 GB você reduz ele para 250 m é muita coisa Agora vamos aplicar isso
aqui no modelo de linguagem né peguei aqui é esse modelo aqui o fiia de 410 milhões de parâmetros show de bola e aí eu coloquei a seguinte frase no modelo tradicional com o com o Como é que chama com o float 32 né o parâmetro float 32 aqui a gente tem o qu Albert foi um físico ó Foi um físico eu vou pedir pro modelo gerar a resposta que que ele vai gerar de resposta aqui o modelo original al foi um dos físicos mais famosos do mundo agora a história de Ice tem uma história que
um homem se torna e aqui eu coloquei um número máximo de tokens tá de 30 tokens para ele poder gerar mas é basicamente isso então você pode ver que o modelo gerou basicamente Albert foi um dos físicos mais famosos do mundo né foi isso que ele gerou E aí eu vou importar essa biblioteca quanto e vou pegar aqui o tipo que eu quero que é o q in8 o quant in8 beleza que eu tô quantizado o meu modelo então o que que eu tô fazendo tô pegando essa função quantize tô passando o meu modelo que
é é por padrão ele é float 32 que a gente viu os pesos eu quero que fiquem como sendo in8 e aqui o que que eu quero fazer galera eu quero fazer a quantização linear eu não vou somente forçar igual fiz lá em cima você lembram nesse modelo aqui da imagem eu só fiz esse aqui eu vou quantizar vou aplicar uma regra matemática que é a quantização linear para poder transformar o flo 32 em Ou seja que que vai acontecer aqui nesse caso ele vai ele vai ele vai gerar aquies vai gerar deixa carregar aqui
né claro Albert foi um dos Fes mais famosos do mundo Olha só OB foi um dos fos mais famosos do mundo só que agora tem uma diferena que é quatro vezes mais leve foi praticamente a mesma resposta aqui entendeu Só que mais leve Isso é quantização isso é quantização a resposta ela é muito parecida a qualidade do modelo é muito parecida do modelo original só que você tem uma redução absurda de memória isso aqui é muito muito interessante Tá bom quando a gente tá falando de performance de tempo de inferência dos modelos inclusive aqui eu
vou até explicar para quem não entendeu eu acho que vai ficar mais claro Qual que é a diferença de fazer por exemplo isso aqui ó então se eu pego esse 728 então NP deixa eu importar aqui o npai que é uma biblioteca do Python Vou colocar aqui ó NP Array e vou passar aqui 728 ponto 6 né pon 6 e aqui eu vou colocar ó o dtype como npo 32 deixa eu colocar aqui float 32 Olha só então ele colocou n o tipo de dado aqui FL 32 agora se eu colocar int 8 que é
o que eu tava fazendo aqui em cima então eu tava transformando ele de forma tipo direta ali 8 que que vai acontecer Olha só Men 4 por porque dá erro vocês L que o número máximo que a gente consegue armazenar é 127 então ele não vai conseguir armazenar o 728 só que quando a gente faz o mapeamento quando a gente faz a quantização linear ele mapeia o maior valor no caso ali dos parâmetros pro maior valor desse tipo de dado que é o in8 entendeu E aqui vamos ver se o float 16 suporta float 16
vai suportar o float 16 vocês lembra de quanto que ele vai ele vai 120 no caso aqui eu consigo fazer a conta né 2 elevado 16 - 1 E aí eu vou dividir isso aqui por 2 vou dividindo por dois é só tirar um aqui né vai dar mais ou menos de men 32.000 Até mais 32.000 então claramente vai caber aqui o 728 vai caber só que ele vai tirar a parte decimal quando a gente faz o o mapeamento desse jeito ele mantém o valor só que ele tira a parte decimal já na quantização linear
é diferente entendeu então a gente faz algo totalmente inteligente para poder chegar na resposta final e bom galera acho que é isso já tem mais de 40 minutos de vídeo espero que vocês tenham entendido e aprendido sobre sobre quantização aqui show de bola é um tópico mais avançado quando a gente tá falando de modelo de linguagem mas espero que vocês tenham gostado e aprendido e se você não está inscrito aqui no canal ainda pelo amor de Deus você assistiu mais de 40 minutos aqui de conteúdo e não é inscrito deixa o like se inscreve aqui
e me segue lá no Instagram que eu falo muito sobre inteligência artificial também show de bola então é isso estamos junto e até o próximo vídeo