研究高斯泼贱算法需要掌握的知识
结合已有的 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.Module和forward();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
任务:
- 检查 RTX 5070 Ti 的 CUDA;
- 安装项目依赖;
- 跑一张图片;
- 跑一个图片目录;
- 保存 PLY;
- 记录原始总耗时和显存。
创建:
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轻量化最小验证
两周内不做完整蒸馏,只完成"结构可行性实验"。
任务:
- 列出 ViT-L 输出 shape;
- 找到 Decoder 输入通道;
- 设计 ViT-B/ViT-S 替换表;
- 增加 adaptor 的设计;
- 尝试创建小模型并执行一次 forward;
- 记录所有 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轻量化方案
下一阶段计划
三、两周内的交付标准
完成下面这些,就可以认为任务第一阶段完成:
- ML-SHARP 在5070 Ti上稳定运行;
- 明确各阶段耗时;
- FP32、FP16、BF16有完整对比;
torch.compile有冷启动和热启动数据;- PLY写盘完成至少一次有效优化;
- 模型实现常驻服务;
- 输出无 NaN、Inf;
- PLY可正常加载和渲染;
- 有10张固定测试图片;
- 有完整Benchmark CSV;
- 找到DINOv2和Decoder的连接位置;
- 写出ViT-L替换ViT-B需要修改的文件和shape;
- 明确项目是否真的存在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个选集。(哔哩哔哩)
你需要重点学习
不要从头到尾全看,重点找下面标题:
- Tensor基本操作;
- Transforms;
nn.Module;- 卷积层、池化层、非线性激活;
- 现有网络模型的使用及修改;
- 模型保存和读取;
- GPU训练;
- 完整模型验证;
- 如何阅读开源项目。
必须掌握这些代码:
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为什么可能重复编译;
default、reduce-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基础、路由、参数、响应、文件返回、中间件、依赖注入、项目结构和模型部署等内容。(哔哩哔哩)
只看这些章节
重点看:
- FastAPI框架简介;
- 第一个FastAPI程序;
- 路由;
- 请求体;
- 文件响应;
- 异常处理;
- 中间件;
- 项目结构;
- 模型部署相关章节。
不需要看:
- 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轻量化设计方案
最终性能报告