Guias, códigos e configurações para a família de modelos ReplitLM .
Isso está sendo continuamente atualizado para adicionar mais maneiras de usar e construir com base em nossos modelos.
Modelo | Ponto de verificação [CC BY-SA 4.0] | Vocabulário [CC BY-SA 4.0] | Código [Apache 2.0] |
---|---|---|---|
código de repetição-v1-3b | Link para baixar | Download | Repositório |
código de repetição-v1_5-3b | (Em breve) | (Em breve) | Em breve |
2 de maio de 2023: replit-code-v1-3b
Também temos um espaço alimentado por GPU para o modelo replit-code-v1-3b
onde você pode usar o modelo diretamente!
Demonstração hospedada com GPU
Todos os modelos Replit lançados estão disponíveis no Hugging Face na página da organização Replit e podem ser usados com a biblioteca Hugging Face Transformers.
Você pode usar os modelos Replit com a biblioteca Hugging Face Transformers. O README de cada modelo lançado contém instruções sobre como usar o modelo com Hugging Face Transformers. Certifique-se de definir clean_up_tokenization_spaces=False
ao decodificar com o tokenizer e também de usar o pós-processamento recomendado fornecido no README.
Modelo | LEIA-ME |
---|---|
código de repetição-v1-3b | Documentação |
Recomendamos qualquer treinamento adicional, pré-treinamento e ajuste fino dos modelos Replit com LLM Foundry e Composer da MosaicML.
Nossos modelos Replit são compatíveis com LLM Foundry e podem ser treinados/ajustados de forma altamente otimizada com LLM Foundry + Composer usando técnicas de treinamento de última geração, componentes de arquitetura, otimizadores e muito mais. Todos os modelos, LLM Foundry e a estrutura de treinamento Composer são baseados em Pytorch. Usando-os, você pode treinar os modelos Replit em seus próprios conjuntos de dados.
As etapas a seguir fornecem um esboço do que precisa ser feito para treinar os modelos com links para as seções de documentação do LLM Foundry necessárias para cada etapa:
Instale o LLM Foundry
Para começar com o LLM Foundry, você pode seguir o README do LLM Foundry para:
Em alto nível, o LLM Foundry é usado definindo um yaml de configuração e, em seguida, executando o script de treinamento train/train.py
no repositório LLM Foundry com o yaml de configuração definido usando um comando como composer train/train.py <configuration_yaml_path> <extra_args>
. O diretório scripts/train/yamls contém exemplos de YAMLs para ajuste fino e pré-preparação.
Instale outros requisitos para os modelos Replit
Você terá então que instalar algumas outras dependências especificadas em requirements.txt
.
Para treinar com LLM Foundry, você precisa converter seu conjunto de dados para o formato Mosaic StreamingDataset.
Os tipos de fontes de conjuntos de dados suportados são conjuntos de dados JSON e conjuntos de dados Hugging Face.
A documentação de preparação de dados no LLM Foundry fornece as etapas sobre como fazer isso.
Ao executar convert_dataset_hf.py
ou convert_dataset_json.py
nas etapas acima, você terá que especificar que está usando o tokenizer Replit passando o argumento --tokenizer replit/replit-code-v1-3b
. Uma etapa importante (devido à implementação atual de llm-foundry
) é editar scripts/data_prep/convert_dataset_hf.py
passando o trust_remote_code=True
kwarg para a chamada AutoTokenizer.from_pretrained
quando o tokenizer é carregado no método main()
.
Testando seu conjunto de dados convertido
Para testar o conjunto de dados convertido e verificar se ele está funcionando com o dataloader, você pode seguir a seção Testar o dataloader nos documentos do LLM Foundry.
Para treinar com LLM Foundry, você precisa definir um yaml de configuração de execução. Este yaml define o modelo, conjunto de dados de treinamento, conjunto de dados e métrica de avaliação, parâmetros de treinamento e muito mais.
Usando os modelos de repetição
Para qualquer YAML de configuração que você definir para treinar/ajustar com o LLM Foundry, você pode conectar e usar o modelo Replit substituindo o modelo e as chaves do tokenizer em seu YAML da seguinte maneira:
...
model:
name: hf_causal_lm
pretrained: true
pretrained_model_name_or_path: replit/replit-code-v1-3b
config_overrides:
attn_config:
attn_impl: triton
attn_uses_sequence_id: false
tokenizer:
name: replit/replit-code-v1-3b
kwargs:
model_max_length: ${max_seq_len}
trust_remote_code: true
...
Isso carregará nosso modelo com seus pesos do Hugging Face para sua configuração.
Depois de converter seu conjunto de dados e definir um yaml de configuração de execução, você pode executar o treinamento com LLM Foundry.
Siga a seção Como iniciar o treinamento nos documentos do LLM Foundry para executar o treinamento. A seção mostra como executar treinamento de nó único e de vários nós. Efetivamente, você executará o script de treinamento scripts/train/train.py
no repositório LLM Foundry com o yaml de configuração definido usando um comando como composer train/train.py <configuration_yaml_path> <extra_args>
.
Há alguma lógica codificada no Composer que precisamos contornar para salvar os pontos de verificação. No script de treinamento scripts/train/train.py
, adicione a linha model.tokenizer = None
logo após o modelo ser inicializado e antes do dataloader do trem ser configurado, ou seja, no momento da escrita, linha 147 em main()
. Isso efetivamente garante que não salvaremos o tokenizer com o estado do ponto de verificação. Precisamos dessa solução alternativa porque atualmente o Composer não consegue lidar com pontos de verificação de salvamento com tokenizers que incluem arquivos *.py
.
Você pode ajustar nossos modelos ReplitLM para seu próprio caso de uso. Para a maioria dos casos de uso de ajuste de instrução, recomendamos começar pelos exemplos de Hugging Face abaixo. Caso contrário, também fornecemos um guia detalhado para fazer o ajuste de instruções com LLM Foundry.
Você pode ajustar o modelo replit-code-v1-3b
em conjuntos de dados estilo Alpaca usando a biblioteca transformers
.
Para fazer isso, você precisará de um conjunto de dados de ajuste de instruções que já esteja no formato estilo Alpaca, como:
O contribuidor de código aberto Teknium bifurcou o repositório Alpaca original para o repositório stanford_alpaca-replit que está pré-configurado para funcionar com nossos modelos. Recomendamos fortemente que você use isso como ponto de partida.
O repositório contém instruções sobre como configurar e executar o treinador. O formato de conjunto de dados estilo Alpaca necessário é descrito aqui. Qualquer conjunto de dados formatado no estilo Alpaca funcionará com o treinador. Por exemplo, o conjunto de dados Code Alpaca pode ser usado para instruir o ajuste de nosso modelo usando o script de treinamento no repositório do Teknium.
Você também pode usar o LLM Foundry para fazer o ajuste de instruções. Para fazer isso, você precisa seguir as seguintes etapas em alto nível, com os detalhes e etapas específicos que você precisa seguir vinculados conforme necessário:
Instale o LLM Foundry
Para começar com o LLM Foundry, você pode seguir o README do LLM Foundry para:
Em alto nível, o LLM Foundry é usado definindo um yaml de configuração e, em seguida, executando o script de treinamento train/train.py
no repositório LLM Foundry com o yaml de configuração definido usando um comando como composer train/train.py <configuration_yaml_path> <extra_args>
. O diretório scripts/train/yamls contém exemplos de YAMLs para ajuste fino e pré-preparação.
Instale outros requisitos para os modelos Replit
Você terá então que instalar algumas outras dependências especificadas em requirements.txt
.
Pode ser qualquer um dos seguintes:
Dependendo do conjunto de dados que você está usando, pode ou não precisar formatar o conjunto de dados no formato esperado pelo LLM Foundry.
Conjuntos de dados para os quais o pré-processamento personalizado não é necessário
Alguns conjuntos de dados como mosaicml/dolly_hhrlhf já vêm com uma função de pré-processamento que você pode usar imediatamente. No momento da publicação, os seguintes conjuntos de dados Hugging Face vieram com uma função de pré-processamento pré-registrada: HuggingFaceH4/databricks_dolly_15k
, Muennighoff/P3
, Muennighoff/flan
, bigscience/P3
, tatsu-lab/alpaca
.
Conjuntos de dados para os quais é necessário pré-processamento personalizado
Se não estiver usando nenhum dos conjuntos de dados acima, você precisará escrever sua própria função de pré-processamento e registrá-la.
Para qualquer conjunto de dados, você precisa de cada exemplo formatado como um dicionário com as seguintes chaves:
formatted_example = { 'prompt' : < prompt_text > , 'response' : < response_text > }
ou seja, cada amostra é um dicionário com as duas chaves. Este é o formato que o dataloader finetuning
espera no downstream.
Guia para formatar seu conjunto de dados
A seção Formatação de dados no repositório original do LLM Foundry descreve como fazer isso.
Caso você precise criar uma função de pré-processamento personalizada para colocar seus dados no formato correto e as etapas na documentação do LLM Foundry estejam confundindo você, o TL;DR parafraseado é o seguinte:
preprocess.py
) em algum lugar da sua base de código, por exemplo, no mesmo diretório do seu script de treinamento, desde que possa ser importado pelo seu script de treinamento.preprocess_function()
que recebe como entrada uma amostra do seu conjunto de dados e retorna um dicionário com as teclas prompt
e response
conforme descrito acima, de acordo com sua lógica de como formatar a amostra no formato necessário.preprocess.py
) e a função (por exemplo, preprocess_function()
) que você criou. Agora você pode usar seu conjunto de dados para ajustar o modelo Replit.
Guia
A seção Uso no repositório LLM Foundry original descreve como usar seu conjunto de dados e ajustar o modelo Replit.
Se estiver usando as opções 1) ou 2) nessa seção, você modificará train_loader
e eval_loader
se aplicável, em seu YAML de treinamento com base no que fez nas duas etapas anteriores. Se você estiver usando a opção 3) (ou seja, conjunto de dados de streaming), primeiro converterá o conjunto de dados no formato correto com chaves de prompt e resposta e, em seguida, gravá-lo-á em um conjunto de dados MDS local. Depois disso, você pode modificar seu YAML para apontar para isso.