Open-ChatGPT
ist eine Open-Source-Bibliothek, die es Ihnen ermöglicht, ein hyperpersonalisiertes ChatGPT-ähnliches KI-Modell mit Ihren eigenen Daten und möglichst wenig Rechenaufwand zu trainieren.
Open-ChatGPT
ist ein allgemeines System-Framework zur Ermöglichung einer End-to-End-Trainingserfahrung für ChatGPT-ähnliche Modelle. Es kann Ihre bevorzugten vorab trainierten großen Sprachmodelle automatisch durch drei Stufen im OpenAI InstructGPT-Stil führen, um Ihr ganz eigenes, hochwertiges ChatGPT-Modell zu erstellen.
Wir haben RLHF (Reinforcement Learning with Human Feedback) implementiert, das auf der Transformer-Bibliothek und DeepsSpeed basiert. Es unterstützt verteiltes Training und Offloading, was für extrem große Modelle geeignet ist.
Wenn Ihnen das Projekt gefällt, zeigen Sie bitte Ihre Unterstützung, indem Sie einen Stern hinterlassen.
[2023/05] Wir implementieren Stanford Alpaca Lora .
[2023/05] Wir implementieren Stanford Alpaca .
[2023/04] Wir haben die RLHF-Pipeline (Reinforcement Learning with Human Feedback) veröffentlicht.
[2023/03] Wir haben den Code OpenChatGPT veröffentlicht: Eine Open-Source-Bibliothek zum Trainieren von ChatBot wie ChatGPT .
Open-ChatGPT: Eine Open-Source-Implementierung von ChatGPT
Nicht genügend Speicher
Feinabstimmung von Alpaca-7B
Mit DeepSpeed
Feinabstimmung von Alpaca-7B mit Lora
Befehlsdatensätze
RLHF-Datensätze
Datenvorverarbeitung
Datenformatierung
Einführung
Nachricht
Inhaltsverzeichnis
Datenerfassung
Installieren
Anleitung Fintune
Schlussfolgerung
Mitwirken
Lizenz
Danksagungen
Zitat
Eine Sammlung von Open-Source-Anweisungsoptimierungsdatensätzen zum Trainieren (textbasierter und multimodaler) chatbasierter LLMs (GPT-4, ChatGPT, LLaMA, Alpaca).
In diesem Zusammenhang (@jianzhnie) haben wir jeden gesammelten Datensatz nach den folgenden Regeln gekennzeichnet:
(Lang)Lingual-Tags:
DE: Unterrichtsdatensätze in Englisch
CN: Unterrichtsdatensätze auf Chinesisch
ML: [Mehrsprachig] Unterrichtsdatensätze in mehreren Sprachen
(Aufgabe)Aufgaben-Tags:
MT: [Multitask] Datensätze mit mehreren Aufgaben
TS: [Aufgabenspezifisch] Datensätze, die auf bestimmte Aufgaben zugeschnitten sind
(Gen)Generation-Methode:
HG: [Human Generated Dataset] Von Menschen erstellte Datensätze
SI: [Self-Instruct] Datensätze, die mit Self-Instruct-Methoden generiert wurden
MIX: [Gemischter Datensatz] Der Datensatz enthält sowohl von Menschen als auch von Maschinen generierte Daten
COL: [Collection of Dataset] Datensatz, der aus einer Sammlung anderer Datensätze erstellt wurde
Projekt | Datensätze | Org | Zahlen | Lang | Aufgabe | Gen | Typ | Src |
---|---|---|---|---|---|---|---|---|
Gedankenkette | cot_data |few_shot_data | 74771 | EN/CN | MT | HG | Unterweisen Sie mit Kinderbett-Argumentation | Kommentieren von CoT zu vorhandenen Daten | |
GPT4all | nomic-ai/gpt4all-j-prompt-generations | nomic-ai | 806199 | DE | MT | COL | Code, Geschichten und Dialoge | Destillation aus GPT-3,5-Turbo |
GPTeacher | GPT-4 General-Instruct |Rollenspiel-Instruct |Code-Instruct | Werkzeugformer | Technik1 | 29013 | DE | MT | SI | Allgemein, Rollenspiel, Werkzeugformer | GPT-4 & Toolformer |
Guanako | JosephusCheung/GuanacoDataset | JosephusCheung | 534610 | ML | MT | SI | verschiedene sprachliche Aufgaben | text-davinci-003 |
HC3 | Hallo-SimpleAI/HC3 | Hallo-SimpleAI | 万得资讯 | 37175 | EN/CN | TS | MISCHEN | Dialogevaluation | Mensch oder ChatGPT |
HC3-Chinesisch | Hallo-SimpleAI/HC3-Chinesisch | Hallo-SimpleAI|万得资讯 | 13k | CN | TS | MISCHEN | Dialogevaluation | Mensch oder ChatGPT |
Alpaka | Tatsu-Lab/Alpaka | Tatsu-Labor | 52002 | DE | MT | SI | allgemeine Anweisung | text-davinci-003 |
AlpacaDataCleaned | Yahma/Alpaka-gereinigt | Yahma | 52k | DE | MT | SI | allgemeine Anweisung | text-davinci-003 |
Chinesisches LLaMA-Alpaka | alpaca_data_zh_51k | ymcui(讯飞) | 51k | CN | MT | SI | allgemeine Anweisung | text-davinci-003 |
Luotuo-Chinese-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52k | CN | MT | SI | allgemeine Anweisung | text-davinci-003 |
Natürliche Anweisungen | Allen AI 61-Aufgabe | 1,5k-Aufgabe | Allen AI | 5040134 | ML | MT | COL | vielfältige NLP-Aufgaben | Sammlung von von Menschen kommentierten Datensätzen |
belle_cn | BelleGroup/train_1M_CN |BelleGroup/train_0.5M_CN | BelleGroup(链家) | 1079517 | CN | TS/MT | SI | Allgemeines, mathematisches Denken, Dialog |
Hier listen wir nur einen kleinen Teil der Liste der Befehlsoptimierungsdatensätze auf. Um weitere Datensätze zu finden, schauen Sie sich bitte die folgenden Links an: jianzhnie/awesome-instruction-datasets: Eine Sammlung von Open-Source-Datensätzen zum Trainieren von anweisungenfolgenden LLMs (ChatGPT). ,LLaMA,Alpaka).
Der RLHF-Datensatz (Instruction Tuning/Reinforcement Learning from Human Feedback) ist eine Schlüsselkomponente von Anweisungsfolge-LLMs wie ChatGPT. Im Folgenden finden Sie eine umfassende Liste von Datensätzen, die zur Befehlsoptimierung in verschiedenen LLMs verwendet werden und Forschern und Entwicklern den Zugriff und die Nutzung dieser Ressourcen erleichtern.
Projekt | Org | Zahlen | Lang | Zusammenfassung |
---|---|---|---|---|
webgpt_comparisons | Openai | 19.578 | Englisch | Im WebGPT-Artikel trainierten die Autoren ein Belohnungsmodell anhand menschlichen Feedbacks. Sie nutzten das Belohnungsmodell, um ein langes Frage-Antwort-Modell zu trainieren, das sich an den menschlichen Vorlieben orientiert. Dies ist der Datensatz aller Vergleiche, die bis zum Ende des WebGPT-Projekts als für die Belohnungsmodellierung geeignet markiert wurden. Insgesamt gibt es 19.578 Vergleiche. |
SHP | stanfordnlp | 349 K | Englisch | SHP ist ein Datensatz von 385.000 kollektiven menschlichen Präferenzen gegenüber Antworten auf Fragen/Anweisungen in 18 verschiedenen Themenbereichen, von Kochen bis hin zu Rechtsberatung. Die Präferenzen sollen die Nützlichkeit einer Antwort gegenüber einer anderen widerspiegeln und zum Trainieren von RLHF-Belohnungsmodellen und NLG-Bewertungsmodellen (z. B. SteamSHP) verwendet werden. |
rlhf-reward-datasets | yitingxie | 76,3 k | Englisch | |
Dahoas/full-hh-rlhf | Dahoas | 112 k | Englisch | Der HH-Datensatz von Anthropic wurde in prompte, ausgewählte, abgelehnte Proben umformatiert. |
Dahoas/synthetic-instruct-gptj-pairwise | Dahoas | Englisch | ||
Dahoas/rm-statisch | Dahoas | 76,3k | Englisch | Aufteilung von hh-static, die nach überwachter Feinabstimmung für das Training von Belohnungsmodellen verwendet wird. |
Anthropisch/hh-rlhf | Anthropisch | 22k | Englisch | Bei diesem RLHF-Datensatz handelt es sich um einen iterierten „Online“-Datensatz, der Daten aus 52B Sprachmodellen enthält. Es enthält 22.000 Nutzenvergleiche und keine Red-Teaming-Daten. |
Anleitung-Tuning-mit-GPT-4/GPT-4-LLM | Anleitung-Tuning-mit-GPT-4 | 52k | Englisch | Bewertete Antworten (Hinweis: Die Daten werden anhand des GPT-4 -Modells ausgewertet, NICHT menschlich) von Alpaka-Eingabeaufforderungen aus drei Modellen (GPT-4, GPT-3.5 und OPT-IML), indem GPT-4 gebeten wurde, die Qualität zu bewerten. Der Autor glaubt, dass „GPT-4 in der Lage ist, seine eigenen Fehler zu identifizieren und zu beheben und die Qualität der Antworten genau zu beurteilen.“ |
thu-coai/Sicherheitshinweise | Do-Coai | 100.000 | chinesisch | 中文安全prompts, 用于评测和提升大模型的安全性, 将模型的输出与人类的价值观对齐. |
Chatgpt-Comparison-Detection-Projekt |
Weitere Datensätze finden Sie unter den folgenden Links: jianzhnie/awesome-instruction-datasets: Eine Sammlung von Open-Source-Datensätzen zum Trainieren von LLMs, die Anweisungen befolgen (ChatGPT, LLaMA, Alpaca).
Wir haben einen Datenvorverarbeitungscode entwickelt, der eine einheitliche Schnittstelle für verschiedene große Sprachmodelle bietet. Dieser Code kann zur Vorverarbeitung von Daten für verschiedene Zwecke verwendet werden, beispielsweise für Instruct Tuning- und RLHF-Modellierungsaufgaben. Wenn Sie mehr erfahren möchten, sehen Sie sich bitte die folgenden Links zu unserem Prompt-Datensatz und unseren Datendienstprogrammen an:
prompt_dataset.py
data_utils.py
In unserer Sammlung wurden alle Daten mit denselben Vorlagen formatiert. Jedes Beispiel folgt der folgenden Struktur:
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
Git-Klon https://github.com/jianzhnie/open-chatgpt.git pip install -r Anforderungen.txt
PEFT
Wenn Sie LORA zusammen mit anderen Parameter-effizienten Methoden verwenden möchten, installieren Sie bitte peft als zusätzliche Abhängigkeit.
DeepSpeed
Wenn Sie das LLM-Training mithilfe von Techniken wie Pipeline-Parallelität, Gradienten-Checkpointing und Tensorfusion beschleunigen möchten. Bitte installieren Sie DeepSpeed.
Wir optimieren unsere Modelle mithilfe des standardmäßigen Hugging Face-Trainingscodes. Wir optimieren LLaMA-7B und LLaMA-13B mit den folgenden Hyperparametern:
Hyperparameter | LLaMA-7B | LLaMA-13B |
---|---|---|
Chargengröße | 128 | 128 |
Lernrate | 2e-5 | 1e-5 |
Epochen | 3 | 5 |
Maximale Länge | 512 | 512 |
Gewichtsverlust | 0 | 0 |
Mit dem folgenden Befehl können Sie Alpaca-7B mit 4 x A100 (40 GB) trainieren.
CD-Beispiele/Alpaka/ Python train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaca --output_dir Arbeitsverzeichnis/ --num_train_epochs 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --evaluation_strategy "nein" --save_strategy "Schritte" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --lr_scheduler_type "Kosinus" --logging_steps 1
Wenn Sie auf einen OOM-Fehler stoßen, bedenken Sie dies.
Naiverweise erfordert die Feinabstimmung eines 7B-Modells etwa 7 x 4 x 4 = 112 GB VRAM. Die oben angegebenen Befehle ermöglichen das Parameter-Sharding, sodass keine redundante Modellkopie auf einer GPU gespeichert wird. Wenn Sie den Speicherbedarf weiter reduzieren möchten, finden Sie hier einige Optionen:
Aktivieren Sie die CPU-Auslagerung für FSDP mit --fsdp "full_shard auto_wrap offload"
. Dies spart VRAM auf Kosten einer längeren Laufzeit.
Unserer Erfahrung nach kann DeepSpeed Stufe 3 (mit Offload) zeitweise speichereffizienter sein als FSDP mit Offload. Hier ist ein Beispiel für die Verwendung von DeepSpeed Stufe 3 mit 4 GPUs mit Parameter- und Optimierer-Offload:
pip install deepspeedcd examples/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 Arbeitsverzeichnis/ --num_train_epochs 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_accumulation_steps 8 --evaluation_strategy "nein" --save_strategy "Schritte" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --deepspeed "scripts/ds_config_zero3_auto.json"
LoRA optimiert niedrigrangige Slices der Abfrage-, Schlüssel- und Werteeinbettungsköpfe. Dadurch kann der gesamte Speicherbedarf von 112 GB auf etwa 7 x 4 = 28 GB reduziert werden.
Dieser Teil reproduziert die Stanford Alpaca-Ergebnisse mithilfe der Low-Rank-Adaption (LoRA).
Zur kostengünstigen und effizienten Feinabstimmung verwenden wir PEFT von Hugging Face sowie Bitsandbytes von Tim Dettmers.
Diese Datei enthält eine einfache Anwendung von PEFT auf das LLaMA-Modell sowie Code für die Eingabeaufforderungskonstruktion und Tokenisierung.
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_accumulation_steps 8 --evaluation_strategy "nein" --save_strategy "Schritte" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0,03 --lr_scheduler_type "Kosinus" --logging_steps 1
Diese Datei liest das Fundamentmodell aus dem Hugging Face-Modellhub und die LoRA-Gewichte aus tloen/alpaca-lora-7b
und führt eine Gradio-Schnittstelle zur Inferenz auf eine angegebene Eingabe aus. Benutzer sollten dies als Beispielcode für die Verwendung des Modells betrachten und ihn bei Bedarf ändern.
Beispielverwendung:
Python generic_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b
Wenn Sie nicht über genügend Speicher verfügen, können Sie die 8-Bit-Komprimierung aktivieren, indem Sie --load-8bit
zu den obigen Befehlen hinzufügen. Dadurch kann die Speichernutzung bei leicht verschlechterter Modellqualität um etwa die Hälfte reduziert werden. Es ist mit der CPU, der GPU und dem Metal-Backend kompatibel. Alpaca-7B mit 8-Bit-Komprimierung kann auf einer einzelnen NVIDIA 3090/4080/T4/V100 (16 GB) GPU ausgeführt werden.
Python generic_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b --load_8bit
Unser Ziel ist es, dieses Repo noch besser zu machen. Wenn Sie daran interessiert sind, einen Beitrag zu leisten, finden Sie HIER Anweisungen zum Beitragen.
Openn-ChatGPT
wird unter der Apache 2.0-Lizenz veröffentlicht.
Wir schätzen die Arbeit vieler Open-Source-Mitwirkender, insbesondere:
Alpaka-LoRA
LoRA
Stanford-Alpaka
Umarmendes Gesicht
Lama
Vicuna
Bitte zitieren Sie das Repo, wenn Sie die Daten oder den Code in diesem Repo verwenden.
@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}}, }