O objetivo deste repositório é fornecer uma implementação simples dos modelos GPT que podem ser usados para aplicações de produção. Atualmente, o código suporta os seguintes casos de uso:
Sinta -se à vontade para gastar este repositório e usá -lo como um modelo para desenvolver seus próprios aplicativos GPT.
Queremos eventualmente incluir o ajuste fino baseado em RL do ChatGPT. Em geral, isso não muda o modelo de conhecimento subjacente, mas torna a interação com o modelo mais parecido com o humano.
A configuração do código é bastante mínima e pode ser facilmente reproduzida em ambientes de VM local ou em nuvem.*
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
* No futuro, tentaremos fornecer uma versão do Docker desta configuração.
Fornecemos código de amostra que downloads e pré-processam o conjunto de dados de shakes minúsculos para treinamento e ajuste fino. Use este código como um modelo para criar pré -processamento de dados para seus próprios dados.
python src/data_io/fetch_shakespeare.py
Treinando um modelo GPT muito pequeno do zero no conjunto de dados de shakespeare minúsculo criado na etapa anterior. O modelo resultante não será muito generalizável, pois é bastante pequeno e treinado em um conjunto de dados muito pequeno, mas pode gerar citações do tipo Shakespeare.
Altere o arquivo de configuração e para treinar um modelo do zero em seus próprios dados. Neste ponto, você pode tecnicamente escalar para tamanhos de modelos muito grandes, de acordo com o tamanho e os recursos dos dados.*
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
* Para esta etapa, você provavelmente precisará de uma ou várias GPUs.
Ajustando o modelo GPT2 de código aberto em seus próprios dados. É possível usar qualquer modelo de código aberto GPT (GPT2-Medium, GPT2-XL etc). Essa é a opção mais comum, pois requer menos dados e recursos (é possível executar isso mesmo em uma CPU) e é muito mais rápido que o treinamento do zero.
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
Exemplo de várias saídas de um modelo treinado, com um prompt de entrada. Isso pode ser usado para inferência em lote.
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
Um servidor LightWeigth que serve um modelo treinado em uma API REST.
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
Depois que o servidor estiver em execução, você poderá consultar o terminal com um prompt (como uma solicitação de postagem). Para mais detalhes sobre os detalhes da consulta, consulte o seguinte script de teste.
Depois que o servidor estiver em execução, você pode testar o terminal usando o seguinte script.
python src/inference/test_query.py
Este repositório foi implantado com um aplicativo de produção em mente e inclui testes de unidade e integração.
* Tesing não é um caixa eletrônico extenso, mas tentaremos aumentar a cobertura no futuro.
Testes de unidade foram incluídos para cobrir a funcionalidade principal. Você pode executar o conjunto completo de testes de unidade com o seguinte comando:
pytest test/unit/
Além dos testes de unidade, incluímos alguns testes de integração para os fluxos de trabalho de treinamento, ajuste fino e amostragem.
pytest test/integration/
* Atualmente, o teste de integração exige que os dados funcionem (veja acima).
Geralmente é aconselhável ativar ganchos pré-comprometidos ao trabalhar com o repositório. Atualmente, executa algumas verificações básicas de formatação e executa o conjunto de testes de unidade (mas não os testes de integração).
conda install -c conda-forge pre-commit
pre-commit install
A implementação do GPT neste repositório é inspirada no Repo Nanogpt por Andrej Karpathy. Nosso objetivo era reimplementar, re-estruturar e estendê-lo com módulos que facilitam a criação de diferentes tipos de aplicações de produção.