研究高斯泼贱算法需要掌握的知识

研究高斯泼贱算法需要掌握的知识

结合已有的 Python、NumPy、Pandas 基础,以及学过一部分 PyTorch,两周可以完成 ML-SHARP 推理优化第一版。但目标需要控制为:

跑通项目 → 看懂核心链路 → 建立性能基线 → 完成 AMP、torch.compile、后处理和服务化优化 → 做 DINOv2 轻量化可行性验证。

完整的 DINOv2 蒸馏训练、TensorRT 全模型转换、SageAttention 源码适配,不建议塞进这两周。你上传的学习清单已经覆盖了 PyTorch、ViT、DINOv2、相机几何、3D Gaussian、性能分析和知识蒸馏等核心短板,方向是正确的。

一、B站资料推荐

1. PyTorch:只看项目需要的章节

《PyTorch深度学习快速入门教程》------小土堆

BV号:BV1hE411t7RN

不要完整看完九个多小时,重点看:

  • Transforms;
  • nn.Module
  • 网络模型搭建;
  • 现有模型的使用与修改;
  • 模型保存与读取;
  • GPU 使用;
  • 开源项目阅读。

该课程共有33个选集,课程页面列出了模型结构、保存读取、GPU和开源项目等章节,比较适合你快速补齐 PyTorch 工程能力。(哔哩哔哩)

暂时跳过:

  • TensorBoard;
  • 完整训练套路;
  • 损失函数详细推导;
  • 优化器详细推导;
  • Dataset、DataLoader 深入内容。

这些在做 DINOv2 微调时再补。

2. Transformer和ViT

先看:

《Transformer论文逐段精读》------李沐

BV号:BV1pu411o7BE

重点理解 Q、K、V、Self-Attention、Multi-Head、LayerNorm、残差连接,不需要逐字读完论文。(哔哩哔哩)

再看:

《ViT论文逐段精读》------李沐

BV号:BV15P4y137jb

重点理解图片如何切成 Patch、Patch 如何变成 Token、位置编码、Transformer Block,以及 ViT-S/B/L 的区别。(哔哩哔哩)

这两套不要边看边抄大量笔记。看完后自己画出:

text 复制代码
Image
→ Patch Embedding
→ Tokens
→ Transformer Blocks
→ Intermediate Features
→ Decoder
→ Gaussian Parameters

3. DINOv2

用于快速建立概念:

《DINOv2:自监督学习计算机视觉大模型》

BV号:BV1jc411J7PY (哔哩哔哩)

或者更短地看:

《论文速读24:BERT and DINOv2》

BV号:BV1QD421H777 (哔哩哔哩)

B站视频只负责帮助你理解"DINOv2是什么"。代码、模型结构和参数名称要以 Meta 官方仓库为准。官方仓库提供 ViT-S、ViT-B、ViT-L 等预训练模型和 PyTorch 代码。(GitHub)

你需要掌握的不是 DINOv2 完整训练,而是:

  • 输入图片尺寸;
  • Patch Size;
  • Token 数量;
  • embedding 维度;
  • 中间层特征;
  • ViT-L 换成 ViT-B 后哪些 shape 会变化。

4. 相机几何

优先看:

《空间计算之几何视觉(一):相机投影模型》

BV号:BV1RouczvEPu

内容覆盖针孔相机模型、图片裁剪和缩放后的内参变化,以及反投影,和 ML-SHARP 后处理非常匹配。(哔哩哔哩)

补充看:

《相机的内参和外参矩阵》

BV号:BV1Yd4y1R7En (哔哩哔哩)

只需要掌握:

text 复制代码
fx、fy:焦距
cx、cy:主点
K:相机内参矩阵
二维像素 + 深度 → 三维坐标
图片Resize后内参也要缩放

5. 3D Gaussian Splatting

首选:

《讲人话------3D Gaussian Splatting全解:原理、代码、公式》

第一集 BV号:BV1zi421v7Dr

该系列从三维 Gaussian、投影、颜色到高性能渲染逐步讲解,适合建立完整直觉。(哔哩哔哩)

时间紧时可以改看四集速通:

  • 三维高斯概念:BV11e411n79b
  • 球谐函数:BV1aw411E7bA
  • 参数与渲染:BV1h5411y7ds
  • 伪代码流程:BV1FC4y1k79X (哔哩哔哩)

对于当前任务,你主要掌握五个参数:

text 复制代码
mean:三维位置
scale:椭球大小
rotation:椭球方向
color:颜色
opacity:透明度

6. GPU、混合精度和性能分析

GPU基础:

《终于有人把 GPU、CUDA、cuDNN 讲清楚了》

BV号:BV15Q4y1i7Bp (哔哩哔哩)

AMP:

《AMP自动混合精度原理》

BV号:BV1eW421w7NJ,包含 autocast 和 FP16/BF16 相关代码。(哔哩哔哩)

Profiler:

《PyTorch Profiler:服务器性能分析工具》

