Mixtral-8x7B

Mixtral-8x7B Mixtral-8x7B

Aviso: Este post foi traduzido para o português usando um modelo de tradução automática. Por favor, me avise se encontrar algum erro.

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

mixtral-gemini

Entre a saída do gemini e a saída do mixtra-8x7b houve uma diferença de muito poucos dias. Nos dois primeiros dias após o lançamento do gemini, falou-se bastante sobre esse modelo, mas assim que saiu o mixtral-8x7b, o gemini foi completamente esquecido e toda a comunidade não parou de falar do mixtral-8x7b.

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

mixtral benchmarks

Número de parâmetroslink image 15

Como o nome sugere, mixtral-8x7b é um conjunto de 8 modelos de 7B de parâmetros, então poderíamos pensar que ele tem 56B de parâmetros (7Bx8), mas não é bem assim. Como explica Andrej Karpathy, apenas os blocos Feed forward dos transformers são multiplicados por 8, o resto dos parâmetros é compartilhado entre os 8 modelos. Portanto, no final, o modelo tem 46,7B de parâmetros.

Mistura de Especialistas (MoE)link image 16

Como dissemos, o modelo é um conjunto de 8 modelos de 7B de parâmetros, daí MoE, que significa Mixture of Experts. Cada um dos 8 modelos é treinado independentemente, mas quando se faz a inferência, um roteador decide qual saída do modelo será usada.

Na imagem a seguir, podemos ver como é a arquitetura de um Transformer.

transformer

Se não a conhece, não tem problema. O importante é que esta arquitetura consiste em um encoder e um decoder

transformer-encoder-decoder

Os LLMs são modelos que possuem apenas o decoder, portanto não têm encoder. Você pode ver que na arquitetura há três módulos de atenção, um deles de fato conecta o encoder com o decoder. Mas como os LLMs não têm encoder, não é necessário o módulo de atenção que une o decoder e o decoder.

transformer-decoder

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

Arquitetura MoE

Como pode ser visto, a arquitetura consiste no decoder de um Transformer de 7B de parâmetros, apenas que a camada Feed forward consiste em 8 camadas Feed forward com um roteador que escolhe qual das 8 camadas Feed forward será usada. Na imagem anterior, apenas quatro camadas Feed forward são mostradas, suponho que seja para simplificar o diagrama, mas na realidade há 8 camadas Feed forward. Também se veem dois caminhos para duas palavras distintas, a palavra More e a palavra Parameters e como o roteador escolhe qual Feed forward será usado para cada palavra.

Vendo a arquitetura podemos entender por que o modelo tem 46,7B de parâmetros e não 56B. Como dissemos, apenas os blocos Feed forward se multiplicam por 8, o resto dos parâmetros são compartilhados entre os 8 modelos

Uso do Mixtral-8x7b na nuvemlink image 17

Infelizmente, para usar mixtral-8x7b localmente é complicado, já que 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, além disso, é necessário adicionar a VRAM necessária para armazenar os dados de entrada e saída
  • float16: VRAM > 90 GB, neste caso cada parâmetro ocupa 2 bytes, então precisamos de 46,7B * 2 = 93,4 GB de VRAM apenas para armazenar o modelo, além disso, é necessário adicionar a VRAM necessária para armazenar os dados de entrada e saída
  • 8-bit: VRAM > 45 GB, aqui cada parâmetro ocupa 1 byte, por isso precisamos de 46,7B * 1 = 46,7 GB de VRAM apenas para armazenar o modelo, além disso, é necessário adicionar a VRAM necessária para armazenar os dados de entrada e saída* 4-bit: VRAM > 23 GB, aqui cada parâmetro ocupa 0.5 bytes, portanto precisamos 46.7B * 0.5 = 23.35 GB de VRAM apenas para armazenar o modelo, além disso, é necessário adicionar a VRAM necessária para armazenar os dados de entrada e saída

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

Portanto, a forma mais simples de usar Mixtral-8x7B é usá-lo já implantado na nuvem. Encontrei vários sites onde você pode usá-lo

Uso de Mixtral-8x7b no huggingface chatlink image 18

O primeiro está no huggingface chat. Para poder usá-lo, é necessário clicar na engrenagem dentro da caixa Current Model e selecionar Mistral AI - Mixtral-8x7B. Uma vez selecionado, você já pode começar a conversar com o modelo.

huggingface_chat_01

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

huggingface_chat_02

Como se pode ver, eu lhe perguntei em espanhol o que é MoE e ele me explicou

Uso de Mixtral-8x7b nos Perplexity Labslink image 19

Outra opção é usar Perplexity Labs. Uma vez dentro, deve-se selecionar mixtral-8x7b-instruct em um menu suspenso localizado na parte inferior direita.

perplexity_labs

Como se pode ver, também lhe perguntei em espanhol o que é MoE e ele me explicou

Uso de Mixtral-8x7b localmente através da API do Hugging Facelink image 20

Uma maneira de usá-lo localmente, independentemente dos recursos de hardware que você tenha, é através da API do Hugging Face. Para isso, é necessário instalar a biblioteca huggingface-hub do Hugging Face.

	
%pip install huggingface-hub
Copy

Aqui está uma implementação com gradio

	
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

Continuar lendo

Últimos posts -->

Você viu esses projetos?

Horeca chatbot

Horeca chatbot Horeca chatbot
Python
LangChain
PostgreSQL
PGVector
React
Kubernetes
Docker
GitHub Actions

Chatbot conversacional para cozinheiros de hotéis e restaurantes. Um cozinheiro, gerente de cozinha ou serviço de quarto de um hotel ou restaurante pode falar com o chatbot para obter informações sobre receitas e menus. Mas também implementa agentes, com os quais pode editar ou criar novas receitas ou menus

Naviground

Naviground Naviground

Subtify

Subtify Subtify
Python
Whisper
Spaces

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.

Flow edit

Flow edit Flow edit

Edite imagens com este modelo de Flow. Baseado em SD3 ou FLUX, você pode editar qualquer imagem e gerar novas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
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 -->