阅读视图

发现新文章,点击刷新页面。
🔲 ☆

AI 基础设施的语言之争:为何构建 LLM 网关时,我们放弃了 Python 选择了 Go?

本文永久链接 – https://tonybai.com/2026/02/18/why-we-chose-go-over-python-for-llm-gateways

大家好,我是Tony Bai。

在 2026 年的今天,人工智能早已走出了实验室,成为企业级应用的核心驱动力。Python,凭借其在机器学习领域的绝对统治地位——拥有 PyTorch、TensorFlow、Hugging Face 等无可匹敌的生态系统——长期以来被视为 AI 开发的“默认语言”。

然而,随着 AI 应用从模型训练(Training)走向推理服务(Inference)和应用编排(Orchestration),工程重心发生了微妙的转移。当我们谈论模型本身时,Python 是王者;但当我们谈论承载模型流量的基础设施——网关、代理、路由器时,Python 还是最佳选择吗?

近日,开源 LLM 网关项目 Bifrost 的维护者在 Reddit 上分享了一篇题为《Why we chose Go over Python for building an LLM gateway》的技术复盘,引发了社区的强烈反响。他们放弃了拥有 LiteLLM 等成熟竞品的 Python 生态,转而使用 Go 重写了核心网关。结果令人咋舌:延迟降低了约 700 倍,内存占用降低了 68%,吞吐量提升了 3 倍。

这场技术选型的背后,折射出的是 AI 工程化进入深水区后,对并发模型、资源效率与部署架构的重新审视。

Python 的“舒适区”与“性能墙”

在项目的初期,选择 Python 似乎是理所当然的。

1. 生态惯性与“胶水”优势

绝大多数 AI 工程师都是 Python Native。从 LangChain 到 LlamaIndex,几乎所有的 Agent 开发框架都优先支持 Python。使用 Python 构建网关,意味着可以直接复用现有的库,甚至可以直接挂载一些轻量级的 Python 逻辑来处理 Embeddings 或 RAG(检索增强生成)流程。FastAPI 的易用性更是让开发者能在几分钟内搭建起一个服务。

2. 遭遇瓶颈:网关的本质是 I/O

然而,LLM 网关的业务属性决定了它的性能痛点。与计算密集型(CPU-bound)的模型推理不同,网关是典型的 I/O 密集型应用。它的核心职责是:

  • 接收成千上万的客户端请求。
  • 将请求转发给上游提供商(如 OpenAI, Anthropic, 或自建的 vLLM)。
  • 等待上游响应(这是最耗时的环节,LLM 的首字延迟 TTFT 通常在秒级)。
  • 将流式响应(SSE)回传给客户端。

在这个过程中,网关绝大部分时间都在“等待”。

3. Python 的并发痛点

Bifrost 团队在测试中发现,当并发请求数达到 500-1000 RPS(每秒请求数)时,Python 的瓶颈开始显现。

  • GIL(全局解释器锁)的幽灵:虽然 Python 的 asyncio 可以处理 I/O 并发,但 GIL 依然限制了多核 CPU 的利用率。对于需要处理大量并发连接、同时可能涉及少量数据处理(如 Token 计数、PII 过滤)的网关来说,线程竞争(Thread Contention)成为了不可忽视的开销。
  • 昂贵的上下文切换:在 Python 中维持数千个并发连接,其上下文切换的开销远高于编译型语言。

Go 的降维打击——数据背后的技术真相

Bifrost 团队最终选择了 Go。这一决定并非出于对语言的偏好,而是基于冷冰冰的 Benchmark 数据。让我们深入分析他们披露的核心指标。

延迟(Latency):微秒与毫秒的鸿沟

数据对比
* Bifrost (Go): ~11 微秒 (0.011ms) / 请求
* LiteLLM (Python): ~8 毫秒 / 请求

这是一个惊人的 700 倍 差距。

虽然 8 毫秒在人类感知中似乎微不足道,但在高并发架构中,这被称为“开销放大”。

  • 累积效应:在一个复杂的 AI Agent 工作流中,可能涉及几十次 LLM 调用。如果每一层网关都增加 8ms 的延迟,累积起来就是可感知的卡顿。
  • 高负载下的劣化:在 10,000 个并发请求下,Go 引入的总处理时间仅为 110ms,而 Python 方案则产生了惊人的 80 秒总 CPU 时间开销。这意味着 Python 方案需要消耗更多的 CPU 核心来维持同样的响应速度,否则请求就会排队,导致尾部延迟(Tail Latency)飙升。

此外,Go 的 net/http 标准库在处理 HTTP 请求时经过了极致优化。Go 不需要像 Python 那样依赖 ASGI/WSGI 服务器(如 Uvicorn),其原生的 HTTP 处理能力配合 Goroutine,使得每个请求的内存分配和 CPU 周期都降到了最低。

并发模型:Goroutine vs Asyncio

架构对比
* Go: 10,000 个 Goroutines,每个仅占用 ~2KB 栈空间。
* Python: 受限于 OS 线程开销或 Event Loop 的单核瓶颈。

LLM 网关的特殊性在于长连接。LLM 的流式输出可能持续数秒甚至更久。这意味着网关必须同时维护成千上万个活跃连接。

Go 的 GMP(Goroutine-Machine-Processor)调度模型天生适合这种场景。成千上万个 Goroutine 可以复用少量的系统线程,上下文切换由 Go Runtime 在用户态极速完成,几乎不消耗系统内核资源。

相比之下,Python 即使使用了 uvloop,在面对海量并发连接的数据搬运时,其解释器的开销依然是一个沉重的包袱。

内存效率与成本

数据对比
* Go: 内存占用降低 ~68%。
* 生产环境: Go 跑在 t3.medium (2 vCPU, 4GB) 上即可;Python 则需要 t3.xlarge。

对于大规模部署 AI 服务的企业来说,这意味着基础设施成本直接减半。

Python 的动态类型系统和垃圾回收机制导致其对象内存占用较大。而 Go 的结构体布局紧凑,且编译器能进行逃逸分析(Escape Analysis),将大量对象分配在栈上而非堆上,从而显著降低了 GC 压力和内存占用。

社区深度探讨——AI 时代的语言版图重构

这篇帖子在 r/golang 引发了极高质量的讨论,评论区揭示了行业内更深层次的趋势。

“AI 能够写代码”改变了竞争规则

过去,Python 的一大优势是“开发效率高”。写 Python 代码通常比写 Go 或 Rust 快。

但在 2026 年,“Agentic Coding”(即利用 AI Coding Agent 辅助编程)已经成为主流。

有开发者指出:“LLM 让编写 Rust 和 Go 变得非常高效,你完全可以享受到高性能语言的红利,而不用支付编写它们的‘学习成本’。”

这是一个极其深刻的洞察。

  • Rust 的借用检查器:以前是新手的噩梦,现在 LLM 可以很好地处理生命周期标注。
  • Go 的样板代码:if err != nil 虽然繁琐,但 Copilot/Cursor/Claude Code等 可以一键生成。

当“编写代码”不再是瓶颈时,“运行时性能”和“稳定性”的权重就被无限放大了。这进一步削弱了 Python 在后端基础设施层的竞争力。

Rust 还是 Go?

既然要高性能,为什么不直接上 Rust?

评论区对此展开了激辩。虽然 Rust 在理论上拥有比 Go 更高的性能上限和内存安全性(无 GC),但 Go 在“开发效率”与“运行效率”之间找到了完美的平衡点。

  • Rust: 适合构建数据库、搜索引擎内核等对延迟极其敏感且逻辑复杂的底层组件。但 Rust 的“认知负担”依然较重,且编译速度较慢。
  • Go: 提供了 80% 的 Rust 性能,但只有 20% 的开发难度。对于网关、代理这类中间件,Go 的标准库(特别是 net/http)极其成熟,编译速度极快,且自带 GC 能让开发者从内存管理的细节中解脱出来,专注于业务逻辑(如限流、计费)。

对于大多数 AI 网关场景,Go 是性价比最高的选择。

Python 的归宿:模型与胶水

这是否意味着 Python 将被淘汰?绝不。

社区共识非常明确:Python 的护城河在于 ML 生态。

  • 模型训练与微调:PyTorch/JAX 无可替代。
  • 数据科学与探索:Jupyter Notebook 是数据科学家的后花园。
  • 快速原型开发:在验证想法阶段,Python 依然是最快的。

但在生产环境部署(Production Serving)阶段,架构正在发生分离:

  • 控制平面(Control Plane):由 Go/Rust 接管,负责流量调度、鉴权、日志、监控。
  • 数据平面(Data Plane):核心推理引擎(如 vLLM)虽然内部可能有 C++/CUDA 优化,但外层接口仍常由 Python 封装。

Go 在 AI 领域的未来展望

Bifrost 的案例只是冰山一角。我们正在目睹 Go 语言在 AI 领域的“新基建”运动。

静态二进制文件的魅力

Deployment simplicity 是作者提到的另一个关键点。

部署 Python 应用通常意味着:配置 Docker -> 安装 Python -> pip install requirements.txt -> 解决依赖冲突 -> 虚拟环境管理。

而部署 Go 应用:COPY bifrost /usr/local/bin/ -> Run。

在容器化和 K8s 盛行的今天,Go 的静态链接二进制文件极大地简化了 CI/CD 流程,减小了镜像体积,提升了冷启动速度(这对于 Serverless AI 推理尤为重要)。

AI 专有工具链的完善

虽然 Go 在 Tensor 操作库上不如 Python 丰富,但在应用层工具上正在迅速补齐。

  • LangChainGo: 社区正在移植 LangChain 的核心能力。
  • Vector Database Clients: Milvus, Weaviate, Pinecone 等向量数据库都有优秀的 Go SDK。
  • 主流大模型 GenAI SDK: 像Google等主流大模型厂商官方对 Go 的支持力度都很大,Gemini、Claude、OpenAI 等模型的 Go SDK 体验都还不错。

架构师的决策建议

如果你正在构建一个 AI 应用平台:

  • 不要用 Python 写网关:不要让 GIL 成为你高并发路上的绊脚石。
  • 不要用 Go 写模型训练:不要试图挑战 PyTorch 的地位,那是徒劳的。
  • 采用“三明治架构”:
    • 上层:Go 处理高并发 HTTP 请求、WebSocket、SSE。
    • 中层:Go 处理业务逻辑、数据库交互、Redis 缓存。
    • 底层:Python/C++ 容器专门负责模型推理,通过 gRPC 与 Go 层通信。

小结

Bifrost 从 Python 到 Go 的迁移,不仅仅是一次代码重写,更是一次架构理念的升级。它证明了在 AI 浪潮中,基础设施的性能与模型的智能同等重要。

随着 LLM 应用规模的爆发式增长,计算成本和响应延迟将成为企业关注的焦点。Go 语言凭借其高效的并发模型、极低的资源占用和极简的部署体验,正在成为 AI 基础设施层的“事实标准”。

对于 Gopher 而言,这是一个最好的时代。我们不需要成为算法专家,只需要发挥 Go 语言最擅长的能力——构建高性能、高可靠的管道,就能在 AI 时代占据不可或缺的一席之地。

资料链接:https://www.reddit.com/r/golang/comments/1r27pqx/why_we_chose_go_over_python_for_building_an_llm/


你认为 Python 会被“边缘化”吗?

随着 Agentic Coding 的普及,高性能语言的入门门槛正在消失。在你的 AI 实践中,是否也感受到了 Python 在生产部署时的无奈?你认为 Go 在 AI 领域还会攻下哪些阵地?

欢迎在评论区分享你的看法!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

© 2026, bigwhite. 版权所有.

🔲 ⭐

折返点 2515 训练第10周 继续轻松跑

2025年第15周

本周计划跑量约43英里,实际完成42.74英里,完成跑量计划的99%。 为了让身体继续恢复,本周取消了速度训练,将周末的14英里中长距离降低到了10英里。 身体的酸痛在不运动的时候已经消失,但跑步的头一两英里仍可以感到不适。
🔲 ☆

分布式计算框架 Ray

1. 什么是 Ray 2016 年,UC Berkeley 的 RISELab 发布了一个新的分布式计算框架 Ray。 2017 年,发布 Ray 相关论文之后,受到业内的广泛关注,国内主要是蚂蚁集团采用并贡献了 Ray。 2020 年,Ray 发布了 1.0 版本,引入 Placement Group 特性,增加了用户自定义任务编排的灵活性,为后续的 Ray AI Libraries 和 vLLM 等
🔲 ⭐

