O modelo básico GPT-NeoXT-Chat-Base-20B para aplicativos de chatbot agora está disponível no Amazon SageMaker | Amazon Web Services

O modelo básico GPT-NeoXT-Chat-Base-20B para aplicativos de chatbot agora está disponível no Amazon SageMaker | Amazon Web Services

Nó Fonte: 2096695

Hoje, temos o prazer de anunciar que o modelo básico de linguagem GPT-NeoXT-Chat-Base-20B da Together Computer está disponível para clientes que usam JumpStart do Amazon SageMaker. GPT-NeoXT-Chat-Base-20B é um modelo de código aberto para construir bots de conversação. Você pode facilmente experimentar este modelo e usá-lo com o JumpStart. JumpStart é o hub de aprendizado de máquina (ML) de Amazon Sage Maker que fornece acesso a modelos de base, além de algoritmos integrados e modelos de solução de ponta a ponta para ajudá-lo a começar a usar o ML rapidamente.

Nesta postagem, explicamos como implantar o GPT-NeoXT-Chat-Base-20B modelar e invocar o modelo dentro de um OpenChatKit shell interativo. Esta demonstração fornece um chatbot de modelo básico de código aberto para uso em seu aplicativo.

Os modelos JumpStart usam Deep Java Serving que usa a Deep Java Library (DJL) com bibliotecas de alta velocidade para otimizar modelos e minimizar a latência para inferência. A implementação subjacente no JumpStart segue uma implementação semelhante à seguinte caderno. Como cliente do hub de modelo JumpStart, você obtém desempenho aprimorado sem precisar manter o script de modelo fora do SageMaker SDK. Os modelos JumpStart também alcançam uma postura de segurança aprimorada com endpoints que permitem o isolamento da rede.

Modelos de fundação no SageMaker

O JumpStart fornece acesso a uma variedade de modelos de hubs de modelos populares, incluindo Hugging Face, PyTorch Hub e TensorFlow Hub, que você pode usar em seu fluxo de trabalho de desenvolvimento de ML no SageMaker. Avanços recentes em ML deram origem a uma nova classe de modelos conhecida como modelos de fundação, que normalmente são treinados em bilhões de parâmetros e são adaptáveis ​​a uma ampla categoria de casos de uso, como resumo de texto, geração de arte digital e tradução de idiomas. Como esses modelos são caros para treinar, os clientes desejam usar modelos de fundação pré-treinados existentes e ajustá-los conforme necessário, em vez de treinar esses modelos por conta própria. O SageMaker fornece uma lista selecionada de modelos que você pode escolher no console do SageMaker.

Agora você pode encontrar modelos de fundação de diferentes provedores de modelo no JumpStart, permitindo que você comece a usar modelos de fundação rapidamente. Você pode encontrar modelos de base com base em diferentes tarefas ou provedores de modelo e revisar facilmente as características do modelo e os termos de uso. Você também pode experimentar esses modelos usando um widget de IU de teste. Quando você deseja usar um modelo de base em escala, pode fazê-lo facilmente sem sair do SageMaker usando notebooks pré-construídos de fornecedores de modelos. Como os modelos são hospedados e implantados na AWS, você pode ter certeza de que seus dados, sejam eles usados ​​para avaliar ou usar o modelo em escala, nunca serão compartilhados com terceiros.

Modelo de fundação GPT-NeoXT-Chat-Base-20B

Juntos Computador desenvolveu o GPT-NeoXT-Chat-Base-20B, um modelo de linguagem de 20 bilhões de parâmetros, ajustado a partir do modelo GPT-NeoX da ElutherAI com mais de 40 milhões de instruções, com foco em interações no estilo de diálogo. Além disso, o modelo é ajustado em várias tarefas, como resposta a perguntas, classificação, extração e resumo. O modelo é baseado no conjunto de dados OIG-43M que foi criado em colaboração com LAION e Ontocord.

