
โครงการนี้ขึ้นอยู่กับภาษาจีน-llama-alpaca v3.1 สำหรับคำแนะนำ Chinese-Llama-Alpaca เป็นผู้บุกเบิกการขยายตัวของจีนและการปรับปรุงตาม Llama ขึ้นอยู่กับ Llama ดั้งเดิมมันขยายรายการคำศัพท์ภาษาจีนและใช้ข้อมูลจีนสำหรับการฝึกอบรมก่อนการฝึกอบรมระดับมัธยมศึกษาเพื่อปรับปรุงความสามารถในการทำความเข้าใจความหมายขั้นพื้นฐานของจีน
องค์ประกอบของโครงการ : <Sources>
.
├── README.md # 使用说明文件
├── SHA256.md # LLaMA模型SHA值对比文件
├── notebooks
│ ├── convert_and_quantize_chinese_alpaca_plus.ipynb
│ └── convert_and_quantize_chinese_llama.ipynb
├── requirements.txt # 依赖文件
└── scripts
├── chinese_sp.model # 中文词表文件
├── crawl_prompt.py # 1. 通过OpenAI的大模型(如ChatGPT、GPT4等)生成可用于微调的数据
├── inference_hf.py # 5. 对微调训练产生的LoRA模型和原始LLaMA模型做推理
├── merge_llama_with_chinese_lora.py # 4. 合并模型权重
├── merge_tokenizers.py # 2. 词表扩充
└── run_clm_pt_with_peft.py # 3. 对模型进行训练或者微调ไม่ว่าคุณต้องการฝึกอบรมล่วงหน้าหรือปรับแต่งคุณต้องเตรียมข้อมูล มีสองวิธีในการเตรียมข้อมูล:
scripts/crawl_prompt.py เพื่อสร้างข้อมูลที่เกี่ยวข้อง แนวคิดพื้นฐานคือการใช้ CHATGPT หรือโมเดลที่มีประสิทธิภาพ OpenAI อื่น ๆ สำหรับการสร้างข้อมูล # tokenizer
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer . model - O . / tokenizer . model
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer_checklist . chk - O . / tokenizer_checklist . chk
# 7B
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / consolidated . 00. pth - O . / 7 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / params . json - O . / 7 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / checklist . chk - O . / 7 B / checklist . chk
# 13B
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 00. pth - O . / 13 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 01. pth - O . / 13 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / params . json - O . / 13 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / checklist . chk - O . / 13 B / checklist . chk
# 30B
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 00. pth - O . / 30 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 01. pth - O . / 30 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 02. pth - O . / 30 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 03. pth - O . / 30 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / params . json - O . / 30 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / checklist . chk - O . / 30 B / checklist . chk
# 65B
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 00. pth - O . / 65 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 01. pth - O . / 65 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 02. pth - O . / 65 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 03. pth - O . / 65 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 04. pth - O . / 65 B / consolidated . 04. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 05. pth - O . / 65 B / consolidated . 05. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 06. pth - O . / 65 B / consolidated . 06. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 07. pth - O . / 65 B / consolidated . 07. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / params . json - O . / 65 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / checklist . chk - O . / 65 B / checklist . chkคุณต้องดาวน์โหลดน้ำหนักรุ่น Llama ที่มีพารามิเตอร์ขนาดต่างกัน ยิ่งพารามิเตอร์มีขนาดใหญ่เท่าไหร่น้ำหนักก็ยิ่งมีน้ำหนักมากขึ้นเท่าไหร่ความแม่นยำก็จะยิ่งดีขึ้นและเวลาในการปรับแต่งและการฝึกอบรมก็ค่อนข้างยาว โดยทั่วไปแล้วโมเดล 7B หรือ 13B จะเป็นทางเลือกของคนส่วนใหญ่
ตรวจสอบให้แน่ใจว่าได้ยืนยันความสมบูรณ์ของโมเดลฐาน Llama และตรวจสอบว่าสอดคล้องกับค่าที่แสดงใน sha256.md หรือไม่มิฉะนั้นการดำเนินการผสานจะไม่สามารถทำได้
# 安装依赖库
pip install git + https : // github . com / huggingface / transformers
# 转化HF权重
python - m transformers . models . llama . convert_llama_weights_to_hf
- - input_dir llama - weights
- - model_size 7 B
- - output_dir llama - hf - weights
> python - m transformers . models . llama . convert_llama_weights_to_hf - - input_dir . / - - model_size 7 B - - output_dir . / output / 7 B - hf หากคุณไม่ต้องการแปลงด้วยตนเองด้วยตนเองคุณสามารถใช้โมเดล LLAMA-HF ที่คนอื่นแปลง Pinkmanlove มีน้ำหนักของ Llama-HF ที่แปลงแล้วใน Huggingface หากล้มเหลวคุณสามารถค้นหาคนอื่นให้แปลงได้ดีใน HuggingFace-Models
การฝึกอบรมทั้งหมดและกระบวนการปรับจูนประกอบด้วยสามขั้นตอน:
python scripts / merge_tokenizers . py
- - llama_tokenizer_dir llama_tokenizer_dir
- - chinese_sp_model_file chinese_sp_model_file
> python scripts / merge_tokenizers . py - - llama_tokenizer_dir output / 7 B - hf - - chinese_sp_model_file scripts / chinese_sp . modelคำอธิบายพารามิเตอร์:
llama_tokenizer_dir : ชี้ไปที่ไดเรกทอรีที่เก็บ tokenizer Llama ดั้งเดิมถูกเก็บไว้;chinese_sp_model_file : ชี้ไปที่ไฟล์คำศัพท์ภาษาจีน (Chinese_sp.model) ที่ได้รับการฝึกฝนด้วยประโยคบันทึก
มีสองวิธีที่สำคัญสำหรับการขยายรายการคำศัพท์: (1) ผสานและขยายรายการคำศัพท์; (2) ค้นหารายการคำศัพท์ขนาดใหญ่และลบคำที่ไร้ประโยชน์เพื่อรับรายการคำศัพท์
ในช่วงก่อนการฝึกอบรมคลังภาษาจีนทั่วไปจะถูกใช้เพื่อฝึกอบรมเพิ่มเติมบนพื้นฐานของน้ำหนัก Llama ดั้งเดิม กระบวนการแบ่งออกเป็นสองขั้นตอน:
โมเดลมาบรรจบกันอย่างช้าๆในขั้นตอนแรกของการฝึกอบรมก่อน หากไม่มีเวลาและทรัพยากรการคำนวณโดยเฉพาะอย่างยิ่งขอแนะนำให้ข้ามขั้นตอนนี้ ขั้นตอนที่สองของการฝึกอบรมก่อนการฝึกอบรมมีดังนี้ (การ์ดใบเดียวผู้เล่นเดี่ยว):
########参数设置########
lr = 2e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / dir
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / pt / data / dir
data_cache = temp_data_cache_dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_pt_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - data_cache_dir ${ data_cache }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.05
- - weight_decay 0.01
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - block_size 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - gradient_checkpointing
- - ddp_find_unused_parameters Falseคำอธิบายพารามิเตอร์:
--model_name_or_path : ไดเรกทอรีที่รูปแบบ HF รูปแบบดั้งเดิมตั้งอยู่;--tokenizer_name_or_path : ไดเรกทอรีที่ Tokenizer จีน-lllama ตั้งอยู่ (เป็นผลมาจากการสังเคราะห์ merge_tokenizers.py);--dataset_dir : ไดเรกทอรีของข้อมูลที่ผ่านการฝึกอบรมมาก่อนซึ่งสามารถมีไฟล์ข้อความธรรมดาหลายไฟล์ที่ลงท้ายด้วย txt;--data_cache_dir : ระบุไดเรกทอรีที่เก็บไฟล์แคชข้อมูลหลายเครื่องและการ์ดหลายใบ:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_pt_with_peft . py
...โมเดล Llama จีนได้ขยายรายการคำศัพท์ภาษาจีนตามเวอร์ชันดั้งเดิมและใช้ข้อมูลข้อความธรรมดาทั่วไปของจีนสำหรับการฝึกอบรมก่อน ที่นี่ผู้เขียนมีสองวิธีในการดาวน์โหลดน้ำหนักก่อนการฝึกอบรมเหล่านี้โดยไม่ต้องให้เราใช้ทรัพยากรในการฝึกอบรมตนเอง:
| ชื่อนางแบบ | ข้อมูลการฝึกอบรม | การปรับแต่งโมเดล | ขนาด | ดาวน์โหลด lora |
|---|---|---|---|---|
| จีน-llama-7b | ทั่วไป 20 กรัม | LLAMA-7B ดั้งเดิม | 770m | [Baidu Netdisk] [Google Drive] |
| Chinese-llama-plus-7b ️ | วัตถุประสงค์ทั่วไป 120 กรัม | LLAMA-7B ดั้งเดิม | 790m | [Baidu Netdisk] [Google Drive] |
| จีน-llama-13b | ทั่วไป 20 กรัม | LLAMA-13B ดั้งเดิม | 1G | [Baidu Netdisk] [Google Drive] |
| Chinese-llama-plus-13b ️ | วัตถุประสงค์ทั่วไป 120 กรัม | LLAMA-13B ดั้งเดิม | 1G | [Baidu Netdisk] [Google Drive] |
.from_pretrained()| ชื่อนางแบบ | ชื่อการโทรแบบจำลอง | การเชื่อมโยง |
|---|---|---|
| จีน-llama-7b | Ziqingyang/จีน-llama-lora-7b | ลิงค์ฮับรุ่น |
| จีน-llama-plus-7b | Ziqingyang/จีน-llama-plus-lora-7b | ลิงค์ฮับรุ่น |
| จีน-llama-13b | Ziqingyang/จีน-llama-lora-13b | ลิงค์ฮับรุ่น |
| จีน-llama-plus-13b | Ziqingyang/จีน-llama-plus-lora-13b | ลิงค์ฮับรุ่น |
รูปแบบการฝึกอบรมยังใช้ LORA สำหรับการปรับที่ดีอย่างมีประสิทธิภาพและเพิ่มจำนวนพารามิเตอร์ที่สามารถฝึกอบรมได้
การ์ดใบเดียวผู้เล่นเดี่ยว:
########参数部分########
lr = 1e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / or / merged / llama / dir / or / model_id
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / sft / data / dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
peft_model = path / to / peft / model / dir
validation_file = validation_file_name
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_sft_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - do_eval
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.03
- - weight_decay 0
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - evaluation_strategy steps
- - eval_steps 250
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - max_seq_length 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - validation_file ${ validation_file }
- - peft_path ${ peft_model }
- - gradient_checkpointing
- - ddp_find_unused_parameters Falseคำอธิบายพารามิเตอร์:
--tokenizer_name_or_path : ไดเรกทอรีที่ tokenizer จีน-อัลปากาตั้งอยู่ (เป็นผลมาจากการสังเคราะห์ merge_tokenizers.py);--dataset_dir : ไดเรกทอรีสำหรับข้อมูลการปรับแต่งคำสั่งที่มีไฟล์ข้อมูลการปรับแต่งการปรับแต่งอย่างน้อยหนึ่งไฟล์ในรูปแบบ Stanford Alpaca ที่ลงท้ายด้วย JSON;--validation_file : ไฟล์การปรับแต่งคำสั่งเดียวที่ใช้เป็นชุดการตรวจสอบความถูกต้องซึ่งสิ้นสุดใน JSON ยังเป็นไปตามรูปแบบ Stanford Alpaca;รูปแบบที่เรียกว่า Stanford Alpaca คือ:
[
{ "instruction" : ...,
"input" : ...,
"output" : ... },
...
]ข้อมูลที่นี่ยังสามารถสร้างขึ้นได้โดยใช้วิธีการสร้างข้อมูลจีน-llama-alpaca-usage/#
คำแนะนำการกำหนดค่า:
หากคุณต้องการฝึกอบรมน้ำหนัก LORA ของรุ่นจีน-อัลปากาต่อไป:
--model_name_or_path : รูปแบบ HF แบบดั้งเดิม LLAMA (ถ้าคุณยังคงฝึกอบรมโมเดล Alpaca ที่ไม่ใช่บวก) หรือรวม Chinese-llama-plus-lora (ถ้าคุณยังคงฝึกอบรมโมเดลบวก);--peft_path : ไดเรกทอรีน้ำหนัก Lora ของจีน-อัลปากา ไม่จำเป็นต้องระบุ --lora_rank , --lora_alpha , --lora_dropout , --trainable และ --modules_to_save พารามิเตอร์
หากคุณต้องการปรับน้ำหนัก Lora ตามการฝึกอบรมจีน-llama:
--model_name_or_path : รวมรูปแบบ HF รูปแบบภาษาจีน-lllama หลังจากจีน-llama-lora (ไม่ว่าจะเป็นโมเดลบวกหรือไม่);--peft_path : อย่าให้พารามิเตอร์นี้และลบ --peft_path จากสคริปต์; --lora_rank , --lora_alpha , --lora_dropout , --trainable และ --modules_to_save พารามิเตอร์ต้องระบุ
หลายเครื่องและการ์ดหลายใบ:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_sft_with_peft . py
...เหมาะสำหรับจีน-llama, จีน-llama-plus, จีน-อัลปากา
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir คำอธิบายพารามิเตอร์:
--base_model : ไดเรกทอรีที่มีการเก็บน้ำหนักและไฟล์การกำหนดค่ารุ่น Llama ไว้ในรูปแบบ HF;--lora_model : ไดเรกทอรีที่ไฟล์ถูกบีบอัดในภาษาจีน Llama/Alpaca Lora คุณสามารถใช้ชื่อการโทรรุ่นฮับโมเดล;--output_type : ระบุรูปแบบเอาต์พุตซึ่งอาจเป็น pth หรือ huggingface หากไม่ได้ระบุค่าเริ่มต้นคือ pth ;--output_dir : ระบุไดเรกทอรีที่บันทึกน้ำหนักแบบจำลองเต็มรูปแบบค่าเริ่มต้นคือ ./ ;--offload_dir : สำหรับผู้ใช้หน่วยความจำต่ำคุณต้องระบุเส้นทางแคชออฟโหลด คำอธิบายเพิ่มเติมเกี่ยวกับ output_type :
.pth สามารถใช้สำหรับการหาปริมาณและการปรับใช้: เครื่องมือ llama.cpp;.bin ไฟล์สามารถใช้สำหรับ: transformers เพื่อการให้เหตุผล; Text-Generation-Webui สำหรับการสร้างอินเทอร์เฟซการควบรวมน้ำหนัก LORA เดี่ยวดำเนินการออนไลน์และหาปริมาณพร้อมกัน:
การผสานจีน-อัลปาปา-บวกต้องใช้น้ำหนัก LORA สองตัวคือจีน-llama-plus-lora และจีน-อัลปากา-บวก-ลอร่า
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_plus_lora , path_to_chinese_alpaca_plus_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir การควบรวมน้ำหนักแบบหลาย LORA ดำเนินการออนไลน์และหาปริมาณพร้อมกัน:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - with_prompt
- - interactive หากสคริปต์ merge_llama_with_chinese_lora_to_hf.py ถูกดำเนินการก่อนที่จะรวมน้ำหนัก LORA แล้วไม่จำเป็นต้องระบุ --lora_model และวิธีการเริ่มต้นนั้นง่ายกว่า:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_merged_llama_or_alpaca_hf_dir
- - with_prompt
- - interactive หากการลบ CUDA_VISIBLE_DEVICES=0 ถูกลบมันเป็นโหมดการให้เหตุผล CPU แน่นอนคุณสามารถเรียกใช้และปรับใช้ใน webui <แหล่งที่มา>
แบบจำลองในโครงการนี้ส่วนใหญ่สนับสนุนการหาปริมาณการใช้เหตุผลและวิธีการปรับใช้ต่อไปนี้
| วิธีการให้เหตุผลและการปรับใช้ | คุณสมบัติ | แพลตฟอร์ม | ซีพียู | GPU | การโหลดเชิงปริมาณ | อินเตอร์เฟสกราฟิก | การสอน |
|---|---|---|---|---|---|---|---|
| llama.cpp | ตัวเลือกเชิงปริมาณที่หลากหลายและการใช้เหตุผลในท้องถิ่นที่มีประสิทธิภาพ | ทั่วไป | การเชื่อมโยง | ||||
| ? Transformers | อินเทอร์เฟซการอนุมานของ Transformers | ทั่วไป | การเชื่อมโยง | ||||
| Text-Generation-Webui | วิธีการปรับใช้อินเทอร์เฟซ Web Front-end | ทั่วไป | การเชื่อมโยง | ||||
| ลาลาคัท | อินเตอร์เฟสการโต้ตอบกราฟิกภายใต้ MacOS (ต้องจับคู่กับรุ่น LLAMA.CPP) | แม็กอส | การเชื่อมโยง |