第 8 课 · 动手学大模型(上海交大)
Multimodal Large Language Models
多模态模型:编码器—LLM—解码器怎么拼起来
语言模型已经证明高阶智能可以在语言模态上体现。那么当输入变成图像、视频、音频,输出也要覆盖这些模态时,系统该怎么搭?这一章讲两种主流架构,并用 NExT-GPT 做一次完整的推理实践。
学习目标
- 熟悉多模态大语言模型的类型划分。
- 掌握多模态大语言模型的通用技术框架。
- 掌握多模态大语言模型的搭建、训练和推理。
核心概念
教程给出两种常见架构。
架构一:LLM 作为任务调度器。 LLM 接收文本信号,向下游模块发出文本命令,系统内部所有消息传递都以纯文本命令为媒介,不同功能模块之间不直接交互。好处是模块可替换、易调试,坏处是信息在文本这个瓶颈里被压缩了。
架构二:LLM 作为系统的联合部分。 这就是目前最流行的编码器—LLM—解码器框架。LLM 直接从外部感知多模态信息,在统一结构里做出响应和操作。与架构一的关键区别在于,LLM 不再只是发号施令的调度器,而是承接了多模态表示本身。
实践对象是 NExT-GPT,它首次提出「任意到任意模态」的概念:文字、图像、视频、声音四种模态可任意组合输入,也可组合输出,并支持多轮上下文交互。它的组装方式很典型:ImageBind 做统一的图像/视频/音频编码器,Vicuna 做 LLM,图像用 Stable Diffusion v1-5、音频用 AudioLDM、视频用 ZeroScope 做解码器,中间挂一份可调的 delta 参数。
实践步骤
- 克隆 NExT-GPT 仓库并装环境。
- 加载冻结参数:下载 ImageBind 的 huge 版权重放到指定目录;按说明准备 LLaMA 后放好 Vicuna;三个扩散模型代码里会自动下载。
- 加载可调参数:把 delta checkpoint 放到
ckpt/delta_ckpt/nextgpt/7b_tiva_v0,可以用自己训练的,也可以下官方预训练好的。 - 起 Gradio Demo,用
--nextgpt_ckpt_path指向权重路径。 - 逐个跑测试样例,覆盖不同的输入输出模态组合,并试多轮交互。
常见误区
- 把架构一和架构二混为一谈。 两者的调试方式完全不同:前者出错看命令文本,后者出错看表示对齐。
- 权重目录放错。 NExT-GPT 由多个独立模型拼成,冻结参数和可调参数分属不同目录,放错的表现往往是「能启动、输出很怪」。
- 只测单模态。 这套系统的价值在组合,只测文生图相当于没测。
动手练习
把四种模态两两组合,设计八组输入输出(比如文本加图像输入、文本加音频输出),每组跑三次并记录成功与失败。对失败的组合,判断问题出在编码端、LLM 端还是解码端,依据是:换一张更简单的图还错吗?把同样的意思用纯文本说还错吗?把结论整理成一张故障归因表。
要点回顾
多模态大模型工程上是「拼装」:编码器负责把各模态映射到 LLM 能读的表示,解码器负责把 LLM 的意图还原成各模态内容,LLM 居中承担理解与规划。理解这条链路后,绝大多数问题都能定位到某一段,而不是笼统地说模型不行。
参考来源
- 上海交通大学《动手学大模型》系列编程实践教程,第八章「多模态模型」:documents/chapter8,核验日期:2026-09-06。