
Proyek ini didasarkan pada China-Llama-Alpaca v3.1 untuk instruksi. China-Llama-Alpaca telah memelopori ekspansi dan peningkatan Cina berdasarkan Llama. Berdasarkan llama asli, ia memperluas daftar kosa kata Cina dan menggunakan data Cina untuk pra-pelatihan sekunder, lebih lanjut meningkatkan kemampuan pemahaman semantik dasar Cina.
Komposisi Proyek : <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. 对模型进行训练或者微调Apakah Anda ingin melakukan pra-kereta atau menyempurnakan, Anda perlu menyiapkan data. Ada dua cara untuk menyiapkan data:
scripts/crawl_prompt.py untuk menghasilkan data yang sesuai. Ide dasarnya adalah menggunakan chatgpt atau model efisien openai lainnya untuk pembuatan data. # 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 . chkAnda perlu mengunduh bobot model llama dari parameter ukuran yang berbeda. Semakin besar parameter, semakin besar bobot, semakin besar berat, semakin baik keakuratannya, dan waktu penyesuaian dan pelatihan juga relatif lama. Secara umum, model 7B atau 13B akan menjadi pilihan kebanyakan orang.
Pastikan untuk mengkonfirmasi integritas model dasar LLAMA dan periksa apakah konsisten dengan nilai yang ditunjukkan pada Sha256.md, jika tidak, operasi gabungan tidak dapat dilakukan.
# 安装依赖库
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 Jika Anda tidak ingin mengonversi diri sendiri secara manual, Anda juga dapat menggunakan model Llama-HF yang telah dikonversi orang lain. PinkManLove memiliki beban Llama-HF yang dikonversi di Huggingface. Jika gagal, Anda dapat mencari orang lain untuk dikonversi dengan baik dalam HuggingFace-Models .
Seluruh proses pelatihan dan penyempurnaan terdiri dari tiga langkah:
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 . modelDeskripsi Parameter:
llama_tokenizer_dir : Arahkan ke direktori di mana tokenizer llama asli disimpan;chinese_sp_model_file : Arahkan ke file kosa kata Cina (cina_sp.model) dilatih dengan kalimat;Catatan
Ada dua metode utama untuk memperluas daftar kosakata: (1) menggabungkan dan memperluas daftar kosa kata; (2) Temukan daftar kosakata besar dan hapus kata -kata yang tidak berguna untuk mendapatkan daftar kosa kata;
Selama tahap pra-pelatihan, corpus Cina umum digunakan untuk lebih lanjut pra-kereta berdasarkan bobot llama asli. Proses ini dibagi menjadi dua tahap:
Model konvergen perlahan pada tahap pertama pra-pelatihan. Jika tidak ada banyak waktu dan sumber daya komputasi, disarankan untuk melewatkan tahap ini. Tahap kedua dari pelatihan pra-pelatihan adalah sebagai berikut (kartu tunggal pemain tunggal):
########参数设置########
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 FalseDeskripsi Parameter:
--model_name_or_path : Direktori di mana model HF format llama asli berada;--tokenizer_name_or_path : Direktori tempat tokenizer Cina-Llama berada (hasil dari sintesis gabungan_tokenizers.py);--dataset_dir : Direktori data pra-terlatih, yang dapat berisi beberapa file teks biasa yang diakhiri dengan txt;--data_cache_dir : Tentukan direktori tempat file cache data disimpan;Beberapa mesin dan beberapa kartu:
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
...Model Llama Cina telah memperluas daftar kosa kata Cina berdasarkan versi asli dan menggunakan data teks umum Cina untuk pra-pelatihan sekunder. Di sini penulis menyediakan dua cara untuk mengunduh bobot pra-pelatihan ini tanpa mengharuskan kita untuk menghabiskan sumber daya untuk melatih diri kita sendiri:
| Nama model | Data pelatihan | Refactoring model | ukuran | Unduh lora |
|---|---|---|---|---|
| China-llama-7b | Umum 20g | Llama-7b asli | 770m | [Baidu Netdisk] [Google Drive] |
| China-llama-plus-7b ️ | Tujuan Umum 120g | Llama-7b asli | 790m | [Baidu Netdisk] [Google Drive] |
| China-llama-13b | Umum 20g | Asli llama-13b | 1g | [Baidu Netdisk] [Google Drive] |
| China-llama-plus-13b ️ | Tujuan Umum 120g | Asli llama-13b | 1g | [Baidu Netdisk] [Google Drive] |
.from_pretrained() .| Nama model | Nama panggilan model | Link |
|---|---|---|
| China-llama-7b | Ziqingyang/Cina-Llama-Lora-7b | Model Hub Link |
| China-llama-plus-7b | Ziqingyang/China-llama-plus-lora-7b | Model Hub Link |
| China-llama-13b | Ziqingyang/Cina-Llama-Lora-13b | Model Hub Link |
| China-llama-plus-13b | Ziqingyang/China-llama-plus-lora-13b | Model Hub Link |
Skema pelatihan juga menggunakan LORA untuk penyesuaian halus yang efisien dan lebih lanjut meningkatkan jumlah parameter yang dapat dilatih.
Kartu tunggal pemain tunggal:
########参数部分########
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 FalseDeskripsi Parameter:
--tokenizer_name_or_path : Direktori tempat tokenizer Cina-Alpaca berada (hasil dari sintesis gabungan_tokenizers.py);--dataset_dir : Direktori untuk data penyempurnaan instruksi, berisi satu atau lebih file data penyempurnaan instruksi dalam format Stanford Alpaca yang diakhiri dengan JSON;--validation_file : Satu file penyempurnaan instruksi yang digunakan sebagai set validasi, berakhir di JSON, juga mengikuti format Stanford Alpaca;Format Stanford Alpaca yang disebut adalah:
[
{ "instruction" : ...,
"input" : ...,
"output" : ... },
...
]Data di sini juga dapat dihasilkan menggunakan metode penghasil data China-Lama-ALPACA-Pengguna/##.
Instruksi Konfigurasi:
Jika Anda ingin terus melatih bobot Lora dari model Cina-Alpaca:
--model_name_or_path : Model Llama Format HF asli (jika Anda terus melatih model alpaca non-plus) atau menggabungkan Cina-Llama-plus-Lora (jika Anda terus melatih model plus);--peft_path : Direktori Berat Lora Cina-Alpaca; Tidak perlu menentukan --lora_rank , --lora_alpha , --lora_dropout , --trainable dan --modules_to_save parameter.
Jika Anda ingin menyempurnakan beban Lora berdasarkan pelatihan Cina-Llama:
--model_name_or_path : Gabungkan model HF format Cina-llama setelah llama-lora Cina (terlepas dari apakah itu model plus atau tidak);--peft_path : Jangan berikan parameter ini dan hapus --peft_path dari skrip; --lora_rank , --lora_alpha , --lora_dropout , --trainable dan --modules_to_save parameter perlu ditentukan.
Beberapa mesin dan beberapa kartu:
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
...Cocok untuk Cina-Llama, Cina-Llama-Plus, China-Alpaca
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 Deskripsi Parameter:
--base_model : Direktori di mana bobot model LLAMA dan file konfigurasi disimpan dalam format HF;--lora_model : Direktori di mana file tersebut didekompresi dalam llama Cina/Alpaca Lora, Anda juga dapat menggunakan nama panggilan model Model Hub;--output_type : Menentukan format output, yang bisa menjadi pth atau huggingface . Jika tidak ditentukan, standarnya adalah pth ;--output_dir : Menentukan direktori yang menghemat bobot model penuh, standarnya adalah ./ ;--offload_dir : Untuk pengguna memori rendah, Anda perlu menentukan jalur cache yang tidak muatan; Penjelasan lebih lanjut tentang output_type :
.pth dapat digunakan untuk kuantisasi dan penyebaran alat: llama.cpp;.bin dapat digunakan untuk: transformator untuk penalaran; teks-generasi-webui untuk antarmuka bangunan;Single Lora Weight Merger dilakukan secara online dan mengukurnya secara bersamaan:
Menggabungkan Cina-Alpaca-plus membutuhkan dua bobot Lora, yaitu Cina-Llama-plus-Lora dan Cina-Alpaca-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 Penggabungan Weight Multi-Lora dilakukan secara online dan mengukurnya secara bersamaan:
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 Jika skrip merge_llama_with_chinese_lora_to_hf.py telah dieksekusi sebelumnya untuk menggabungkan bobot lora, maka tidak perlu menentukan --lora_model , dan metode startup lebih sederhana:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_merged_llama_or_alpaca_hf_dir
- - with_prompt
- - interactive Jika CUDA_VISIBLE_DEVICES=0 dihapus, itu adalah mode penalaran CPU. Tentu saja, Anda juga dapat menjalankan dan menggunakannya di Webui. <sources>
Model dalam proyek ini terutama mendukung metode kuantifikasi, penalaran, dan penyebaran berikut.
| Metode penalaran dan penempatan | Fitur | platform | CPU | GPU | Pemuatan kuantitatif | Antarmuka grafis | Tutorial |
|---|---|---|---|---|---|---|---|
| llama.cpp | Opsi kuantitatif yang kaya dan penalaran lokal yang efisien | Umum | ✅ | ✅ | ✅ | Link | |
| ? Transformers | Antarmuka Inferensi Transformer Asli | Umum | ✅ | ✅ | ✅ | ✅ | Link |
| Text-generation-webui | Cara Menyebarkan Antarmuka UI Web Front-End | Umum | ✅ | ✅ | ✅ | ✅ | Link |
| Llamachat | Antarmuka interaksi grafis di bawah macOS (perlu dicocokkan dengan model llama.cpp) | MacOS | ✅ | ✅ | ✅ | Link |