英伟达黄仁勋CES霸气登场!鳄鱼皮夹克发售5090显卡,钱包快捂住还是准备剁手?

黄教主已经在CES上吹响了号角,准备好钱包了没有?大家好,欢迎收听老范讲故事的YouTube频道。今天咱们来讲一讲CES上,全村最靓的仔黄仁勋。黄教主都发布了一些什么东西?我们是不是要准备好钱包去买东西了,还是说咱们稍微冷静一下?

现在AI嘛,市值最高的公司英伟达,作为英伟达的老板,黄仁勋在整个的CES大会上一定是最靓的仔。其他做AI的人,可能还没有他这么风光亮丽。为什么呢?因为CES呢叫做消费电子展,那些做云计算的人,你们靠后站。黄教主是要来发布游戏显卡的,他是来玩消费的,这个还是有很大差别的。而且整个的AIGC玩了两年多,唯一挣着钱的就只有黄教主自己了,其他人都在这赔本赚吆喝呢。所以呢,人家一定要风光亮丽的跟大家做一个演讲。

咱们先看一下皮衣教主,因为他走到哪穿个皮衣嘛。他这个皮衣呢,这一次是一件新皮衣,不是以前穿过的这些旧皮衣。这个叫Tom Ford设计的一个皮衣,这个皮衣呢叫鳄鱼皮印花皮夹克。就是我们可以看到这个皮夹克上有很多非常大的花纹,这个东西呢叫鳄鱼皮印花。就是你如果买了什么鳄鱼皮钱包或者是鳄鱼皮的皮鞋,上面就是这种大花。我还真没见过鳄鱼皮夹克,他这个皮夹克呢应该不是鳄鱼皮的,应该是牛皮的,只是呢把这个大花纹给你印上了而已。

但是这个夹克也不便宜了,8,990美金一件夹克。但是这个对于现在全世界市值最高的公司的创始人和CEO来说,不穿这样的夹克,估计也真的压不住场子了。首先上来讲的第一个,肯定还是数据中心业务。虽然这是消费电子展,但是数据中心业务才是英伟达现在真正的核心价值。那么消费电子展呢,游戏显卡是跑不掉的,5090这个一定要上来好好跟大家show一下50系显卡。

然后呢,是整了一个非常奇怪的新品,叫project DigITs。这个东西长得像Mac mini那么大的一个超强算力的AI主机,因为看Mac mini卖的很好嘛。

所以,要出来跟大家show一下。后边呢,还做了一些软件部分的发布,这一部分基本上可以忽略不计。至于其他机器人的部分呢,2025年我们看到成品满街跑的,这个可能性也不大,所以我们就后边省略掉了。

首先,黄教主上来以后,先举着一个大盾牌,把一堆的芯片拼成盾牌那么大,就像美队一样,举着个盾牌就上来了。这个东西是什么呢?叫Grace Blackwell NV link 72。当然了,GBNV link 72呢,长得并不是真的这个样子,他只是说跟大家表演一下这个东西,把芯片铺开了应该是这样。

英伟达的显卡一般叫B开头的呢,就是它的GPU,就是Blackwell框架,黑井框架。说B200、B多少,这就是GPU;G开头的呢,实际上是CPU,叫Grace。这个东西呢,是ARM的CPU。所以呢,这个叫GBNV link 72呢,就是36个Grace CPU,加上72个Blackwell的GPU拼在一起,加上这种高速连接,整个拼一块儿以后,做的一个高性能运算的主机。大家可以在这个上面去训练模型。

它呢,现在只是把这些东西都拼成了一个盾牌的样子,给大家看一眼。如果真的是一个这个GB 72这种东西的话,它是举不上来的,那个机器拼在一起是1.5吨。但是消费电子展呢,给大家看这个意思不大,看过了就知道了。

现在数据中心是谁是老大?今天的真正重头戏5090、5090D、5080、5070,也就是50系显卡。前面的40系显卡、30系显卡,我电脑上是一个3060,我儿子电脑上是4070。什么时候会去长这个数呢?就是他的显卡的架构换了。40系的是A系的显卡,叫ADA的这个芯片;到50系呢,就是B系列的,就是Blackwell黑井系列的这个显卡。

它按照黑井系列整个架构重新设计的,所以呢,5090、5090D、5080、5070这些显卡,大家可以认为,跟我们现在去买的什么GB200或者B200这样的GPU吧,是一样的这个架构。

5090跟5090D的差异呢,就是5090的就是为中国生产的阉割版本。就跟原来美国制裁中国,说你们不可以去用4090了,中国就开始卖叫4090D。D呢,现在有两种说法,一种呢说是叫精简的,还有一种说法呢是Dragon,就是专门为龙设计的这个芯片。就是它里面的CUDA的核心数量、连接的这个速度,以及里面的这个内存的大小和连接速度,都是受到限制的一个设备。

当然,即使受到限制了呢,它也要比这个传统的4090还是要快的。这就是5090和5090D。然后5080和5070呢,要比5090 GPU的扩大的核心要更少一些,而且呢价格也相对来说比较便宜。现在呢,很多人就觉得天塌了,为什么?因为显卡这个东西呢,其实一直是作为一种金融产品,或者叫理财产品来去处理的,它有很强的金融属性。而这一次呢,黄教主干了一个事情,就是降价。他的5090呢,其实降的并不多,应该比4090还要贵一些的,但是呢,他号称说5070价格还是非常便宜的。对于原来那些囤4090的人来说,这个天就塌下来了。

整个的性能来说的话,我觉得我们就没有必要去跟大家讲说,它到底有多少CUDA核心,怎么算呢,这个其实没什么意义。它里边做了一个新的东西,叫大力水手4DLSS 4,可以在显卡内部进行更多的这种直插帧的运算。游戏原来输出的比较低的帧率、比较低的这个分辨率的这个图片,它可以通过插帧、插分辨率的这些功能,让我们看到一个非常非常高帧率、非常清晰的一个画面,是他们真的这个新功能。而大力水手4必须在50系显卡上才可以走,而这个40系显卡最高可以看到大力水手3.5。如果想使用大力水手4,你就要老老实实的去买50系的显卡。

