Deep Learning Systems Lecture 16 Generative Adversarial Networks
这里回顾dlsys第十六讲,本讲内容是GAN。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
生成对抗训练;
对抗训练作为深度学习模型中的一个模块;
生成对抗训练从分类器到生成器
分类器目标:预测的类别接近标签。
生成器目标:使生成样本的分布“接近”目标数据分布。
定义分布的“距离”
与监督分类设置不同,“目标”不太明显;
为了建立有效的训练机制,我们需要在生成的数据集和真实的数据集之间定义一个“距离”,并用它来驱动训练;
我们真正想要的是:确保生成的样本“看起来真实”;
通过oracle判别器学习生成器
假设我们有一个oracle判别,可以区分真实数据和虚假数据。然后我们需要训练生成器来“愚弄”oracle判别器。我们需要最大化判别器损失:
\max _G\left\{-\mathrm{E}_{z \sim N o i s e} \log (1-D(G(z))\}\right.学习判别器我们没有oracle判别 ...
Deep Learning Systems Lecture 15 Training Large Models
这里回顾dlsys第十五讲,本讲内容是如何训练大模型。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
内存节省技术;
并行和分布式训练;
内存节省技术机器学习系统的要素更大的数据集需要更大的模型容量。这反过来又对计算设备提出了要求。机器学习的成功是所有三个要素的结合。 最近的许多进展要求我们将这三者都推向极限。
今天我们将学习两个主题:
如何减少内存消耗,以便我们可以将更大的模型装入单个设备。
如何扩大训练过程。
回顾:GPU内存层次结构
共享内存:每个核64KB;
GPU内存(全局内存):
RTX3080 10GB;
RTX3090 24GB;
A100 40/80GB;
内存消耗的来源
用于训练的典型计算图的简化视图,权重被省略并隐含在梯度步骤中:
内存消耗的来源:
模型权重;
优化器状态;
中间激活值;
仅用于内存节省推理的技术
我们只需要$O(1)$内存来通过循环通过两个缓冲区来计算$N ...
Deep Learning Systems Lecture 12 GPU Acceleration
这里回顾dlsys第十二讲,本讲内容是GPU加速。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
GPU编程;
案例研究:GPU上的矩阵乘法;
GPU编程GPU vs CPU
GPU和CPU最大的区别在于有很多个核。
GPU编程模式:SIMT
单指令多线程(SIMT);
所有线程执行相同的代码,但可以采用不同的路径;
线程被分组到block中;
同一blocks内的线程共享内存;
blocks被分组到一个启动grid中;
一个内核执行一个grid;
注意:我们将在本讲座中使用CUDA的术语。但通常这些概念在其他gpu编程模型中有对应概念(opencl、sycl、metal)
例子:向量加法void VecAddCPU(float* A, float *B, float* C, int n) {
for (int i = 0; i < n; ++i) {
...
Deep Learning Systems Lecture 11 Hardware Acceleration
这里回顾dlsys第十一讲,本讲内容是硬件加速。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
一般加速技术;
案例研究:矩阵乘法;
一般加速技术机器学习框架中的层
向量化相加两个长度为256的数组:
void vecadd(float* A, float *B, float* C) {
for (int i = 0; i < 64; ++i) {
float4 a = load_float4(A + i*4);
float4 b = load_float4(B + i*4);
float4 c = add_float4(a, b);
store_float4(C + i* 4, c);
}
}
附加要求:内存(A、B、C)需要对齐到128位。
数据布局 ...
Deep Learning Systems Lecture 10 Convolutional operators in deep networks
这里回顾dlsys第十讲,本讲内容是卷积网络。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
深度网络中的卷积运算符;
实用卷积的要素;
微分卷积;
深度网络中的卷积运算符全连接神经网络的问题
到目前为止,我们已经考虑了将输入图像视为向量。
当我们尝试处理更大的图像时,这会产生一个实际问题:256x256 RGB 图像⟹~200K维输入⟹映射到1000维隐藏向量需要200M参数(对于每一层)。
没有捕捉到我们期望在图像中具有的任何“直观”不变性(例如,将图像移动一个像素会导致非常不同的下一层)。
卷积如何“简化”深度网络
卷积结合了两种非常适合处理图像的想法;
要求层与层之间的激活仅以“局部”方式发生,并将隐藏层本身视为空间图像;
在所有空间位置共享权重;
卷积的优势
大幅减少参数数量;
256x256 灰度图像 ⟹ 256x256 单通道隐藏层:从全连接网络中的40亿个参数到3x3卷积中的9个参数;
...
Deep Learning Systems Lecture 9 Normalization and Regularization
这里回顾dlsys第九讲,本讲内容是归一化和正则化。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
归一化;
正则化;
优化、初始化、归一化、正则化的交互;
归一化初始化vs优化假设我们为ReLU网络选择初始化方式为$W_i\sim \mathcal N(0, \frac c n )$,不同的$c$会带来不同的训练结果:
然而,问题更为根本:即使训练成功,初始化时出现的效果/尺度在整个训练过程中都会持续存在:
归一化
既然初始化对于训练非常重要,并且在训练过程中可能会发生变化,不再跨层/网络“一致”。
但请记住,深度网络中的“层”可以是任何计算。
让我们添加层来“修复”激活的规范化,使其成为我们想要的任何值!
Layer normalization第一个想法:让我们标准化(均值零和方差一)每一层的激活函数值,这称为Layer normalization:
\begin{aligned}
\hat{z}_{i+ ...
ECE408 Lecture 26 Course Retrospective
这次回顾ECE408 Lecture 26,这次是最后一讲,课程回顾。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
ECE408回顾:
这个学期我们做了什么?
基本计算模式;
矩阵乘法、卷积、归约、扫描、直方图、稀疏表示;
并行优化;
线程、内存管理、合并、线程发散、任务管理、分析;
编程系统;
CUDA, OpenACC,(OpenCL, DPC++, Hip, OpenMP)
批量同步模型促成成功
在批量同步中,barrier分隔代码的时间区域。 交织/数据共享仅发生在区域内(称为phases);
GPU计算生态系统2021自2007年推出以来,开发人员抽象级别一直在稳步上升,更多繁重的GPU工作由开发GPU的公司完成。
英伟达视角
AMD视角
ECE408 Lecture 23 Alternatives to CUDA
这次回顾ECE408 Lecture 23,这次介绍了CUDA的替代品。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
加速计算不再是问题GPU 供应商包括:
Nvidia;
AMD;
Intel;
Samsung;
Apple;
Qualcomm;
ARM;
CUDA只是计算加速的一种模型计算加速的历史:
OpenGL (1992), DirectX (1995);
GPGPU(2002);
CUDA (2007);
OpenCL (2008);
OpenACC (2012), C++AMP (2013), RenderScript (2013);
Metal (2014), SYCL (2014), Vulkan (2016),ROCm HIP (2016);
MPI、TBB、OpenCV等现有框架适配以提供支持。Caffe、TensorFlow、 ...
ECE408 Lecture 22 Task Concurrency
这次回顾ECE408 Lecture 22,这次介绍了任务并发。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
序列化数据传输至此,我们使用cudaMemcpy的方式序列化数据传输和GPU计算:
支持并发
大多数CUDA设备支持设备overlap;
在设备和主机内存之间执行复制的同时执行内核;
int dev_count;
cudaDeviceProp prop;
cudaGetDeviceCount(&dev_count);
for (int i = 0; i < dev_count; i++) {
cudaGetDeviceProperties(&prop, i);
if (prop.deviceOverlap) …
重叠(流水线)时序
将大向量分成段;
相邻段的传输和计算overlap;
...
ECE408 Lecture 21 GPU as part of the PC Architecture
这次回顾ECE408 Lecture 21,这次介绍GPU作为PC架构的一部分。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
目标
了解将GPU用作协处理器时数据传输对性能的影响;
传统CPU的speeds和feeds;
使用GPU的speeds和feeds;
开发用于现代GPU性能调整的知识库;
回顾:规范的CUDA程序结构
全局变量声明
内核函数;
__global__ void kernelOne(…)
Main () // 主机代码
在设备上分配内存空间;
cudaMalloc(&d_GlblVarPtr, bytes)
将数据从主机传输到设备;
cudaMemcpy(d_GlblVarPtr, h_Gl ...)
执行配置设置;
内核调用;
– kernelOne<<<execution configurat ...
ECE408 Lecture 20 Parallel Sparse Methods II
这次回顾ECE408 Lecture 20,这次继续介绍并行稀疏方法。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
CSR运行时
块性能由最长的行决定。
基于CSR的SpMV
JDS(Jagged Diagonal Sparse)负载均衡内核设计
根据非零个数对行进行降序排序。跟踪原始行号,以便可以正确生成输出向量。
根据长度对行进行排序(正则化)
CSR到JDS转换
并行SpMV/JDS Kernel__global__ void SpMV_JDS(int num_rows, float *data, int *col_index, int *jds_row_ptr, int *jds_row_perm, float *x, float *y) {
int row = blockIdx.x * blockDim.x + thread ...
ECE408 Lecture 19 Parallel Sparse Methods
这次回顾ECE408 Lecture 19,这次介绍了并行稀疏方法。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
目标
学习在并行稀疏方法中压缩输入数据以减少内存带宽消耗的关键技术;
更好地利用片上存储器;
更少的字节传输到片上存储器;
更好地利用全局内存;
挑战:保持规律性;
稀疏矩阵
许多现实世界的系统本质上都是稀疏的;
描述为稀疏矩阵的线性系统;
求解稀疏线性系统
基于稀疏矩阵向量乘法的迭代共轭梯度求解器是一种常用方法;
PDE系统的解可以表述为表示为稀疏矩阵向量乘法的线性运算;
分析和人工智能中的稀疏矩阵
稀疏矩阵-向量乘法(SpMV)
挑战
与密集矩阵向量乘法相比,SpMV;
不规则/非结构化;
从优化技巧、先前讨论的想法中获益甚微;
实现最佳性能的关键;
减少稀疏性(通过去除零);
最大化规律性(通过减少分歧和负载不平衡);
最大 ...