BV号:BV1sr8kznEP7 (哔哩哔哩)

torch.compile

《理解、学习与使用PyTorch编译器》------清华游凯超

BV号:BV14T4y187bN (哔哩哔哩)

这几个视频看懂基本用法即可。具体参数应同时对照 PyTorch 官方文档,因为 torch.compile、Profiler 等功能会随 PyTorch 版本更新。(PyTorch 文档)


二、两周边学边做计划

建议每天投入6~8小时:

text 复制代码
视频学习:1.5~2小时
小代码练习:1~2小时
ML-SHARP项目实操:3~4小时
当天总结:30分钟

第1天:PyTorch推理基础

学习:

  • Tensor 的 shape、dtype、device
  • .to("cuda")
  • permute、reshape、unsqueeze
  • nn.Moduleforward()
  • model.eval()
  • torch.inference_mode()

实操:

python 复制代码
image_np
→ torch.from_numpy()
→ permute(2, 0, 1)
→ unsqueeze(0)
→ to("cuda")

产出:

text 复制代码
scripts/tensor_image_test.py

必须打印每一步的:

text 复制代码
shape
dtype
device
显存占用

第2天:模型加载与GPU推理

看小土堆的:

  • nn.Module
  • 现有模型修改;
  • 模型保存与读取;
  • GPU使用。

实操一个小模型:

python 复制代码
model.eval()

with torch.inference_mode():
    output = model(input_tensor)

再实现:

python 复制代码
torch.load()
model.load_state_dict()

产出:

text 复制代码
scripts/model_inference_test.py

当天必须理解:

text 复制代码
模型结构 ≠ 模型权重
state_dict保存的是参数
model(input)最终进入forward()

第3天:跑通ML-SHARP

任务:

  1. 检查 RTX 5070 Ti 的 CUDA;
  2. 安装项目依赖;
  3. 跑一张图片;
  4. 跑一个图片目录;
  5. 保存 PLY;
  6. 记录原始总耗时和显存。

创建:

text 复制代码
scripts/check_cuda.py

输出至少包括:

python 复制代码
torch.__version__
torch.version.cuda
torch.cuda.is_available()
torch.cuda.get_device_name()
torch.cuda.get_device_capability()
torch.cuda.get_arch_list()

Apple SHARP 的公开描述是单次前向回归 3D Gaussian 参数,而不是传统的多步扩散采样。(arXiv)

因此当天还要执行:

bash 复制代码
grep -R "set_timesteps" -n src
grep -R "scheduler.step" -n src
grep -R "num_inference_steps" -n src

有结果才学习 Diffusion 采样优化;没有结果就跳过。

第4天:Transformer与ViT

看李沐 Transformer 和 ViT。

实操:

python 复制代码
print(model)
print(model.named_children())
print(model.named_modules())

为关键模块添加 hook:

python 复制代码
def print_shape(name):
    def hook(module, inputs, output):
        print(name, output.shape)
    return hook

产出:

text 复制代码
scripts/inspect_model.py
notes/model_architecture.md

画出 ML-SHARP 的调用链,不必逐行看完整项目。

第5天:DINOv2和Backbone分析

学习:

  • ViT-S/B/L;
  • Patch Token;
  • intermediate layers;
  • embedding dimension;
  • Backbone 和 Decoder。

项目实操:

bash 复制代码
grep -R "dinov2" -n src
grep -R "get_intermediate_layers" -n src
grep -R "embed_dim" -n src

记录:

text 复制代码
DINOv2模型名称
总层数
embedding维度
取出了哪些中间层
Decoder期望多少输入通道

产出:

text 复制代码
notes/dinov2_backbone_analysis.md

当天不替换模型,只分析。

第6天:相机内参和反投影

看相机投影视频。

写一个最小实验:

python 复制代码
x = (u - cx) * depth / fx
y = (v - cy) * depth / fy
z = depth

测试:

text 复制代码
原图片尺寸
Resize后的尺寸
Resize前内参
Resize后内参
同一像素反投影结果

产出:

text 复制代码
scripts/camera_unproject_demo.py

然后回到 ML-SHARP,找到:

text 复制代码
intrinsics
unproject
disparity
depth

第7天:3D Gaussian和PLY

看3DGS速通或"讲人话"系列。

在代码中找到:

text 复制代码
mean_vectors
singular_values / scales
quaternions
colors
opacities
save_ply

写一个最小 PLY:

text 复制代码
10~100个彩色三维点

然后能够解释:

text 复制代码
为什么Gaussian不是普通点
为什么需要scale和rotation
为什么协方差需要SVD或eigh
为什么PLY逐行创建tuple会慢

产出:

text 复制代码
scripts/simple_ply_demo.py
notes/gaussian_parameters.md

第8天:建立性能基线

学习 CUDA 异步执行和 PyTorch Profiler。

把流程拆为:

text 复制代码
模型加载
图片读取
预处理
model_forward
unproject
covariance decomposition
PLY转换
文件写盘
total

正确测速:

python 复制代码
torch.cuda.synchronize()
start = time.perf_counter()

result = fn()

torch.cuda.synchronize()
elapsed = time.perf_counter() - start

产出:

text 复制代码
scripts/benchmark.py
benchmarks/baseline.csv

固定使用同一组10张图片,之后所有版本都用它们测试。

第9天:FP16和BF16

分别测试:

text 复制代码
FP32
BF16 autocast
FP16 autocast

不要先执行:

python 复制代码
model.half()

优先使用:

python 复制代码
with torch.inference_mode():
    with torch.autocast(
        device_type="cuda",
        dtype=torch.float16,
    ):
        output = model(input_tensor)

记录:

text 复制代码
model_forward
total
peak_vram
NaN/Inf
PLY是否正常
渲染结果是否正常

产出:

text 复制代码
benchmarks/amp_compare.csv

第10天:torch.compile

顺序测试:

python 复制代码
# 版本1
原始 eager

# 版本2
torch.compile(model, mode="default")

# 版本3
torch.compile(model, mode="reduce-overhead")

第一轮编译不计入热启动平均值。

记录:

text 复制代码
首次请求
第2~3次预热
第4~13次平均值
峰值显存
是否反复重新编译

产出:

text 复制代码
benchmarks/compile_compare.csv

12GB显存下,default 跑通后再试 reduce-overhead

第11天:优化PLY写盘

重点检查是否存在:

python 复制代码
list(map(tuple, numpy_array))

尝试改为结构化数组按列赋值。

验证:

text 复制代码
旧PLY和新PLY字段一致
Gaussian数量一致
文件可以正常读取
数值误差接近0
save_ply耗时降低

产出:

text 复制代码
optimized_ply_export
benchmarks/ply_compare.csv

第12天:后处理与模型常驻

根据第8天结果决定:

  • 如果协方差分解慢:测试 CPU FP64 eigh
  • 如果 CPU-GPU传输慢:减少 .cpu().cuda()
  • 如果每次加载模型慢:建立 FastAPI 常驻服务。

服务要求:

text 复制代码
启动时加载模型一次
只开一个GPU worker
模型预热一次
请求通过锁或队列串行进入GPU

产出:

text 复制代码
server.py

记录:

text 复制代码
冷启动耗时
第一次请求
后续10次请求平均耗时

第13天:DINOv2轻量化最小验证

两周内不做完整蒸馏,只完成"结构可行性实验"。

任务:

  1. 列出 ViT-L 输出 shape;
  2. 找到 Decoder 输入通道;
  3. 设计 ViT-B/ViT-S 替换表;
  4. 增加 adaptor 的设计;
  5. 尝试创建小模型并执行一次 forward;
  6. 记录所有 shape mismatch。

建议建立表格:

项目 ViT-L ViT-B 需要修改
层数 中间层索引
embedding adaptor
heads attention配置
checkpoint 无法直接完整加载
decoder input 通道调整

有余力再看:

《工程师视角下的AI知识蒸馏》

BV号:BV1ivGRzcES3 (哔哩哔哩)

产出:

text 复制代码
notes/dinov2_lightweight_design.md

第14天:回归测试和最终报告

对以下版本做完整测试:

text 复制代码
Baseline FP32
AMP
AMP + compile
AMP + compile + PLY优化
最终服务版本

每个版本跑:

text 复制代码
10张图片 × 3轮

最终报告:

text 复制代码
notes/final_report.md

至少包含:

text 复制代码
测试环境
原始推理链路
性能瓶颈
每项优化改动
优化前后数据
显存变化
质量对比
失败实验
DINOv2轻量化方案
下一阶段计划

三、两周内的交付标准

完成下面这些,就可以认为任务第一阶段完成:

  1. ML-SHARP 在5070 Ti上稳定运行;
  2. 明确各阶段耗时;
  3. FP32、FP16、BF16有完整对比;
  4. torch.compile有冷启动和热启动数据;
  5. PLY写盘完成至少一次有效优化;
  6. 模型实现常驻服务;
  7. 输出无 NaN、Inf;
  8. PLY可正常加载和渲染;
  9. 有10张固定测试图片;
  10. 有完整Benchmark CSV;
  11. 找到DINOv2和Decoder的连接位置;
  12. 写出ViT-L替换ViT-B需要修改的文件和shape;
  13. 明确项目是否真的存在Diffusion采样循环。

两周内暂时不要做的事情

  • CUDA Kernel开发;
  • SageAttention源码编译;
  • 完整TensorRT转换;
  • INT8量化;
  • ViT-L完整微调;
  • 教师和学生同时在线蒸馏;
  • 从头学习完整DINOv2训练理论;
  • 把所有B站长课程完整看完。

最重要的学习方式是:

text 复制代码
看30~60分钟
→ 写最小实验
→ 回到ML-SHARP定位对应代码
→ 修改
→ 测速
→ 保存结果