也是很多人在去批判,说黄教主你这个刀法实在是很精准,也是如此了。有多少人需要去买5090呢?其实原来买4090的这些人,在挖币已经过时之后,他们到底能不能把这个4090的钱挣回来,其实是很难说的。

虽然他有金融属性,但是原来主要是拿他挖币。以太坊已经不用4090去挖币了,人家换了新的这种凭证方式了。那么4090可能也就是说,第一个打游戏用,第二个呢,拿它去做一些本地的渲染,或者是本地的大模型,比如说Stable Diffusion。我在本地跑一跑,也就干一些这样的事情。

那么现在上5090到底有没有这个需求呢?其实这一块的需求和动力是不足的。为什么呢?就是你在本地去用这样的一个设备,你真的需要那么大的分辨率、那么高的刷新率,然后有那么好的游戏吗?其实没有。游戏跟显卡之间呢,都是矛跟盾的两面,要来回翻来翻去的。首先是游戏更新了,然后说OK,我们现在需要更好的显卡,否则的话这个游戏跑不到最高帧率。

现在这几年呢,其实游戏并没有这样的东西出来。可能大家可以去期待一下GTA6,当然GTA他们一般优化做得还可以,所以呢,未必需要这么高规格的显卡才能带得动他。可能3060、3070都可以跑得起来,因为做游戏的人他也想清楚说,如果我做一款游戏只有5090才能玩的话,那我这游戏能卖几套?而且呢,游戏如果帧率太高的话,其实人眼已经看不到了,所以这个帧率是有极限的。而这个分辨率呢,其实你到4K也算是到极限了,你再往上其实已经做不上去了。

所以现在呢,其实在游戏这一块上说,需求动力不是那么足。至于说从大模型或者这一块来说呢,更多的人还是愿意去使用像A100、H100这样的专门的算力卡,而不是说来去使用这种游戏显卡。因为游戏显卡其实它的设计侧重还是不一样的,你拿这种东西去做大模型的话,并不那么划算。

50系列呢,到1月30号,5090的这个显卡就可以在外面买到了,可能要到3月份5080、5070的这些显卡会逐步的面世。再往后一段时间呢,会出笔记本用的50系显卡。现在呢,像什么ROG,这个叫败家之眼,他们已经在开始官宣他们搭配50系列显卡的这些笔记本了。

我估计在买到差不多得到年中了吧。5月份才能买到,而且以英伟达这个显卡升级的速度的话,我觉得可能过一两年再去买这个东西,也还是来得及的。一般是说显卡提升了以后,这帮做游戏的再想一想,说:“哎,我是不是可以再去做一些更复杂的游戏出来?”慢慢地去淘汰这个低端显卡,一般是这样的一个情况。这是今年的重头戏。

5090再往后呢,就发布了一个很奇怪的东西,叫project DigITs。这个东西呢叫做数字项目或者数据工程。我估计黄教主呢也是看旁边苹果整的Mac mini M4出尽了风头,这么小的主机,这么强的算力。很多人把它买回来去做大模型,甚至把几台M4 mini的这个主机拼在一起,还可以跑一些更大的模型出来。黄教主说:“这个我也行的。”这种设备呢,从结构设计上,甭管是谁设计的,但是从生产上来说呢,一定是台湾或者是大陆的这些果链企业去生产的。所以黄教主说:“你们谁去给我整个这玩意出来?”这个应该并没有什么难度。

黄教主这个时髦肯定还要改一下。那么它这个里边使用的芯片是什么呢?叫GB10。G就是CPU,它里头是有ARM CPU的;B呢是Blackwell的这个算力芯片,也都在里面。但是呢,GB10是没法去打游戏的,它没有这个图像渲染的能力,或者说它图像渲染的性能并没有那么好。大家主要还是要用它去做数据分析,去做大模型的训练和推理。

这个机器有128G的统一内存,这个还是很贵的一个东西。因为像我们在苹果上买统一内存,那玩意简直像金子做的一样,非常非常昂贵。你说我升硬盘,这个价格还可以接受,但是你要想给苹果的Mac mini或者是MacBook这种容易升内存,那真的是肉都疼。它这个里边128G的统一内存,4T的存储,这块不太值钱。然后里边的操作系统呢,是英伟达自己定制的一个操作系统,在乌班图的基础上去改的一个Linux操作系统。据说呢是可以跑200B的模型,这个已经是非常非常吓人了。

像我现在的MacBook只能跑三十几B的,72B的已经跑不起来。他这可以跑200B的模型,如果把两台连接在一起,就直接可以跑405B。因为现在我们有一个405B的模型,就是Llama3 405B,你们两个串一块就可以跑了。这个还是很吓人的。

当然,价格呢,肯定也得对得起它这些高端配置,3,000美金可真的是一点都不便宜。Mac mini应该是500美金还是600美金开始吧,最高的这个款式大概可能到不了2,000美金。他这个直接上来就3,000美金,这个大家自己看着办。

但是呢,发布会上有一些东西是没说的。什么东西没说呢?就是这个设备的功率和散热到底怎么样,他没说。英伟达向来不是以省电著称的,英伟达一直都是非常非常耗电的。像我们前面讲的5090什么这种东西,经常是可能五六百瓦。但是他这样的一个GB10的芯片,塞了这么点的一个机器里头,到底是有多少功率?到底是需要配多大的风扇?这个东西能有多吵,大家可能心里要有一个准备。

当然了,你想3,000美金我都花了,如果想动小了的话,可能很多人会觉得我这个钱没有花到地方。我花了钱以后,第一个重量要够。这个英伟达的老黄还是非常非常有经验的。你们去看那个4090也好,5090也好,那个显卡那么老大个,你把这个显卡拿起来,也是贼沉贼沉的。为什么?因为都是巨大的散热铜管以及风扇,还有很多的金属散热片。所以那个东西非常非常的重。

现在它发布了这样的小型主机,这个到底有多重?到底有多么吵闹?大家自己去思考一下。还有一个问题他没说是什么呢?就是这个东西到底能不能出口中国,这事不知道。刚才5090的时候我们讲了,专门得设计一个叫5090D的东西,是可以出口到中国的。5090的咱们中国的游戏玩家们就别想了。project digITs到底能不能到往中国出口,还得要再等一等,看这个东西也没有那么快了,应该还要再等几个月。

现在我们就是看一个形状就可以了。那么好了,大家是不是应该把钱包掏出来看一看了?我们到底是不是应该要去买这些东西了呢?什么人真正适合去买这个 Project DigITs 呢?

第一个,如果你是有钱人,这个不需要理由,只管买就完了。哪怕买完了以后,你从来都不开机,供奉在那里没毛病。你说我为什么供奉这么个东西在那呢?为你这个仓里边的满仓英伟达股票去祈祷一下不好吗?英伟达这个发布会发完了以后,老黄直接身价上升了,因为股票在暴涨。他已经是世界市值第一的公司了,基本上股票还在三个点几个点蹭蹭涨上去,这是多么神奇的事情。

那你有钱人说我买一个摆家里供起来,没毛病。至于其他的人呢,就真的没必要买这东西了。为什么呢?首先要注意,它里边用的操作系统是一个拿乌班图修改过的定制操作系统,一个用户量不大的操作系统,各种兼容性问题可以把普通用户折腾死。如果你说我不是一个专门的工程师,我就是一个使用 Mac 的用户,或者使用 Windows 的这种桌面用户的话,你就别用这玩意了,这个不是一般人能搞得定的,只有工程师才可以使用这种定制操作系统。

为什么呢?因为它各种的软硬件的配套以及升级,还有这种兼容性都很麻烦。如果真的需要进行大模型训练或者数据分析,这些人说是不是应该去买呢?因为老黄在上面讲了说,我们就是为他们设计的。建议呢,你们还是老老实实的去买通道式服务器。就算你想在家里干这个事,你也去买那个通道式服务器。

为什么呢?因为通道式服务器和 Project DigITs 这种东西,它都是非常非常吵闹的。你要想发挥出这么多算力来,你再怎么设计,它这个功率还是在这的,还是要去散热的。那你干脆就用通道式服务器就完事了,就把它塞到车库、地下室、阁楼,反正这种地方,因为这样的东西,它不适合放在卧室、起居室或者是客厅里边,因为太吵了。而且呢,做这种大模型训练的人最好是用云端的服务器,不要放家里头。

就算是你的数据非常非常的保密,非常敏感,也不建议你在家里边去部署这种东西。为什么呢?因为咱们使用这样的设备呢,都是临时性的,不可能说我一天24小时不停地算这个东西,从来不停,这个事的可能性非常非常小。你可能连续算一周,或者算两周,算完了以后呢,你还是要停下来的。

如果用云计算的这个机房,你只需要为这一两周的时间买单,就可以了。剩下的时间你就不用管它了。那么云计算的这些服务商,就可以把这个主机租给别人了,这个还是非常开心的一件事情。那你说:“哎,我把这东西买回来搁这了。”那你如果不用的时候,难道不是觉得心疼吗?

像这样的主机,正常情况下,如果没有那么高负载的时候,可能也很安静。但是你一看到这个东西很安静的时候,你就想:“哎呀,我这3,000美金是不是花亏了呢?”家里的骡子和马都歇了,这事不行。他会有这样的心理矛盾在这里。

即使你真的是数据科学家,也必须要配一个IT维护工程师,否则你真的没法使这种设备。你就想吧,各种软件的安装,硬件的兼容,这个是很麻烦的。如果我们在云主机上用这个东西,我们是怎么来干这个事的?我们是使用刀客各种镜像来干活的。

这个什么意思呢?就是我们随时需要云主机的时候,我们去跟服务商说:“来,给我搞台新机器来。”然后他把新机器给你了,你就告诉他说:“请按照什么什么样的方式,给我把这个环境搭建好用。”用完了以后呢,说:“现在请回收这台主机。”这个主机就又变成干干净净的了。你下次什么时候再用,你再去跟他说:“哎,给我再去整一台空机器出来。”他再给你整一个干干净净的机器,重新部署。

这个是我们使用云主机的方式。但是我们要想一想,我们用桌面电脑是什么样的方式?那个电脑多长时间格式化一次,多长时间重装一次系统?像我们用麦克的这些人,可能三五年吧,会重装一次系统,这个是正常的。为什么呢?因为这个系统变化相对来说比较少,不会天天的变来变去的。但是这些数据科学家,可能今天我需要用一个这个插件,明天需要用一个那个组件。

这个东西还不停地升级。那你这个玩意儿怎么弄?你就需要不停地格式化电脑,不停地重装电脑。如果没有一个IT工程师跟着你的话,根本搞不定这个事情。就算是正常开机的云主机,我们多长时间格式化一次?可能真的是每个月或者每周,你都会去格式化它。为什么?因为我们需要去维护这个电脑,需要去升级系统。那升级系统你再看看,哎呀,这个升级的东西跟那个兼不兼容,不费劲啊,整个格式化干净,重新整一次就完事了。这是使用云主机的方式。所以没有工程师去维护的话,这个东西摆家里一点意义都没有。

那么最终的结论是什么呢?就是光鲜亮丽的小废物。这个project Digits就算是一个光鲜亮丽的小废物,非常非常贵。如果我们赶个时髦,整一个放家里头,摆起来供起来,平时也没有什么任务让它跑,这个没毛病。你只要有这个钱,没有人能够说你什么。如果你真的想用它,那就算了,趁早打消这个念头。

至于说5090这些东西呢,我觉得你如果真爱的话就去买。现在应该没有什么游戏是必须要5090才能跑起来的。如果你说我一定要去玩stable diffusion,去画一些画,或者我要去做一些渲染的话,哼,也建议用云主机,不要用5090这样的东西出来跑。

所以呢,现在英伟达发布的这些东西,建议大家谨慎购买。至于软件的部分,虽然现在英伟达也在努力的开源,就是他现在新出了一些东西,都是open source的,但是呢,英伟达的软件除非像CUDA那样,一开始在非常小众的领域里头深耕很多年,否则不建议大家去碰这个玩意儿。为什么呢?因为英伟达的软件,用户交互这块是比较差的。英伟达向来不以用户交互这个事情见长,他们都是一帮资深的黑客,一帮这样的工程师范的人。他们认为所有人都应该是工程师。你像刚才我们讲的这个project Digits,这样的东西,如果不是工程师,你根本搞不定这个东西。如果是我整这么一个东西,可能我也得平时把它放在柜子里。