Além do ajuste fino mencionado acima, o GPT-NeoXT-Chat-Base-20B-v0.16 também passou por um ajuste fino adicional por meio de uma pequena quantidade de dados de feedback. Isso permite que o modelo se adapte melhor às preferências humanas nas conversas. O GPT-NeoXT-Chat-Base-20B foi projetado para uso em aplicativos de chatbot e pode não funcionar bem em outros casos de uso fora do escopo pretendido. Juntos, Ontocord e LAION colaboraram para lançar o OpenChatKit, uma alternativa de código aberto ao ChatGPT com um conjunto comparável de recursos. O OpenChatKit foi lançado sob uma licença Apache-2.0, concedendo acesso completo ao código-fonte, pesos do modelo e conjuntos de dados de treinamento. Existem várias tarefas nas quais o OpenChatKit se destaca imediatamente. Isso inclui tarefas de resumo, tarefas de extração que permitem extrair informações estruturadas de documentos não estruturados e tarefas de classificação para classificar uma frase ou parágrafo em diferentes categorias.

Vamos explorar como podemos usar o modelo GPT-NeoXT-Chat-Base-20B no JumpStart.

Visão geral da solução

Você pode encontrar o código que mostra a implantação de GPT-NeoXT-Chat-Base-20B no SageMaker e um exemplo de como usar o modelo implantado de maneira conversacional usando o shell de comando a seguir Bloco de notas do GitHub.

Nas seções a seguir, expandimos cada etapa detalhadamente para implantar o modelo e, em seguida, usá-lo para resolver diferentes tarefas:

  1. Configure os pré-requisitos.
  2. Selecione um modelo pré-treinado.
  3. Recupere artefatos e implante um endpoint.
  4. Consulte o endpoint e analise uma resposta.
  5. Use um shell OpenChatKit para interagir com seu endpoint implantado.

Pré-requisitos de configuração

Este notebook foi testado em uma instância ml.t3.medium em Estúdio Amazon SageMaker com o kernel Python 3 (Data Science) e em uma instância de notebook SageMaker com o kernel conda_python3.

Antes de executar o notebook, use o seguinte comando para concluir algumas etapas iniciais necessárias para a configuração:

%pip install --upgrade sagemaker –quiet

Selecione um modelo pré-treinado

Configuramos uma sessão do SageMaker como de costume usando o Boto3 e, em seguida, selecionamos o ID do modelo que queremos implantar:

model_id, model_version = "huggingface-textgeneration2-gpt-neoxt-chat-base-20b-fp16", "*"

Recupere artefatos e implante um endpoint

Com o SageMaker, podemos realizar inferências no modelo pré-treinado, mesmo sem ajustá-lo primeiro em um novo conjunto de dados. Começamos recuperando o instance_type, image_uri e model_uri para o modelo pré-treinado. Para hospedar o modelo pré-treinado, criamos uma instância de sábio.modelo.modelo e implantá-lo. O código a seguir usa ml.g5.24xlarge para o endpoint de inferência. O método de implantação pode levar alguns minutos.

endpoint_name = name_from_base(f"jumpstart-example-{model_id}") # Retrieve the inference instance type for the specified model.
instance_type = instance_types.retrieve_default( model_id=model_id, model_version=model_version, scope="inference"
) # Retrieve the inference docker container uri.
image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=instance_type,
) # Retrieve the model uri.
model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="inference"
) # Create the SageMaker model instance. The inference script is prepacked with the model artifact.
model = Model( image_uri=image_uri, model_data=model_uri, role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # Set the serializer/deserializer used to run inference through the sagemaker API.
serializer = JSONSerializer()
deserializer = JSONDeserializer() # Deploy the Model.
predictor = model.deploy( initial_instance_count=1, instance_type=instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name, serializer=serializer, deserializer=deserializer
)

Consultar o endpoint e analisar a resposta

A seguir, mostramos um exemplo de como invocar um endpoint com um subconjunto dos hiperparâmetros:

payload = { "text_inputs": "<human>: Tell me the steps to make a pizzan<bot>:", "max_length": 500, "max_time": 50, "top_k": 50, "top_p": 0.95, "do_sample": True, "stopping_criteria": ["<human>"],
}
response = predictor.predict(payload)
print(response[0][0]["generated_text"])

A seguir, a resposta que obtemos:

<human>: Tell me the steps to make a pizza
<bot>: 1. Choose your desired crust, such as thin-crust or deep-dish. 2. Preheat the oven to the desired temperature. 3. Spread sauce, such as tomato or garlic, over the crust. 4. Add your desired topping, such as pepperoni, mushrooms, or olives. 5. Add your favorite cheese, such as mozzarella, Parmesan, or Asiago. 6. Bake the pizza according to the recipe instructions. 7. Allow the pizza to cool slightly before slicing and serving.
<human>:

Aqui, fornecemos o argumento de carga útil "stopping_criteria": ["<human>"], o que resultou na resposta do modelo terminando com a geração da sequência de palavras <human>. O script do modelo JumpStart aceitará qualquer lista de strings como palavras de parada desejadas, converta essa lista em uma lista válida argumento de palavra-chave stops_criteria para a API de geração de transformadores e para a geração de texto quando a sequência de saída contém quaisquer palavras de parada especificadas. Isso é útil por dois motivos: primeiro, o tempo de inferência é reduzido porque o endpoint não continua a gerar texto indesejado além das palavras de parada e, segundo, isso evita que o modelo OpenChatKit tenha alucinações com respostas humanas e bot adicionais até que outros critérios de parada sejam atendidos .

Use um shell OpenChatKit para interagir com seu endpoint implantado

O OpenChatKit fornece um shell de linha de comando para interagir com o chatbot. Nesta etapa, você cria uma versão desse shell que pode interagir com seu endpoint implantado. Fornecemos uma simplificação básica dos scripts de inferência neste repositório OpenChatKit que podem interagir com nosso endpoint implantado do SageMaker.

Existem dois componentes principais para isso:

  • Um interpretador de shell (JumpStartOpenChatKitShell) que permite invocações de inferência iterativas do endpoint do modelo
  • Um objeto de conversa (Conversation) que armazena interações humanas/chatbot anteriores localmente dentro do shell interativo e formata adequadamente as conversas anteriores para um contexto de inferência futuro

A Conversation O objeto é importado como está do repositório OpenChatKit. O código a seguir cria um interpretador de shell personalizado que pode interagir com seu endpoint. Esta é uma versão simplificada da implementação do OpenChatKit. Incentivamos você a explorar o repositório OpenChatKit para ver como pode usar recursos mais detalhados, como streaming de token, modelos de moderação e geração aumentada de recuperação, dentro desse contexto. O contexto deste notebook se concentra em demonstrar um chatbot viável mínimo com um terminal JumpStart; você pode adicionar complexidade conforme necessário a partir daqui.

Uma breve demonstração para mostrar o JumpStartOpenChatKitShell é mostrado no vídeo a seguir.

O trecho a seguir mostra como o código funciona:

class JumpStartOpenChatKitShell(cmd.Cmd): intro = ( "Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to " "list commands. For example, type /quit to exit shell.n" ) prompt = ">>> " human_id = "<human>" bot_id = "<bot>" def __init__(self, predictor: Predictor, cmd_queue: Optional[List[str]] = None, **kwargs): super().__init__() self.predictor = predictor self.payload_kwargs = kwargs self.payload_kwargs["stopping_criteria"] = [self.human_id] if cmd_queue is not None: self.cmdqueue = cmd_queue def preloop(self): self.conversation = Conversation(self.human_id, self.bot_id) def precmd(self, line): command = line[1:] if line.startswith('/') else 'say ' + line return command def do_say(self, arg): self.conversation.push_human_turn(arg) prompt = self.conversation.get_raw_prompt() payload = {"text_inputs": prompt, **self.payload_kwargs} response = self.predictor.predict(payload) output = response[0][0]["generated_text"][len(prompt):] self.conversation.push_model_response(output) print(self.conversation.get_last_turn()) def do_reset(self, arg): self.conversation = Conversation(self.human_id, self.bot_id) def do_hyperparameters(self, arg): print(f"Hyperparameters: {self.payload_kwargs}n") def do_quit(self, arg): return True

Agora você pode iniciar este shell como um loop de comando. Isso emitirá repetidamente um prompt, aceitará entrada, analisará o comando de entrada e despachará ações. Como o shell resultante pode ser utilizado em um loop infinito, este notebook fornece uma fila de comandos padrão (cmdqueue) como uma lista enfileirada de linhas de entrada. Porque a última entrada é o comando /quit, o shell sairá após o esgotamento da fila. Para interagir dinamicamente com este chatbot, remova o cmdqueue.

cmd_queue = [ "Hello!",
]
JumpStartOpenChatKitShell( endpoint_name=endpoint_name, cmd_queue=cmd_queue, max_new_tokens=128, do_sample=True, temperature=0.6, top_k=40,
).cmdloop()

Exemplo 1: o contexto da conversa é mantido

O prompt a seguir mostra que o chatbot é capaz de reter o contexto da conversa para responder a perguntas de acompanhamento:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the capital of US? <<< The capital of US is Washington, D.C. >>> How far it is from PA ? <<< It is approximately 1100 miles.

Exemplo 2: Classificação de sentimentos

No exemplo a seguir, o chatbot realizou uma tarefa de classificação identificando os sentimentos da frase. Como você pode ver, o chatbot conseguiu classificar sentimentos positivos e negativos com sucesso.

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> What is the sentiment of this sentence "The weather is good and I am going to play outside, it is sunny and warm" <<< POSITIVE >>> What is the sentiment of this sentence " The news this morning was tragic and it created lot of fear and concerns in city" <<< NEGATIVE

Exemplo 3: Tarefas de resumo

Em seguida, tentamos tarefas de resumo com o chatbot shell. O exemplo a seguir mostra como o texto longo sobre Amazon Comprehend foi resumido a uma frase e o chatbot foi capaz de responder a perguntas de acompanhamento no texto:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Write a short summary for this text: Amazon Comprehend uses natural language processing (NLP) to extract insights about the content of documents. It develops insights by recognizing the entities, key phrases, language, sentiments, and other common elements in a document. Use Amazon Comprehend to create new products based on understanding the structure of documents. For example, using Amazon Comprehend you can search social networking feeds for mentions of products or scan an entire document repository for key phrases. nYou can access Amazon Comprehend document analysis capabilities using the Amazon Comprehend console or using the Amazon Comprehend APIs. You can run real-time analysis for small workloads or you can start asynchronous analysis jobs for large document sets. You can use the pre-trained models that Amazon Comprehend provides, or you can train your own custom models for classification and entity recognition. nAll of the Amazon Comprehend features accept UTF-8 text documents as the input. In addition, custom classification and custom entity recognition accept image files, PDF files, and Word files as input. nAmazon Comprehend can examine and analyze documents in a variety of languages, depending on the specific feature. For more information, see Languages supported in Amazon Comprehend. Amazon Comprehend's Dominant language capability can examine documents and determine the dominant language for a far wider selection of languages. <<< Amazon Comprehend is a natural language processing (NLP) service that uses deep learning and other advanced AI techniques to extract insights from unstructured text. >>> What kind of files does custom entity recognition accept as inputs? <<< Image files, PDF files, and Word files

Exemplo 4: extrair informações estruturadas de texto não estruturado

No exemplo a seguir, usamos o chatbot para criar uma tabela de markdown com cabeçalhos, linhas e colunas para criar um plano de projeto usando as informações fornecidas em linguagem de formato livre:

Welcome to the OpenChatKit chatbot shell, modified to use a SageMaker JumpStart endpoint! Type /help or /? to list commands. For example, type /quit to exit shell. <<< Hello! How may I help you today? >>> Generate a table summarizing the options outlined in this email. Team, we need to plan a project. The first task is for creating a web app and will take 3 developers, 2 testers with duration of 3 weeks. This is priority 1 The second task is for refactoring a web app and will take 2 developers, 5 testers with duration of 4 weeks. This is priority 2 A markdown table with 2 rows and six columns: (1) Task ID , (2) Task Description, (3) Developers, (4) Testers, (5) Duration, (6) Priority <<< | Task ID | Task Description | Developers | Testers | Duration | Priority |
| --------- | --------- | --------- | --------- | --------- | --------- |
| 1 | Create a web app | 3 | 2 | 3 weeks | 1 |
| 2 | Refactor a web app | 2 | 5 | 4 weeks | 2 |

Exemplo 5: Comandos como entrada para chatbot

Também podemos fornecer entrada como comandos como /hyperparameters para ver os valores dos hiperparâmetros e /quit para sair do shell de comando:

>>> /hyperparameters <<< Hyperparameters: {'max_new_tokens': 128, 'do_sample': True, 'temperature': 0.6, 'top_k': 40, 'stopping_criteria': ['<human>']} >>> /quit

Esses exemplos mostraram apenas algumas das tarefas nas quais o OpenChatKit se destaca. Incentivamos você a experimentar vários prompts e ver o que funciona melhor para o seu caso de uso.

limpar

Depois de testar o endpoint, certifique-se de excluir o endpoint de inferência do SageMaker e o modelo para evitar cobranças.

Conclusão

Nesta postagem, mostramos como testar e usar o modelo GPT-NeoXT-Chat-Base-20B usando o SageMaker e criar aplicativos de chatbot interessantes. Experimente o modelo de fundação no SageMaker hoje e deixe-nos saber seus comentários!

Esta orientação é apenas para fins informativos. Você ainda deve realizar sua própria avaliação independente e tomar medidas para garantir a conformidade com suas próprias práticas e padrões específicos de controle de qualidade e com as regras, leis, regulamentos, licenças e termos de uso locais que se aplicam a você, seu conteúdo e o modelo de terceiros mencionado nesta orientação. A AWS não tem controle ou autoridade sobre o modelo de terceiros mencionado nesta orientação e não faz representações ou garantias de que o modelo de terceiros é seguro, livre de vírus, operacional ou compatível com seu ambiente de produção e padrões. A AWS não faz representações, garantias ou garantias de que qualquer informação nesta orientação resultará em um determinado resultado ou resultado.


Sobre os autores

Rachna Chadha é Arquiteto Principal de Soluções AI/ML em Contas Estratégicas na AWS. Rachna é uma otimista que acredita que o uso ético e responsável da IA ​​pode melhorar a sociedade no futuro e trazer prosperidade econômica e social. Em seu tempo livre, Rachna gosta de passar o tempo com sua família, fazer caminhadas e ouvir música.

Dr. é um Cientista Aplicado com o Algoritmos integrados do Amazon SageMaker equipe. Seus interesses de pesquisa incluem algoritmos de aprendizado de máquina escaláveis, visão computacional, séries temporais, processos não paramétricos bayesianos e processos gaussianos. Seu PhD é pela Duke University e ele publicou artigos em NeurIPS, Cell e Neuron.

Dr. é um cientista aplicado sênior com algoritmos integrados do Amazon SageMaker e ajuda a desenvolver algoritmos de aprendizado de máquina. Ele obteve seu PhD pela University of Illinois Urbana-Champaign. Ele é um pesquisador ativo em aprendizado de máquina e inferência estatística e publicou muitos artigos em conferências NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS