[README] [?HF Repo] [?Versão web]
Chinês | Inglês
O grande modelo Yayi é obtido por meio de instruções de ajuste fino em milhões de dados de domínio de alta qualidade construídos manualmente. Os dados de treinamento abrangem cinco campos principais, como publicidade na mídia, análise da opinião pública, segurança pública, controle de risco financeiro e governança urbana. centenas de tarefas de instrução de linguagem natural. Durante o processo iterativo do grande modelo Yayi, desde os pesos de inicialização de pré-treinamento até os modelos de domínio, aprimoramos gradualmente suas capacidades básicas chinesas e de análise de domínio, e adicionamos várias rodadas de diálogo e alguns recursos de plug-in. Ao mesmo tempo, através da otimização contínua do feedback manual durante o processo de teste interno de centenas de usuários, melhoramos ainda mais o desempenho e a segurança do modelo.
Através do código aberto do grande modelo Yayi, contribuiremos com nossos próprios esforços para promover o desenvolvimento da comunidade chinesa pré-treinada de grande modelo de código aberto. Por meio do código aberto, construiremos o ecossistema do grande modelo Yayi com todos os parceiros.
Notícias: Yayi Large Model abriu o código-fonte da versão do modelo de otimização chinês baseado no LLaMA 2 para explorar as práticas mais recentes adequadas para tarefas chinesas de vários domínios.
Nome do modelo | ?Identificação do modelo HF | Endereço de download |
---|---|---|
YAYI -7B | pesquisa wengué/ YAYI -7b | Baixar modelo |
YAYI -7B-Lhama2 | pesquisa wengué/ YAYI -7b-llama2 | Baixar modelo |
YAYI -13B-Lhama2 | pesquisa wengué/ YAYI -13b-llama2 | Baixar modelo |
git clone https://github.com/wenge-research/YAYI.git
cd YAYI
conda create --name YAYI python=3.8
conda activate YAYI
pip install -r requirements.txt
Não é recomendado que as versões torch
e transformers
sejam inferiores às versões recomendadas.
Os pesos dos modelos (versão 7b) foram de código aberto em nosso armazém de modelos Huggingface e você pode baixá-los e usá-los. A seguir está um código de exemplo que simplesmente chama YAYI -7b
para inferência de tarefa downstream. Ele pode ser executado em uma única GPU, como A100/A800/3090. Ele ocupa cerca de 20 GB de memória de vídeo ao usar a inferência de precisão FP16.
from transformers import AutoTokenizer , AutoModelForCausalLM , GenerationConfig
import torch
YAYI _7b_path = "wenge-research/ YAYI -7b"
tokenizer = AutoTokenizer . from_pretrained ( YAYI _7b_path )
model = AutoModelForCausalLM . from_pretrained ( YAYI _7b_path , device_map = "auto" , torch_dtype = torch . bfloat16 )
prompt = "你好"
formatted_prompt = f"<|System|>: n A chat between a human and an AI assistant named YAYI . n YAYI is a helpful and harmless language model developed by Beijing Wenge Technology Co.,Ltd. n n <|Human|>: n { prompt } n n <| YAYI |>:"
inputs = tokenizer ( formatted_prompt , return_tensors = "pt" ). to ( model . device )
eos_token_id = tokenizer ( "<|End|>" ). input_ids [ 0 ]
generation_config = GenerationConfig (
eos_token_id = eos_token_id ,
pad_token_id = eos_token_id ,
do_sample = True ,
max_new_tokens = 100 ,
temperature = 0.3 ,
repetition_penalty = 1.1 ,
no_repeat_ngram_size = 0
)
response = model . generate ( ** inputs , generation_config = generation_config )
print ( tokenizer . decode ( response [ 0 ]))
Observe que o token especial <|End|>
é adicionado como o caractere final durante o treinamento do modelo, portanto, eos_token_id
é definido como o ID do token correspondente ao caractere final no GenerationConfig
do código acima. O código de inferência baseado no modelo de ajuste fino da instrução LlaMA2 é um pouco diferente. Para obter detalhes, consulte a versão correspondente em nosso armazém de modelos Huggingface.
Este projeto é baseado no framework deepspeed
para treinamento de modelo. Após configurar o ambiente, execute o script correspondente para iniciar o treinamento. Suporta ajuste fino de parâmetros completos de dados de comando, ajuste fino LoRA de dados de comando, ajuste fino de parâmetros completos de dados de diálogo multi-rodada e ajuste fino LoRA de dados de diálogo multi-rodada.
Formato de dados : consulte data/ YAYI _train_example.json
, que adota o formato de dados jsonline do projeto Alpaca. Cada linha possui um dado json, consistindo em três campos: "instruction"
, "input"
e "output"
. Entre eles, "instruction"
e "input"
são a entrada da instrução e "output"
é a resposta de saída.
Instruções de operação : Execute o seguinte comando para iniciar o ajuste fino de todos os parâmetros do modelo grande Yayi. Este comando oferece suporte ao treinamento de múltiplas placas em uma única máquina. Se você precisar configurar o treinamento em várias máquinas e múltiplas placas, consulte a documentação oficial do deepspeed. Recomenda-se usar configuração de hardware 4*A100(80G) ou superior.
deepspeed --num_gpus=8
--module training.trainer
--data-path ./data/ YAYI _train_example.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-6
--seed 515
Formato de dados : igual ao acima, consulte data/ YAYI _train_example.json
.
Instruções de operação : LoRA é um método de ajuste fino eficiente e de poucos recursos, e um único cartão pode treinar dezenas de bilhões de modelos de parâmetros. Este projeto implementa principalmente o ajuste fino de LoRA com base em peft
. Execute o seguinte comando para iniciar o ajuste fino de LoRA do modelo grande Yayi. O ajuste fino pode ser concluído usando um único cartão A100 (80G) e a taxa de aprendizado pode ser ajustada para um valor maior. Entre eles, --lora-dim
define a classificação da matriz de atualização. Quanto maior o valor, maior o número de parâmetros para treinamento; --lora-module-name
define o módulo da matriz de atualização LoRA, que pode ser alterado; de acordo com o tipo de modelo.
deepspeed --num_gpus=1
--module training.trainer_lora
--data-path ./data/ YAYI _train_example.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-4
--seed 515
--lora-dim 16
--lora-module-name query_key_value
Formato de dados : consulte data/ YAYI _train_example_multi_rounds.json
, que é um arquivo JSON padrão. Cada dado consiste em "system"
e "conversations"
, onde "system"
é a informação de configuração de função global e pode ser uma string vazia, "conversations"
É um diálogo multi-rodada entre dois personagens, humano e YAYI alternadamente.
Instruções de operação : Execute o seguinte comando para iniciar o ajuste fino de todos os parâmetros do modelo grande Yayi. Para dados de diálogo multi-rodada, apenas a perda da resposta gerada pelo modelo é calculada. Este comando oferece suporte ao treinamento de múltiplas placas em uma única máquina. Se você precisar configurar o treinamento em várias máquinas e múltiplas placas, consulte a documentação oficial do deepspeed. Recomenda-se usar configuração de hardware 4*A100(80G) ou superior.
deepspeed --num_gpus=8
--module training.trainer_multi_rounds
--data-path ./data/ YAYI _train_example_multi_rounds.json
--input-model ./checkpoints/ YAYI -7b
--deepspeed ./config/deepspeed_zero2_bf16.json
--epochs 2
--local-output-dir ./checkpoints
--per-device-train-batch-size 8
--per-device-eval-batch-size 8
--logging-steps 1
--save-steps 100
--save-total-limit 10
--eval-steps 100
--warmup-steps 100
--test-size 400
--lr 5e-7
--seed 515
data/ YAYI _train_example_multi_rounds.json
.O grande modelo Yayi é treinado com base no conjunto de dados de ajuste fino de instruções de domínio de alta qualidade de um milhão de níveis de Zhongke Wenge. Desta vez, abrimos o código-fonte de 50.000 conjuntos de dados de treinamento, que podem ser baixados de nosso data warehouse Huggingface. O conjunto de dados cobre principalmente vários campos importantes, como finanças, segurança, opinião pública e mídia. Adicionamos prefixos de prompt discretos à maioria dos dados de comando de tarefas em cada campo para distinguir os dados em cada campo. Além disso, os dados de treinamento também incluem alguns dados de aprimoramento de segurança, dados de capacidade de plug-in, dados de diálogo multi-round, etc.
O modelo SFT treinado com base em dados atuais e modelos básicos ainda apresenta os seguintes problemas em termos de eficácia:
Com base nas limitações do modelo acima, exigimos que os desenvolvedores usem apenas nosso código-fonte aberto, dados, modelos e derivados subsequentes gerados por este projeto para fins de pesquisa e não para fins comerciais ou outros usos que possam causar danos à sociedade. Tenha cuidado ao identificar e usar o conteúdo gerado por Yayi Big Model e não divulgue o conteúdo prejudicial gerado na Internet. Se ocorrer alguma consequência adversa, o comunicador será responsável.
Este projeto só pode ser usado para fins de pesquisa, e o desenvolvedor do projeto não é responsável por qualquer dano ou perda causado pelo uso deste projeto (incluindo, mas não se limitando a dados, modelos, códigos, etc.). Consulte o aviso de isenção de responsabilidade para obter detalhes.
O código neste projeto é de código aberto de acordo com o protocolo Apache-2.0, e os dados adotam o protocolo CC BY-NC 4.0. O uso dos pesos do modelo da série YAYI precisa seguir a Licença do Modelo.