nlp
鱼鱼9901
这个作者很懒,什么都没留下…
展开
-
transformers的tokenizer总结
根据字母搭配出现的频率组成词根。初始vocabulary:["b", "g", "h", "n", "p", "s", "u"]然后计数字母搭配出现的频率,比如"hu"=10+5=15次,"ug"=10+5+5=20次,"un"=12+4=16次每次选取频率最高的搭配进行更新vocabulary,那么此时vocabulary:["b", "g", "h", "n", "p", "s", "u","ug"]原创 2024-03-28 10:53:02 · 929 阅读 · 0 评论 -
llamaindex构建知识库对本地模型进行rag的优化
仅代表个人观点,因为都是凭借主观感觉的,并没有一个标准打分机制:rerank对query engine的提升还是有的,只不过要耗费多一点时间;但是对于chat engine来说还是不rerank比较好。refine知识库和SI知识库感觉差不多,但是对于chat engine来说可能SI更灵活更智能一点?其实各有千秋,挺难选择。原创 2024-03-20 14:41:20 · 1234 阅读 · 0 评论 -
llamaindex结合本地模型构建RAG
总结一下对llamaindex的使用心得,第一部分是构建知识库并持久化,第二部分是使用本地llm模型和本地embed模型,第三部分是对qurey engine和chat engine的使用(自定义prompt)。知识库格式:一个全是txt文档的文件夹。原创 2024-03-19 14:32:01 · 1127 阅读 · 0 评论 -
分布式训练&deepspeed的各stage
⑧反向传播结果归到GPU0,由GPU0进行总计算,减小梯度,更新参数,再把更新后的模型重新复制三份到三个GPU。模型大小受限于单卡容量(第一张卡显存的85%左右大小的模型是比较合适的)假设一共有384张卡,每48张卡复制一个模型,那么数据可以分为8份【数据并行 n=8】ZeRO-3:对优化器状态、梯度、模型参数都进行分片(显存降低更多,但通信成本增加1.5倍)③每个模型对自己那部分数据前向传播。如果有三张卡,就会有三个模型(一个模型复制三份)ZeRO-2:对优化器状态、梯度都进行分片(显存降低8倍)原创 2024-03-06 15:06:26 · 213 阅读 · 0 评论 -
使用魔搭社区的模型对对话文本进行语义分割
①当文本长度小于512时,填充其长度。②将 “小明:” 替换成 “小明,” 【因为太多的“:”会导致语义分割出错】此时text是列表,每一个元素都是一个语义相近的一段,分割结束。原创 2024-03-06 10:40:23 · 272 阅读 · 0 评论 -
用pycharm从huggingface下载
【代码】用pycharm从huggingface下载。原创 2024-02-01 17:11:37 · 414 阅读 · 0 评论 -
transformers实现各种NLP任务的流程框架
整理了b站up主的教程,加强对于transformers的使用理解,以及针对各种Nlp任务的训练和评估、推理的流程框架。有一些注释和个人理解部分。原创 2024-01-28 15:37:07 · 194 阅读 · 0 评论 -
显存不够又想用某个模型时的模型量化操作
【代码】显存不够又想用某个模型时的模型量化操作。原创 2024-01-26 21:37:55 · 172 阅读 · 3 评论 -
Lookahead加速LLM推理过程
虽然这会增加一定的内存需求,但通过动态更新Trie树(包括分支插入、消除和节点修剪),可以有效地控制Trie树的大小,从而优化内存消耗。此外,对于CPU内存,Trie树的消耗也非常有限,例如在AntRAG数据集上,Trie树仅占用了260 MiB的内存。引入了多分支策略,通过基于Trie树的检索(Trie-based Retrieval, TR)过程,同时生成多个分支(每个分支是一系列令牌),然后通过验证和接受(Verification and Accept, VA)过程确定最长正确子序列作为最终输出。原创 2024-01-26 22:41:03 · 395 阅读 · 0 评论 -
什么时候需要DataCollator以及一些常见的DataCollator
DataCollator:如果不指定也会有个默认的DataCollator,默认的DataCollator作用是将输入转换为tensor,常见的需要手动指定的时候就是数据没有做padding的时候,要动态padding。也就是说如果在data_process中做了padding,并且没有特殊处理需求,那么也许就不需要collator了。DataCollatorForSeq2Seq: Data collator that will dynamically pad the inputs received, as原创 2024-01-21 11:55:40 · 568 阅读 · 0 评论 -
datasets的一些使用技巧
#加载某类文件作为数据集dataset = load_dataset("json", data_files="./train_pair_1w.json", split="train") #加载数据集中的子数据集datasets = load_dataset("clue",name="afqmc")train_dataset=datasets[“train”]#构造数据集try_dataset=train_dataset[:10]dataset = Dataset.from_dict(try_dataset原创 2024-01-20 21:18:25 · 708 阅读 · 0 评论 -
大语言模型占显存的计算和优化
gradient_accumulation_steps(per_device_train_batch_size*gradient_accumulation_steps=计算梯度的数据数)gradient_checkpointing(前项激活值里面有很多是不需要存的,可以在反向传播再次计算的)per_device_train_batch_size(相当于batch size,越小显存占的越小)optim(可以改为adafactor)冻结参数(只训练下游任务的参数)将max_length减小。原创 2024-01-04 23:22:18 · 699 阅读 · 1 评论 -
基于transformers,用GPU训练的显存优化方法
1. 减小"per_device_train_batch_size",设置 "gradient_accumulation_steps"。这样在计算梯度的时候是每per_device_train_batch_size*gradient_accumulation_steps个样本计算一下。4.对原大模型的params进行with torch.no_grad操作,不更新原来大模型的参数,只针对后处理层进行训练。5.减小语料的max length:“max_seq_length”3.优化器改成Adafactor。原创 2023-12-26 15:50:59 · 548 阅读 · 0 评论 -
transformers使用中不能先把dataset进行tokenize再送入dataloader,应该写作一个colle_fn再送入dataloader 或者不用dataloder
不能先把dataset进行tokenize再送入dataloader,应该写作一个colle_fn再送入dataloader。原创 2023-12-23 23:33:14 · 441 阅读 · 1 评论 -
吴恩达RLHF课程笔记
2.根据这个数据集(偏好数据集),创建reward model,这个model也是一个LLM,并且它是回归模型,返回的是对每个answer的score,loss是最大化winning candidate和losing candidate的score。训练结束后我们输入一个prompt(使用prompt数据集,这个数据集和偏好数据集分布要一致)和对应的answer,会得到一个score,显示的是这个answer有多好(有多符合标记数据的人的偏好)原创 2023-12-22 22:57:50 · 400 阅读 · 0 评论