而不是连续看六七小时视频。两周后,你的成果应当是一套有源码、有数据、有质量验证、可以回滚的推理优化版本,而不仅仅是一份学习笔记。


高斯泼溅需要的具体学习资料

可以。下面按你上传的知识短板清单重新整理,把每一部分对应的完整B站链接、必学重点、可跳过内容、项目实操任务都列出来。整体目标仍然是:两周内完成 ML-SHARP 第一版推理优化,而不是两周学完全部人工智能理论。

先确定学习优先级

  • P0:必须学完并实操 :PyTorch推理、ViT/DINOv2结构、GPU测速、AMP、Profiler、torch.compile、3D Gaussian和相机几何。
  • P1:完成项目时学习:SVD/EIGH、PLY优化、FastAPI服务化。
  • P2:只做概念与方案:知识蒸馏、ViT-L替换ViT-B、TensorRT。
  • 可选:Diffusion。只有你的代码中确实存在采样循环才学习。

一、PyTorch模型推理与源码阅读

推荐课程

小土堆:PyTorch深度学习快速入门教程

完整链接:

https://www.bilibili.com/video/BV1hE411t7RN/

该课程包含环境、Tensor、Transforms、nn.Module、网络结构、模型保存读取和GPU等内容,共33个选集。(哔哩哔哩)

你需要重点学习

不要从头到尾全看,重点找下面标题:

  1. Tensor基本操作;
  2. Transforms;
  3. nn.Module
  4. 卷积层、池化层、非线性激活;
  5. 现有网络模型的使用及修改;
  6. 模型保存和读取;
  7. GPU训练;
  8. 完整模型验证;
  9. 如何阅读开源项目。

必须掌握这些代码:

python 复制代码
model.eval()

with torch.inference_mode():
    output = model(input_tensor)

以及:

python 复制代码
model.to("cuda")
input_tensor.to("cuda")

model.state_dict()
model.load_state_dict(checkpoint)

还要熟悉图像形状:

text 复制代码
NumPy:H × W × C
PyTorch:B × C × H × W

可以暂时跳过

  • TensorBoard;
  • 完整分类训练流程;
  • 各种损失函数的数学推导;
  • 优化器的详细区别;
  • Dataset、DataLoader高级用法。

对应实操

自己写一个脚本:

text 复制代码
scripts/pytorch_inference_demo.py

完成:

text 复制代码
读取图片
→ NumPy转Tensor
→ HWC转BCHW
→ 放到GPU
→ 模型推理
→ 打印shape、dtype、device
→ 打印显存

建议用时:第1~2天,共5~6小时视频,5~6小时实操。


二、Transformer和Self-Attention

推荐课程

李沐:Transformer论文逐段精读

完整链接:

https://www.bilibili.com/video/BV1pu411o7BE/

视频主要围绕Transformer结构、Self-Attention、多头注意力、残差连接和LayerNorm展开。(哔哩哔哩)

你需要重点学习

重点理解概念,不要求手推全部公式:

  • Token是什么;
  • Embedding是什么;
  • Query、Key、Value是什么;
  • Self-Attention做了什么;
  • Multi-Head Attention为什么有多个头;
  • LayerNorm;
  • 残差连接;
  • Feed Forward Network;
  • Attention为什么可能成为性能瓶颈。

只需要理解这个公式的作用:

text 复制代码
Attention(Q,K,V)
= softmax(QKᵀ / √d) V

重点建立性能直觉:

text 复制代码
Token越多
→ Attention计算越多
→ 显存和耗时越大

可以暂时跳过

  • Decoder自回归生成;
  • Beam Search;
  • NLP翻译任务;
  • Masked Attention详细实现;
  • Transformer训练技巧。

ML-SHARP主要关心视觉编码器,不需要深入语言模型解码。

对应实操

在PyTorch中打印模型结构:

python 复制代码
print(model)

for name, module in model.named_modules():
    print(name, type(module))

找到:

text 复制代码
Attention
LayerNorm
MLP
Transformer Block

建议用时:第3天,视频约1.5小时,实操2小时。


三、Vision Transformer

推荐课程

李沐:ViT论文逐段精读

完整链接:

https://www.bilibili.com/video/BV15P4y137jb/

该视频讲解ViT如何把图片切成Patch、转换为Token,并使用Transformer处理图像。(哔哩哔哩)

你需要重点学习

必须理解下面的链路:

text 复制代码
图片
→ Patch切分
→ Patch Embedding
→ 加位置编码
→ Transformer Blocks
→ Patch Tokens
→ 下游Decoder

重点关注:

  • Patch Size;
  • 输入分辨率;
  • Patch数量;
  • embedding dimension;
  • Transformer层数;
  • Attention head数量;
  • 中间层特征;
  • ViT-S、ViT-B、ViT-L的区别。

例如:

