Mixtral-8x7B

Mixtral-8x7B Mixtral-8x7B

Mixtral-8x7B MoElink image 14

Para mim, a melhor descrição do mixtral-8x7b é a seguinte imagem

mixtral-gemini

Entre o lançamento do gemini e o lançamento do mixtra-8x7b, houve uma diferença de apenas alguns dias. Nos dois primeiros dias após o lançamento do gemini houve muita conversa sobre esse modelo, mas assim que o mixtral-8x7b foi lançado, o gemini foi completamente esquecido e toda a comunidade estava falando sobre o mixtral-8x7b.

E não é de se admirar que, analisando seus benchmarks, podemos ver que ele está no nível de modelos como o llama2-70B e o GPT3.5, mas com a diferença de que, enquanto o mixtral-8x7b tem apenas 46,7B de parâmetros, o llama2-70B tem 70B e o GPT3.5 tem 175B.

mixtral benchmarks

Este caderno foi traduzido automaticamente para torná-lo acessível a mais pessoas, por favor me avise se você vir algum erro de digitação..

Número de parâmetroslink image 15

Como o nome sugere, mixtral-8x7b é um conjunto de 8 modelos de parâmetros 7B, portanto, poderíamos pensar que ele tem 56B parâmetros (7Bx8), mas não tem. Como [Andrej Karpathy] (https://twitter.com/karpathy/status/1734251375163511203) explica, somente os blocos Feed forward dos transformadores são multiplicados por 8, o restante dos parâmetros é compartilhado entre os 8 modelos. Portanto, no final, o modelo tem 46,7 bilhões de parâmetros.

Mistura de especialistas (MoE)link image 16

Conforme mencionado, o modelo é um conjunto de 8 modelos 7B de parâmetros, daí a sigla MoE, que significa Mixture of Experts. Cada um dos 8 modelos é treinado de forma independente, mas quando a inferência é feita, um roteador decide a saída de qual modelo deve ser usado.

A imagem a seguir mostra a arquitetura de um Transformer.

transformer

Se você não sabe, o importante é que essa arquitetura consiste em um codificador e um decodificador.

transformer-encoder-decoder

Os LLMs são modelos somente de decodificador, portanto, não têm um codificador. Você pode ver que na arquitetura há três módulos de atenção, um deles realmente conecta o codificador ao decodificador. Mas como os LLMs não têm um codificador, não há necessidade do módulo de atenção que conecta o decodificador e o decodificador.

transformer-decoder

Agora que sabemos como é a arquitetura de um LLM, podemos ver como é a arquitetura do mixtral-8x7b. Na imagem a seguir, podemos ver a arquitetura do modelo

Arquitetura do MoE] (https://pub-fb664c455eca46a2ba762a065ac900f7.r2.dev/MoE_architecture.webp)

Como você pode ver, a arquitetura consiste em um decodificador Transformer de 7B parâmetros, sendo que apenas a camada Feed forward consiste em 8 camadas Feed forward com um roteador que escolhe qual das 8 camadas Feed forward deve ser usada. Na imagem acima, são mostradas apenas quatro camadas Feed forward, o que deve ter sido feito para simplificar o diagrama, mas, na realidade, existem 8 camadas Feed forward. Você também pode ver dois caminhos para duas palavras diferentes, a palavra More e a palavra Parameters e como o roteador escolhe qual Feed forward usar para cada palavra.

Observando a arquitetura, podemos entender por que o modelo tem 46,7 bilhões de parâmetros e não 56 bilhões. Como dissemos, apenas os blocos Feed forward são multiplicados por 8, o restante dos parâmetros é compartilhado entre os 8 modelos.

Usando o Mixtral-8x7b na nuvemlink image 17

Infelizmente, usar o mixtral-8x7b localmente é complicado, pois os requisitos de hardware são os seguintes

  • float32: VRAM > 180 GB, ou seja, como cada parâmetro ocupa 4 bytes, precisamos de 46,7B * 4 = 186,8 GB de VRAM apenas para armazenar o modelo, mais a VRAM necessária para armazenar os dados de entrada e saída.
  • float16: VRAM > 90 GB, nesse caso, cada parâmetro ocupa 2 bytes, portanto, precisamos de 46,7B * 2 = 93,4 GB de VRAM apenas para armazenar o modelo, além da VRAM necessária para armazenar os dados de entrada e saída.
  • 8 bits: VRAM > 45 GB, aqui cada parâmetro ocupa 1 byte, portanto, precisamos de 46,7B * 1 = 46,7 GB de VRAM apenas para armazenar o modelo, além da VRAM necessária para armazenar os dados de entrada e saída.
  • 4 bits: VRAM > 23 GB, aqui cada parâmetro ocupa 0,5 bytes, portanto, precisamos de 46,7B * 0,5 = 23,35 GB de VRAM apenas para armazenar o modelo, além da VRAM necessária para armazenar os dados de entrada e saída.

Precisamos de GPUs muito potentes para executá-lo, mesmo quando usamos o modelo quantizado de 4 bits.

Portanto, a maneira mais fácil de usar o Mixtral-8x7B é usá-lo já implantado na nuvem. Encontrei vários locais onde você pode usá-lo

Uso do Mixtral-8x7b no bate-papo huggingfacelink image 18

O primeiro está no [huggingface chat] (https://huggingface.co/chat). Para usá-lo, clique na roda dentada dentro da caixa Current Model e selecione Mistral AI - Mixtral-8x7B. Uma vez selecionado, você pode começar a conversar com o modelo.

huggingface_chat_01

Uma vez lá dentro, selecione mistralai/Mixtral-8x7B-Instruct-v0.1 e, por fim, clique no botão Activate. Agora podemos testar o modelo

huggingface_chat_02

Como você pode ver, perguntei a ele em espanhol o que é "MoE" e ele me explicou.

Usando o Mixtral-8x7b no Perplexity Labslink image 19

Outra opção é usar o [Perplexity Labs] (https://labs.perplexity.ai/). Uma vez lá dentro, selecione mixtral-8x7b-instruct em um menu suspenso no canto inferior direito.

perplexity_labs

Como você pode ver, eu também perguntei a ele em espanhol o que é MoE e ele me explicou.

Usando o Mixtral-8x7b localmente por meio da API huggingfacelink image 20

Uma maneira de usá-lo localmente, independentemente dos recursos de HW que você tenha, é por meio da API huggingface. Para fazer isso, você precisa instalar a biblioteca huggingface huggingface-hub.

	
%pip install huggingface-hub
Copy

Aqui está uma implementação com o gradio.

	
%pip install huggingface-hub
from huggingface_hub import InferenceClient
import gradio as gr
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
def format_prompt(message, history):
prompt = "<s>"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {message} [/INST]"
return prompt
def generate(prompt, history, system_prompt, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,):
temperature = float(temperature)
if temperature < 1e-2:
temperature = 1e-2
top_p = float(top_p)
generate_kwargs = dict(temperature=temperature, max_new_tokens=max_new_tokens, top_p=top_p, repetition_penalty=repetition_penalty, do_sample=True, seed=42,)
formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield output
return output
additional_inputs=[
gr.Textbox(label="System Prompt", max_lines=1, interactive=True,),
gr.Slider(label="Temperature", value=0.9, minimum=0.0, maximum=1.0, step=0.05, interactive=True, info="Higher values produce more diverse outputs"),
gr.Slider(label="Max new tokens", value=256, minimum=0, maximum=1048, step=64, interactive=True, info="The maximum numbers of new tokens"),
gr.Slider(label="Top-p (nucleus sampling)", value=0.90, minimum=0.0, maximum=1, step=0.05, interactive=True, info="Higher values sample more low-probability tokens"),
gr.Slider(label="Repetition penalty", value=1.2, minimum=1.0, maximum=2.0, step=0.05, interactive=True, info="Penalize repeated tokens")
]
gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=additional_inputs,
title="Mixtral 46.7B",
concurrency_limit=20,
).launch(show_api=False)
Copy

Mixtral-8x7B huggingface API](https://pub-fb664c455eca46a2ba762a065ac900f7.r2.dev/Mixtral-8x7B_huggingface_API.webp)

Continuar lendo

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

Você já conversou com um LLM e ele lhe respondeu algo que parece ter bebido café de máquina a noite toda? 😂 Isso é o que chamamos de alucinação no mundo dos LLMs! Mas não se preocupe, pois não é que seu modelo de linguagem esteja louco (embora às vezes possa parecer isso 🤪). A verdade é que os LLMs podem ser um pouco... criativos quando se trata de gerar texto. Mas graças ao DoLa, um método que usa camadas de contraste para melhorar a viabilidade dos LLMs, podemos evitar que nossos modelos de linguagem se transformem em escritores de ficção científica 😂. Nesta publicação, explicarei como o DoLa funciona e mostrarei um exemplo de código para que você possa entender melhor como tornar seus LLMs mais confiáveis e menos propensos a inventar histórias. Vamos salvar nossos LLMs da loucura e torná-los mais úteis! 🚀

Últimos posts -->

Você viu esses projetos?

Subtify

Subtify Subtify

Gerador de legendas para vídeos no idioma que você desejar. Além disso, coloca uma legenda de cor diferente para cada pessoa

Ver todos os projetos -->

Quer aplicar IA no seu projeto? Entre em contato!

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Ver todos os contêineres -->

Quer aplicar IA no seu projeto? Entre em contato!

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

Dataset com piadas em inglês

opus100

Dataset com traduções de inglês para espanhol

netflix_titles

Dataset com filmes e séries da Netflix

Ver mais datasets -->