transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

上周收到一位网友的私信,希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。

老牛同学刚开始以为这类的文章网上应该会有很多,于是想着百度几篇质量稍高一点的回复这位网友。结果,老牛同学搜索后发现,类似文章确实不少,但是总觉得不太满意,要么细节深度不够,要么介绍不够全面,感觉达不到网友希望的技术细节要求。为了不辜负这位网友的期望,老牛同学决定自己动手,丰衣足食。

其实,我们使用 transformers 框架推理大模型的技术细节非常多,仅主链路就包括了模型加载、数据预处理、数据转换、模型推理、解码输出等。老牛同学本着宁缺毋滥尽善尽美的原则,期望能把这些技术细节完整全面介绍一遍,考虑到文章篇幅长度,计划共分为3 篇完成,希望能启动抛砖引玉之用:

  1. 第 1 篇:也就是本文,核心介绍transformers包 API 设计美学、如何初始化、LazyModule 模块、按需导入指定对象等
  2. 第 2 篇:基于 Qwen2.5 大模型,核心介绍AutoModel模型初始化from_pretrained过程细节(PyTorch/TensorFlow/Flax 深度学习框架的其他模型也类似)
  3. 第 3 篇:同样基于 Qwen2.5 大模型,核心介绍AutoTokenizer初始化from_pretrained,和结合 Qwen2.5 大模型的完整推理过程技术细节

请原谅老牛同学水平有限,文中难免会出现遗漏和错误之处,恳请大家及时留言指出,以帮助老牛同学和其他阅读到本文的网友,让我们共同学习进步,在此万分感谢。

下面截图的寥寥几行代码,相信大家已经比较熟悉,因为它们经常出现在老牛同学的文章中。也就是这么几行代码,却涵盖了使用 transformers 框架进行大模型推理的核心代码框架。本系列的 3 篇文章,也将围绕这几行代码逐步展开:

Transformers推理核心流程

要想详细介绍 Transformers 推理技术细节,我们就从 transformers 推理框架本身开始,老牛同学觉得这行代码就已足够:from transformers import XXX,代码中的XXX具体是哪个对象其实并不太重要,但为了后续介绍和演示方便,在本文中老牛同学就以AutoModelForCausalLM代替XXX

是的,你没有看错,本文主要就只介绍这 1 行代码,这行在我们看来在简单熟悉不过的代码。想想看,对于 Transformers 这个大模型研究者和使用者们首选的框架来说,按理我们使用起来应该会很复杂,但从上面推理程序代码可以看到,我们使用这个框架时却似乎很简单,那么可能的解释是:Transformers 框架设计得特别的精妙

老牛同学可以这么说:如果能把这行看似简单的代码真正读懂,在我们目前或将来设计像 transformers 这种超级 Python 包时,我们将会得心应手、游刃有余!

我们把本文分为以下几个主要章节部分,最终完成这行代码的介绍:

  1. 前期环境准备,主要是下载 transformers 包代码,包括环境配置和包安装
  2. transformers 包的初始化过程,即代码前半部分:from transformers,我们可以看到transformers 包的设计和我们日常研发很不一样
  3. transformers 包导入类过程,即代码后半部分:import AutoModelForCausalLM,让我们看看 transformers 包在设计上的精妙之处
  4. 在最后,老牛同学又来搞个小活动,免费包邮送几本新书给大家,期望大家踊跃参与

环境准备,下载 transformers 包代码

我们依然使用Miniconda来管理 Python 虚拟环境,Miniconda的安装和使用可以参考老牛同学之前的文章:大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama 等)

首先,我们配置虚拟环境:

# Python虚拟环境名:Qwen2.5,版本号:3.10
conda create -n Qwen2.5 python=3.10 -y

# 激活虚拟环境
conda activate Qwen2.5

然后,在虚拟环境中下载依赖包:

pip install torch
pip install "transformers>=4.37.0"
pip install "accelerate>=0.26.0"

环境准备好了,我们接下来就来看前半部分代码了~

代码行:from transformers 代码详解

这行代码意思是引入 transformers 模块,它是 Python 从一个模块导入指定模块或对象的标准语法。

那么,Python 怎么知道去哪里找到transformers这个模块呢?

  1. 首先,Python 检查sys.modules模块字典中是否存在名transformers的模块,这个字典存放着内置模块和已经导入过的模块,如果存在则直接返回,否则
  2. 进一步搜索模块,逐一遍历sys.path目录列表,最后在site-packages目录下找到transformers包(文件夹)

我们可以通过以下代码,查看 Python 解释器启动时,默认的搜索模块目录列表,和获取site-packages目录位置的方式:

# 包或者模块搜索目录列表
impo
### 设置使用Qwen2.5-VL模型进行本地推理 #### 准备工作环境 为了在本地环境中成功运行Qwen2.5-VL模型,需先确保计算机满足最低硬件需求并已安装必要的软件包。对于Windows操作系统而言,在开始之前应当确认Python版本兼容性,并创建虚拟环境来隔离项目依赖项。 #### 安装必要组件 进入Qwen2.5-VL项目的根目录后执行命令以安装所需的库文件: ```bash cd Qwen2.5-VL pip install -r requirements_web_demo.txt ``` 此操作会依据`requirements_web_demo.txt`列表下载并配置所有必需的第三方模块[^3]。 #### 加载预训练模型 完成上述准备工作之后,可以通过加载官方发布的预训练权重来进行初始化。通常情况下,这步骤涉及指定模型架构参数以及对应的checkpoint位置。具体实现方式取决于所使用的编程接口或框架文档说明。 #### 进行推理测试 当切准备就绪时,可以编写简单的脚本来调用API函数处理输入数据(如图片),进而获取预测结果。下面给出段基于PyTorch框架下的伪代码示例用于演示目的: ```python from transformers import AutoModelForVision2Seq, AutoProcessor processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL") model = AutoModelForVision2Seq.from_pretrained("Qwen/Qwen2.5-VL") def predict(image_path): image = Image.open(image_path).convert('RGB') inputs = processor(images=image, return_tensors="pt") with torch.no_grad(): outputs = model.generate(**inputs) generated_text = processor.decode(outputs[0], skip_special_tokens=True) return generated_text ``` 这段代码展示了如何利用Hugging Face Transformers库快速搭建起个多模态应用原型,其中包含了从读取图像到最终输出描述文字的过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值