需要去做一些模型。微跳模型训练的时候,把它请出来。机器格式化,整个重装好,然后把一个任务跑完了以后,再重新盖到盒子里头,装柜子里头完事。这个才是他的正常使用方式。等下一次再把他请出来的时候,重新再隔热化机器,重新装系统,这个才可以去正常工作。

所以呢,因为他向来不是给普通用户来用的。就算是你说:“哎,我游戏显卡,难道不是给普通用户用的吗?”是,但是你玩的是显卡的吗?不是,你玩的是游戏。游戏跟显卡之间还是通过各种SDK、各种程序接口在打交道。我们普通人,是不跟那个玩意儿打交道的。而且呢,所有短平快在热点上搞的软件,都不是英伟达擅长的事情。

所以软件呢,跟今天咱们讲的CES消费电子展,这个事就没有什么关系了。就算你说:“我是玩大模型的,我是科学家,我是工程师。”这个事情呢,你可以去进行部署,可以去使用。但是英伟达做的相应的软件呢,特别是在这种热门的领域里头,也建议大家先去使用其他家的,先别用他们家的。因为这些年来,在大模型里头推出的各种软件,其实都没有怎么流行起来。现在大家使的,其实依然是CUDA这个东西。一抽遭蛇咬,十年怕井绳。CUDA大家使习惯了以后,最后就没有办法被他绑架了,必须要使,因为大家继续使下去。

现在老黄就算是摆出再怎么人畜无害的这种表情来,也没有人敢用他们家东西,而且真的不好使。所以在这一块里头,有非常非常多其他公司的这种替代产品、替代的架构可以去用。

好,这就是今天咱们讲的英伟达。黄仁勋穿着他的印花鳄鱼皮夹克,给大家发布的这些东西。然后钱包呢,捂好了,稍微关注一下。特别是project Digits这样的东西,3,000美金对于我来说是比较贵了,可能对于很多人来说好像也不是很贵。但是你先想想你用的了这玩意不?你说如果我摆着,就是为了让英伟达的股票好好的再涨一涨,那你去买,其他的就先别买这东西了。

好,这期就跟大家讲到这里,感谢大家收听,请帮忙点赞,点小铃铛。

参加Discord讨论群。也欢迎有兴趣、有能力的朋友加入我们的付费频道。再见。

🔲 ⭐

Kubernetes 下的 DLRover 工作流程分析

本文使用的 DLRover 版本是 0.3.7 1. DLRover Operator 1.1 启动 ElasticJob 和 ScalePlan 的控制器 实现代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 创建 ElasticJob 的控制器 if err = controllers.NewElasticJobReconciler(mgr, masterImage).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "ElasticJob") os.Exit(1) } // 创建 ScalePlan 的控制器 if err = controllers.NewScalePlanReconciler(mgr).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "ScalePlan") os.Exit(1) } // 启动控制器 if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { setupLog.Error(err, "problem running manager") os.Exit(1) } 这部分代码是
🔲 ⭐

使用 DLRover 托管作业进行弹性、容错训练

1. 分布式训练面临的问题 预估训练资源困难,无法自动化 需要多少算力、需要多少时间、需要多少带宽、需要多少 CPU、需要多少内存,如果没有足够的积累,很难估算准确。导致的结果就是,超额申请、超额分配,造成极大的资源浪费。 需要去沉淀和提供解决方案。 故
🔲 ☆

自然语言处理预训练技术综述

预训练

预训练(Pre-trained Models,PTMs)的实施过程跟迁移学习是一样的,一般是先在一个基础数据集上进行任务训练,生成一个基础网络,然后将学习到的特征重新进行微调或者迁移到另一个目标网络上,用来训练新目标任务。

预训练是在大量常规数据集上学习数据中的“共性”,然后在特定领域的少量标注数据学习“特性”,这样子模型只需要从“共性”出发,去学习特定任务的“特性”部分即可。

预训练模型

这和小孩子读书一样,一开始语文、数学、化学都学,读书、网上游戏等,在脑子里积攒了很多。当他学习计算机时,实际上把他以前学到的所有知识都带进去了。如果他以前没上过中学,没上过小学,突然学计算机就不懂这里有什么道理。预训练模型就意味着把人类的语言知识,先学了一个东西,然后再代入到某个具体任务,就顺手了,就是这么一个简单的道理。

为什么需要预训练

  • 预训练模型中的参数都是从大量数据中训练得来,比起在自己的数据集上从头开始训练参数,在预训练模型参数基础上继续训练的方式肯定要快一些。
  • 预训练模型是通过海量数据训练得来,更好地学到了数据中的普遍特征,比起在自己的数据集上从头开始训练参数,使用预训练模型参数通常会有更好的泛化效果。

计算机视觉上的预训练

预训练首先是在计算机视觉方向取得较好效果并实现大规模应用的,我们会在庞大的ImageNet语料库上预训练模型,然后针对不同的任务在较小的数据上进一步微调。这比随机初始化要好得多,因为模型学习了一般的图像特征,然后可以将其用于各种视觉任务。
ImageNet这个数据集,数据量足够大,而且分类齐全,不限定领域,具有很好的通用型,使用范式一般如下图所示:
ImageNet预训练

自然语言处理上的预训练

借鉴视觉领域的做法,自然语言处理领域开始尝试使用预训练技术实现迁移学习,但是预训练在自然语言处理领域大爆发会缓慢很多,主要是因为自然语言处理任务(除机器翻译)没有计算机视觉方面那么多的标注好的数据集,而且没有很好的特征提取器,直到最近几年几个关键技术的成熟,神经网络才开始全面引入到了自然语言理解。从大规模的语言数据到强有力的算力,加上深度学习,把整个自然语言带到一个新的阶段。

自然语言处理预训练在不同时期有不同的称谓,但是,本质是使用大量语料预测相应单词或词组,生成一个半成品用以训练后续任务