text 复制代码
图片:224 × 224
Patch Size:14 × 14

每边Patch数量:
224 ÷ 14 = 16

总Patch Token:
16 × 16 = 256

当图片尺寸增大时,Token数量会明显增加。

项目中必须回答

打开ML-SHARP源码后,找出:

text 复制代码
输入尺寸是多少?
Patch Size是多少?
embedding维度是多少?
Transformer有多少层?
用了哪些中间层?
Decoder输入维度是多少?

对应实操

为ViT模块注册Hook:

python 复制代码
def print_shape(name):
    def hook(module, inputs, output):
        if isinstance(output, torch.Tensor):
            print(name, output.shape)
    return hook

打印不同Transformer层的输出形状。

建议用时:第3~4天,视频1小时,实操3小时。


四、DINOv2

推荐课程

DINOv2:自监督学习计算机视觉大模型

完整链接:

https://www.bilibili.com/video/BV1jc411J7PY/

该视频介绍DINOv2作为通用视觉特征模型,可用于分割、深度、分类和视觉理解等下游任务。(哔哩哔哩)

你需要重点学习

重点理解:

  • 什么是自监督学习;
  • DINOv2不是普通分类器;
  • DINOv2主要输出通用视觉特征;
  • Patch Token可以给下游Decoder使用;
  • 中间层特征可以同时提供浅层和深层视觉信息;
  • SHARP为什么需要DINOv2特征。

重点掌握这类代码:

python 复制代码
features = backbone.get_intermediate_layers(
    image,
    n=[5, 11, 17, 23],
)

它表示从不同Transformer层取特征。

轻量化必须理解

将ViT-L替换为ViT-B,不只是改模型名称,还会改变:

text 复制代码
Transformer层数
Embedding维度
Attention heads
中间层索引
Decoder输入通道
Checkpoint参数形状

因此:

python 复制代码
encoder_name = "vitb"

通常不能直接完成替换。

对应实操

在ML-SHARP项目目录运行:

bash 复制代码
grep -R "dinov2" -n src
grep -R "get_intermediate_layers" -n src
grep -R "embed_dim" -n src
grep -R "num_heads" -n src

输出一份:

text 复制代码
notes/dinov2_structure.md

建议用时:第4天,视频30~60分钟,源码分析3小时。


五、相机模型、内参和反投影

主推荐课程

空间计算之几何视觉(一):相机投影模型

完整链接:

https://www.bilibili.com/video/BV1RouczvEPu/

内容包含针孔相机模型、相机投影以及相关几何基础。(哔哩哔哩)

补充课程

相机的内参和外参矩阵

完整链接:

https://www.bilibili.com/video/BV1Yd4y1R7En/

这是哥伦比亚大学相机模型与标定系列中的内外参讲解。(哔哩哔哩)

你需要重点学习

只需要掌握:

相机内参

text 复制代码
fx、fy:焦距
cx、cy:主点

内参矩阵:

text 复制代码
[ fx   0  cx ]
[  0  fy  cy ]
[  0   0   1 ]

投影

text 复制代码
三维点
→ 二维像素

反投影

text 复制代码
二维像素 + 深度
→ 三维点

核心公式:

python 复制代码
x = (u - cx) * depth / fx
y = (v - cy) * depth / fy
z = depth

图片缩放

图片Resize以后:

text 复制代码
fx、fy、cx、cy也应按比例缩放

这和ML-SHARP把输入图像处理成固定尺寸直接相关。

可以暂时跳过

  • 张正友标定法完整推导;
  • 双目极线几何;
  • 畸变参数求解;
  • 多相机联合标定;
  • SLAM完整流程。

对应实操

创建:

text 复制代码
scripts/camera_unproject_demo.py

输入一个像素、深度和内参,输出3D坐标。

然后在ML-SHARP中搜索:

bash 复制代码
grep -R "intrinsics" -n src
grep -R "unproject" -n src
grep -R "disparity" -n src

建议用时:第5天,视频1~2小时,实操3小时。


六、3D Gaussian Splatting

主推荐课程

讲人话:3D Gaussian Splatting全解

完整链接:

https://www.bilibili.com/video/BV1zi421v7Dr/

该系列共4部分,依次讲三维Gaussian、投影、颜色以及高性能渲染和机器学习。(哔哩哔哩)

时间紧张时看这个速通系列

3D Gaussian Splatting原理速通(一)

完整链接:

https://www.bilibili.com/video/BV11e411n79b/

这是4集速通系列的第一集,合集还包括球谐函数、参数与渲染、伪代码流程。(哔哩哔哩)

你需要重点学习

每个3D Gaussian通常包含:

text 复制代码
mean:三维中心位置
scale:三个方向的大小
rotation:椭球旋转方向
color:颜色
opacity:透明度

必须理解:

  • Gaussian不是普通点;
  • 它是一个具有形状、方向和透明度的椭球;
  • 协方差矩阵描述椭球的尺度和方向;
  • scale和rotation可以共同构造协方差矩阵;
  • PLY文件用于保存Gaussian参数;
  • 最终渲染会把3D Gaussian投影到图像平面。

