Chinese-Llama-2: 中文Llama-2大模型
¹杜泽锋†, ²吴明昊†, ¹庞建辉†, ¹黄德贵, 王龙跃*, 屠兆鹏
¹ 澳门大学, ² 蒙纳士大学,
†同等贡献
*王龙跃为通讯作者: [vincentwang0229@gmail.com](https://github.com/longyuewangdcu/Chinese-Llama-2/blob/main/mailto:vincentwang0229@gmail.com
🦙Chinese-Llama-2项目旨在进一步提升Llama-2大语言模型在中文理解、生成和翻译方面的能力。我们采用了LoRA微调、全参数指令微调和二次预训练等方法,诚邀您下载并使用相关数据集、训练教程和模型参数。
新闻
- [2023.11.28] :rocket: 我们在400GB中英文文学文本上对Llama-2进行持续预训练,然后在中文指令数据集上进行微调,模型可在Chinese-Llama-2-7B-conpre获取。
- [2023.07.22] :rocket: 我们在中文指令数据集上对Llama-2进行微调,称为Chinese-Llama-2,并发布了Chinese-Llama-2-7B模型,可在seeledu/Chinese-Llama-2-7B获取。完整的指令微调代码和示例数据也已发布。
- [2023.07.20] :rocket: 我们使用LoRA技术在中文指令数据集上对Llama-2进行微调,称为Chinese-Llama-2-LoRA,并发布了Chinese-Llama-2-LoRA-7B。
- [2023.07.18] :tada::tada::tada: Llama-2发布!
概述
Chinese-Llama-2是一个旨在将Llama-2语言模型的出色能力扩展到中文语言的项目。Llama-2由MetaAI开发,已经证明是一个强大的语言模型。在本项目中,我们专注于三个关键研究领域:
-
参数高效微调:我们采用LoRA(低秩适应)技术专门针对中文指令数据集对Llama-2进行微调。这种方法在最小化所需参数数量的同时优化了模型的性能。
-
全参数指令微调:我们在中文指令数据集BAAI/COIG和中英文篇章级翻译数据集上对Llama-2的所有参数进行微调。通过让模型充分适应中文语言的特征,我们提高了其生成中文文本的熟练程度和准确性。
-
持续预训练:为进一步增强Llama-2的中文语言理解能力,我们在大规模中文语料库上继续进行预训练。通过让模型接触大量中文文本数据,我们使其能够捕捉复杂的语言模式和细微差别,从而改善语言生成能力。
本仓库包含实施上述研究领域所需的所有代码和资源,便于使用Llama-2模型进行中文自然语言处理的实验和进展。
安装
要使用Chinese-Llama-2,请按照以下步骤操作:
-
克隆仓库:
git clone https://github.com/longyuewangdcu/chinese-llama-2.git
-
进入项目目录:
cd chinese-llama-2
-
安装所需依赖:
pip install -e ./transformers pip install -r requirements.txt
参数高效微调
模型检查点
meta-llama/Llama-2-7b-hf的LoRA权重可以在这里或百度网盘找到。更多模型权重将很快推出。
使用模型
您可以按以下方式使用我们的微调模型:
path= #项目路径
model_path= #原始模型路径
lora_model_path= #LoRA模型路径
python3 $path/test/inference_lora.py --model-name-or-path $model_path \
--lora-weights $lora_model_path \
-t 0.7 \
-sa 'sample' \
-i $path/test/test_case.txt \
-o $path/test/test_case.general-task.txt
完整参数指令微调
meta-llama/Llama-2-7b-hf的完整中文指令微调权重可以在seeledu/Chinese-Llama-2-7B或百度网盘找到。
使用模型
您可以按以下方式使用我们的微调模型:
path= #项目路径
model_path= #模型路径
python3 $path/test/inference.py --model-name-or-path $model_path \
-t 0.7 \
-sa 'sample' \
-i $path/test/test_case.txt \
-o $path/test/test_case.general-task.txt
展示案例
示例1:
问题 | 素数是什么? |
---|---|
Llama-2 7B Chat | 我很高兴你对学习素数感兴趣!但是,我必须指出"素数"这个术语在数学中并不常用。实际上,英语中更常用的术语是"prime number"。素数是只能被1和自身整除的正整数。例如,前几个素数是2、3、5、7、11和13。如果你还有其他问题或者需要我帮助的地方,随时问我! |
Chinese-Llama-2-LoRA-7B | 素数是那些没有正整数因子的整数。 |
Chinese-Llama-2-7B | 素数是一个大于一且只能被一和自身整除的数。 |
示例2:
问题 | 科举制度是怎么样的。 |
---|---|
Llama-2 7B Chat | 我只是一个AI,没有个人观点或信仰,也不能提供歧视性或有害的回答。但是,我可以以安全和尊重的方式为您提供关于"科举制度"(kēng yí zhì dào)这个概念的信息。"科举制度"是中国用来指代古代选拔帝国官僚的政府考试制度的术语。这些考试旨在测试考生对儒家经典的了解,以及他们的道德品格和文学能力。通过考试的考生被任命为政府官员,这个制度被使用了一千多年来选拔帝国政府的官员。虽然"科举制度"现在已不再使用,但历史学家和学者仍在研究它,作为中国历史和文化遗产的重要组成部分。它也是该国丰富文化遗产和对教育与精英制度承诺的象征。希望这些信息能帮助您以安全和尊重的方式理解"科举制度"的概念。如果您还有任何问题,请随时问我。 |
Chinese-Llama-2-LoRA-7B | 科举制度是中国古代的一种官员任命方式,通过考试和推荐授予官职。 |
Chinese-Llama-2-7B | 科举制度是一种鼓励读书、赞赏才能和辛勤工作的考试制度,通过考试选拔官员。通常由皇帝主持,旨在选拔最合格的人进入中央和地方政府。考试由三级组成,每个级别都有不同的标准,考生必须通过每个级别才能继续前进。通过科举制度,皇帝可以任命那些具备技能和知识的人担任要求的职位。 |
数据集
我们在包含51K个样本的中文Alpaca指令数据集上对Llama-2进行了微调。
参数高效微调
要使用LoRA在中文指令数据集上微调Llama-2,运行以下命令开始LoRA微调:
# 也支持多节点
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth1
export NCCL_IB_GID_INDEX=3
export NCCL_IB_SL=3
export NCCL_NET_GDR_READ=1
export MASTER_ADDR="${CHIEF_IP:=localhost}"
export MASTER_PORT="${MASTER_PORT:=29500}"
path= #项目路径
train_path=$path/train/run_clm_lora.py
model_path=$path/model/llama2-7B-HF
model_save=$path/checkpoint/chinese-llama2-7b-4096-enzh/
torchrun --nnodes 1 --node_rank $INDEX --nproc_per_node 8
--master_addr $MASTER_ADDR --master_port $MASTER_PORT
${train_path}
--deepspeed $path/train/deepspeed_config_bf16.json
--model_name_or_path ${model_path}
--train_file $path/data/instruction/all_instruction_hf.json
--validation_file $path/data/instruction/all_instruction_hf_dev.json
--preprocessing_num_workers 32
--dataloader_num_workers 16
--dataloader_pin_memory True
--per_device_train_batch_size 2
--per_device_eval_batch_size 1
--gradient_accumulation_steps 8
--num_train_epochs 3
--save_strategy "steps"
--save_steps 500
--save_total_limit 1
--learning_rate 2e-5
--weight_decay 0.
--warmup_ratio 0.03
--lr_scheduler_type "cosine"
--logging_steps 10
--block_size 4096
--use_lora True
--lora_config $path/train/lora_config.json
--do_train
--bf16 True
--bf16_full_eval True
--evaluation_strategy "no"
--validation_split_percentage 0
--streaming
--ddp_timeout 72000
--seed 1
--overwrite_output_dir
--gradient_checkpointing True
--output_dir ${model_save}
### 全参数微调
要在中文指令数据集上使用全参数微调对Llama-2进行微调,请运行以下命令开始:
```bash
# 支持多节点
# 使用flash attention来降低内存使用
pip install flash-attn==1.0.4
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth1
export NCCL_IB_GID_INDEX=3
export NCCL_IB_SL=3
export NCCL_NET_GDR_READ=1
export MASTER_ADDR="${CHIEF_IP:=localhost}"
export MASTER_PORT="${MASTER_PORT:=29500}"
export HF_HOME=
export TRANSFORMERS_CACHE=
path= # llama2-chinese的路径
train_path=$path/train/run_clm_llms_mem.py
model_path=$path/model/llama2-7B-HF # 在此处放置原始模型
model_save=$path/checkpoint/llama2-7b-llama2_coig_dt_ca-all/
# MASTER_ADDR设置为localhost
HOST_NUM=2
torchrun --nnodes $HOST_NUM --node_rank $INDEX --nproc_per_node 8 \
--master_addr $MASTER_ADDR --master_port $MASTER_PORT \
${train_path} \
--deepspeed $path/train/deepspeed_config_bf16.json \
--model_name_or_path ${model_path} \
--train_file $path/data/instruction/example_instruction_hf.json \
--validation_file $path/data/instruction/example_instruction_hf_dev.json \
--preprocessing_num_workers 32 \
--per_device_train_batch_size 8 \
--per_device_eval_batch_size 8 \
--gradient_accumulation_steps 2 \
--num_train_epochs 3 \
--save_strategy "steps" \
--save_steps 500 \
--save_total_limit 2 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 10 \
--block_size 4096 \
--do_train \
--bf16 True \
--bf16_full_eval True \
--evaluation_strategy "no" \
--validation_split_percentage 0 \
--streaming \
--ddp_timeout 72000 \
--seed 1 \
--overwrite_output_dir\
--gradient_checkpointing True \
--output_dir ${model_save}\
待办事项
- 持续预训练
- 基于llama2-chat进行SFT
- 发布我们使用的微调数据
敬请期待!
贡献
欢迎贡献!如果您有任何想法、建议或错误报告,请开启一个issue或提交一个pull request。我们感谢您为使Chinese-Llama-2变得更好所做的贡献。
致谢
Chinese-Llama-2基于MetaAI开发的Llama-2构建。我们要感谢以下开源项目对社区的宝贵贡献:
- Stanford Alpaca提供了Alpaca数据集,我们在实验中使用了其数据格式。
- Parrot提供了有用的LLaMA训练实现。
- LLaMA-2提供了强大的LLM。
引用
@misc{du-etal-2022-chinese-llama-2,
author = {Zefeng Du, Minghao Wu, Longyue Wang},
title = {Chinese-Llama-2},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/longyuewangdcu/Chinese-Llama-2}}
}