自然语言处理任务可以分为以下3个模块:数据处理、文本表征和特定任务模型。其中,数据处理模块特定任务模型模块需要根据具体任务的不同做相应设计,而文本表征模块则可以作为一个相对通用的模块来使用。类似于计算机视觉领域中基于ImageNet预训练模型的做法,自然语言处理领域也可以预训练一个通用的文本表征模块,这种通用的文本表征模块对于文本的迁移学习具有重要意义。

发展历史

自然语言处理的预训练方法属于自然语言的表示学习,自然语言表示学习的形成已经经过了长期的历史发展。

  • 1948年N-gram分布式模型被提出来,使用one-hot对单词进行编码,这是最初的语言模型,存在维度灾难和语义鸿沟等问题。
  • 1986年出现了分布式语义表示,即用一个词的上下文来表示该词的词义,他在one-hot的基础上压缩了描述语料库的维度,从原先的V-dim降低为了自己设定的K值。当时通用的方案是基于向量空间模型(Vector Space Model,VSM)的词袋假说(Bag of Words Hypothesis),即一篇文档的词频(而不是词序)代表了文档的主题,我们可以构造一个term-document矩阵,提取行向量做为word的语义向量,或者提取列向量作为文档的主题向量,使用奇异值分解(SVD)的进行计算。
  • 2003年经典的NNLM神经语言模型被提出,开始使用神经网络来进行语言建模。更早期百度 IDL(深度学习研究院)的徐伟在他2000年发表的文章《Can Artificial Neural Networks Learn Language Models?》中也有相似方向的探索。
  • 2013年word2vec被提出并在NLP领域大获成功,他基于向量空间模型的分布假说(Distributional Hypothesis),即上下文环境相似的两个词有着相近的语义,构造一个word-context的矩阵,矩阵的列变成了context里的word,矩阵的元素也变成了一个context窗口里word的共现次数。Word Embedding是Word2Vec模型的中间产物,是在不断最小化损失函数时候,不断迭代更新生成的。
  • 2018年出现了预训练语言模型。

传统的预训练技术 VS 神经网络预训练技术

传统的预训练技术
传统预训练技术与模型耦合较为紧密,该技术与模型之间并没有明确的区分界限,为了方便阐述,将语料送入模型到生成词向量的这一过程称为传统预训练技术。
传统的预训练技术

神经网络预训练技术
神经网络预训练技术是在预训练阶段采用神经网络模型进行预训练的技术统称,由于预训练与后续任务耦合性不强,能单独成为一个模型,因此也称为预训练语言模型,这一称谓是区别于传统预训练技术的叫法。

神经网络自然语言处理的预训练发展经历从浅层的词嵌入到深层编码两个阶段,按照这两个主要的发展阶段,我们归纳出预训练的两大范式:「浅层词嵌入」和「上下文的词嵌入」。

  • 第一代预训练旨在学习浅层词嵌入(Word Embeddings)。由于下游的任务不再需要这些模型的帮助,因此为了计算效率,它们通常采用浅层模型,如 Skip-Gram 和 GloVe。尽管这些经过预训练的嵌入向量也可以捕捉单词的语义,但它们却不受上下文限制,只是简单地学习「共现词频」。这样的方法明显无法理解更高层次的文本概念,如句法结构、语义角色、指代等等。
  • 第二代预训练专注于学习上下文的词嵌入(Contextual Embeddings),如CoVe、ELMo、GPT以及BERT。它们会学习更合理的词表征,这些表征囊括了词的上下文信息,可以用于问答系统、机器翻译等后续任务。另一层面,这些模型还提出了各种语言任务来训练,以便支持更广泛的应用,因此它们也可以称为预训练语言模型。

本文重点讲解基于神经网络模型在自然语言处理领域的预训练技术

关键技术

Transfromer

Google 2017年提出了Transformer模型,之后席卷了整个NLP领域,红极一时的BERT、GPT-2都采用了基于Transformer的架构,现在都用到CV领域了,用于目标检测和全景分割的DETR就是代表。Transfromer的特征提取能力显著强于以往常用的CNN和RNN,这可以让我们更快更好的在样本上学习知识

Transformer之所以表现优异有以下几点原因:

  • 模型并行度高,使得训练时间大幅度降低。
  • 可以直接捕获序列中的长距离依赖关系。
  • 可以产生更具可解释性的模型。

想详细了解Transfromer,可以参考我以前的文章《Attention Is All You Need – Transformer》

自监督学习

自监督学习是无监督学习的一种特殊方式,这些自监督的方法的核心是一个叫做 “pretext task” 的框架,它允许我们使用数据本身来生成标签,并使用监督的方法来解决非监督的问题。NLP预训练模型,就是利用自监督学习实现的,可以看做是一种去噪自编码器denoising Auto-Encoder。这可以让我们在大规模无标注数据集上学习知识。

在预训练模型中,最常用的自监督学习方法是自回归语言模型(AutoRegressive LM,AR)和自编码语言模型(AutoEncoder LM,AE)。 自回归语言模型根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词。 自编码语言模型根据上下文内容预测随机Mask掉的一些单词。

微调

微调旨在利用其标注样本对预训练网络的参数进行调整,可以将预训练的模型结果在新的任务上利用起来。
微调

第一代技术预训练技术:Word Embeddings

NNLM

神经网络语言模型(Neural Network Language Model,NNLM)是2003年蒙特利尔大学的Yoshua Bengio教授在《A Neural Probabilistic Language Model》中提出来的模型,这个模型第一次用神经网络来解决语言模型的问题,虽然在当时并没有得到太多的重视,却为后来深度学习在解决语言模型问题甚至很多别的nlp问题时奠定了坚实的基础,后人站在Yoshua Bengio的肩膀上,做出了更多的成就。
NNLM
模型一共三层,第一层是映射层,将n个单词映射为对应word embeddings的拼接,其实这一层就是MLP的输入层;第二层是隐藏层,激活函数用tanh;第三层是输出层,因为是语言模型,需要根据前n个单词预测下一个单词,所以是一个多分类器,用softmax。整个模型最大的计算量集中在最后一层上,因为一般来说词汇表都很大,需要计算每个单词的条件概率,是整个模型的计算瓶颈。

评价

  • NNLM模型是第一次使用神经网络对语言建模
  • 由于模型使用的是全连接神经网络,所以只能处理定长序列。
  • 由于模型最后一层使用softmax进行计算,参数空间巨大,训练速度极慢。