可以暂时跳过

  • 球谐函数的高阶推导;
  • CUDA光栅化Kernel;
  • 3DGS完整训练过程;
  • Densification和Pruning训练策略;
  • NeRF与3DGS的大量论文比较。

对应实操

在ML-SHARP中找到:

text 复制代码
mean_vectors
singular_values
quaternions
colors
opacities
save_ply

并记录每个Tensor的:

text 复制代码
shape
dtype
device
min
max
mean

建议用时:第6天,视频1.5~2小时,源码分析3小时。


七、矩阵、特征值、SVD和EIGH

直觉课程

3Blue1Brown:线性代数的本质

完整合集:

https://www.bilibili.com/video/BV1ys411472E/

重点只看:

  • 矩阵与线性变换;
  • 矩阵乘法;
  • 行列式;
  • 基变换;
  • 特征向量与特征值。

该合集包含特征向量和特征值等章节。(哔哩哔哩)

SVD速通课程

动画机器学习:奇异值分解SVD

完整链接:

https://www.bilibili.com/video/BV1Hq4y117VK/

这是一个动画化的SVD直觉讲解。(哔哩哔哩)

你需要重点学习

不要求手算复杂矩阵,只要知道:

  • 矩阵转置;
  • 对称矩阵;
  • 协方差矩阵;
  • 特征值表示不同方向上的尺度;
  • 特征向量表示方向;
  • SVD可以分解一般矩阵;
  • eigh适合对称矩阵;
  • 特征值由于浮点误差可能产生极小负数。

理解这段代码:

python 复制代码
eigenvalues, eigenvectors = torch.linalg.eigh(
    covariance
)

eigenvalues = eigenvalues.clamp_min(1e-12)
scales = torch.sqrt(eigenvalues)

为什么要:

python 复制代码
clamp_min(1e-12)

因为:

text 复制代码
很小的负数
→ sqrt后变为NaN

对应实操

创建随机对称正定矩阵:

python 复制代码
a = torch.randn(3, 3)
cov = a @ a.T

分别运行:

python 复制代码
torch.linalg.svd(cov)
torch.linalg.eigh(cov)

比较输出和耗时。

建议用时:第6~7天,视频1小时,实操2小时。


八、GPU、CUDA和显存

推荐课程

终于有人把GPU、CUDA、cuDNN讲清楚了

完整链接:

https://www.bilibili.com/video/BV15Q4y1i7Bp/

视频重点解释GPU、CUDA和cuDNN之间的关系。(哔哩哔哩)

你需要重点学习

  • CPU与GPU的区别;
  • CUDA是什么;
  • cuDNN是什么;
  • Tensor Core是什么;
  • GPU适合并行计算;
  • CPU与GPU传输有成本;
  • .cpu().cuda()会发生数据传输;
  • CUDA操作通常是异步的;
  • 显存allocated和reserved的区别。

必须会使用:

python 复制代码
torch.cuda.memory_allocated()
torch.cuda.memory_reserved()
torch.cuda.max_memory_allocated()
torch.cuda.reset_peak_memory_stats()

正确测速:

python 复制代码
torch.cuda.synchronize()
start = time.perf_counter()

output = model(input_tensor)

torch.cuda.synchronize()
elapsed = time.perf_counter() - start

对应实操

创建:

text 复制代码
scripts/check_cuda.py

打印:

python 复制代码
torch.__version__
torch.version.cuda
torch.cuda.is_available()
torch.cuda.get_device_name()
torch.cuda.get_device_capability()
torch.cuda.get_arch_list()

你的RTX 5070 Ti还要检查PyTorch架构兼容情况。

建议用时:第7天,视频1小时,实操2小时。


九、FP16、BF16和AMP混合精度

推荐课程

AMP原理:Automatic Mixed Precision自动混合精度

完整链接:

https://www.bilibili.com/video/BV1eW421w7NJ/

该视频讲解FP32、FP16、BF16和PyTorch AMP,并提供了相关代码示例。(哔哩哔哩)

你需要重点学习

  • FP32、FP16、BF16的区别;
  • 为什么低精度可以减少显存;
  • Tensor Core为什么适合低精度;
  • FP16数值范围较小;
  • BF16数值范围更接近FP32;
  • autocast只在指定区域启用混合精度;
  • 推理不需要GradScaler

本项目优先写法:

python 复制代码
model.eval()

with torch.inference_mode():
    with torch.autocast(
        device_type="cuda",
        dtype=torch.float16,
    ):
        output = model(input_tensor)

还要测试:

python 复制代码
dtype=torch.bfloat16

特别注意

模型前向可以使用FP16/BF16,但以下操作建议保留FP32或FP64:

text 复制代码
相机几何
协方差矩阵
SVD
EIGH
四元数转换

