Lamma2 踩坑记录

ops/2025/3/29 2:24:53/

模型下载和加载

在模型中使用lamma2时,如果不对模型结构进行改造,那么直接调用Transformers定义的lamma模型即可:
参考官方教程:https://huggingface.co/docs/transformers/model_doc/llama2

from transformers import LlamaForCausalLM, LlamaTokenizertokenizer = LlamaTokenizer.from_pretrained("/output/path")
model = LlamaForCausalLM.from_pretrained("/output/path")


这里使用的LlamaForCausalLM时Transformers写的一个用于文本生成的模型
我们在下载Lamma2模型的权重时,填写申请表格一出现 'China' 网页就没了,是不是不让中国用户使用lamma2了啊?

所以只能通过其他手段下载模型权重了,下载后的目录长这样:

Transformer不能直接加载这个模型,按照官方教程转换为hf格式

python src/transformers/models/llama/convert_llama_weights_to_hf.py \--input_dir /path/to/downloaded/Llama-2-7B --model_size 7B --output_dir /output/path

这里的convert_llama_weights_to_hf.py脚本需要在这里下载

这时候再用 /output/path就可以使用 from_pretrained(/output/path)加载预训练模型了

但是:

Loading LLaMA model does not use GPU memory neither offload folder

模型被加载到了CPU,没有使用GPU 内存啊,我们在加载模型时要添加一些参数:

lamma_model = LlamaForCausalLM.from_pretrained("/output/path",device_map="auto",torch_dtype=torch.float16)

 这样模型就会自动加载到GPU中了

模型批量生成

在对批量文本进行处理时,会用到 pad_token 对较短序列进行充填,但是lamma原始模型是没有pad_token的,所以需要:

lamma_tokenizer.add_special_tokens({'pad_token': '[PAD]'})lamma_model = LlamaForCausalLM.from_pretrained(lamma_model,device_map="auto",torch_dtype=torch.float16)
lamma_model.resize_token_embeddings(len(self.lamma_tokenizer))

这里在tokenizer添加了一个pad_token,相比于原始的len(tokenizer)会➕1,并且将model的token_embeddings的大小增加1 

否则,就会出现如下报错

CUDA error: device-side assert triggered

 还有一个注意点是:

使用lamma model进行推理时(forward):其参数 input_ids 和 inputs_embeds 必须有一个为None,源码是这样的:

if input_ids is not None and inputs_embeds is not None:raise ValueError("You cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time")

改造模型结构

我们下载Transformer中lamma模型源码,在其基础上修改模型结构即可,常用的模型还是 LlamaForCausalLM


http://www.ppmy.cn/ops/14014.html

相关文章

Transformer - 特征预处理

Transformer - 特征预处理 flyfish 原始数据 train_data.values [[ 5.827 2.009 1.599 0.462 4.203 1.34 30.531][ 5.76 2.076 1.492 0.426 4.264 1.401 30.46 ][ 5.76 1.942 1.492 0.391 4.234 1.31 30.038][ 5.76 1.942 1.492 0.426 4.234 1.31…

如何爬出 Kotlin 协程死锁的坑?

作者:悬衡 一、前言 在 Java 中有一个非常经典的死锁问题, 就是明明自己已经占用了线程池, 却还继续去申请它, 自己等自己, 就死锁了, 如下图和代码: // 这段代码将死锁到天荒地老final ExecutorService executorService Executors.newSingleThreadExecutor();exe…

【LInux】进程管理

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

算法打卡day52|单调栈篇03| 84.柱状图中最大的矩形

算法题 Leetcode 84.柱状图中最大的矩形 题目链接:84.柱状图中最大的矩形 大佬视频讲解:84.柱状图中最大的矩形视频讲解 个人思路 这题和接雨水是相似的题目,原理上基本相同,也是可以用双指针和单调栈解决,只是有些细节不同。…

Git--原理与使用

目录 一、课程目标二、初始Git三、安装Git3.1 Linux-centos 四、Git的基本操作4.1 创建Git本地仓库 五、配置Git六、认识工作区、暂存区、版本库七、添加文件八、查看.git九、修改文件十、版本回退十一、撤销修改11.1 情况一:对于工作区的代码,还有add11…

【Burpsuite靶场】XSS专题精讲

【个人】:NEUQ大一学生 【专业】:通信工程 (Communication Engineering) 【个人方向】:网安、开发双管齐下 【座右铭】:真正的英雄主义,就是看清生活的真相后依然热爱生活 -- 罗曼.罗兰 一、认识XSS(跨站脚本攻击&…

[Unity]打包Android后xxx方法丢失。

记录一个坑: Editor下C#一段反射代码运行正常,但是打包后报错。最后发现是PlayerSettings里的Managed Stripping Level(托管堆代码剥离级别)导致的,项目默认的是Medium。改成Low确实好使,但是会造成包体大…

BUUCTF---misc---[SWPU2019]我有一只马里奥

1、下载附件是一个.exe文件 2、运行之后可以看到桌面生成了1.txt文件,文件里面有如下内容 3、经过信息搜索:NTFS(New Technology File System)是一种由Microsoft开发的专有日志文件系统。根据它的提示,应该是把flag.tx…