Open-ChatGPT
es una biblioteca de código abierto que le permite entrenar un modelo de inteligencia artificial hiperpersonalizado similar a ChatGPT utilizando sus propios datos y la menor cantidad de computación posible.
Open-ChatGPT
es un marco de sistema general para permitir una experiencia de capacitación de un extremo a otro para modelos similares a ChatGPT. Puede tomar automáticamente sus modelos de lenguaje grande pre-entrenados favoritos a través de tres etapas de estilo OpenAI InstructGPT para producir su propio modelo de estilo ChatGPT de alta calidad.
Hemos implementado RLHF (aprendizaje por refuerzo con retroalimentación humana) impulsado por la biblioteca de transformadores y DeepsSpeed. Admite entrenamiento y descarga distribuidos, que pueden adaptarse a modelos extremadamente grandes.
Si te gusta el proyecto, muestra tu apoyo dejando una estrella.
[2023/05] Implementamos Stanford Alpaca Lora .
[2023/05] Implementamos Stanford Alpaca .
[2023/04] Lanzamos el canal RLHF (aprendizaje por refuerzo con retroalimentación humana) .
[2023/03] Publicamos el código OpenChatGPT: una biblioteca de código abierto para entrenar ChatBot como ChatGPT .
Open-ChatGPT: una implementación de código abierto de ChatGPT
No hay suficiente memoria
Ajuste fino de Alpaca-7B
Usando velocidad profunda
Afinando Alpaca-7B con Lora
Conjuntos de datos de instrucciones
Conjuntos de datos RLHF
Preprocesamiento de datos
Formato de datos
Introducción
Noticias
Tabla de contenido
Recopilación de datos
Instalar
Instrucción Fintune
Inferencia
Contribuyendo
Licencia
Expresiones de gratitud
Citación
Una colección de conjuntos de datos de ajuste de instrucciones de código abierto para entrenar LLM (texto y multimodal) basados en chat (GPT-4, ChatGPT, LLaMA, Alpaca).
En referencia a esto (@jianzhnie), etiquetamos cada conjunto de datos recopilados de acuerdo con las siguientes reglas:
(Idioma)Etiquetas linguales:
ES: Conjuntos de datos de instrucciones en inglés
CN: conjuntos de datos de instrucciones en chino
ML: [multilingüe] Conjuntos de datos de instrucciones en varios idiomas
(Tarea) Etiquetas de tarea:
MT: [Multitarea] Conjuntos de datos que contienen múltiples tareas
TS: [Tarea específica] Conjuntos de datos diseñados para tareas específicas
(Gen)Método de generación:
HG: [Conjunto de datos generado por humanos] Conjuntos de datos creados por humanos
SI: [Autoinstrucción] Conjuntos de datos generados utilizando métodos de autoinstrucción
MIX: [Conjunto de datos mixtos] El conjunto de datos contiene datos generados tanto por humanos como por máquinas
COL: [Colección de conjuntos de datos] Conjunto de datos creado a partir de una colección de otros conjuntos de datos
Proyecto | Conjuntos de datos | organización | números | Lang | Tarea | generación | Tipo | Src |
---|---|---|---|---|---|---|---|---|
Cadena de pensamiento | datos_cuna | pocos_datos_disparos | 74771 | EN/CN | MONTE | hg | instruir con razonamiento de cuna | anotar CoT en datos existentes | |
GPT4all | nomic-ai/gpt4all-j-prompt-generaciones | nomic-ai | 806199 | ES | MONTE | COLUMNA | Código, historias y diálogos. | destilación de GPT-3.5-turbo |
GPProfesor | GPT-4 Instrucción general |Instrucción de juego de roles |Instrucción de código | Formador de herramientas | teknio1 | 29013 | ES | MONTE | SI | general, juego de rol, formador de herramientas | GPT-4 y formador de herramientas |
guanaco | JosephusCheung/GuanacoConjunto de datos | JosefoCheung | 534610 | ml | MONTE | SI | varias tareas lingüísticas | texto-davinci-003 |
HC3 | Hola-SimpleAI/HC3 | Hola-SimpleAI | 万得资讯 | 37175 | EN/CN | TS | MEZCLA | evaluación del diálogo | humano o ChatGPT |
HC3-chino | Hola-SimpleAI/HC3-Chino | Hola-SimpleAI|万得资讯 | 13k | CN | TS | MEZCLA | evaluación del diálogo | humano o ChatGPT |
alpaca | tatsu-laboratorio/alpaca | laboratorio-tatsu | 52002 | ES | MONTE | SI | instrucción general | texto-davinci-003 |
AlpacaDatosLimpiado | limpiado con yahma/alpaca | yahma | 52k | ES | MONTE | SI | instrucción general | texto-davinci-003 |
China-LLaMA-Alpaca | alpaca_data_zh_51k | ymcui(讯飞) | 51k | CN | MONTE | SI | instrucción general | texto-davinci-003 |
Luotuo-chino-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52k | CN | MONTE | SI | instrucción general | texto-davinci-003 |
Instrucciones naturales | Tarea Allen AI 61|Tarea de 1,5k | Allen AI | 5040134 | ml | MONTE | COLUMNA | diversas tareas de PNL | colección de conjuntos de datos anotados por humanos |
bella_cn | Grupo Bella/tren_1M_CN |Grupo Bella/tren_0.5M_CN | BelleGroup(链家) | 1079517 | CN | TS/TM | SI | general, razonamiento matemático, diálogo |
Aquí, solo enumeramos una pequeña parte de la lista de conjuntos de datos de ajuste de instrucciones; para encontrar más conjuntos de datos, consulte los siguientes enlaces: jianzhnie/awesome-instruction-datasets: una colección de conjuntos de datos de código abierto para entrenar LLM que siguen instrucciones (ChatGPT ,LLaMA,Alpaca).
El conjunto de datos de ajuste de instrucciones/aprendizaje reforzado a partir de la retroalimentación humana (RLHF) es un componente clave de los LLM que siguen instrucciones como ChatGPT. A continuación se incluye una lista completa de conjuntos de datos utilizados para ajustar las instrucciones en varios LLM, lo que facilita a los investigadores y desarrolladores el acceso y la utilización de estos recursos.
Proyecto | organización | números | Lang | Resumen |
---|---|---|---|---|
comparaciones_webgpt | abiertoai | 19.578 | Inglés | En el artículo de WebGPT, los autores entrenaron un modelo de recompensa a partir de comentarios humanos. Utilizaron el modelo de recompensa para entrenar un modelo de respuesta a preguntas de formato largo para alinearlo con las preferencias humanas. Este es el conjunto de datos de todas las comparaciones que se marcaron como adecuadas para el modelado de recompensas al final del proyecto WebGPT. Hay 19.578 comparaciones en total. |
SHP | stanfordnlp | 349 mil | Inglés | SHP es un conjunto de datos de 385.000 preferencias humanas colectivas sobre respuestas a preguntas/instrucciones en 18 áreas temáticas diferentes, desde cocina hasta asesoramiento legal. Las preferencias están destinadas a reflejar la utilidad de una respuesta sobre otra y están destinadas a usarse para entrenar modelos de recompensa RLHF y modelos de evaluación NLG (por ejemplo, SteamSHP). |
conjuntos de datos de recompensa rlhf | yitingxie | 76,3 mil | Inglés | |
Dahoas/full-hh-rlhf | dahoas | 112 mil | Inglés | El conjunto de datos HH de Anthropic se reformuló en muestras rápidas, elegidas y rechazadas. |
Dahoas/synthetic-instruct-gptj-pares | dahoas | Inglés | ||
Dahoas/rm-estático | dahoas | 76,3k | Inglés | División de hh-static utilizada para entrenar modelos de recompensa después de un ajuste fino supervisado. |
Antrópico/hh-rlhf | antrópico | 22k | Inglés | Este conjunto de datos RLHF es un conjunto de datos 'en línea' iterado que incluye datos de modelos de lenguaje 52B. Contiene 22.000 comparaciones de utilidad y no hay datos de equipos rojos. |
Ajuste-de-instrucción-con-GPT-4/GPT-4-LLM | Instrucción-Tuning-con-GPT-4 | 52k | Inglés | Respuestas clasificadas (Nota: los datos se evalúan mediante el modelo GPT-4 , NO humano) de las indicaciones de Alpaca de tres modelos (GPT-4, GPT-3.5 y OPT-IML) pidiendo a GPT-4 que califique la calidad. El autor cree que "GPT-4 es capaz de identificar y corregir sus propios errores y juzgar con precisión la calidad de las respuestas" |
thu-coai/Indicaciones-de-seguridad | thu-coai | 100k | Chino | 中文安全prompts,用于评测和提升大模型的安全性,将模型的输出与人类的价值观对齐. |
Proyecto Chatgpt-Comparación-Detección |
Para encontrar más conjuntos de datos, consulte los siguientes enlaces: jianzhnie/awesome-instruction-datasets: una colección de conjuntos de datos de código abierto para capacitar LLM que siguen instrucciones (ChatGPT, LLaMA, Alpaca).
Hemos desarrollado un código de preprocesamiento de datos que ofrece una interfaz unificada para varios modelos de lenguaje grandes. Este código se puede utilizar para preprocesar datos para diversos fines, como tareas de modelado de Instruct Tuning y RLHF. Si está interesado en obtener más información, consulte los siguientes enlaces a nuestro conjunto de datos y utilidades de datos:
Prompt_dataset.py
datos_utils.py
En nuestra colección, todos los datos se han formateado utilizando las mismas plantillas. Cada muestra sigue la siguiente estructura:
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
clon de git https://github.com/jianzhnie/open-chatgpt.git instalación de pip -r requisitos.txt
PEFT
Si desea utilizar LORA junto con otros métodos eficientes en parámetros, instale peft como una dependencia adicional.
Velocidad profunda
Si desea acelerar la formación de LLM utilizando técnicas como el paralelismo de tuberías, puntos de control de gradiente y fusión de tensores. Instale DeepSpeed.
Ajustamos nuestros modelos utilizando el código de entrenamiento estándar de Hugging Face. Ajustamos LLaMA-7B y LLaMA-13B con los siguientes hiperparámetros:
Hiperparámetro | LLaMA-7B | Llama-13B |
---|---|---|
Tamaño del lote | 128 | 128 |
Tasa de aprendizaje | 2e-5 | 1e-5 |
Épocas | 3 | 5 |
Longitud máxima | 512 | 512 |
Caída de peso | 0 | 0 |
Puede utilizar el siguiente comando para entrenar Alpaca-7B con 4 x A100 (40 GB).
ejemplos de cd/alpaca/ Python train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaca --output_dir dir_trabajo/ --num_train_epochs 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_acumulación_pasos 16 --evaluación_estrategia "no" --save_strategy "pasos" --save_steps 2000 --save_total_limit 5 --tasa_de_aprendizaje 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "coseno" --logging_steps 1
Si encuentra un error OOM, considere esto.
Ingenuamente, ajustar un modelo 7B requiere aproximadamente 7 x 4 x 4 = 112 GB de VRAM. Los comandos proporcionados anteriormente permiten la fragmentación de parámetros, por lo que no se almacena ninguna copia redundante del modelo en ninguna GPU. Si desea reducir aún más el uso de memoria, aquí tiene algunas opciones:
Active la descarga de CPU para FSDP con --fsdp "full_shard auto_wrap offload"
. Esto ahorra VRAM a costa de un tiempo de ejecución más prolongado.
Según nuestra experiencia, DeepSpeed etapa 3 (con descarga) a veces puede ser más eficiente en memoria que FSDP con descarga. A continuación se muestra un ejemplo para utilizar DeepSpeed etapa 3 con 4 GPU con descarga de parámetros y optimizador:
pip instalar ejemplos 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 dir_trabajo/ --num_train_epochs 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_acumulación_pasos 8 --evaluación_estrategia "no" --save_strategy "pasos" --save_steps 2000 --save_total_limit 5 --tasa_de_aprendizaje 2e-5 --weight_decay 0. --warmup_ratio 0.03 --deepspeed "scripts/ds_config_zero3_auto.json"
LoRA afina las porciones de bajo rango de los cabezales de incrustación de consultas, claves y valores. Esto puede reducir el uso total de la memoria de 112 GB a aproximadamente 7x4 = 28 GB.
Esta parte reproduce los resultados de Stanford Alpaca utilizando una adaptación de rango bajo (LoRA).
Para realizar ajustes de forma económica y eficiente, utilizamos PEFT de Hugging Face, así como bitsandbytes de Tim Dettmers.
Este archivo contiene una aplicación sencilla de PEFT al modelo LLaMA, así como código relacionado con la construcción rápida y la tokenización.
Python train_alpaca_lora.py --model_name_or_path decapoda-research/llama-7b-hf --data_path tatsu-lab/alpaca --output_dir work_dir_lora/ --num_train_epochs 3 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_acumulación_pasos 8 --evaluación_estrategia "no" --save_strategy "pasos" --save_steps 2000 --save_total_limit 5 --tasa_de_aprendizaje 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "coseno" --logging_steps 1
Este archivo lee el modelo de base del centro de modelos Hugging Face y los pesos LoRA de tloen/alpaca-lora-7b
y ejecuta una interfaz Gradio para inferencia en una entrada específica. Los usuarios deben tratar esto como código de ejemplo para el uso del modelo y modificarlo según sea necesario.
Uso de ejemplo:
Python generar_servidor.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b
Si no tiene suficiente memoria, puede habilitar la compresión de 8 bits agregando --load-8bit
a los comandos anteriores. Esto puede reducir el uso de memoria aproximadamente a la mitad con una calidad del modelo ligeramente degradada. Es compatible con CPU, GPU y backend Metal. Alpaca-7B con compresión de 8 bits puede ejecutarse en una única GPU NVIDIA 3090/4080/T4/V100(16 GB).
Python generar_servidor.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b --load_8bit
Nuestro propósito es hacer que este repositorio sea aún mejor. Si está interesado en contribuir, consulte AQUÍ para obtener instrucciones sobre cómo contribuir.
Openn-ChatGPT
se publica bajo la licencia Apache 2.0.
Apreciamos el trabajo de muchos contribuyentes de código abierto, especialmente:
Alpaca-LoRA
lora
Alpaca Stanford
abrazando la cara
Llama
Vicuña
Cite el repositorio si utiliza los datos o el código de este repositorio.
@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}}, }