对应实操

测试三组:

text 复制代码
FP32
BF16
FP16

记录:

text 复制代码
前向耗时
总耗时
峰值显存
是否NaN
输出PLY是否正常

建议用时:第8天,视频30分钟,实操4小时。


十、PyTorch Profiler性能分析

推荐课程

PyTorch Profiler:服务器性能分析工具

完整链接:

https://www.bilibili.com/video/BV1sr8kznEP7/

视频介绍如何使用Profiler分析PyTorch程序的CPU和CUDA耗时。(哔哩哔哩)

你需要重点学习

Profiler中的核心字段:

  • CPU Time;
  • CUDA Time;
  • Self CPU Time;
  • Self CUDA Time;
  • 调用次数;
  • 输入Shape;
  • 显存占用。

使用方式:

python 复制代码
with torch.profiler.profile(
    activities=[
        torch.profiler.ProfilerActivity.CPU,
        torch.profiler.ProfilerActivity.CUDA,
    ],
    record_shapes=True,
    profile_memory=True,
) as profiler:
    output = model(input_tensor)

查看:

python 复制代码
print(
    profiler.key_averages().table(
        sort_by="self_cuda_time_total",
        row_limit=30,
    )
)

重点搜索:

text 复制代码
scaled_dot_product_attention
flash_attention
matmul
convolution
interpolate
svd
eigh
copy_
to
cpu

对应实操

先把ML-SHARP拆成:

text 复制代码
preprocess
model_forward
unproject
covariance
save_ply

然后只对model_forward使用Profiler。

建议用时:第9天,视频1小时,实操4小时。


十一、torch.compile

推荐课程

清华游凯超:理解、学习与使用PyTorch编译器

完整链接:

https://www.bilibili.com/video/BV14T4y187bN/

内容围绕PyTorch编译器和torch.compile展开。(哔哩哔哩)

你需要重点学习

  • Eager Mode是什么;
  • 图编译是什么;
  • 第一次运行为什么很慢;
  • Warm-up是什么;
  • Graph Break是什么;
  • 动态Shape为什么可能重复编译;
  • defaultreduce-overhead的区别;
  • 为什么不能把文件IO一起compile。

项目中先使用:

python 复制代码
model = torch.compile(
    model,
    mode="default",
    dynamic=False,
)

之后再试:

python 复制代码
model = torch.compile(
    model,
    mode="reduce-overhead",
    dynamic=False,
)

你的5070 Ti 12GB注意事项

reduce-overhead可能为了CUDA Graph缓存更多工作区,所以先测default,再测reduce-overhead

正确测试

text 复制代码
第1次:编译,不计入平均值
第2~3次:预热
第4~13次:正式统计

记录:

text 复制代码
首次耗时
热启动平均值
P50
P95
峰值显存

建议用时:第10天,视频可选择性看1~2小时,实操4小时。


十二、FastAPI模型常驻服务

推荐课程

黑马程序员:FastAPI从入门到实战

完整链接:

https://www.bilibili.com/video/BV1zV2QBtE39/

课程包含FastAPI基础、路由、参数、响应、文件返回、中间件、依赖注入、项目结构和模型部署等内容。(哔哩哔哩)

只看这些章节

重点看:

  1. FastAPI框架简介;
  2. 第一个FastAPI程序;
  3. 路由;
  4. 请求体;
  5. 文件响应;
  6. 异常处理;
  7. 中间件;
  8. 项目结构;
  9. 模型部署相关章节。

不需要看:

  • ORM;
  • 数据库CRUD;
  • 新闻项目;
  • 用户登录;
  • 分页;
  • 数据库模型。

项目中需要掌握

启动时加载一次模型:

python 复制代码
@asynccontextmanager
async def lifespan(app: FastAPI):
    model = load_model()
    runtime["model"] = model
    yield

上传图片:

python 复制代码
@app.post("/predict")
def predict(file: UploadFile):
    ...

返回PLY文件:

python 复制代码
return FileResponse(
    output_path,
    filename="result.ply",
)

GPU服务只开一个worker:

bash 复制代码
uvicorn server:app \
  --host 0.0.0.0 \
  --port 8000 \
  --workers 1

对应实操

完成:

text 复制代码
启动服务
→ 加载模型一次
→ 预热一次
→ 上传图片
→ 推理
→ 返回PLY

建议用时:第11~12天,视频2小时,实操6小时。


十三、知识蒸馏和DINOv2轻量化

推荐课程

工程师视角下的AI知识蒸馏

完整链接:

https://www.bilibili.com/video/BV1ivGRzcES3/

视频介绍教师模型、学生模型以及用大模型指导小模型学习的基本思路。(哔哩哔哩)

你需要重点学习

核心结构:

text 复制代码
教师模型:DINOv2 ViT-L
学生模型:ViT-B或ViT-S

教师模型:

python 复制代码
teacher.eval()

for parameter in teacher.parameters():
    parameter.requires_grad = False