Word2Vec

Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,将单词从原先所属的空间映射到新的多维空间中,即把原先词所在空间嵌入(Embedding)到一个新的空间中去,用词向量的方式表征词的语义信息,通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。

Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。
CBOW&Skip-Gram

评价

  • 优化了计算效率,特别是google同时开源了工具包,使得其在工业界能够大规模使用。
  • Word2vec并没有考虑到词序信息以及全局的统计信息等

GloVe

Glove(Global Vectors for Word Representation)是一种无监督的词嵌入方法,该模型用到了语料库的全局特征,即单词的共现频次矩阵,来学习词表征(word representation)。

第一步统计共现矩阵:下面给出了三句话,假设这就是我们全部的语料。我们使用一个size=1的窗口,对每句话依次进行滑动,相当于只统计紧邻的词。这样就可以得到一个共现矩阵。共现矩阵的每一列,自然可以当做这个词的一个向量表示。这样的表示明显优于one-hot表示,因为它的每一维都有含义——共现次数,因此这样的向量表示可以求词语之间的相似度。
共现矩阵

第二步训练词向量:共现矩阵维度是词汇量的大小,维度是很大的,并且也存在过于稀疏的问题,这里我们使用SVD矩阵分解来进降维。
SVD求解

评价

  • 利用词共现矩阵,词向量能够充分考虑到语料库的全局特征,直观上来说比Word2Vec更合理。
  • GloVe中的很多推导都是intuitive的,实际使用中,GloVe还是没有Word2vec来的广泛。

第二代技术预训练技术: Contextual Embeddings

通过预训练得到高质量的词向量一直是具有挑战性的问题,主要有两方面的难点,一个是词本身具有的语法语义复杂属性,另一个是这些语法语义的复杂属性如何随着上下文语境产生变化,也就是一词多义性问题。传统的词向量方法例如word2vec、GloVe等都是训练完之后,每个词向量就固定下来,这样就无法解决一词多义的问题。接下来的模型就是基于解决这个问题展开的。

ELMo

ELMo(Embeddings from Language Models)是有AI2提出,该模型不仅去学习单词特征,还有句法特征语义特征。其通过在大型语料上预训练一个深度BiLSTM语言模型网络来获取词向量,也就是每次输入一句话,可以根据这句话的上下文语境获得每个词的向量,这样子就可以解决一词多义问题。

ELMo

Elmo模型的本质思想是先用语言模型学习一个单词的 Word Embedding,此时无法区分一词多义问题。在实际使用Word Embedding的时候,单词已经具备特定的上下文,这时可以根据上下文单词的语义调整单词的 Word Embedding 表示,这样经过调整后的 Word Embedding 更能表达上下文信息,自然就解决了多义词问题。

评价

  • 在模型层面解决了一词多义的问题,最终得到的词向量能够随着上下文变化而变化。
  • LSTM抽取特征的能力远弱于Transformer
  • 拼接方式双向融合特征融合能力偏弱。

GPT

GPT(Generative Pre-Training)模型用单向Transformer代替ELMo的LSTM来完成预训练任务,其将12个Transformer叠加起来。训练的过程较简单,将句子的n个词向量加上位置编码(positional encoding)后输入到 Transformer中 ,n个输出分别预测该位置的下一个词。

GPT的单项Transformer结构和GPT的模型结构,如图所示:
GPT

评价

  • 第一个结合 Transformer 架构(Decoder)和自监督预训练目标的模型
  • 语言模型使用的是单行语言模型为目标任务。

BERT

BERT采用和GPT完全相同的两阶段模型,首先是语言模型预训练,其次是后续任务的拟合训练。和GPT最主要不同在于预训练阶段采了类似ELMo的双向语言模型技术、MLM(mask language model)技术以及 NSP(next sentence prediction) 机制。

BERT

评价

  • 采用了Transformer结构能够更好的捕捉全局信息。
  • 采用双向语言模型,能够更好的利用了上下文的双向信息。
  • mask不适用于自编码模型,[Mask]的标记在训练阶段引入,但是微调阶段看不到。

延伸方向

研究方向

预训练模型延伸出了很多新的研究方向。包括了:

  • 基于知识增强的预训练模型,Knowledge-enriched PTMs
  • 跨语言或语言特定的预训练模型,multilingual or language-specific PTMs
  • 多模态预训练模型,multi-modal PTMs
  • 领域特定的预训练模型,domain-specific PTMs
  • 压缩预训练模型,compressed PTMs
    预训练的延伸方向
    摘自《Pre-trained models for natural language processing: A survey》

模型衍生

模型衍生
摘自《Pre-Trained Models: Past, Present and Future》

应用于下游任务

迁移学习

迁移学习

  • 不同的PTMs在相同的下游任务上有着不同的效果,这是因为PTMs有着不同的预训练任务,模型架构和语料。针对不同的下游任务需要选择合适的预训练任务、模型架构和语料库
  • 给定一个预训练的模型,不同的网络层捕获了不同的信息,基础的句法信息出现在浅层的网络中,高级的语义信息出现在更高的层级中。针对不通的任务需要选择合适的网络层
  • 主要有两种方式进行模型迁移:特征提取(预训练模型的参数是固定的)和模型微调(预训练模型的参数是经过微调的)。当采用特征提取时,预训练模型可以被看作是一个特征提取器,但以特征提取的方式需要更复杂的特定任务的架构。除此之外,我们应该采用内部层作为特征,因为他们通常是最适合迁移的特征。所以微调是一种更加通用和方便的处理下游任务的方式

微调策略

微调的过程通常是比较不好预估的,即使采用相同的超参数,不同的随机数种子也可能导致差异较大的结果。除了标准的微调外,如下为一些有用的微调策略:

  • 两步骤微调:两阶段的迁移,在预训练和微调之间引入了一个中间阶段。在第一个阶段,PTM 通过一个中间任务或语料转换为一个微调后的模型,在第二个阶段,再利用目标任务进行微调。
  • 多任务微调:在多任务学习框架下对其进行微调。
  • 利用额外模块进行微调:微调的主要缺点就是其参数的低效性。每个下游模型都有其自己微调好的参数,因此一个更好的解决方案是将一些微调好的适配模块注入到PTMs中,同时固定原始参数。

参考资料

❌