Open-ChatGPT
는 자신의 데이터와 가능한 최소한의 컴퓨팅 양을 사용하여 초개인화 ChatGPT와 같은 AI 모델을 훈련할 수 있는 오픈 소스 라이브러리입니다.
Open-ChatGPT
는 ChatGPT와 유사한 모델에 대한 엔드투엔드 교육 경험을 지원하기 위한 일반 시스템 프레임워크입니다. OpenAI InstructGPT 스타일 3단계를 통해 선호하는 사전 훈련된 대규모 언어 모델을 자동으로 가져와 나만의 고품질 ChatGPT 스타일 모델을 생성할 수 있습니다.
우리는 변환기 라이브러리와 DeepsSpeed를 기반으로 하는 RLHF(인간 피드백을 통한 강화 학습)를 구현했습니다. 이는 매우 큰 모델에 적합할 수 있는 분산 교육 및 오프로딩을 지원합니다.
프로젝트가 마음에 드셨다면 별표를 남겨 응원을 보내주세요.
[2023/05] 스탠포드 알파카 로라를 구현합니다.
[2023/05] 스탠포드 알파카를 구현합니다.
[2023/04] RLHF(Reinforcement Learning with Human Feedback) 파이프라인을 출시했습니다.
[2023/03] ChatGPT처럼 ChatBot을 훈련시키기 위한 OpenChatGPT: 오픈 소스 라이브러리 코드를 출시했습니다.
Open-ChatGPT: ChatGPT의 오픈 소스 구현
메모리가 부족함
알파카-7B 미세 조정
DeepSpeed 사용
Lora와 함께 Alpaca-7B 미세 조정
명령어 데이터세트
RLHF 데이터세트
데이터 전처리
데이터 형식화
소개
소식
목차
데이터 수집
설치하다
핀튠 명령어
추론
기여
특허
감사의 말
소환
(텍스트 및 멀티모달) 채팅 기반 LLM(GPT-4, ChatGPT,LLaMA,Alpaca)을 교육하기 위한 오픈 소스 명령 튜닝 데이터 세트 모음입니다.
이를 참고하여(@jianzhnie), 수집된 각 데이터세트에 다음 규칙에 따라 라벨을 지정했습니다.
(Lang)Lingual-태그:
EN: 영어로 된 지침 데이터세트
CN: 중국어로 된 명령어 데이터세트
ML: [다국어] 여러 언어로 된 명령 데이터세트
(작업)작업-태그:
MT: [Multi-task] 여러 작업을 포함하는 데이터 세트
TS: [작업별] 특정 작업에 맞게 조정된 데이터 세트
(Gen)세대 방법:
HG: [Human Generatord Dataset] 인간이 생성한 데이터세트
SI: [Self-Instruct] self-instruct 방법을 사용하여 생성된 데이터 세트
MIX: [혼합 데이터 세트] 데이터 세트에는 인간과 기계가 생성한 데이터가 모두 포함됩니다.
COL: [데이터세트 모음] 다른 데이터세트를 모아서 만든 데이터세트
프로젝트 | 데이터 세트 | 조직 | 숫자 | 랭 | 일 | 겐 | 유형 | 소스 |
---|---|---|---|---|---|---|---|---|
생각의 사슬 | cot_data |few_shot_data | 74771 | EN/CN | MT | HG | 유아용 침대 추론으로 가르치다 | 기존 데이터에 CoT에 주석 달기 | |
GPT4all | nomic-ai/gpt4all-j-프롬프트 세대 | 노믹-AI | 806199 | KO | MT | 안부 | 코드, 스토리 및 대화 상자 | GPT-3.5-터보에서 증류 |
GP교사 | GPT-4 일반 지시 |역할극 지시 |코드 지시 | 툴포머 | 테크늄1 | 29013 | KO | MT | 시 | 일반, 역할극, 도구 형성자 | GPT-4 및 툴포머 |
과나코 | JosephusCheung/Guanaco데이터세트 | 요세푸스청 | 534610 | ML | MT | 시 | 다양한 언어 작업 | 텍스트-davinci-003 |
HC3 | Hello-SimpleAI/HC3 | 안녕하세요-SimpleAI | 万得资讯 | 37175 | EN/CN | TS | 혼합 | 대화 평가 | 인간 또는 ChatGPT |
HC3-중국어 | Hello-SimpleAI/HC3-중국어 | Hello-SimpleAI|万得资讯 | 13,000 | 중국 | TS | 혼합 | 대화 평가 | 인간 또는 ChatGPT |
알파카 | 타츠랩/알파카 | 타츠랩 | 52002 | KO | MT | 시 | 일반 지시 | 텍스트-davinci-003 |
알파카데이터 정리됨 | 야마/알파카 청소 | 야마 | 52,000 | KO | MT | 시 | 일반 지시 | 텍스트-davinci-003 |
중국어-LLaMA-알파카 | alpaca_data_zh_51k | ymcui(讯飞) | 51,000 | 중국 | MT | 시 | 일반 지시 | 텍스트-davinci-003 |
Luotuo-중국어-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52,000 | 중국 | MT | 시 | 일반 지시 | 텍스트-davinci-003 |
자연스러운 지시 | Allen AI 61 작업|1.5k 작업 | 알렌 AI | 5040134 | ML | MT | 안부 | 다양한 nlp 작업 | 사람이 주석을 추가한 데이터세트 컬렉션 |
belle_cn | BelleGroup/train_1M_CN |BelleGroup/train_0.5M_CN | BelleGroup(链가족) | 1079517 | 중국 | TS/MT | 시 | 일반, 수학적 추론, 대화 |
여기에는 명령어 튜닝 데이터세트 목록의 일부만 나열되어 있습니다. 더 많은 데이터세트를 찾으려면 다음 링크를 확인하세요. jianzhnie/awesome-instruction-datasets: 명령어를 따르는 LLM을 훈련하기 위한 오픈 소스 데이터세트 모음(ChatGPT) ,LLaMA, 알파카).
RLHF(인간 피드백을 통한 명령 조정/강화 학습) 데이터 세트는 ChatGPT와 같은 명령 따르기 LLM의 핵심 구성 요소입니다. 다음은 다양한 LLM의 명령 조정에 사용되는 포괄적인 데이터 세트 목록으로, 연구원과 개발자가 이러한 리소스에 더 쉽게 액세스하고 활용할 수 있습니다.
프로젝트 | 조직 | 숫자 | 랑 | 요약 |
---|---|---|---|---|
webgpt_비교 | 오픈아이 | 19,578 | 영어 | WebGPT 논문에서 저자는 인간의 피드백을 바탕으로 보상 모델을 교육했습니다. 그들은 보상 모델을 사용하여 인간의 선호도에 맞춰 긴 형식의 질문 응답 모델을 훈련했습니다. 이는 WebGPT 프로젝트가 끝날 때까지 보상 모델링에 적합한 것으로 표시된 모든 비교 데이터 세트입니다. 총 19,578개의 비교가 있습니다. |
SHP | 스탠포드nlp | 349K | 영어 | SHP는 요리부터 법률 자문까지 18개 주제 영역의 질문/지침에 대한 응답에 대한 385,000개의 집단적 인간 선호도를 담은 데이터 세트입니다. 선호도는 한 응답의 유용성을 다른 응답에 비해 반영하기 위한 것이며 RLHF 보상 모델 및 NLG 평가 모델(예: SteamSHP) 교육에 사용하기 위한 것입니다. |
rlhf-보상-데이터 세트 | 이팅시에 | 76.3k | 영어 | |
다호아스/full-hh-rlhf | 다호아스 | 112k | 영어 | Anthropic의 HH 데이터세트는 신속하고 선택되고 거부된 샘플로 재구성되었습니다. |
다호아스/합성-지시-gptj-쌍별 | 다호아스 | 영어 | ||
다호아스/rm-static | 다호아스 | 76.3k | 영어 | 감독된 미세 조정 후 보상 모델 훈련에 사용되는 hh-static 분할입니다. |
인류학/hh-rlhf | 인류학 | 22,000 | 영어 | 이 RLHF 데이터 세트는 52B 언어 모델의 데이터를 포함하는 반복된 '온라인' 데이터 세트입니다. 여기에는 22,000개의 유용성 비교가 포함되어 있으며 레드팀 데이터는 없습니다. |
GPT-4/GPT-4-LLM을 사용한 명령 조정 | GPT-4를 통한 명령 조정 | 52,000 | 영어 | Alpaca의 순위 응답(참고: 데이터는 인간이 아닌 GPT-4 모델에 의해 평가됨)은 GPT-4에 품질 평가를 요청하여 세 가지 모델(GPT-4, GPT-3.5 및 OPT-IML)의 메시지를 표시합니다. 저자는 "GPT-4는 스스로 실수를 식별하고 수정할 수 있으며 응답의 질을 정확하게 판단할 수 있다"고 믿습니다. |
thu-coai/안전 프롬프트 | 투코아이 | 10만 | 중국인 | 중앙 보안 메시지는 于评测와 提升大模型의 보안을 보장하며, 将模型의 输은 与人类的价值观对齐입니다. |
Chatgpt-비교-탐지 프로젝트 |
더 많은 데이터세트를 찾으려면 다음 링크를 확인하세요. jianzhnie/awesome-instruction-datasets: 지침에 따른 LLM(ChatGPT,LLaMA,Alpaca)을 훈련하기 위한 오픈 소스 데이터세트 모음입니다.
우리는 다양한 대규모 언어 모델에 대한 통합 인터페이스를 제공하는 데이터 전처리 코드를 개발했습니다. 이 코드는 Instruct Tuning 및 RLHF 모델링 작업과 같은 다양한 목적을 위해 데이터를 전처리하는 데 사용할 수 있습니다. 더 자세히 알아보고 싶다면 프롬프트 데이터 세트 및 데이터 유틸리티에 대한 다음 링크를 확인하세요.
프롬프트_데이터세트.py
data_utils.py
우리 컬렉션의 모든 데이터는 동일한 템플릿을 사용하여 형식화되었습니다. 각 샘플은 다음 구조를 따릅니다.
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
자식 클론 https://github.com/jianzhnie/open-chatgpt.git pip 설치 -r 요구사항.txt
PEFT
다른 매개변수 효율적인 방법과 함께 LORA를 사용하려면 추가 종속성으로 peft를 설치하십시오.
딥스피드
파이프라인 병렬성, 경사 체크포인트, 텐서 융합과 같은 기술을 사용하여 LLM 교육을 가속화하려는 경우. DeepSpeed를 설치해 주세요.
표준 Hugging Face 훈련 코드를 사용하여 모델을 미세 조정합니다. 다음 하이퍼파라미터를 사용하여 LLaMA-7B 및 LLaMA-13B를 미세 조정합니다.
초매개변수 | LLaMA-7B | LLaMA-13B |
---|---|---|
배치 크기 | 128 | 128 |
학습률 | 2e-5 | 1e-5 |
시대 | 3 | 5 |
최대 길이 | 512 | 512 |
체중 감소 | 0 | 0 |
다음 명령을 사용하여 4 x A100(40GB)으로 Alpaca-7B를 훈련할 수 있습니다.
CD 예제/alpaca/ 파이썬 train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaca --output_dir 작업_디렉터리/ --num_train_epochs 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --evaluation_strategy "아니요" --save_strategy "단계" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "코사인" --logging_steps 1
OOM 오류가 발생하면 이것을 고려하십시오.
간단히 말해서 7B 모델을 미세 조정하려면 약 7 x 4 x 4 = 112GB의 VRAM이 필요합니다. 위에 제공된 명령은 매개변수 샤딩을 활성화하므로 GPU에 중복 모델 복사본이 저장되지 않습니다. 메모리 사용량을 더 줄이려면 다음과 같은 몇 가지 옵션을 따르세요.
--fsdp "full_shard auto_wrap offload"
사용하여 FSDP에 대한 CPU 오프로드를 활성화합니다. 이렇게 하면 런타임이 길어지는 대신 VRAM이 절약됩니다.
경험에 따르면 DeepSpeed 3단계(오프로드 포함)는 때때로 오프로드가 포함된 FSDP보다 메모리 효율성이 더 높을 수 있습니다. 다음은 매개변수와 최적화 프로그램 오프로드가 모두 포함된 GPU 4개와 함께 DeepSpeed stage-3을 사용하는 예입니다.
pip install 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 작업_디렉터리/ --num_train_epochs 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_accumulation_steps 8 --evaluation_strategy "아니요" --save_strategy "단계" --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는 쿼리, 키 및 값 임베딩 헤드의 낮은 순위 조각을 미세 조정합니다. 이렇게 하면 총 메모리 공간을 112GB에서 약 7x4=28GB로 줄일 수 있습니다.
LoRA(Low Rank Adaptation)를 이용하여 스탠포드 알파카 결과를 재현한 부분입니다.
저렴하고 효율적으로 미세 조정하기 위해 Hugging Face의 PEFT와 Tim Dettmers의 비트샌드바이트를 사용합니다.
이 파일에는 LLaMA 모델에 대한 PEFT의 간단한 적용과 프롬프트 구성 및 토큰화와 관련된 일부 코드가 포함되어 있습니다.
파이썬 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 "아니요" --save_strategy "단계" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "코사인" --logging_steps 1
이 파일은 Hugging Face 모델 허브에서 기초 모델을 읽고 tloen/alpaca-lora-7b
에서 LoRA 가중치를 읽고 지정된 입력에 대한 추론을 위해 Gradio 인터페이스를 실행합니다. 사용자는 이를 모델 사용을 위한 예제 코드로 취급하고 필요에 따라 수정해야 합니다.
사용 예:
파이썬 generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b
메모리가 충분하지 않은 경우 위 명령에 --load-8bit
를 추가하여 8비트 압축을 활성화할 수 있습니다. 이렇게 하면 모델 품질이 약간 저하되면서 메모리 사용량을 약 절반으로 줄일 수 있습니다. CPU, GPU 및 Metal 백엔드와 호환됩니다. 8비트 압축의 Alpaca-7B는 단일 NVIDIA 3090/4080/T4/V100(16GB) GPU에서 실행될 수 있습니다.
파이썬 generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b --load_8bit
우리의 목적은 이 저장소를 더욱 좋게 만드는 것입니다. 기여에 관심이 있다면 여기에서 기여 지침을 참조하세요.
Openn-ChatGPT
Apache 2.0 라이센스에 따라 출시됩니다.
특히 다음과 같은 많은 오픈 소스 기여자들의 작업에 감사드립니다.
알파카-LoRA
로라
스탠포드 알파카
포옹하는 얼굴
야마
비쿠나
이 저장소의 데이터나 코드를 사용하는 경우 저장소를 인용해 주세요.
@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}}, }