基于lora的llama2二次预训练
基于lora的llama2二次预训练
一、为什么需要对llama2做基于lora的二次预训练?
加入中文训练语料进行llama2的二次预训练,这样模型就可以增加支持中文输出的能力。
二、基于lora的llama2二次预训练的目标是什么?
在保持预训练模型权重不变的情况下,通过添加额外的网络层并仅训练这些新增的网络层参数,实现大模型的高效微调(peft)。
三、基于lora的llama2二次预训练的思想是什么?
思想:基于对模型本征维度(intrinsic dimension)的理解。
"本征维度"是指模型中真正有用的、能够影响模型输出的参数数量。
Aghajanyan研究发现,预训练模型的内在维度实际上非常小,即只有一小部分参数对模型输出有显著影响。就是存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果。
LORA假设模型在任务适配过程中权重的改变量是低秩(low rank) W=W0+ΔW,ΔW=BA
参数更新范围:只训练新增的网络层参数
四、基于lora的llama2二次预训练语料构建思路?
- 预训练数据集下载
本项目基于lora的llama2二次预训练语料来自中文书籍,一个中文书籍收录整理项目。
git clone https://github.com/shjwudp/shu.git
-
数据集格式介绍
数据集格式,.txt结尾
-
数据集介绍
以《红楼梦》为例,展示了数据集的内容和格式。
五、如何基于lora的llama2二次预训练?
实现代码:run_clm_pt_with_peft.py
- 基于lora的llama2二次预训练参数介绍
- 预训练模型参数
@dataclass
class ModelArguments:"""Arguments pertaining to which model/config/tokenizer we are going to fine-tune, or train from scratch."""model_name_or_path: Optional[str] = field(基于lora的llama2二次预训练一、为什么需要 对 llama2 做 基于lora的二次预训练?加入中文训练语料进行llama2的二次预训练,这样模型就可以增加支持中文输出的能力。二、基于lora的llama2二次预训练 的目标是什么?在保持预训练模型权重不变的情况下,通过添加额外的网络层并仅训练这些新增的网络层参数,实现大模型的高 效微调(peft)。三、基于lora的llama2二次预训练 的思想是什么?思想:基于对模型本征维度(intrinsic dimension)的理解。
“本征维度”是指模型中真正有用的、能够影响模型输出的参数数量。
Aghajanyan研究发现,预训练模型的内在维度实际上非常小,即只有一小部分参数对模型输出有显著影响。就是 存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果
LORA假设模型在任务适配过程中权重的改变量是低秩(low rank) W=W0+ΔW,ΔW=BA
参数更新范围:只训练新增的网络层参数四、基于lora的llama2二次预训练 语料构建思路?1. 预训练 数据集 下载
本项目 基于lora的llama2二次预训练 语料 来自中 文书籍,一个 中文书籍收录整理 项目。1. 数据集格式介绍介绍:数据集格式,.txt结尾1. 数据集介绍第一回 甄士隐梦幻识通灵 贾雨村风尘怀闺秀列位看官:你道此书从何而来?说起根由,虽近荒唐,细按则深有趣味。待在下将此来历注 明,方使阅者了然不惑。原来女娲氏炼石补天之时,于大荒山无稽崖炼成高经十二丈、方经二十四丈顽石三万六千五百 零一块。娲皇氏只用了三万六千五百块,只单单剩了一块未用,便弃在此山青埂峰下。谁知此 石自经煅炼之后,灵性已通,因见众石俱得补天,独自己无材不堪入选,遂自怨自叹,日夜悲 号惭愧。一日,正当嗟悼之际,俄见一僧一道远远而来,生得骨格不凡,丰神迥别,说说笑笑,来至峰 下,坐于石边,高谈快论:先是说些云山雾海、神仙玄幻之事,后便说到红尘中荣华富贵。此 石听了,不觉打动凡心,也想要到人间去享一享这荣华富贵,但自恨粗蠢,不得已,便口吐人 言,向那僧道说道:“大师,弟子蠢物,不能见礼了!适闻二位谈那人世间荣耀繁华,心切慕 之。弟子质虽粗蠢,性却稍通,况见二师仙形道体,定非凡品,必有补天济世之材,利物济人 之德。如蒙发一点慈心,携带弟子得入红尘,在那富贵场中,温柔乡里受享几年,自当永佩洪 恩,万劫不忘也!”二仙师听毕,齐憨笑道:“善哉,善哉!那红尘中有却有些乐事,但不能 永远依恃;况又有‘美中不足,好事多磨’八个字紧相连属,瞬息间则又乐极悲生,人非物换,究竟是到头一梦,万境归空,倒不如不去的好。”这石凡心已炽,那里听得进这话去,乃 复苦求再四。二仙知不可强制,乃叹道:“此亦静极思动,无中生有之数也!既如此,我们便 携你去受享受享,只是到不得意时,切莫后悔!”石道:“自然,自然。”那僧又道:“若说 你性灵,却又如此质蠢,并更无奇贵之处。如此也只好踮脚而已。也罢!我如今大施佛法,助 你助,待劫终之日,复还本质,以了此案。你道好否?”石头听了,感谢不尽。那僧便念咒书 符,大展幻术,将一块大石登时变成一块鲜明莹洁的美玉,且又缩成扇坠大小的可佩可拿。那 僧托于掌上,笑道:“形体倒也是个宝物了!还只没有实在的好处,须得再镌上数字,使人一 见便知是奇物方妙。然后好携你到那昌明隆盛之邦、诗礼簪缨之族、花柳繁华地、温柔富贵乡 去安身乐业。”石头听了,喜不能禁,乃问:“不知赐了弟子那哪几件奇处?又不知携了弟子 到何地方?望乞明示,使弟子不惑。”那僧笑道:“你且莫问,日后自然明白的。”说着,便 袖了这石,同那道人飘然而去,竟不知投奔何方何舍。后来,不知过了几世几劫,因有个空空道人访道求仙,从这大荒山无稽崖青埂峰下经过,忽见 一大块石上字迹分明,编述历历。空空道人乃从头一看,原来就是无材补天,幻形入世,蒙茫 茫大士、渺渺真人携入红尘,历尽离合悲欢、炎凉世态的一段故事。后面又有一首偈云:无材可去补苍天,枉入红尘若许年。此系身前身后事,倩谁记去作奇传?诗后便是此石坠落之乡,投胎之处,亲自经历的一段陈迹故事。其中家庭闺阁琐事,以及闲情 诗词倒还全备,或可适趣解闷;然朝代年纪、地舆邦国却反失落无考。空空道人遂向石头说道:“石兄,你这一段故事,据你自己说有些趣味,故编写在此,意欲问 世传奇。据我看来:第一件,无朝代年纪可考;第二件,并无大贤大忠理朝廷、治风俗的善政,其中只不过几个异样女子,或情或痴,或小才微善,亦无班姑、蔡女之德能。我纵抄去, 恐世人不爱看呢!”石头笑答道:“我师何太痴耶!若云无朝代可考,今我师竟借汉、唐等年 纪添缀,又有何难?但我想,历来野史,皆蹈一辙,莫如我这不借此套者,反倒新奇别致。不 过只取其事体情理罢了,又何必拘拘于朝代年纪哉!再者,市井俗人喜看理治之书者甚少,爱 适趣闲文者特多。历来野史,或讪谤君相,或贬人妻女,奸淫凶恶,不可胜数。更有一种风月笔墨,其淫秽污臭,屠毒笔墨,坏人子弟,又不可胜数。至若佳人才子等书,则又千部共出一 套,且其中终不能不涉于淫滥,以致满纸潘安、子建、西子、文君。不过作者要写出自己的那 两首情诗艳赋来,故假拟出男女二人名姓,又必旁出一小人其间拨乱,亦如剧中之小丑然。且 鬟婢开口即者也之乎,非文即理。故逐一看去,悉皆自相矛盾、大不近情理之话,竟不如我半 世亲睹亲闻的这几个女子,虽不敢说强似前代书中所有之人,但事迹原委,亦可以消愁破闷; 也有几首歪诗熟话,可以喷饭供酒。至若离合悲欢,兴衰际遇,则又追踪蹑迹,不敢稍加穿凿,徒为供人之目而反失其真传者。今之人,贫者日为衣食所累,富者又怀不足之心;纵然一 时稍闲,又有贪淫恋色、好货寻愁之事,哪里有工夫去看那理治之书!所以,我这一段故事, 也不愿世人称奇道妙,也不定要世人喜悦检读,只愿他们当那醉淫饱卧之时,或避世去愁之际,把此一玩,岂不省了些寿命筋力?就比那谋虚逐妄,却也省了口舌是非之害、腿脚奔忙之 苦。再者,亦令世人换新眼目,不比那些胡牵乱扯,忽离忽遇,满纸才人淑女、子建、文君、 红娘、小玉等通共熟套之旧稿。我师意为何如?”空空道人听如此说,思忖半晌,将一这《石头记》再检阅一遍,因见上面虽有些指奸责佞、贬 恶诛邪之语,亦非伤时骂世之旨;及至君仁臣良、父慈子孝,凡伦常所关之处,皆是称功颂德,眷眷无穷,实非别书之可比。虽其中大旨谈情,亦不过实录其事,又非假拟妄称,一味淫 邀艳约,私订偷盟之可比。因毫不干涉时世,方从头至尾抄录回来,问世传奇。因空见色,由
色生情,传情入色,自色悟空,空空道人遂易名为情僧,改《石头记》为《情僧录》。至?玉峰 题曰《红楼梦》。东鲁孔梅溪则题曰《风月宝鉴》。后因曹雪芹于悼红轩中,披阅十载,增删五次,纂成目录,分出章回,则题曰《金陵十二钗》,并题一绝云:满纸荒唐言,一把辛酸泪!都云作者痴,谁解其中味? 至脂砚斋甲戌抄阅再评,仍用《石头记》。
出则既明,且看石上是何故事。按那石上书云:
...红楼梦.txt五、如何 基于lora的llama2二次预训练 ?•实现代码:[run_clm_pt_with_peft.py](https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/blob/main/scripts/training/run_clm_pt_with_peft.py)5.1基于lora的llama2二次预训练 参数介绍1. 预训练模型参数default=None,metadata={"help": ("The model checkpoint for weights initialization.Don't set if you want to train a model from scratch.")},)tokenizer_name_or_path: Optional[str] = field(default=None,metadata={"help": ("The tokenizer for weights initialization.Don't set if you want to train a model from scratch.")},)model_type: Optional[str] = field(default=None,metadata={"help": "If training from scratch, pass a model type from the list: " + ", ".join(MODEL_TYPES)},)config_overrides: Optional[str] = field(default=None,metadata={"help": ("Override some existing default config settings when a model is trained from scratch. Example: ""n_embd=10,resid_pdrop=0.2,scale_attn_weights=false,summary_type=cls_index")},)config_name: Optional[str] = field(default=None, metadata={"help": "Pretrained config name or path if not the same as model_name"})tokenizer_name: Optional[str] = field(default=None, metadata={"help": "Pretrained tokenizer name or path if not the same as model_name"})cache_dir: Optional[str] = field(default=None,metadata={"help": "Where do you want to store the pretrained models downloaded from huggingface.co"},)use_fast_tokenizer: bool = field(default=True,metadata={"help": "Whether to use one of the fast tokenizer (backed by the tokenizers library) or not."},)model_revision: str = field(default="main",metadata={"help": "The specific model version to use (can be a branch name, tag name or commit id)."},)use_auth_token: bool = field(default=False,metadata={"help": ("Will use the token generated when running `huggingface-cli login` (necessary to use this script ""with private models).")},)torch_dtype: Optional[str] = field(default=None,metadata={"help": ("Override the default `torch.dtype` and load the model under this dtype. If `auto` is passed, the ""dtype will be automatically derived from the model's weights."),"choices": ["auto", "bfloat16", "float16", "float32"],},)def post_init (self):if self.config_overrides is not None and (self.config_name is not None or self.model_name_or_path is not None):raise ValueError("--config_overrides can't be used in combination with --config_name or --model_name_or_path")
•关键参数介绍:
•model_name_or_path:预训练模型地址
•tokenizer_name_or_path::预训练模型 tokenizer 地址
•model_type:大模型类型
1.预训练 数据参数介绍
@dataclass
class DataTrainingArguments:"""Arguments pertaining to what data we are going to input our model for training and eval."""dataset_dir: Optional[str] = field(default=None, metadata={"help": "The name of the dataset to use (via the datasets library)."})dataset_config_name: Optional[str] = field(default=None, metadata={"help": "The configuration name of the dataset to use (via the datasets library)."})train_file: Optional[str] = field(default=None, metadata={"help": "The input training data file (a text file)."})validation_file: Optional[str] = field(default=None,metadata={"help": "An optional input evaluation data file to evaluate the perplexity on (a text file)."},)max_train_samples: Optional[int] = field(default=None,metadata={"help": ("For debugging purposes or quicker training, truncate the number of training examples to this ""value if set.")},)max_eval_samples: Optional[int] = field(default=None,metadata={"help": ("For debugging purposes or quicker training, truncate the number of evaluation examples to this ""value if set.")},)streaming: bool = field(default=False, metadata={"help": "Enable streaming mode"})block_size: Optional[int] = field(default=None,metadata={"help": ("Optional input sequence length after tokenization. ""The training dataset will be truncated in block of this size for training. ""Default to the model max input length for single sentence inputs (take into account special tokens).")},)overwrite_cache: bool = field(default=False, metadata={"help": "Overwrite the cached training and evaluation sets"})validation_split_percentage: Optional[float] = field(default=0.05,metadata={"help": "The percentage of the train set used as validation set in case there's no validation split"},)preprocessing_num_workers: Optional[int] = field(default=None,metadata={"help": "The number of processes to use for the preprocessing."},)keep_linebreaks: bool = field(default=True, metadata={"help": "Whether to keep line breaks when using TXT files or not."})data_cache_dir: Optional[str] = field(default="./", metadata={"help": "The datasets processed stored"})def post_init (self):if self.streaming:require_version("datasets>=2.0.0", "The streaming feature requires
`datasets>=2.0.0`")
- 预训练数据参数介绍
@dataclass
class MyTrainingArguments(TrainingArguments):trainable : Optional[str] = field(default="q_proj,v_proj")lora_rank : Optional[int] = field(default=8)lora_dropout : Optional[float] = field(default=0.1)lora_alpha : Optional[float] = field(default=32.)modules_to_save : Optional[str] = field(default=None)debug_mode : Optional[bool] = field(default=False)peft_path : Optional[str] = field(default=None)flash_attn : Optional[bool] = field(default=False)double_quant: Optional[bool] = field(default=True)quant_type: Optional[str] = field(default="nf4")load_in_kbits: Optional[int] = field(default=16)
- 预训练模型参数介绍
- 基于lora的llama2二次预训练
########参数设置########
lr=2e-4 # 学习率
lora_rank=64 # LoRA低秩矩阵的维数
lora_alpha=128 # LoRA低秩矩阵的缩放系数,为一个常数超参,调整alpha与调整学习率类似lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj" # 可训练的LORA 模块,q_proj、k_proj和v_proj是多头注意力机制中的三个线性变换,用于将输入的token映射到一个高维向量空间中,以便于模型对输入进行处理;o_proj则是多头注意力机制的输出层,它将模型的输出映射到一个概率分布上,以便于模型预测下一个token;gate_proj、down_proj和up_proj则是在LoRA微调方法中使用的一些层modules_to_save="embed_tokens,lm_head" # 需要保存的模块,embed_tokens层将输入的token映射到一个高维向量空间中,以便于模型对输入进行处理。lm_head层则是预测下一个token的输出层,它将模型的输出映射到一个概率分布上,以便于模型预测下一个token lora_dropout=0.05 # LoRA 层的丢弃(dropout)率,取值范围为[0, 1)pretrained_model=/root/llama/all_transformer # 预训练模型路径chinese_tokenizer_path=/root/llama/all_transformer # 中文分词器路径dataset_dir=/root/llama/data # 数据集路径
data_cache=./cache/ # 数据缓存路径per_device_train_batch_size=1 # 每个设备上的训练批次大小gradient_accumulation_steps=1 # 梯度累积步数output_dir=output_dir # 输出目录路径
block_size=512 # 设置最大序列长度为512,超过这个长度的序列将被截断或填充# resume_from=output_dir/checkpoint-24000 # 从哪个检查点恢复训练training_steps=25000deepspeed_config_file=scripts/training/ds_zero2_no_offload.json########启动命令########
torchrun --nnodes 1 --nproc_per_node 1 scripts/training/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} \--do_train \--seed $RANDOM \--fp16 \--max_steps ${training_steps} \--num_train_epochs 1 \--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 ${block_size} \--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 \--resume True \--resume_from_checkpoint ${resume_from} \--gradient_checkpointing \--ddp_find_unused_parameters False
基于lora的llama2二次预训练 显存占用
六、如何基于lora的llama2微调?
实现代码:run_clm_sft_with_peft.py
- 训练数据介绍
本次 基于lora的llama2 Lora 微调 这样使用 standford 开源的的stanford_alpaca项目,该项目 提供了廉价的对
llama模型微调方法——利用openai提供的gpt模型api生成质量较高的instruct tuning数
些数据微调模型。
据(仅52k),并且基于这
在prompt设计上,精调以及预测时采用的都是原版Stanford Alpaca不带input的模版。对于包含input字段的数据,采用f"{instruction}+\n+{input}"的形式进行拼接。
但是由于 该数据集是 英文的,所以 使用Chinese-LLaMA-Alpaca开源的中
ChatGPT (gpt-3.5-turbo)爬取的指令数据。
[{"instruction": "我们如何在日常生活中减少用水?","input": "","output": "1. 使用节水装置,如节水淋浴喷头和水龙头。 \n2. 使用水箱或水桶收集家庭废水,例如洗碗和洗浴。 \n3. 在社区中提高节水意识。 \n4. 检查水管和灌溉系统的漏水情况,并及时修复它们。 \n5. 洗澡时间缩短,使用低流量淋浴头节约用水。 \n6. 收集雨水,用于园艺或其他非饮用目的。 \n7. 刷牙或擦手时关掉水龙头。 \n8. 减少浇水草坪的时
间。 \n9. 尽可能多地重复使用灰水(来自洗衣机、浴室水槽和淋浴的水)。 \n10. 只购买能源效率高的洗碗机和洗衣机。"},{"instruction": "编辑文章,使其更吸引读者。","input": "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入。自主机器人在各个行业中被越来越广泛地应用,从制造业到医疗保健再到安全。","output": "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入,从而实现了新的效率、精确度和可靠性水平。自主机器人在各个行业中被越来越广泛地应 用,从制造业,它们可以使用精度和一致的质量组装复杂的组件,到医疗保健,可以协助进行 医疗测试和处理,再到安全,可以监控大面积地区,保障人们和财产的安全。自主机器人还可 以减少在危险或有害环境中的错误和增加安全,在工业流程的检查或维修期间等。由于其多样 性,自主机器人将彻底改变我们工作方式的方式,使任务变得更加简单、快速,最终更加愉悦。"},...
]
- 基于lora的llama2微调参数介绍
- 基于lora的llama2微调大模型路径参数
@dataclass
class ModelArguments:"""Arguments pertaining to which model/config/tokenizer we are going to fine-tune, or train from scratch."""model_name_or_path: Optional[str] = field(default=None,metadata={"help": ("The model checkpoint for weights initialization.Don't set if you want to train a model from scratch.")},)tokenizer_name_or_path: Optional[str] = field(default=None,metadata={"help": ("The tokenizer for weights initialization.Don't set if you want to train a model from scratch.")},)config_overrides: Optional[str] = field(default=None,metadata={"help": ("Override some existing default config settings when a model is trained from scratch. Example: ""n_embd=10,resid_pdrop=0.2,scale_attn_weights=false,summary_type=cls_index")},)config_name: Optional[str] = field(default=None, metadata={"help": "Pretrained config name or path if not the same as model_name"})tokenizer_name: Optional[str] = field(default=None, metadata={"help": "Pretrained tokenizer name or path if not the same as model_name"})cache_dir: Optional[str] = field(default=None,metadata={"help": "Where do you want to store the pretrained models downloaded from huggingface.co"},)use_fast_tokenizer: bool = field(default=True,metadata={"help": "Whether to use one of the fast tokenizer (backed by the tokenizers library) or not."},)model_revision: str = field(default="main",metadata={"help": "The specific model version to use (can be a branch name, tag name or commit id)."},)use_auth_token: bool = field(default=False,metadata={"help": ("Will use the token generated when running `huggingface-cli login` (necessary to use this script ""with private models).")},)torch_dtype: Optional[str] = field(default=None,metadata={"help": ("Override the default `torch.dtype` and load the model under this dtype. If `auto` is passed, the ""dtype will be automatically derived from the model's weights."),"choices": ["auto", "bfloat16", "float16", "float32"],},)def post_init (self):if self.config_overrides is not None and (self.config_name is not None or self.model_name_or_path is not None):raise ValueError("--config_overrides can't be used in combination with --config_name or --model_name_or_path")
•关键参数介绍:
•model_name_or_path:预训练模型地址
•tokenizer_name_or_path::预训练模型 tokenizer 地址
- 基于lora的llama2微调数据参数介绍
@dataclass
class DataTrainingArguments:"""Arguments pertaining to what data we are going to input our model for training and eval."""dataset_dir: Optional[str] = field(default=None, metadata={"help": "The name of the dataset to use (via the datasets library)."})train_file: Optional[str] = field(default=None, metadata={"help": "The input training data file (a text file)."})validation_file: Optional[str] = field(default=None,metadata={"help": "An optional input evaluation data file to evaluate the perplexity on (a text file)."},)overwrite_cache: bool = field(default=False, metadata={"help": "Overwrite the cached training and evaluation sets"})validation_split_percentage: Optional[float] = field(default=0.05,metadata={"help": "The percentage of the train set used as validation set in case there's no validation split"},)preprocessing_num_workers: Optional[int] = field(default=None,metadata={"help": "The number of processes to use for the preprocessing."},)keep_linebreaks: bool = field(default=True, metadata={"help": "Whether to keep line breaks when using TXT files or not."})data_cache_dir: Optional[str] = field(default=None, metadata={"help": "The datasets processed stored"})max_seq_length: Optional[int] = field(default=1024)
- 基于lora的llama2微调模型参数介绍
@dataclass
class MyTrainingArguments(TrainingArguments):trainable : Optional[str] = field(default="q_proj,v_proj")lora_rank : Optional[int] = field(default=8)lora_dropout : Optional[float] = field(default=0.1)lora_alpha : Optional[float] = field(default=32.)modules_to_save : Optional[str] = field(default=None)peft_path : Optional[str] = field(default=None)flash_attn : Optional[bool] = field(default=False)double_quant: Optional[bool] = field(default=True)quant_type: Optional[str] = field(default="nf4")load_in_kbits: Optional[int] = field(default=16)
- 基于lora的llama2微调
lr=1e-4 lora_rank=64 lora_alpha=128
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.05pretrained_model=/root/llama/correspond_output_dir chinese_tokenizer_path=/root/llama/correspond_output_dir dataset_dir=data_pt
per_device_train_batch_size=1 per_device_eval_batch_size=1 gradient_accumulation_steps=8 max_seq_length=512 output_dir=sft_output_dir2
validation_file=data_pt/alpaca_data_zh_51k.json training_steps=6000deepspeed_config_file=scripts/training/ds_zero2_no_offload.jsontorchrun --nnodes 1 --nproc_per_node 7 scripts/training/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} \--per_device_train_batch_size ${per_device_train_batch_size} \--per_device_eval_batch_size ${per_device_eval_batch_size} \--do_train \--do_eval \--eval_steps 1000 \--seed $RANDOM \--fp16 \--num_train_epochs 1 \--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 6000 \--save_steps 3000 \--gradient_accumulation_steps ${gradient_accumulation_steps} \--preprocessing_num_workers 8 \--max_steps ${training_steps} \--max_seq_length ${max_seq_length} \--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} \--lora_dropout ${lora_dropout} \--modules_to_save ${modules_to_save} \--torch_dtype float16 \--validation_file ${validation_file}
七、如何使用基于lora的llama2做推理?
python scripts/inference/inference_hf.py \ --base_model correspond_output_dir \ # 基础模型--lora_model sft_output_dir2/sft_lora_model \ # 如果没有设置,将在基础模型上执行推理--tokenizer_path correspond_output_dir \ # 分词器路径--with_prompt # 自动用提示符包装输入
总结
本文介绍了如何对llama2模型进行基于lora的二次预训练和微调,以增加模型对中文的支持。通过添加额外的网络层并仅训练这些新增的网络层参数,实现大模型的高效微调。预训练和微调过程中,详细介绍了数据集的构建、参数设置、训练启动命令等。通过这些步骤,可以在有限的计算资源下高效训练和推理大模型,使其具备更好的中文处理能力。
相关文章:
基于lora的llama2二次预训练
基于lora的llama2二次预训练 一、为什么需要对llama2做基于lora的二次预训练? 加入中文训练语料进行llama2的二次预训练,这样模型就可以增加支持中文输出的能力。 二、基于lora的llama2二次预训练的目标是什么? 在保持预训练模型权重不变的情况下&a…...
机器学习之量子机器学习(Quantum Machine Learning, QML)
量子机器学习(Quantum Machine Learning, QML)是一门结合量子计算与机器学习的新兴交叉领域。它利用量子计算的优势(如并行计算、量子叠加和量子纠缠)来解决传统机器学习中难以处理的问题,或提升算法效率和性能。 QML 的核心要素 量子计算的特性: 量子叠加:允许量子比特…...
【2024 Optimal Control 16-745】【Lecture 3 + Lecture4】minimization.ipynb功能分析
主要功能-最小化问题 目标函数分析: 定义函数 f ( x ) f(x) f(x) 及其一阶、二阶导数。使用绘图工具可视化函数的形状。 实现数值优化: 使用牛顿法寻找函数的极值点,结合一阶和二阶导数加速收敛。使用正则化牛顿法解决二阶导数矩阵可能不正定的问题。 可视化过程…...
一种新的电机冷却方式——热管冷却
在现代工业设备中,电机作为一种核心动力装置,广泛应用于各个领域。例如,家用电器、自动化生产线、交通工具等都离不开电机的运作。然而,随着电机功率的不断提升和负载的增加,电机在运行过程中产生的热量也随之增多&…...
虚拟机上搭建达梦DSC简略步骤
vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…...
C++ 矩阵旋转
【问题描述】 编写一个程序,读入一个矩阵,输出该矩阵以第一行第一列数字为中心,顺时针旋转90度后的新矩阵,例如: 输入的矩阵为: 1 2 3 4 5 6 顺时针旋转90度后输出的矩阵为: 4 1 5 2 6 3 【输入…...
mongodb基础操作
创建数据库 use admin授权 db.auth("admin","123456")创建用户 db.createUser({ user: "xxx", pwd: "xxxxxx", roles: [ { role: "readWrite", db: "iot" } ] })查询数据库大小 show dbs;查询结果数量 db.mo…...
以思维链为线索推理隐含情感
❀ 以思维链为线索推理隐含情感 简介摘要引言THORTHOR核心代码实验结果代码运行总结 简介 本文主要对2023ACL论文《Reasoning Implicit Sentiment with Chain-of-Thought Prompting》主要内容进行介绍。 摘要 尽管情绪分析任务常依据文本中的直接意见表达来判定目标的情绪倾向…...
(笔记,自己可见_1)简单了解ZYNQ
1、zynq首先是一个片上操作系统(Soc),结合了arm(PS)和fpga(PL)两部分组成 Zynq系统主要由两部分组成:PS(Processing System)和PL(Programmable L…...
部署自动清理任务解决ORA-00257: archiver error. Connect internal only, until freed
使用oracle数据库的时候,我们一般都会开启归档,确保数据库的日志连续和和数据安全。但随着数据库的运行,归档文件会越来越多,最终撑满磁盘空间,数据库无法继续归档,出现“ORA-00257: archiver error. Conne…...
scau编译原理综合性实验
一、题目要求 题目: 选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。 要求: 设计并实现一个一遍扫描的词法语法语义分析程序,将部分C语言的语法成分(包含赋值语句、if语句、while循环语句…...
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。 按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次ÿ…...
PICO VR串流调试Unity程序
在平时写Unity的VR程序的时候,需要调试自己写的代码,但是有的时候会发现场景过于复杂,不是HMD一体机能运行的,或者为了能够更方便的调试,不需要每次都将程序部署到眼睛里,这样非常浪费时间,对于…...
ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘
概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…...
PML和金属边界区别
一、完美匹配层(PML)边界 原理:PML是一种特殊的吸收边界条件。它基于麦克斯韦方程组的特殊解来设计,其材料参数是经过精心选择的,使得在这个边界区域内,电磁波能够无反射地进入并被吸收。从数学上来说&…...
机器学习基础--基于线性回归房价预测
经典的线性回归模型主要用来预测一些存在着线性关系的数据集。回归模型可以理解为:存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归。如果是一条二次曲线,则被称为二次回归。线性回归是回归模…...
【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升,垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施,提升公众的环保意识和参与度,垃圾分类已…...
47小型项目的规划与实施
每天五分钟学Linux | 第四十七课:小型项目的规划与实施 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划…...
Linux---ps命令
Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...
Qt Qt::UniqueConnection 底层调用
在这里插入图片描述 步骤1: 1:判断槽函数连接方式, 以及信号对象是否有效2: 信号计算格式是否 大于 signal_index 目前调试 signal_index 不太清楚怎末计算的(有清楚的帮忙街道)3:获取槽函数对…...
Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
目录 前言 Generic Webhook Trigger 插件 下载插件 编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…...
2025-2026财年美国CISA国际战略规划(下)
文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…...
aws ses生产环境申请
* aws ses生产环境申请经验: 要有域名邮箱作为反馈联系邮箱 且有收发记录 最好使用aws的WorkMail要说明清晰的使用用途、预估量、如何处理退信和投诉、防spam策略 等内容,这里可以先问问AI(比如:如何处理退信和投诉?…...
velocity unable to find resource ‘xxx.vm‘ in any resource loader
大家好,我是 程序员码递夫。 [TOC]velocity unable to find resource ‘xxx.vm’ in any resource loader 1.问题 今天帮客户解决一个远古 java web系统的bug , 客户的系统用了非常古老的框架 jdk1.6struc1.1 velocity1.5 运行在tomcat6环境。 客户想迁移到 tomc…...
InfluxDB时序数据库笔记(一)
InfluxDB笔记一汇总 1、时间序列数据库概述2、时间序列数据库特点3、时间序列数据库应用场景4、InfluxDB数据生命周期5、InfluxDB历史数据需要另外归档吗?6、InfluxDB历史数据如何归档?7、太麻烦了,允许的话选择设施完备的InfluxDB云产品吧8、…...
c#编码技巧(十九):各种集合特点汇总
.NET 常用集合对比: .NET 常见的线程安全集合 .NET 只读集合...
Python中的__init__()函数
什么是__init__()函数? __init__()函数其实是用于初始化新建对象的状态,当你创建一个类的实例时,__init__()函数的方法就会被自动调用,允许你为对象设置初始属性或执行初始化操作。 接下来这里让我们举例说明: 首先,…...
写的bug与调试
无论是代码中的逻辑混乱,还是环境配置引发的灾难,亦或是多人协作产生的诡异问题,都可以在这里分享。把你职业生涯里遇到或写过的最大 bug 故事讲出来,让大家一起感受那些惊心动魄、哭笑不得的瞬间,也为后来人敲响警钟吧…...
本地安装YAPI
项目中用到很多的RESTAPI,光靠人工管理或者普通文档肯定是不行的,翻了很多的RESTAPI管理工具,还是选择了YAPI,原因有2,一个是接口位于内网,外网网站上管理测试不到内网接口,另外一个是使用方式&…...
嵌入式Linux基于IMX6ULL tslib学习总结
目录 1. tslib开源库介绍1.1 tslib主要功能1.2 架构 2. tslib代码简单分析2.1 ts_print_mt.c分析代码2.2 ts_setup代码分析2.3 ts_open代码分析2.4 ts_config代码分析2.5 ts_read_mt代码分析2.6 tslib中4个模块的含义 3. 使用tslib库打印触摸屏2点之间的距离 基于韦东山IMX6ULL…...
pinia的使用
一、安装 Pinia 首先,确保你的项目已经安装了 Vue.js(版本 3.x)。如果没有,请先安装 Vue。 然后使用包管理器(如 npm 或 yarn)安装 Pinia: 通过 npm 安装:npm install pinia通过 ya…...
亚信安全携手飞书“走近先进” 与保隆科技探索制造业数字化转型
亚信安全携手飞书组织举办“走近先进”活动。近日活动“走近”了中国汽车供应链百强、上海市制造业五十强企业——上海保隆汽车科技股份有限公司(以下简称“保隆科技”)。活动围绕“突破桎梏 加速升级”的主题,聚焦企业数字化转型的核心议题&…...
mybatis-plus方法无效且字段映射失败错误排查
问题: Invalid bound statement (not found): com.htlc.assetswap.mapper.WalletMapper.insert,并且select * 进行查询时带下划线的字段未成功映射。 排查: 1.检查WalletMapper接口,确保继承自BaseMapper 2.启用驼峰命名法映射。a…...
poi模板动态导出,下拉框联动,公式设置
背景:有一个动态导出模板的需求,根据页面维护的数据比如模板名称,模板的sheet名称,列名称宽度高度等,导出excel文件。打破以往把excel上传到代码的resource中,或者文件服务中,再下载出来导入。这…...
string的实际应用 -- 大数相加 、大数相乘
前言:哎,做题好难o(╥﹏╥)o,有时候想不到,而有时候则是想到了却没办法理清思路,转化为代码。有必要反思了┓(;_`)┏,是否是做的太少了,或是自己的基础欠缺。 大学总是有些迷茫~ …...
16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗
使用外部触发启动ADC 1、外部中断线EXTI11触发ADC2、外部定时器TIM2_CH2触发ADC3、ADC中模拟看门狗的使用 1、外部中断线EXTI11触发ADC ADC的触发方式有很多,一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。如下图所…...
前端框架 react 性能优化
目录 一、不使用任何性能优化API进行优化 二、通过性能优化API优化 1、React.memo 2、useCallback 3、useMemo 4、PureComponent 三、总结 总览:react的优化核心思想就是让react跳过重新渲染那个些没有改变的Component,而只重新渲染发生变化的C…...
一加ACE 3 Pro手机无法连接电脑传输文件问题
先说结论:OnePlus手机无法连接电脑传输数据的原因,大概率是一加数据线的问题。尝试其他手机品牌的数据线(比如华为),再次尝试。 连接电脑方法: 1 打开开发者模式(非必要操作) 进入…...
✅ Qt流式布局
Qt流式布局 前段时间,曾经对某个软件的一个“流式布局”有点感兴趣,什么叫“流式布局”呢?请看下图: 简而言之,流式布局就是布局应能够根据界面尺寸的变化自动调整其内部控件的位置。然而,Qt 提供的标准布局ÿ…...
【微服务】RabbitMQ与SpringAMQP消息队列
一、初识MQ 1. 同步通讯 同步通讯就好比双方打电话,可以实时响应,但只能一对一,只能同时和一个人聊天。 异步通讯就好比两个人发信息,你发信息给对方,对方不一定给你回复,但是可以一对多,可…...
C++设计模式-中介者模式
动机(Motivation) 多个对象相互关联的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,可以使用一种”中介对象“来管理对象间的关联关系,避免…...
js实现分页效果
分页总结: 先写好html格式和css样式 再写js时先将他们都获取过来,设置一个k为页数的下标,num为每页的数据数量,pages为页数,并且获取json数据,再将data获取到全局 写for循环,设置一个变量为i…...
【WRF-Urban】多层建筑能源参数化模型概述:原理
【WRF-Urban】多层建筑能源参数化模型概述:原理 1 概述1.1 原理1.2 使用步骤 2参考 多层建筑能源参数化(Multi-layer Building Energy Parameterization, BEP)模型是一种用于模拟城市环境中多层建筑群的能量交换和微气候影响的参数化模型。该…...
ShuffleNet V2:高效卷积神经网络架构设计的实用指南
摘要 https://arxiv.org/pdf/1807.11164 当前,神经网络架构设计大多以计算复杂度的间接指标,即浮点运算数(FLOPs)为指导。然而,直接指标(例如速度)还取决于其他因素,如内存访问成本…...
1123--collection接口,list接口,set接口
目录 一 java 1. 集合 2. 集合框架图--remember 3. collection接口 3.1 collection接口的常用方法 3.1.1 add() 3.1.2 remove()-返回删除后的对象 3.1.3 contains()--返回布尔值 3.1.4 size&…...
基于BindingList的WinForm数据绑定机制与DataGridView动态刷新技术
前言: 本文以连接SQLite为例进行代码演示 一、首先建立里一个模型类 public class MyData{public int id { get; set; }public string name { get; set; }public int age { get; set; }public string sex { get; set; }public string address { get; set; }} 二、…...
大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
对于相对速度的重新理解 - 插一句
因为发了太多的公式,系统提示插入图片太频繁,下一个部分稍后再写。 这里要强调一下: 狭义相对论的平方和形式,其实就是因为分不清虚数单位的大小才写成这个样子。或者用物理语言来说,就是认为所有惯性系的“光速”都…...
css基础(27)_行内、行内块元素之间的空白问题
行内、行内块元素之间的空白问题 产生的原因:行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。 案例一: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8">&…...
如果接口返回值图片有很长一串码,需要添加前缀
需要在前面添加前缀:data:image/jpeg;base64,然后将值赋值给<img :src"originalImage" /> this.tableLists.map((item)>{item.originalImage "data:image/jpeg;base64,"item.originalImage})以上方法会导致出现一个小bug,…...