Open-ChatGPT
é uma biblioteca de código aberto que permite treinar um modelo de IA hiperpersonalizado do tipo ChatGPT usando seus próprios dados e a menor quantidade de computação possível.
Open-ChatGPT
é uma estrutura de sistema geral para permitir uma experiência de treinamento ponta a ponta para modelos semelhantes ao ChatGPT. Ele pode levar automaticamente seus modelos de linguagem grande pré-treinados favoritos por meio de um estilo OpenAI InstructGPT de três estágios para produzir seu próprio modelo de alta qualidade no estilo ChatGPT.
Implementamos RLHF (Aprendizagem por Reforço com Feedback Humano) alimentado pela biblioteca de transformadores e DeepsSpeed. Ele suporta treinamento e descarregamento distribuídos, que podem caber em modelos extremamente grandes.
Se você gostou do projeto, mostre seu apoio deixando uma estrela.
[2023/05] Implementamos Stanford Alpaca Lora .
[2023/05] Implementamos Stanford Alpaca .
[2023/04] Lançamos o pipeline RLHF (Aprendizagem por Reforço com Feedback Humano) .
[2023/03] Lançamos o código OpenChatGPT: uma biblioteca de código aberto para treinar ChatBot como ChatGPT .
Open-ChatGPT: uma implementação de código aberto do ChatGPT
Não há memória suficiente
Ajuste fino do Alpaca-7B
Usando DeepSpeed
Ajustando Alpaca-7B com Lora
Conjuntos de dados de instruções
Conjuntos de dados RLHF
Pré-processamento de dados
Formatação de dados
Introdução
Notícias
Índice
Coleta de dados
Instalar
Instrução Fintune
Inferência
Contribuindo
Licença
Agradecimentos
Citação
Uma coleção de conjuntos de dados de ajuste de instruções de código aberto para treinar LLMs (texto e multimodais) baseados em chat (GPT-4, ChatGPT,LLaMA,Alpaca).
Referindo-se a isso (@jianzhnie), rotulamos cada conjunto de dados coletado de acordo com as seguintes regras:
(Lang)Lingual-Tags:
PT: Conjuntos de dados de instruções em inglês
CN: conjuntos de dados de instruções em chinês
ML: conjuntos de dados de instruções [multilíngues] em vários idiomas
(Tarefa) Tags de tarefa:
MT: Conjuntos de dados [multitarefa] contendo múltiplas tarefas
TS: Conjuntos de dados [específicos da tarefa] adaptados para tarefas específicas
(Gen)Método de geração:
HG: [Conjunto de dados gerados por humanos] Conjuntos de dados criados por humanos
SI: [Self-Instruct] Conjuntos de dados gerados usando métodos de autoinstrução
MIX: [Conjunto de dados misto] O conjunto de dados contém dados gerados por humanos e por máquina
COL: [Coleta de conjunto de dados] Conjunto de dados feito a partir de uma coleção de outros conjuntos de dados
Projeto | Conjuntos de dados | Organização | Números | Lang | Tarefa | Geral | Tipo | Fonte |
---|---|---|---|---|---|---|---|---|
Cadeia de Pensamento | cot_data | poucos_shot_data | 74771 | PT/CN | MT | HG | instruir com raciocínio de berço | anotando CoT em dados existentes | |
GPT4all | Gerações nomic-ai/gpt4all-j-prompt | nomic-ai | 806199 | PT | MT | COL | código, histórias e diálogos | destilação de GPT-3.5-turbo |
Professor GP | Instrução Geral GPT-4 |Instrução de Roleplay |Instrução de Código | Formador de ferramentas | teknium1 | 29013 | PT | MT | SI | geral, roleplay, formador de ferramentas | GPT-4 e formador de ferramentas |
Guanaco | JosephusCheung/GuanacoDataset | Josefo Cheung | 534610 | AM | MT | SI | várias tarefas linguísticas | texto-davinci-003 |
HC3 | Olá-SimpleAI/HC3 | Olá-SimpleAI | 万得资讯 | 37175 | PT/CN | TS | MISTURA | avaliação do diálogo | humano ou ChatGPT |
HC3-Chinês | Olá-SimpleAI/HC3-Chinês | Hello-SimpleAI | 13 mil | CN | TS | MISTURA | avaliação do diálogo | humano ou ChatGPT |
alpaca | laboratório tatsu/alpaca | laboratório tatsu | 52002 | PT | MT | SI | instrução geral | texto-davinci-003 |
AlpacaDataCleaned | yahma/limpo com alpaca | sim | 52k | PT | MT | SI | instrução geral | texto-davinci-003 |
Chinês-LLaMA-Alpaca | alpaca_data_zh_51k | ymcui(讯飞) | 51 mil | CN | MT | SI | instrução geral | texto-davinci-003 |
Luotuo-Chinês-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52k | CN | MT | SI | instrução geral | texto-davinci-003 |
Instruções Naturais | Tarefa Allen AI 61 | tarefa de 1,5k | Allen IA | 5040134 | AM | MT | COL | diversas tarefas de PNL | coleção de conjuntos de dados anotados por humanos |
bela_cn | BelleGroup/train_1M_CN |BelleGroup/train_0.5M_CN | BelleGroup (链家) | 1079517 | CN | TS/MT | SI | geral, raciocínio matemático, diálogo |
Aqui, listamos apenas uma pequena parte da lista de conjuntos de dados de ajuste de instruções. Para encontrar mais conjuntos de dados, verifique os seguintes links: jianzhnie/awesome-instruction-datasets: Uma coleção de conjuntos de dados de código aberto para treinar LLMs de seguimento de instruções (ChatGPT , LLAMA, Alpaca).
O conjunto de dados de ajuste/reforço de instrução com feedback humano (RLHF) é um componente-chave de LLMs de acompanhamento de instruções, como ChatGPT. Follwing é uma lista abrangente de conjuntos de dados usados para ajuste de instruções em vários LLMs, facilitando o acesso e a utilização desses recursos para pesquisadores e desenvolvedores.
Projeto | Organização | Números | Lang | Resumo |
---|---|---|---|---|
webgpt_comparisons | Aberto | 19.578 | Inglês | No artigo WebGPT, os autores treinaram um modelo de recompensa a partir do feedback humano. Eles usaram o modelo de recompensa para treinar um modelo de resposta a perguntas longas para se alinhar às preferências humanas. Este é o conjunto de dados de todas as comparações que foram marcadas como adequadas para modelagem de recompensa ao final do projeto WebGPT. São 19.578 comparações no total. |
PCH | stanfordnlp | 349 mil | Inglês | SHP é um conjunto de dados de 385 mil preferências humanas coletivas sobre respostas a perguntas/instruções em 18 áreas temáticas diferentes, desde culinária até aconselhamento jurídico. As preferências destinam-se a refletir a utilidade de uma resposta em detrimento de outra e destinam-se a ser utilizadas para treinar modelos de recompensa RLHF e modelos de avaliação NLG (por exemplo, SteamSHP). |
conjuntos de dados de recompensa rlhf | yitingxie | 76,3 mil | Inglês | |
Dahoas/full-hh-rlhf | Dahoas | 112 mil | Inglês | Conjunto de dados HH da Anthropic reformatado em amostras imediatas, escolhidas e rejeitadas. |
Dahoas/instrução sintética-gptj-pairwise | Dahoas | Inglês | ||
Dahoas/rm-estático | Dahoas | 76,3 mil | Inglês | Divisão de hh-static usada para treinar modelos de recompensa após ajuste supervisionado. |
Antrópico/hh-rlhf | Antrópico | 22 mil | Inglês | Este conjunto de dados RLHF é um conjunto de dados 'online' iterado que inclui dados de modelos de linguagem 52B. Ele contém comparações de utilidade de 22 mil e nenhum dado de equipe vermelha. |
Ajuste de instrução com GPT-4 / GPT-4-LLM | Ajuste de instrução com GPT-4 | 52k | Inglês | Respostas classificadas (Nota: os dados são avaliados pelo modelo GPT-4 , NÃO humano) de prompts Alpaca de três modelos (GPT-4, GPT-3.5 e OPT-IML) pedindo ao GPT-4 para avaliar a qualidade. O autor acredita que "o GPT-4 é capaz de identificar e corrigir seus próprios erros e julgar com precisão a qualidade das respostas" |
qui-coai/Instruções de segurança | qui-coai | 100 mil | chinês | 中文安全prompts,用于评测和提升大模型的安全性,将模型的输出与人类的价值观对齐。 |
Projeto Chatgpt-Comparação-Detecção |
Para encontrar mais conjuntos de dados, verifique os seguintes links: jianzhnie/awesome-instruction-datasets: Uma coleção de conjuntos de dados de código aberto para treinar LLMs que seguem instruções (ChatGPT,LLaMA,Alpaca).
Desenvolvemos um código de pré-processamento de dados que oferece uma interface unificada para vários modelos de linguagem grandes. Esse código pode ser usado para pré-processar dados para diversas finalidades, como tarefas de modelagem de Instruct Tuning e RLHF. Se você estiver interessado em saber mais, confira os links a seguir para nosso conjunto de dados imediato e utilitários de dados:
prompt_dataset.py
dados_utils.py
Em nossa coleção, todos os dados foram formatados usando os mesmos modelos. Cada amostra segue a seguinte estrutura:
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
clone do git https://github.com/jianzhnie/open-chatgpt.git pip instalar -r requisitos.txt
PEFT
Se você quiser usar LORA junto com outros métodos com parâmetros eficientes, instale peft como uma dependência adicional.
Velocidade Profunda
Se você deseja acelerar o treinamento LLM usando técnicas como paralelismo de pipeline, checkpoint de gradiente e fusão de tensores. Instale o DeepSpeed.
Ajustamos nossos modelos usando o código de treinamento Hugging Face padrão. Ajustamos LLaMA-7B e LLaMA-13B com os seguintes hiperparâmetros:
Hiperparâmetro | LLaMA-7B | LLaMA-13B |
---|---|---|
Tamanho do lote | 128 | 128 |
Taxa de aprendizagem | 2e-5 | 1e-5 |
Épocas | 3 | 5 |
Comprimento máximo | 512 | 512 |
Decadência de peso | 0 | 0 |
Você pode usar o seguinte comando para treinar Alpaca-7B com 4 x A100 (40GB).
exemplos de cd/alpaca/ python train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaca --output_dir trabalho_dir/ --num_train_épocas 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --eavaliação_estratégia "não" --save_strategy "etapas" --save_steps 2000 --save_total_limit5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --lr_scheduler_type "cosseno" --logging_steps 1
Se você encontrar um erro OOM, considere isto.
Ingenuamente, o ajuste fino de um modelo 7B requer cerca de 7 x 4 x 4 = 112 GB de VRAM. Os comandos fornecidos acima permitem a fragmentação de parâmetros, portanto, nenhuma cópia redundante do modelo é armazenada em qualquer GPU. Se você quiser reduzir ainda mais o consumo de memória, aqui estão algumas opções:
Ative o descarregamento de CPU para FSDP com --fsdp "full_shard auto_wrap offload"
. Isso economiza VRAM ao custo de um tempo de execução mais longo.
Em nossa experiência, o DeepSpeed estágio 3 (com offload) pode às vezes ser mais eficiente em termos de memória do que o FSDP com offload. Aqui está um exemplo para usar o DeepSpeed estágio 3 com 4 GPUs com descarregamento de parâmetro e otimizador:
pip instalar exemplos de deepspeedcd/alpaca/ torchrun --nproc_per_node=8 train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaca --output_dir trabalho_dir/ --num_train_épocas 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_accumulation_steps 8 --eavaliação_estratégia "não" --save_strategy "etapas" --save_steps 2000 --save_total_limit5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --deepspeed "scripts/ds_config_zero3_auto.json"
LoRA ajusta fatias de baixa classificação dos cabeçotes de consulta, chave e incorporação de valor. Isso pode reduzir o consumo total de memória de 112 GB para cerca de 7x4 = 28 GB.
Esta parte reproduz os resultados do Stanford Alpaca usando adaptação de baixa classificação (LoRA).
Para fazer o ajuste fino de maneira barata e eficiente, usamos o PEFT do Hugging Face, bem como os bits e bytes de Tim Dettmers.
Este arquivo contém uma aplicação direta de PEFT ao modelo LLaMA, bem como algum código relacionado à construção de prompt e tokenização.
python train_alpaca_lora.py --model_name_or_path decapoda-research/llama-7b-hf --data_path tatsu-lab/alpaca --output_dir trabalho_dir_lora/ --num_train_épocas 3 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --eavaliação_estratégia "não" --save_strategy "etapas" --save_steps 2000 --save_total_limit5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --lr_scheduler_type "cosseno" --logging_steps 1
Este arquivo lê o modelo básico do hub do modelo Hugging Face e os pesos LoRA de tloen/alpaca-lora-7b
e executa uma interface Gradio para inferência em uma entrada especificada. Os usuários devem tratar isso como um código de exemplo para o uso do modelo e modificá-lo conforme necessário.
Exemplo de uso:
python generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b
Se você não tiver memória suficiente, poderá ativar a compactação de 8 bits adicionando --load-8bit
aos comandos acima. Isso pode reduzir o uso de memória pela metade com qualidade do modelo ligeiramente degradada. É compatível com back-end de CPU, GPU e Metal. Alpaca-7B com compactação de 8 bits pode ser executado em uma única GPU NVIDIA 3090/4080/T4/V100 (16GB).
python generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b --load_8bit
Nosso objetivo é tornar este repositório ainda melhor. Se você estiver interessado em contribuir, consulte AQUI para obter instruções sobre contribuição.
Openn-ChatGPT
é lançado sob a licença Apache 2.0.
Agradecemos o trabalho de muitos colaboradores de código aberto, especialmente:
Alpaca-LoRA
LoRA
Alpaca de Stanford
Abraçando o rosto
LLaMa
Vicunha
Cite o repositório se você usar os dados ou código deste repositório.
@misc{open-chatgpt, author = {jianzhnie}, title = {Open-ChatGPT, a chatbot based on Llama model}, year = {2023}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {url{https://github.com/jianzhnie/open-chatgpt}}, }