XJTU-深度学习工具与平台-2026春-思路梳理
第一章
四种模型:CV\GAN\NLP\RL
计算框架,第一代Caffe,配置文件提供layer级操控,不够灵活
第二代,用DAG描述,分TF和Pytorch
TF是静态图,可以全局优化,代码复杂,效率高,没有中间结果
PT是动态图,边执行边定义,代码简介,不能全局优化
自动求导:将复杂的函数拆分为算子组合。
第二章
定义一个新的Net,必须继承Torch.nn.Module
GoogLenet
Inception,有多个branch,最后在通道维度叠加。
注意要先用1x1降维,padding需要设定以保证维度不变
Resnet
out=out+x
注意两种块,Basic直接卷积,BottleNeck是先降再生减小计算开销。
Torchvison使用
PIL/numpy是在【-255,+255】的,需要ToTensor到0,1
自定义DataSet需要重写三个类,Len、getitem、init
读入用pd.readcsv
第三章
矩阵运算是大部分Net或Layer的基础。
矩阵运算的优化,以A*B为例,对B取转置,并对A、B分快。
CPU:Control Unit和Cache大,ALU相对更少,可以处理复杂的控制逻辑、支持prefetch, jump Branch等逻辑,不擅长处理大量数据。
GPU:ALU很多,Cache和Control相对更少,不能解决复杂逻辑,对稠密数据计算效率高。
GPU矩阵优化:Block级分块=>warp级分快=>Thread级分快
Software Pipling: 在一个device计算时,另一个device开始fetch。
脉动阵列:从上向下灌入数据,从左到右传递数据。
第四章
传统编译器
GNU vs LLVM
GNU:一个编译器->一个target
LLVM: 一个编译器->LLVM IR->一个target
IR保证了编译器的跨平台。
LLVM Middle End的一次Pass是对源程序的完整扫描与优化处理。
AI编译器
把Graph编译为机器码。
相似之处:
- 理念类似
- 优化方式类似
- 软件结构盏类似
AI编译器依赖传统编译器
区别
- IR。AI的IR High Level(部分图); Traditional的是Low Level(汇编)
优化。AI Compiler会做专业领域的优化,如Op Fusion或降精度fp16
前端优化
- 通过图的优化,降低复杂度或计算开销
- 数据流图作为IR,允许任何等价图pass化简
- 与硬件无关
算术表达式化简、公共子表达式消去、死代码消除、常量折叠
图优化:算子融合、布局转换、内存分配
死代码优化: - 通常是因为其他Pass引起的四代码
- 避免执行不必要的操作,减少时间。
- 节省资源分配
- 压缩代码行数,提高可读性
BN:归一化、使得训练更快更稳定
算子融合: - 减少内核启动开销
减少内存读取,提高计算密度
后端优化:
算子优化、循环优化。
第五章
神经网络稀疏化是在资源受限平台部署的前提。
剪枝的好处:- 同等内存下,大稀疏模型精度高于小稠密模型
- 剪枝之后,同体积参数量效果也好与原生模型
- 资源有限时,剪枝是好的压缩方法
可以向硬件支持方向发展
非结构化剪枝
阈值剪枝,不删除神经元、不改变矩阵维度,精度高,难加速,有要求。
存储及计算,两方面受益。
结构化剪枝
删掉某个过滤器,通过L1范数评估重要性。
时间和空间复杂度的减少,取决于n
激活稀疏
Apoz,记0元素占比。接近于1,该剪了
Sbnet,动态的掩码
- 先训练,然后再验证集上获取APOZ
- 修剪神经元
重新训练
梯度稀疏
Distributed同步时,小于阈值的梯度不同步,本地攒着。
量化
核心就是减少bit,用fp8/fp16/三值来表示权重以降低存储计算开销。
优点:- 保持精度
- 节省内存
- 加速计算
节能、减少芯片面积
轻量化网络
卷积分为深度分离卷积+1x1卷积
[!warn]
标准卷积参数量:K^2 *M*N
深度卷积: K^2*M*1+M*N*1^2
运算次数:F^2*Para
仿存: Para+F^2*cishu第六章
仅提高并行处理效率是不够的,串行部分决定理论加速上限。
线性加速比是有可能的。算子内并行
SIMD
算子间并行
模型并行
把模型按layer划分到不同device,但是本质穿行。
流水线并行
注意还是模型并行,每个Device有一部分模型
Gpipe算法,Micro-Batch执行完后统一Backward
PipeDream算法:第一个 split 前向结束立即开始反向数据并行
每个device是完整模型,训练数据切片,交换梯度,用平均值或者和。
两个实现:
Reduce+BroadCast
Reduce-Scatter+All-Gather
法1耗时:
- 中心法,($\alpha+2\frac{S}{B}$)+NSC
- 树递归,$2*\log_{2}(N)*\left( \alpha+\frac{S}{B}+SC\right)$
法2 Ring-Allreduce: - 第k个节点发给下家第k份数据,并接受上家第k-1份数据
- 根据第k-1个数据和自己的k-1数据,发给下家
- N-1次迭代后,每个节点都有一个chunck的最后结果
- 再N-1次迭代,ALL-gather
每个worker的数据量是2*(N-1)*K/N,一手一发
同步SGD和异步SGD
一个能收敛,一个速度快
Torch.Distributed和Horovod
Torch原生:
- 只实现了组网和通信
- 没有数据集分割
- Allreduce需要显式调用
- 开发运行效率低
Horovod: - 专注数据并行
- 支持多框架
- 易用
- 小巧
优点: - 不再依赖torch
- 命令封装好
- 多后端支持
提供提升效率的函数
第七章
Docker:Registry/Image/Container
特色
- 轻量级
- 标准化
- 运行环境一致
- 启动快
- 隔离性
多个image,可以从一个base image加载;多个container可以服用一个image(Copy-on-Write)
景象:静态、只读、类
Container:动态、读写、对象
命令:
FROM 指定基础景象
RUN 运行命令
WORKDIR 指定默认命令位置
COPY 复制到镜像
命名空间(Namespace)的隔离
pid、net、mnt、user
Fairness:公平调度
单资源:MAX-MIN,给最少的分资源
多资源:DRF。给Domain Resource最少的分资源
Affeninty: 拓补分陪
基于Quota——产生碎片
HiveD:优先从High-Level调度资源
FlexBility
弹性:有空余,可以用超过Quota的资源
抢占:没空余,收回一部分资源
被抢占的作业直接失败,checkpoiint之后的丢失
第八章
对抗攻击,加一点小噪声但是还像是原来的图
有约束条件,扰动小于delta
神经网络用非鲁棒的特征辅助识别
有目标:希错到某个结果。
无目标:错了酒OK
对抗布丁:特殊图案,骗过检测器或分类起
被动防御
在不修改模型的情况下找到对抗样本。
特征缩减、平滑、高斯噪声、Resize等
主动防御
拿对抗样本训练,告诉模型错的该怎么分。
不能泛化、有计算开销。
保密
联邦学习:各参与方不上传原始数据,只上传参数、梯度或模型更新。
同态加密允许服务器直接在密文上算,解密后的结果等价于明文计算结果。
伦理
偏见、假新闻等。