[README] [?HF Repo] [?Versión web]
chino | inglés
El modelo grande de Yayi se obtiene ajustando instrucciones sobre millones de datos de dominio de alta calidad construidos manualmente. Los datos de capacitación cubren cinco campos principales, como publicidad en los medios, análisis de la opinión pública, seguridad pública, control de riesgos financieros y gobernanza urbana. cientos de tareas de instrucción de lenguaje natural. Durante el proceso iterativo del gran modelo de Yayi desde los pesos de inicialización previos al entrenamiento hasta los modelos de dominio, mejoramos gradualmente sus capacidades chinas básicas y sus capacidades de análisis de dominio, y agregamos múltiples rondas de diálogo y algunas capacidades de complemento. Al mismo tiempo, mediante la optimización continua de la retroalimentación manual durante el proceso de prueba interna de cientos de usuarios, hemos mejorado aún más el rendimiento y la seguridad del modelo.
A través del código abierto del modelo grande de Yayi, contribuiremos con nuestros propios esfuerzos para promover el desarrollo de la comunidad china de código abierto de modelos grandes previamente capacitados. A través del código abierto, construiremos el ecosistema del modelo grande de Yayi con cada socio.
Noticias: Yayi Large Model ha abierto la versión del modelo de optimización chino basado en LLaMA 2 para explorar las últimas prácticas adecuadas para tareas multidominio chinas.
Nombre del modelo | ?Identificación del modelo HF | Descargar dirección |
---|---|---|
YAYI -7B | wengué-investigación/ YAYI -7b | Descarga de modelo |
YAYI -7B-Llama2 | wengué-investigación/ YAYI -7b-llama2 | Descarga de modelo |
YAYI -13B-Llama2 | wengué-investigación/ YAYI -13b-llama2 | Descarga de 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
No se recomienda que las versiones torch
y transformers
sean inferiores a las versiones recomendadas.
Los pesos de los modelos (versión 7b) son de código abierto en nuestro almacén de modelos de Huggingface y puede descargarlos y utilizarlos. El siguiente es un código de muestra que simplemente llama YAYI -7b
para la inferencia de tareas posteriores. Se puede ejecutar en una sola GPU como A100/A800/3090. Ocupa aproximadamente 20 GB de memoria de video cuando se usa la inferencia de precisión 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 ]))
Tenga en cuenta que el token especial <|End|>
se agrega como carácter final durante el entrenamiento del modelo, por lo que eos_token_id
se establece en la identificación del token correspondiente al carácter final en GenerationConfig
del código anterior. El código de inferencia basado en el modelo de ajuste fino de instrucciones LlaMA2 es ligeramente diferente. Para obtener más información, consulte la versión correspondiente en nuestro almacén de modelos Huggingface.
Este proyecto se basa en el marco de deepspeed
para el entrenamiento de modelos. Después de configurar el entorno, ejecute el script correspondiente para comenzar el entrenamiento. Admite el ajuste completo de parámetros de datos de comando, el ajuste fino de LoRA de datos de comando, el ajuste completo de parámetros de datos de diálogo de múltiples rondas y el ajuste fino de LoRA de datos de diálogo de múltiples rondas.
Formato de datos : consulte data/ YAYI _train_example.json
, que adopta el formato de datos jsonline del proyecto Alpaca. Cada línea tiene un dato json, que consta de tres campos "instruction"
, "input"
y "output"
. Entre ellos, "instruction"
y "input"
son la entrada de la instrucción y "output"
es la respuesta de salida.
Instrucciones de operación : Ejecute el siguiente comando para iniciar el ajuste completo de los parámetros del modelo grande de Yayi. Este comando admite el entrenamiento con varias tarjetas en una sola máquina. Si necesita configurar el entrenamiento con varias máquinas y tarjetas, consulte la documentación oficial de DeepSpeed. Se recomienda utilizar una configuración de hardware 4*A100(80G) o 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 datos : igual que el anterior, consulte data/ YAYI _train_example.json
.
Instrucciones de operación : LoRA es un método de ajuste fino eficiente y de bajos recursos, y una sola tarjeta puede entrenar decenas de miles de millones de modelos de parámetros. Este proyecto implementa principalmente el ajuste fino de LoRA basado en peft
. Ejecute el siguiente comando para iniciar el ajuste fino de LoRA del modelo grande de Yayi. El ajuste fino se puede completar utilizando una sola tarjeta A100 (80G) y la tasa de aprendizaje se puede ajustar a un valor mayor. Entre ellos, --lora-dim
establece el rango de la matriz de actualización, cuanto mayor sea el valor, mayor será el número de parámetros para el entrenamiento; --lora-module-name
establece el módulo de la matriz de actualización de LoRA, que se puede cambiar. según el 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 datos : consulte data/ YAYI _train_example_multi_rounds.json
, que es un archivo JSON estándar. Cada dato consta de "system"
y "conversations"
, donde "system"
es la información de configuración de roles global y puede ser una cadena vacía. "conversations"
Es un diálogo de múltiples rondas entre dos personajes, humano y YAYI .
Instrucciones de operación : Ejecute el siguiente comando para iniciar el ajuste completo de los parámetros del modelo grande de Yayi. Para datos de diálogo de rondas múltiples, solo se calcula la pérdida de la respuesta generada por el modelo. Este comando admite el entrenamiento con varias tarjetas en una sola máquina. Si necesita configurar el entrenamiento con varias máquinas y tarjetas, consulte la documentación oficial de DeepSpeed. Se recomienda utilizar una configuración de hardware 4*A100(80G) o 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
.El modelo grande de Yayi se entrena en base al conjunto de datos de ajuste fino de instrucciones de dominio de alta calidad de millones de niveles de Zhongke Wenge. Esta vez abrimos el código fuente de 50,000 conjuntos de datos de entrenamiento, que se pueden descargar desde nuestro almacén de datos de Huggingface. El conjunto de datos cubre principalmente varios campos importantes, como finanzas, seguridad, opinión pública y medios. Hemos agregado prefijos de aviso discretos a la mayoría de los datos de comando de las tareas en cada campo para distinguir los datos en cada campo. Además, los datos de entrenamiento también incluyen algunos datos de mejora de seguridad, datos de capacidad de complemento, datos de diálogo de rondas múltiples, etc.
El modelo SFT entrenado en base a datos actuales y modelos básicos todavía tiene los siguientes problemas en términos de efectividad:
Con base en las limitaciones del modelo anterior, exigimos a los desarrolladores que utilicen únicamente nuestro código fuente abierto, datos, modelos y derivados posteriores generados por este proyecto con fines de investigación y no con fines comerciales u otros usos que causen daño a la sociedad. Tenga cuidado al identificar y utilizar el contenido generado por Yayi Big Model y no difundir el contenido dañino generado en Internet. Si se produjera alguna consecuencia adversa, el comunicador será responsable.
Este proyecto solo se puede utilizar con fines de investigación y el desarrollador del proyecto no es responsable de ningún daño o pérdida causado por el uso de este proyecto (incluidos, entre otros, datos, modelos, códigos, etc.). Consulte el descargo de responsabilidad para obtener más detalles.
El código de este proyecto es de código abierto según el protocolo Apache-2.0, los datos adoptan el protocolo CC BY-NC 4.0 y el uso de los pesos del modelo de la serie YAYI debe seguir la licencia del modelo.