学生模型参与训练。

蒸馏目标可能包括:

text 复制代码
中间视觉特征
深度预测
Gaussian参数
最终渲染结果

损失形式:

python 复制代码
loss = (
    feature_loss
    + depth_loss
    + gaussian_loss
    + render_loss
)

12GB显存下重点

不要让教师和学生同时以高分辨率参与完整反向传播。

推荐:

text 复制代码
第一步:用ViT-L离线生成教师标签
第二步:把教师特征和Gaussian参数保存到磁盘
第三步:训练时只加载ViT-B/ViT-S学生模型

两周内只完成

  • 找出ViT-L输出维度;
  • 选择ViT-B或ViT-S;
  • 设计Adaptor;
  • 找出需要修改的中间层索引;
  • 尝试小模型完成一次forward;
  • 记录Shape mismatch;
  • 写轻量化方案。

两周内不要求完成完整蒸馏训练。

建议用时:第13天,视频1小时,方案和代码验证4小时。


十四、Diffusion扩散模型:仅在代码确实存在时学习

推荐课程

李宏毅:Diffusion Model背后的数学原理

完整链接:

https://www.bilibili.com/video/BV1eg4y1c75G/

视频包括Diffusion Model基本原理和图像生成模型介绍。(哔哩哔哩)

你需要重点学习

只有项目中出现下面代码时才看:

python 复制代码
scheduler.set_timesteps(...)

for timestep in scheduler.timesteps:
    noise_pred = model(sample, timestep)
    sample = scheduler.step(
        noise_pred,
        timestep,
        sample,
    ).prev_sample

重点理解:

  • 正向加噪;
  • 反向去噪;
  • Timestep;
  • Scheduler;
  • DDPM;
  • DDIM;
  • DPM-Solver;
  • 推理采样步数;
  • 采样步数和质量的关系。

先检查项目

bash 复制代码
grep -R "set_timesteps" -n src
grep -R "scheduler.step" -n src
grep -R "num_inference_steps" -n src
grep -R "DDIM\|DPMSolver\|Diffusion" -n src

没有结果就不要花时间学Diffusion。官方ML-SHARP主流程不是传统多步扩散采样。

建议用时:

  • 没有Diffusion:0小时
  • 确实存在Diffusion:第13天额外学习2小时

十五、Git和Linux:按需复习

你本身有后端开发经验,这部分不用系统重学。

Git课程

尚学堂:Git分布式版本控制

完整链接:

https://www.bilibili.com/video/BV16K4y157Gm/

课程包含仓库初始化、提交、分支和团队开发等内容。(哔哩哔哩)

只需要掌握:

bash 复制代码
git checkout -b perf/ml-sharp
git status
git diff
git add .
git commit
git log
git restore

Linux基础课程

黑马Python进阶课程中的Linux部分

完整链接:

https://www.bilibili.com/video/BV1QT4y1N7sS/

该课程前部包含Ubuntu、目录、文件、权限、进程和网络等Linux基础内容。(哔哩哔哩)

只复习:

bash 复制代码
cd
ls
cp
mv
rm
mkdir
grep
find
ps
kill
chmod
nvidia-smi

建议用时:遇到问题再查,不单独安排整天。


两周具体观看与实操安排

天数 视频学习 ML-SHARP实操成果
第1天 小土堆Tensor、Transforms 图片转Tensor,打印shape/dtype/device
第2天 nn.Module、模型加载、GPU 加载视觉模型并完成GPU推理
第3天 Transformer + ViT 找到Attention、Transformer Block
第4天 DINOv2 找到Backbone和中间层特征
第5天 相机模型、内外参 写反投影Demo,找到项目unproject
第6天 3DGS + SVD基础 看懂Gaussian参数和PLY
第7天 GPU/CUDA 跑通ML-SHARP并建立FP32基线
第8天 AMP 完成FP32/BF16/FP16对比
第9天 Profiler 找出真实CPU和GPU瓶颈
第10天 torch.compile 完成Eager/Compile性能对比
第11天 无新增理论 优化PLY写盘
第12天 FastAPI重点章节 建立模型常驻推理服务
第13天 知识蒸馏;必要时Diffusion 完成DINOv2轻量化设计文档
第14天 不看新课程 10张图片×3轮测试并写最终报告

每天的时间比例

text 复制代码
视频:1.5~2小时
最小代码练习:1小时
ML-SHARP实操:3~4小时
实验记录:30分钟

不要连续刷完长视频。采用:

text 复制代码
看一个知识点
→ 写20~50行最小代码
→ 回项目找对应实现
→ 修改
→ 测速
→ 提交Git

两周结束时,你的第一版交付物应包括:

text 复制代码
FP32基线
FP16/BF16优化
torch.compile对比
Profiler分析结果
PLY写盘优化
FastAPI常驻服务
显存与耗时数据
输出质量验证
DINOv2轻量化设计方案
最终性能报告