Skip to content

An implementation of native video-audio-text interleaved multimodal architecture.

Notifications You must be signed in to change notification settings

konodiodaaaaa1/Multimodal-Native-Architecture-Demo

Repository files navigation

Native Multimodal Architecture with Llama-3 👁️👂🧠

这是一个原生多模态大模型(Native Multimodal LLM)的实战架构实现。

不同于传统的“适配器”模式,本项目探索了视频(视觉)、音频(听觉)与文本在 Transformer 底层进行的原生交错(Interleaved)融合。项目包含完整的从零构建的数据处理管道、感知层架构(Vision/Audio Encoders)、信息压缩瓶颈(Perceiver Resampler)以及与量化版 Llama-3 (8B) 的对齐训练代码。

🌟 核心特性 (Key Features)

  • 原生多模态融合:抛弃简单的 Late Fusion,采用视频流、音频流与文本流在时间轴上交错拼接的架构。
  • 时空对齐机制:实现了基于时间戳的严格视听对齐,并引入可学习的时间位置编码(Temporal Positional Embedding)。
  • 信息压缩瓶颈:内置 Perceiver Resampler,将高维稀疏的视听特征压缩为紧凑的 Latent Tokens(例如 10秒视频仅占用 400 Tokens),极大降低 LLM 上下文压力。
  • 消费级显卡适配:集成了 QLoRA (4-bit Quantization)混合精度训练 (AMP),支持在单张 RTX 3090/4090 上进行端到端训练。
  • 模块化设计:数据处理、模型架构、训练循环完全解耦,易于二次开发。

📂 目录结构 (Directory Structure)

.
├── raw_videos/             # [数据源] 存放原始 MP4 视频文件
├── checkpoints/            # [输出] 训练过程中保存的模型权重
├── models/                 # [模型] 训练所选用的基座模型,现在用qwen通过download_qwen.py下载
├── dataset_maker.py        # [核心] 数据清洗、切片、特征提取与 Dataset 类定义
├── model.py                # [核心] 视觉/听觉编码器、Resampler 及 Llama-3 封装类
├── train.py                # [入口] 完整的单机训练脚本(含配置项)
├── download_qwen.json      # [下载] 下载qwen模型的脚本
├── app_demo.py             # [应用] 基于 Gradio 的流式交互演示脚本
├── dataset_meta.json       # [索引] 数据集的元数据描述文件
└── README.md               # 项目说明文档

🛠️ 环境配置 (Environment Setup)

为了确保代码能够稳定运行,建议创建一个全新的 Conda 虚拟环境。

1. 创建虚拟环境

# 创建名为 multimodal 的环境,使用 Python 3.10
conda create -n multimodal python=3.10 -y
conda activate multimodal

2. 安装核心依赖

本项目依赖 PyTorch 生态、Hugging Face 生态以及 Gradio。请按顺序执行:

# 1. 安装 PyTorch (建议根据你的 CUDA 版本去 pytorch.org 获取最新命令)
# 示例为 CUDA 11.8/12.x
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 2. 安装 Hugging Face 及量化库
pip install transformers accelerate bitsandbytes huggingface_hub

# 3. 安装数据处理与交互工具
pip install opencv-python numpy tqdm einops gradio

或者,你可以创建一个 requirements.txt 文件并运行 pip install -r requirements.txt

torch>=2.1.0
torchvision
torchaudio
transformers>=4.40.0
accelerate>=0.29.0
bitsandbytes>=0.43.0
huggingface_hub
opencv-python
einops
tqdm
numpy
gradio

⚙️ 关键配置与运行 (Configuration)

1. 配置 Hugging Face Token (必须)

由于 Meta Llama 3 是门控模型(Gated Model),你必须拥有访问权限才能下载。

  1. 前往 Meta Llama 3 HF 页面 申请访问权限。
  2. 在 Hugging Face 设置页获取你的 Access Token
  3. 修改代码:打开 train.py,找到 TrainingConfig 类:
# train.py

class TrainingConfig:
    # ... 其他配置 ...
    
    # [TODO] 请将下方的字符串替换为你自己的 Hugging Face Token (以 hf_ 开头)
    # 如果你已经在终端使用了 `huggingface-cli login`,这里可以设为 None
    HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 

2. 准备数据

  1. 将你的 .mp4 视频放入 raw_videos/ 文件夹。
  2. 确保 dataset_meta.json 中的 file_name 与文件名一致。

3. 开始训练

python train.py

4. 启动交互式演示 (Gradio Demo)

训练完成后(或使用随机权重测试),可以启动 Web 界面进行视频理解对话:

python app_demo.py

🧩 进阶修改指南 (Advanced Usage)

Q: 我想更换基座大模型(例如从 Llama-3 换成 Mistral 或 Qwen)?

本项目对 LLM 是解耦的,更换模型非常简单,只需修改 train.py 中的配置:

  1. 打开 train.py
  2. 修改 TrainingConfig 类中的 MODEL_PATH
class TrainingConfig:
    # 示例:换成 Mistral-7B
    MODEL_PATH = "mistralai/Mistral-7B-v0.1" 
    
    # 示例:换成 Qwen2-7B (对国内用户更友好,无需 Token)
    # MODEL_PATH = "Qwen/Qwen2-7B-Instruct"

注意:代码会自动检测新模型的 Hidden Size(如 4096 或 5120)并自动调整投影层(Projector),通常无需修改网络架构代码。

Q: 显存不足怎么办?

如果你在运行中遇到 OOM (Out of Memory) 错误,请尝试以下优化:

  1. 开启 4-bit 量化:确保 train.pyLOAD_IN_4BIT = True
  2. 减小 Batch Size:将 BATCH_SIZE 设为 1。
  3. 增加梯度累积:将 GRAD_ACC_STEPS 增大(如从 8 改为 16),以保持等效 Batch Size 不变。

提示:反之,如果你的显存非常充裕(如使用 A100),可以在 train.py注释掉梯度检查点(Gradient Checkpointing)相关代码,以获得更快的训练速度。

📊 架构图解 (Architecture Overview)

[Input Video] --(Sparse Sample)--> [Frames] --(ViT)--> [Visual Features]
                                        |
                                  (Perceiver Resampler) <--- [Latent Queries]
                                        |
                                  [Visual Tokens] (32 tokens/sec)
                                        |
                                        v
                                  [Concat & Interleave] <--- [Audio Tokens]
                                        |
                                        v
                            [Multimodal Sequence] + [Text Embeddings]
                                        |
                                        v
                                 [ Llama-3 (Frozen) ]
                                        |
                                        v
                                  [Next Token Prediction]

🤝 License

本项目仅供学术研究与技术交流使用。使用 Llama 3 模型权重需遵守 Meta Community License。

About

An implementation of native video-audio-text interleaved multimodal architecture.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages