ECE408 Lecture 18 Atomic Operations and Histogramming
这次回顾ECE408 Lecture 18,这次介绍了原子操作和直方图。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
目标
理解原子操作
并行计算中的读取-修改-写入;
并行程序中“临界区”的原始形式;
在CUDA中使用原子操作;
为什么原子操作会降低内存系统的吞吐量;
如何避免某些并行算法中的原子操作;
直方图作为原子操作的示例应用
基本的直方图算法;
私有化;
一种常见模式
多个客户预订机票;
每个客户:
调出飞行座位图;
决定座位;
更新座位图,将座位标记为已占用;
糟糕的结果:多名乘客最终预订了同一个座位;
Read-Modify-Write操作
如果Mem[x]最初为0,那么在线程1和2完成后Mem[x]的值是多少?
每个线程在它们的Old变量中得到什么?
答案可能因数据竞争而有所不同。为了避免数据竞争,我们需要使用原子操作。
分析 ...
Deep Learning Systems Lecture 7 Neural Network Library Abstractions
这里回顾dlsys第七讲,本讲内容是神经网络库抽象。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
编程抽象;
高级模块化库组件;
编程抽象
框架的编程抽象定义了实现、扩展和执行模型计算的常用方法;
虽然设计的选择在看到实际实现之后可能看起来很明显,但了解思考过程很有用,因为:
我们可以了解为什么要这样设计抽象;
以及学习如何设计新的抽象;
案例分析主要从对3个框架进行分析,分别是Caffe 1.0, TensorFlow 1.0以及PyTorch:
Forward和backward层接口(Caffe 1.0)Caffe 1.0:
定义前向计算和后向(梯度)操作,用于cuda-convenet(AlexNet框架):
class Layer:
def forward(bottom, top):
pass
def backward(top,
propagat ...
ECE408 Lecture 17 Parallel Scan Part 2
这次回顾ECE408 Lecture 17,这次介绍了Parallel Scan第二部分。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
目标
掌握并行扫描(前缀和)算法
工作效率与延迟;
Brent-Kung树算法;
分层算法;
Kogge-Stone并行Scan算法回顾回顾Kogge-Stone并行Scan算法:
提高效率
一种常见的并行算法模式:
平衡树;
在输入数据上构建一个平衡二叉树,并将其从root开始遍历;
树不是一种实际的数据结构,而是一种概念模式;
对于scan:
从叶子节点向上遍历到根,在树的内部节点处构建部分和;
root是所有叶子节点的总和;
Brent-Kung并行scan算法Brent-Kung并行scan步骤第一步先计算一些特殊的部分和,称为Scan Step:
第二步,根据第一步的结果再次求和,称为Post- ...
ECE408 Lecture 16 Parallel Scan
这次回顾ECE408 Lecture 16,这次介绍了Parallel Scan。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
Inclusive Scan定义定义:
扫描操作采用二元结合运算符$\oplus$和$n$个元素的数组:
\left[x_0, x_1, \ldots, x_{n-1}\right],并返回前缀和数组:
\left[x_0,\left(x_0 \oplus x_1\right), \ldots,\left(x_0 \oplus x_1 \oplus \ldots \oplus x_{ {n}-1}\right)\right].例子:
如果$\oplus$是加法,那么在数组$[3,1,7,0,4,1,6,3]$上执行scan操作的结果会返回$[3,4,11,11,15,16,22,25]$。
Scan应用例子
假设我们有一块$100 ...
ECE408 Lecture 15 Parallel Computation Patterns Reduction Trees
这次回顾ECE408 Lecture 15,这次介绍了Reduction Trees。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
Amdahl定律Amdahl定律描述一个程序的可优化程度,一个程序分为并行和非并行部分,只有并行部分可以优化:
其中:
$k$是可并行的比例;
$p$是并行的资源;
所以加速比例为$\frac{1}{(1-k)+\left(\frac{k}{p}\right)}$。
Reduction无处不在,往往是并行计算的最后阶段
Reduction将一组输入转化为单个值;
Max, Min, Sum, Product;
基本上,任何满足以下条件的运算符/函数都是Reduction:
满足结合律和交换律;
有幺元,即一个特殊的元素,sum时是0,product时是1;
Partition和Summarize
数据集的常用策略
如 ...
ECE408 Lecture 12 Convolutional Neural Networks
这次回顾ECE408 Lecture 12,这次介绍了卷积神经网络。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
卷积层剖析输入:
$A$个形状为$N_1\times N_1$;
卷积层:
$B$个形状为$K_1\times K_2$的卷积核;
输出:
$A\times B$个输出,形状为$(N_1-K_1+1)\times (N_2-K_2+1)$;
Pooling(降采样)
降采样层
有时内置偏差和非线性;
常见类型
最大值、平均值、L2 范数、加权平均值;
有助于使表示对输入中的大小缩放和平移保持不变;
卷积前向传播
序列版本的代码void convLayer_forward(int B, int M, int C, int H, int W, int K, float* X, float* W, float* Y) { ...
ECE408 Lecture 11 Feed-Forward Networks and Gradient-Based Training
这次回顾ECE408 Lecture 11,这次介绍了前馈神经网络和梯度下降法。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
这一章大部分内容都比较熟悉,这里只回顾为什么要使用CNN做图像分类。
用MLP做图像分类考虑一张$250\times 250$的图像:
输入:将二维图像处理为一维向量;
全连接层太大:
每个节点$250^2=62500$个权重!
大约总共有~4B总权重!
如果层数大于1参数就会更多,并且这样的网络无法处理更大的图像;
总的来说,需要太多的计算和内存开销;
图像处理中传统的特征检测使用:
滤波器,卷积核;
我们可以在神经网络中使用它们吗?
2D卷积
MLP和卷积的对比
MLP层有固定的结构,所以输入/输出的数量是固定的;
卷积支持可变大小的输入(对同一事物的观察)
不同长度的音频;
不同像素的图像;
为什么使用卷积
稀疏 ...
Deep Learning Systems Lecture 6 Fully connected networks and optimization
这里回顾dlsys第六讲,本讲内容是全连接神经网络和优化。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
全连接神经网络;
优化;
初始化;
全连接神经网络现在我们已经涵盖了自动微分的基础知识,我们可以回到深度网络的“标准”形式。一个$L$层全连接网络,又名多层感知机(MLP),现在有一个明确定义:
\begin{aligned} & z_{i+1}=\sigma_i\left(W_i^T z_i+b_i\right), \quad i=1, \ldots, L \\ & h_\theta(x) \equiv z_{L+1} \\ & z_1 \equiv x\end{aligned}其中参数为\theta=\left\{W_{1: L}, b_{1: L}\right\},$\sigma_i(x)$是非线性函数。
矩阵形式和广播的微妙之处让我们考虑迭代的矩阵形式:
Z_{i+1}=\sigma_i\left(Z ...
Deep Learning Systems Lecture 4 Automatic Differentiation
这里回顾dlsys第四讲,本讲内容是自动微分。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
不同微分方法的介绍;
反向模式自动微分;
不同微分方法的介绍微分在机器学习的那个步骤起作用回顾:每个机器学习算法都包含三个不同的元素。计算关于假设类参数的损失函数梯度是机器学习中最常见的操作:
数值微分数值微分是根据定义直接计算梯度:
\frac{\partial f(\theta)}{\partial \theta_i}=\lim _{\epsilon \rightarrow 0} \frac{f\left(\theta+\epsilon e_i\right)-f(\theta)}{\epsilon}一种更精确的近似梯度的方法:
\frac{\partial f(\theta)}{\partial \theta_i}=\frac{f\left(\theta+\epsilon e_i\right)-f\left(\th ...
ECE408 Lecture 10 Introduction to Machine Learning
这次回顾ECE408 Lecture 10,这次介绍了机器学习。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
引子
计算技术的发展是基于这样一个前提,即有一天,计算机器将能够模仿一般的人类智能;
从计算能力的角度来看,摩尔定律推动了智能机器的发展:硬件速度每18个月提高2倍;
然而,软件方面一直是一个令人烦恼的悬而未决的问题;
用软件解决难题(既定方法)使用传统方法解决问题的思路是从算法包到软件然后到问题:
机器学习重新定义了范式
例子:CNN
机器学习
构建逻辑未被人们完全理解的应用程序;
使用标记数据——带有输入值及其所需输出值的数据——来了解逻辑应该是什么;
机器学习任务
分类
输出属于$k$个类别中的哪一个;
例如:物体识别;
回归
预测给定一些输入的数值;
例如:预测明天的温度;
Transcription
将非结构化数据转化 ...
ECE408 Lecture 9 Tiled Convolution Analysis
这次回顾ECE408 Lecture 9,这次介绍了分块卷积分析(Tiled Convolution Analysis)。
课程主页:
https://wiki.illinois.edu/wiki/display/ECE408
搬运视频:
https://www.youtube.com/playlist?list=PL6RdenZrxrw-UKfRL5smPfFFpeqwN3Dsz
GPU内存架构
模板模式
数字处理算法根据某种固定模式更新数组元素,称为模板;
卷积只是其中一个例子;
示例:
除此之外,卷积还可以应用于卷积神经网络。
1D卷积
上图是块1的输出和输入块;
第一行为输入,第二行为输出;
对于$\text{MASK_WIDTH}$为5,每个块加载8 + (5 – 1) = 12个元素(12个内存加载);
$P[8]$使用$N[6],N[7],N[8],N[9],N[10]$;
$P[9]$使用$N[7],N[8],N[9],N[10],N[11]$;
……
$P[15]$使用$N[13],N[14],N[15],N[16],N[17]$;
一共 ...
Deep Learning Systems Lecture 3 Manual Neural Networks and Backprop
这里回顾dlsys第三讲,本讲内容是神经网络和反向传播。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
从线性到非线性假设类;
神经网络;
反向传播(即计算梯度);
从线性到非线性假设类线性假设类的问题回想一下,我们需要一个假设函数来将$\mathbb R^n$中的输入映射到$\mathbb R^k$中的输出,因此我们最初使用线性假设类:
h_\theta(x)=\theta^T x, \quad \theta \in \mathbb{R}^{n \times k}这个分类器本质上形成了输入的$k$个线性函数,然后预测值最大的类,相当于把输入分成每个类对应的$k$个线性区域:
非线性分类边界呢?如果我们的数据不能被一组线性区域分开怎么办?我们想要一些方法通过一组非线性的类边界来分离这些点:
一个想法:将线性分类器应用于数据的某些(可能是更高维度的)特征:
\begin{gathered}
h_\theta(x) ...