video-promo/PROMO_GUIDE.md

374 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AstrAI 宣传视频制作指南
> 本文档为制作 AstrAI 宣传视频提供完整的技术参考、分镜建议和录制脚本。
> 目标时长:**2-3 分钟**
---
## 目录
1. [项目定位与核心卖点](#1-项目定位与核心卖点)
2. [技术架构速览](#2-技术架构速览)
3. [分镜脚本](#3-分镜脚本)
4. [演示录制指南](#4-演示录制指南)
5. [动画场景说明](#5-动画场景说明)
6. [旁白文案草稿](#6-旁白文案草稿)
7. [素材清单](#7-素材清单)
---
## 1. 项目定位与核心卖点
**一句话定位:**
> 一个能在单张消费级 GPU 上训练和推理的 1B 参数中英双语语言模型框架。
**核心卖点(视频中需突出):**
| 卖点 | 说明 | 视觉表达 |
|------|------|---------|
| **单卡可跑** | 1B 参数RTX 3090/4090 即可运行 | 巨大服务器集群 vs 单张显卡对比 |
| **连续批处理** | 动态合并请求,吞吐量 3x+ | 任务流经 Cleanup→Refill→Prefill→Decode 动画 |
| **前缀缓存零拷贝** | 相同前缀直接复用 KV无需重算 | Radix Tree 生长动画 |
| **OpenAI 兼容 API** | 一行代码切换 | curl 命令对比 |
| **流式输出** | 逐 token 返回,低首延迟 | 终端逐字喷出效果 |
| **全过程开源** | 训练+推理+权重全部开源 | GitHub 页面展示 |
---
## 2. 技术架构速览
### 整体架构
```
┌──────────────────────────────────────────────────┐
│ FastAPI Server (OpenAI-Compatible API) │
├──────────────────────────────────────────────────┤
│ InferenceEngine (Streaming + Async + Batch) │
├──────────────────────────────────────────────────┤
│ Continuous Batching Scheduler │
│ ┌────────┐ ┌──────┐ ┌────────┐ ┌────────┐ │
│ │Cleanup │→ │Refill│→ │Prefill │→ │ Decode │ │
│ └────────┘ └──────┘ └────────┘ └────────┘ │
├──────────────────────────────────────────────────┤
│ Prefix Cache (Radix Tree) + KV Cache │
├──────────────────────────────────────────────────┤
│ Transformer (24层 GQA, RoPE, SwiGLU) │
└──────────────────────────────────────────────────┘
```
### 关键技术指标
| 指标 | 值 |
|------|------|
| 参数量 | ~1.0B |
| 词表大小 | 100,000中英 BPE |
| 层数 | 24 |
| 注意力头 | 24 Q-heads / 4 KV-headsGQA |
| 最大长度 | 2048 tokens |
| 精度 | bfloat16 |
| 最低显存 | ~6GB推理/~12GB训练 |
---
## 3. 分镜脚本
总时长 **2:30**,分为 6 个段落。
### Segment 1Hook + 问题陈述0:00 - 0:20
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 1.1 | 黑屏,逐字打出"大语言模型很强大" | "大语言模型很强大——" | 3s |
| 1.2 | 切到数据中心照片 / 巨大 GPU 集群 | "——但跑起来需要几十张 GPU普通人根本碰不到。" | 5s |
| 1.3 | 画面分屏:左边集群,右边一张 RTX 4090 | "但如果我告诉你,只要一张显卡就够了呢?" | 5s |
| 1.4 | Logo 出现:**AstrAI**,下方副标题 "1B 参数单卡推理框架" | "AstrAI——单卡跑大模型。" | 7s |
**视觉素材**数据中心图片可免版权下载、RTX 4090 产品图、Logo 动画
---
### Segment 2模型架构速览0:20 - 0:45
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 2.1 | Transformer 架构图逐层展开embed → 24层 decoder → norm → head | "1B 参数24 层 Transformer100k 词表的中英 BPE 分词器。" | 8s |
| 2.2 | 高亮 GQA24个 Q head 映射到 4个 KV head | "GQA 分组查询注意力——24 个查询头只对应 4 个 KV 头KV 缓存直接减少 83%。" | 10s |
| 2.3 | RoPE 旋转变换可视化 | "RoPE 旋转位置编码,支持动态长度外推。" | 5s |
| 2.4 | fade 到模型 cardvocab=100k, dim=1536, layers=24, heads=24, kv_heads=4 | 静默 | 2s |
**视觉素材**`architecture.py` 动画、模型参数 card
---
### Segment 3连续批处理0:45 - 1:20
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 3.1 | 3 个请求同时到达服务器 | "当多个请求同时到达时——" | 3s |
| 3.2 | 静态批处理对比最长补齐3个请求串行 → 总耗时 max_len × 3 | "传统做法是静态批处理把请求补齐到相同长度串行处理GPU 利用率低下。" | 8s |
| 3.3 | 连续批处理动画:任务流入 Waiting Queue → Cleanup → Refill → Prefill → Decode | "AstrAI 采用连续批处理任务动态进出GPU 每一刻都在满负荷运转。" | 10s |
| 3.4 | 放大 Decode 阶段:同一位置的任务合并成一批 | "特别地,只有处于相同 KV 缓存位置的任务才一起解码,从根本上避免了 RoPE 位置错乱的问题。" | 8s |
| 3.5 | 吞吐对比柱状图Static Batch vs Continuous Batching (3x+) | "实测吞吐量提升 3 倍以上。" | 6s |
**视觉素材**`continuous_batching.py` 动画、对比图表
---
### Segment 4前缀缓存1:20 - 1:50
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 4.1 | 两个请求有相同 system prompt"你是一个AI助手" | "如果两个请求有相同的前缀——比如相同的系统提示词——" | 5s |
| 4.2 | 普通做法:两个请求各自独立计算前 20 个 token | "普通框架会各自从头计算一遍,白白浪费算力。" | 5s |
| 4.3 | Radix Tree 生长动画:第一个请求插入,第二个请求匹配共享前缀 | "AstrAI 用一颗字典树缓存所有前缀的 KV——第二个请求直接命中。" | 8s |
| 4.4 | 高亮 Slot 复用:直接用原 slot 继续写,零拷贝 | "如果原始 slot 空闲,直接原地续写,连 GPU 内存拷贝都不需要。" | 7s |
| 4.5 | 首 token 延迟对比:有缓存 vs 无缓存(-50% | "首 token 延迟降低一半以上。" | 5s |
**视觉素材**`prefix_cache.py` 动画、延迟对比
---
### Segment 5Demo 演示1:50 - 2:15
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 5.1 | 侧录终端:启动 stream_chat.py逐行输出对话 | "来实际看看效果。" | 10s |
| 5.2 | 多轮对话:中文问答,逐 token 喷出 | 静默 + 打字音效 | 8s |
| 5.3 | 切到 HTTP 模式:服务端 + curl 请求,流式返回 | "也提供 OpenAI 兼容的 HTTP API一行 curl 就能调用。" | 7s |
**视觉素材**终端录屏OBS 录制)
---
### Segment 6收尾 + CTA2:15 - 2:30
| 镜头 | 画面 | 旁白 | 时长 |
|------|------|------|------|
| 6.1 | 全栈流程回顾(缩略架构图) | "训练用 SEQ → SFT → DPO/GRPO推理用连续批处理——" | 5s |
| 6.2 | GitHub 页面 + Star 引导 | "——全部开源。点个 Star一起让大模型更普惠。" | 7s |
| 6.3 | Logo + URL + "Open Source • Single GPU" | 静默 | 3s |
**视觉素材**GitHub 页面录屏、Logo 定版
---
## 4. 演示录制指南
### 4.1 准备工作
```bash
# 1. 安装依赖
pip install -e ".[dev]"
# 2. 下载模型(约 7GB
python scripts/demo/download.py
# 3. 验证模型加载
python scripts/demo/generate_ar.py
```
### 4.2 录制场景 A交互式对话
```bash
# 终端 1启动交互式对话
python scripts/demo/stream_chat.py
# 预期交互
>> 你好?
AstrAI: 你好!有什么我可以帮你的吗?
>> 请用中文介绍一下你自己
AstrAI: ...(逐 token 输出)
>> 编一个关于人工智能的短故事
AstrAI: ...(逐 token 输出)
```
**录制重点**
- 逐 token 流式输出效果(用 OBS 录制终端窗口)
- 多轮对话的记忆能力(跨轮上下文保持)
- 打字音效叠加
### 4.3 录制场景 BHTTP 服务 + 并发
```bash
# 终端 1启动服务器
python -m scripts.tools.server --port 8000 --device cuda
# 终端 2发送请求非流式
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hello!"}],"stream":false}'
# 终端 3流式请求
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Write a poem"}],"stream":true}'
# 终端 4并发压测用 scripts/demo/generate_batch.py
python scripts/demo/generate_batch.py
```
**录制重点**
- 同时多个 curl 请求展示并发处理
- 服务端日志显示批处理合并
- `/stats` 端点展示实时统计
### 4.4 录制规格
| 参数 | 建议 |
|------|------|
| 分辨率 | 1920×1080 |
| 帧率 | 30fps |
| 终端 | Windows Terminal 或 iTerm2深色主题 |
| 字号 | 16-18px等宽字体JetBrains Mono / Cascadia Code |
| 录屏工具 | OBS Studio免费 |
| 音频 | 旁白用 USB 麦克风,音效后期叠加 |
---
## 5. 动画场景说明
位于 `promo/` 目录,使用 Manim 引擎。
### 安装 Manim
```bash
# conda 环境内安装
pip install manim
# 验证
python -c "import manim; print(manim.__version__)"
```
### 渲染命令
```bash
# 单独渲染一个场景
manim -qh promo/continuous_batching.py ContinuousBatching
# 全部场景渲染
python promo/render_all.py
# 快速草稿480p适合调试
manim -ql promo/continuous_batching.py ContinuousBatching
```
输出文件为 `promo/output/videos/` 下的 `.mp4` 文件,可直接导入剪辑软件。
### 场景清单
| 文件 | 导出场景名 | 内容 | 建议时长 |
|------|-----------|------|---------|
| `transformer.py` | `Transformer` | 模型架构Embed → GQA → SwiGLU → ×24 → LM Head | ~35s |
| `continuous_batching.py` | `ContinuousBatching` | 4 阶段流水线动画 + 吞吐对比 | ~30s |
| `prefix_cache.py` | `PrefixCache` | Radix Tree 生长 + 多分支前缀复用 | ~30s |
| `architecture.py` | `Architecture` | 全栈架构逐层展开 + 数据流 | ~25s |
### 自定义动画
如需修改动画内容:
- Manim 语法参考https://docs.manim.community/
- 所有动画元素(颜色、位置、速度)在场景类中通过参数调整
- 中文字体渲染需额外配置:
```python
# 在场景类开头添加
Text.set_default(font="Microsoft YaHei")
```
---
## 6. 旁白文案草稿
### 中文版(完整 2:30
```
[00:00] 大语言模型很强大——
[00:03] 但跑起来需要几十张 GPU普通人根本碰不到。
[00:08] 但如果我告诉你,只要一张显卡就够了呢?
[00:13] AstrAI——单卡跑大模型。
[00:20] 1B 参数24 层 Transformer100k 词表的中英 BPE 分词器。
[00:28] GQA 分组查询注意力——24 个查询头只对应 4 个 KV 头KV 缓存直接减少 83%。
[00:38] RoPE 旋转位置编码,支持动态长度外推。
[00:45] 当多个请求同时到达时——
[00:48] 传统做法是静态批处理把请求补齐到相同长度串行处理GPU 利用率低下。
[00:56] AstrAI 采用连续批处理任务动态进出GPU 每一刻都在满负荷运转。
[01:06] 只有处于相同 KV 缓存位置的任务才一起解码,从根本上避免 RoPE 位置错乱。
[01:14] 实测吞吐量提升 3 倍以上。
[01:20] 如果两个请求有相同的前缀,普通框架会各自从头计算。
[01:25] AstrAI 用一颗字典树缓存所有前缀的 KV——第二个请求直接命中。
[01:33] 如果原始 slot 空闲,直接原地续写,连 GPU 内存拷贝都不需要。
[01:40] 首 token 延迟降低一半以上。
[01:50] 来实际看看效果。
[01:52] (现场演示部分,自由发挥)
[02:15] 训练到推理,全流程开源,点个 Star一起让大模型更普惠。
[02:25] AstrAI — Open Source, Single GPU.
```
---
## 7. 素材清单
### 视频素材
| 素材 | 来源 | 状态 |
|------|------|------|
| 数据中心 / GPU 集群图片 | Pexels / Unsplash 免版权 | 需下载 |
| RTX 4090 产品图 | NVIDIA 官网 / 实物拍摄 | 需准备 |
| AstrAI Logo | `assets/images/logo.png` | ✅ 已有 |
| 终端录屏(对话) | OBS 录制 `scripts/demo/stream_chat.py` | 需录制 |
| 终端录屏HTTP | OBS 录制 curl + server | 需录制 |
| 终端录屏(并发) | OBS 录制 `generate_batch.py` | 需录制 |
| GitHub 页面 | 浏览器录屏 | 需录制 |
| Transformer 架构动画 | Manim 渲染 `transformer.py` | ✅ 已渲染 |
| 架构动画 | Manim 渲染 `architecture.py` | ✅ 已渲染 |
| 连续批处理动画 | Manim 渲染 `continuous_batching.py` | ✅ 已渲染 |
| 前缀缓存动画 | Manim 渲染 `prefix_cache.py` | ✅ 已渲染 |
### 音频素材
| 素材 | 建议 |
|------|------|
| 旁白 | USB 麦克风录制,男声或女声,中文普通话 |
| 背景音乐 | Epidemic Sound / YouTube Audio Library 搜索 "technology ambient" |
| 音效 | 打字音效terminal keystrokes、转场 swoosh、whoosh |
### 软件工具
| 用途 | 推荐工具 | 价格 |
|------|---------|------|
| 录屏 | OBS Studio | 免费 |
| 剪辑 | DaVinci Resolve | 免费 |
| 动画渲染 | Manim (`pip install manim`) | 免费 |
| 音频处理 | Audacity | 免费 |
| 字幕 | DaVinci Resolve 内建 / Aegisub | 免费 |
---
## 附录:关键文件索引
| 文件路径 | 说明 |
|---------|------|
| `README.md` | 项目主页 README含快速开始 |
| `assets/docs/introduction.md` | 模型架构深度介绍 |
| `assets/docs/design.md` | 设计文档 + UML 类图 |
| `astrai/inference/scheduler.py` | 连续批处理调度器核心代码 |
| `astrai/inference/engine.py` | 推理引擎统一接口 |
| `astrai/inference/server.py` | FastAPI 服务器 |
| `astrai/model/transformer.py` | Transformer 模型 |
| `astrai/model/module.py` | GQA、MLA、MLP 等模块 |
| `scripts/demo/stream_chat.py` | 交互式对话演示 |
| `scripts/demo/generate_batch.py` | 批量生成演示 |
| `scripts/tools/server.py` | HTTP 服务启动脚本 |
| `scripts/tools/benchmark.py` | 性能基准测试 |
| `scripts/promo/README.md` | 动画渲染说明(已移至 promo/ |
| `promo/render_all.py` | 一键渲染所有动画 |
| `promo/continuous_batching.py` | 连续批处理 Manim 场景 |
| `promo/prefix_cache.py` | 前缀缓存 Manim 场景 |
| `promo/architecture.py` | 架构总览 Manim 场景 |
| `params/config.json` | 模型配置 |