惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Spread Privacy
Spread Privacy
A
About on SuperTechFans
NISL@THU
NISL@THU
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
S
SegmentFault 最新的问题
G
Google Developers Blog
B
Blog
N
News and Events Feed by Topic
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
V
Visual Studio Blog
MyScale Blog
MyScale Blog
Webroot Blog
Webroot Blog
Vercel News
Vercel News
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
S
Security Affairs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
博客园 - 叶小钗
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
T
Tailwind CSS Blog
F
Fortinet All Blogs
D
DataBreaches.Net
博客园 - Franky
博客园_首页
H
Heimdal Security Blog
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
Attack and Defense Labs
Attack and Defense Labs
Project Zero
Project Zero
雷峰网
雷峰网

Chenxu's Blog

RAG检索优化:从 68% 到 82.2% 学习深度学习 北邮计算机研究生选课指北 学习机器学习 上海篇 提出一个好问题 写代码的环境 选购一台合适的设备 计算机的第零课 序言 内蒙古篇 山东篇 浅析GPUStack 浅谈后端项目分层 浙江篇 河南篇 一些三端协同的开发工具记录 浅谈编程语言中的 GC 在 Windows 上安装 Rust 美化博客 消息队列 MyBatis 现代交换原理2024年题目 回忆版 北邮计科本科课程指北 ClkLog埋点用户分析系统研究报告 大数据梧桐实验分享 大数据HBase实验分享 国产向量数据库研究实践 —— 基于 Milvus 的电影推荐系统 服务器环境配置 大数据HDFS实验分享 SSE多服务之间推送数据 数据库系统原理 操作系统 编译原理 手把手教你gozero从开发到部署 (番外篇): 介绍 gtodolist 前端项目 天津篇 北京篇 手把手教你gozero从开发到部署 (5): gtodolist 之任务的删除 前端相关问题 vue3 + element-plus学习 git相关命令 人工智能原理 使用 MongoTemplate 时开启事务 MySQL Redis 力扣刷题笔记之动态规划 记录一次 VSCode 出现的各种奇怪的问题 手把手教你gozero从开发到部署 (4): 在 model 中自己编写函数实现数据库分页查询 记录平时用到的 windows 右键管理 记录平时使用的 linux 的指令 安装 gstore 并使用 java api 手把手教你gozero从开发到部署 (3): gtodolist 之任务的创建和修改 手把手教你gozero从开发到部署 (番外篇): 记录第一次部署 CI/CD 的流程 记录完成 gtodolist 中遇到的 bug 手把手教你gozero从开发到部署 (2): gtodolist 之 user 模块开发 手把手教你gozero从开发到部署 (1): gtodolist 项目说明和环境准备 快速入门 gozero 框架 vue部署在nginx上的相关问题 记一次安装scrapy的报错 将博客部署至服务器 Java CS143: Compliers 《MySQL必知必会》读书笔记(2) 初识 GORM 初识 gin 框架 Spring 《MySQL必知必会》读书笔记(1) 本地搭建博客 🤝友链 🙋🏻‍♂️关于 Browser and Device Check
一篇对transformers的疑惑
Chenxu · 2025-08-01 · via Chenxu's Blog

本篇讨论内容已经发布在 transformers 社区:Why can’t transformers be decoupled?

本文主要提出笔者对于 transformers 目前项目架构的一些疑惑,以及对 python 包管理机制的一些吐槽。笔者由于对于 python 和 ai 方面并不是非常熟悉,因此可能会有一些考虑不周甚至错误的地方,还请各位指正。

步入正题,最近在进行一些将模型代码合并进 transformers 仓库 的工作,碰到了诸多问题。当一些接手这个项目时,我就很疑惑:为什么 transformers 的耦合度这么高?我不理解,为什么所有模型都要提交代码到 transformers 的仓库中。这样显而易见地会出现一个常见且严重的问题:版本管理。

试想一下,你在 transformers=4.43 的环境下完成了你的所有实验和代码工作,现在你要申请合并进 transformers 仓库,此时 transformers 的版本为 4.53,一些方法和实现做出了改变,你将花费大量的精力去适配新版本的实现,其中还可能出现一些 break changes 导致无法正常的合入。

上面的场景是十分合理且常见的,除了最基础的库以外,更严重的是你可以会依赖一些基础模型的实现,如 llama、qwen 等。我认为这些模型是不会也不应该对自己具体实现的任何修改所负责(仅仅保证自己可用,无需关注是否有其他模型调用了自己的方法),如果他们在某些方法中进行了改变,你将很难甚至无法去适配(这也是我当前所遇到的问题)。你的代码在 transformers=4.43 时一切正常,而在 transformers=4.53 时一切都将崩溃,你无能为力,因为在目前条件下你只能向 master 版本去合并代码。

那么问题来了,为什么不将 transformers 的实现解耦呢?transformers 官方只需要维护一个 transformers-core 仓库,该仓库提供一系列基础的方法和调用。当新模型适配时可以选择去适配指定版本的 transformers-core,他将发布一个新的包名字叫做 transformers-new-model。相应地,在使用时也可以指定使用如 transformers-qwen=4.43。这样只需要所有人在自己的代码库中遵循 transformers 的写法规则并保证版本号的正确,一切都将会工作正常,同时也将不会有上述的依赖问题出现。

所以呢,为什么不这么做呢,是还有哪些我没考虑到潜在因素吗?

另外地,倘若 python 有一个良好的机制可以解决依赖冲突(如 java 的 maven 中的 exclude),上述方法也将会变得更加灵活。


在上面社区的讨论中有人给出了一些transformers 的设计哲学 相关的文章和讨论,对于这些观点我只能说有些赞同有些却并不合适:

  1. 为每个模型设置独立的代码仓库,会让阅读代码的人更方便,而且对一个仓库的修改不会破坏其他模型的代码。
  2. 把所有必要的代码都放在一个文件里真的能提高可读性吗?似乎并非如此。一个 5000 行的文件终究比一个 500 行的文件更难读。合理的抽象才是真正提升可读性的关键。
  3. “Machine Learning models are static” 事实真的如此吗?我目前遇到程序错误,恰恰就是因为 Llama 重构了它的代码。在这一点上,有些观点和我一致:依赖方无需考虑更新兼容性。但我们不应该假设用户不会修改他们的代码。相反,我认为我们应该提前针对这类修改采取预防措施,即:独立的版本管理。

说实话,我对single file policy没有异议。我认为不合适的是把所有模型代码都放进一个仓库的做法。或许更独立一些会更好,比如采用single repo policy