Nesta postagem de blog, vou guiá-lo passo a passo pelo processo de execução do concorrente ChatGPT do MosaicML, MPT-7B, em sua própria instância do AWS SageMaker.
Você está animado com os recursos do ChatGPT, mas está preocupado em expor seus dados confidenciais ao OpenAI? Felizmente, existem alternativas que você pode executar em sua própria infraestrutura. Uma dessas alternativas é o MPT-7b da MosaicML, um concorrente do ChatGPT, que exploraremos nesta postagem do blog.
A MosaicML, recentemente adquirida pela Databricks por US$ 1,3 bilhão , vem causando sensação na comunidade ML com seu modelo MPT-7B, um suposto concorrente do ChatGPT. Apesar de sua promessa, a execução desse modelo pode ser assustadora devido à documentação esparsa e seus pesados requisitos de recursos. No entanto, é possível executar o MPT-7B no AWS SageMaker em um notebook Jupyter, um ambiente amigável para iniciantes e altamente flexível para iteração rápida. Essa configuração permite que você teste a viabilidade do modelo e os requisitos de hardware antes de decidir passar para a produção.
A execução do MPT-7B em um notebook Jupyter no AWS SageMaker oferece vários benefícios. Não apenas você pode pagar apenas pelo que usa e desligá-lo quando terminar, mas também a capacidade de executar novamente partes de seu código facilmente sem precisar recarregar o modelo economiza tempo durante o desenvolvimento iterativo. Mas cuidado! Se você esquecer de parar suas instâncias de notebook, as cobranças podem aumentar rapidamente.
Embora esse método seja relativamente conveniente, há algumas considerações que você deve levar em conta. Em primeiro lugar, carregar o modelo pode levar até 20 minutos mesmo em uma GPU de alto desempenho, tornando esse processo um tanto demorado. Além disso, o custo é um fator a ser considerado, pois o custo operacional é de pelo menos US$ 4 por hora. Você precisará executar o MPT-7B em pelo menos uma instância p3.2xlarge ; qualquer coisa menor não parece viável. Se você optar pelo EC2 em vez do SageMaker, terá que pedir permissão à AWS para usar uma instância p3.2xlarge .
Nas próximas seções, mostrarei passo a passo como executar o modelo MPT-7B em seu próprio notebook SageMaker jupyter:
Abra o Console AWS e procure por SageMaker:
No menu do lado esquerdo, selecione Notebook->Notebook instances :
Clique no botão Criar instância de notebook :
Especifique um nome de instância. Escolha o tipo de instância m1.p3.2xlarge . Infelizmente, parece que uma instância tão poderosa quanto m1.p3.2xlarge é necessária, ou então sua instância pode ficar sem memória ou levar muito tempo para responder até mesmo às perguntas mais simples. No entanto, observe que essa instância custará aproximadamente US$ 4/hora, por isso é importante monitorar seu uso com cuidado.
Se seu ambiente de teste não tiver dados particularmente confidenciais, você poderá conceder acesso a Any S3 bucket . Caso contrário, você precisará ser mais explícito.
O bloco de anotações ficará então em um status Pendente . Isso provavelmente durará cerca de 10 minutos:
Enquanto isso, faremos o download de um notebook para que possamos carregá-lo depois que a instância do AWS SageMaker terminar o provisionamento.
Acesse o notebook em MPT-7B no AWS SageMaker.ipynb e faça o download:
Neste bloco de anotações, você observará dois blocos de código principais. O primeiro bloco carrega o tokenizador e modelo MPT-7B:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
O tokenizador é usado para codificar a pergunta enviada ao modelo e decodificar a resposta do modelo. Além disso, obtemos a especificação do dispositivo para nossa GPU para que possamos configurar o modelo para utilizá-lo posteriormente:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
Observe o uso de stopping_critera
, que é necessário, caso contrário, o modelo começará a tagarelar, mesmo depois de responder à nossa pergunta.
Veja o modelo gerar parâmetros se você quiser explorar as diferentes opções.
Agora, vamos carregar este bloco de anotações no SageMaker.
Esperamos que, a essa altura, sua instância de bloco de anotações do SageMaker tenha terminado de ser provisionada. Quando tiver, clique no link Open Jupyter :
Em seguida, clique no botão Upload no canto superior direito da tela e selecione o notebook que você acabou de baixar:
Defina o kernel como conda_python3 :
Selecione Célula -> Executar tudo :
Um logotipo de ampulheta aparecerá na guia do navegador:
Você precisará aguardar cerca de 10 minutos para que o modelo seja baixado:
Após a execução, você verá a resposta para a pergunta Explique-me a diferença entre fissão e fusão nuclear :
Como o model e o tokenizer já foram carregados acima, você pode simplesmente modificar o bloco de código ask_question e clicar no botão Run para fazer qualquer outra pergunta. Isso evitará que você gaste 10 minutos cada vez que quiser testar uma nova pergunta.
Assim que terminar de testar o modelo, volte para sua lista de instâncias de notebook e interrompa-o. Se não o fizer, $ 4 / hora aumentará muito rapidamente 💸
Em termos de desempenho, meus testes preliminares sugerem que os resultados do MPT-7B podem não ser tão bons quanto os do ChatGPT. Ele faz um trabalho decente respondendo a perguntas como:
Mas para perguntas como_Qual é a capital de Belize?_ falha terrivelmente:
No momento, estou coletando mais dados e conduzirei uma análise comparativa abrangente em uma postagem de blog de acompanhamento. Nessa postagem, compararei o desempenho de perguntas e respostas de MPT-7B, MPT-30B, Falcon-40b e ChatGPT usando o histórico de conversação real.
Assim que estiver pronto para fazer a transição do teste para a produção, o SageMaker oferece um benefício adicional - a capacidade de criar um endpoint para seu modelo. Com o SageMaker, você pode dimensionar automaticamente com base na demanda para o endpoint, otimizando seus recursos.
Esteja ciente de que é fácil para o seu processo ser bifurcado durante a execução em um notebook Jupyter e ficar sem memória. Se isso acontecer, simplesmente desligue o kernel e execute todos os comandos novamente.
Se você está curioso para executar este modelo em uma plataforma diferente da AWS, o Google Colab Pro é outra opção viável por US$ 9/mês. No entanto, com base em nossos testes, descobrimos que esgotamos os créditos fornecidos em apenas algumas horas. 😳
Outro desafio que você pode enfrentar é a incapacidade de utilizar a otimização Triton no SageMaker devido a uma incompatibilidade de versão CUDA. Infelizmente, as instâncias P3 atuais da AWS não incluem uma versão CUDA recente. Portanto, se você deseja utilizar a otimização do Triton, precisará criar um contêiner EC2 com acesso à linha de comando. No entanto, é importante observar que você também precisará de permissão especial do AWS Support para executar uma instância com 8 VCPUs. Em uma postagem futura, fornecerei um guia detalhado sobre como integrar o Triton e utilizar um provedor de nuvem de GPU mais econômico, como o Lambda Labs .
Embora o MPT-7B da MosaicML ofereça uma alternativa viável ao ChatGPT da OpenAI, ele apresenta seu próprio conjunto de desafios. Executar o modelo pode ser demorado, caro e falta a documentação disponível. No entanto, a capacidade de manter o modelo interno e proteger seus dados da exposição ao OpenAI pode ser atraente para determinados casos de uso.
O SageMaker oferece grande conveniência para testar rapidamente o modelo e oferece flexibilidade para fazer a transição para a produção quando você estiver pronto. Se você está apenas começando com o MPT-7B ou já o usa há algum tempo, esperamos que este guia tenha fornecido informações valiosas.
Fique atento à nossa próxima postagem no blog, onde nos aprofundaremos nas comparações de desempenho entre MPT-7B, MPT-30B, Falcon-40b e ChatGPT.
Consulte os links a seguir se estiver interessado em aprender mais sobre o MPT-7B ou sua variante maior, MPT-30B .
E lembre-se, esteja você trabalhando com ChatGPT ou MPT-7B, a chave é garantir que seu caso de uso seja atendido sem comprometer a privacidade dos dados e a economia. Feliz mexer!
Em MindfulDataAI.com , oferecemos ChatGPT para empresas. Se você estiver interessado em alavancar ChatGPT, MPT ou outros modelos com os dados da sua empresa, entre em contato conosco.