MIT 6.5940 EfficientML 第四讲学习笔记

本讲延续上一讲继续介绍了两种确定剪枝比例的算法:灵敏度分析和强化学习。此外还介绍了为稀疏网络提供支持的硬件加速器,包括 EIE、NVIDIA Tensor Core、TorchSparse 等。 ...

发表于11月11日 · 更新于11月12日 · 共2293字

MIT 6.824 Distributed Systems Spring 2023 第二讲学习笔记

MIT 6.824 Distributed Systems 第二讲学习笔记,包括 Go 语言和并发编程的简单介绍,以及对 RPC 和故障情况下的 RPC 语义的说明。 Lecture 2: RPC and Threads 为什么选择 Go 语言 对于线程和 RPC 的良好支持 拥有垃圾回收机制 类型安全 简单 可以编译 并行编程入门 在 Go 中,线程被称为 go routine,线程具有独立的 PC、栈和寄存器。线程之间共享内存地址,处于同一片内存空间内。 ...

发表于11月10日 · 更新于11月10日 · 共842字

MIT 6.5940 EfficientML 第三讲学习笔记

MIT 6.5940 EfficientML 第三讲学习笔记,主要介绍剪枝的定义、效果和粗细程度,并详细介绍了多种剪枝标准。 Lecture 3: Pruning and sparsity 剪枝和稀疏性 剪枝的动机 在上一讲提到,内存操作的代价相当昂贵,因此为了加速模型的运行,一个思路就是减少模型中一切内存的占用,包括减小模型大小、减小激活层大小和数量。 ...

发表于11月9日 · 更新于11月10日 · 共1622字

MIT 6.5940 EfficientML 第二讲学习笔记

如无另外说明,本文图片截取自 EfficientML 课程幻灯片。 Lecture 2: Basics of neural networks 神经网络基础 神经网络 基本术语 如下图所示,我们使用术语 Synapses(突触?)、权重、参数来指代网络中的参数,使用术语神经元、特征、激活层来指代网络中每一层的计算结果。 模型的宽度指的是隐藏层的维度,对于相同的参数量,宽而浅的模型相比窄而深的模型计算效率更高,因为其核函数调用次数更少,并且能够充分进行并行计算。然而后者在准确率上往往表现得更好,这需要进行折中。 ...

发表于11月5日 · 更新于11月10日 · 共952字

运算符优先级解析算法之优先级爬升法——算法原理与实现

在 LLVM 的官方入门教程 My First Language Frontend with LLVM Tutorial 的第二章构造 AST 时涉及到了对运算符优先级解析的内容,使用的算法为 优先级爬升法。尽管教程开篇称“不需要编译原理前置预备知识”,但直接理解代码仍有点吃力,本文为我个人对此方法的理解,难免存在错误,欢迎指正。 算法原理 约定和前置知识 在优先级爬升法中,中缀表达式被分解为主表达式(primary expression)和运算符(operator),例如在表达式 a+b*c-d 中,主表达式为 ['a', 'b', 'c', 'd'],运算符包括 ['+', '*', '-'],每个运算符都有与之对应的优先级和结合性,优先级使用正整数表示相对大小,四则运算中乘除优先级高于加减,均为左结合。在本例中,约定加减的优先级为 10,乘除的为 20。 ...

发表于10月29日 · 更新于10月30日 · 共2196字

Programming Massively Parallel Processors A Hands-on Approach 4th Edition 学习笔记 Part 2

若无另外声明,本文图片均截取自原书。 Chapter 07: Convolution 卷积 本章主要介绍 2D 卷积实现,从朴素版本开始,分别使用常量内存、分块共享内存和 cache 技术依次进行优化。 7.1 Background 背景 卷积的定义此处不再赘述,简单来说就是对某个元素及其相邻元素进行加权求和。 ...

发表于10月10日 · 更新于10月24日 · 共10662字

2d 卷积梯度推导与实现

符号说明 $$ \begin{align*} X &: 卷积输入,\text{shape} 为[b,h,w,c_{in}]\\ W &: 卷积核,\text{shape}为[a,a,c_{in},c_{out}]\\ s &: 步长\\ f &: 卷积结果,\text{shape}为[b,(h-k)/s+1,(w-k)/s+1,c_{out}]\\ loss &: 损失函数,loss = g(f) \end{align*} $$ 约定,所有张量下标从 0 开始。 ...

发表于9月11日 · 更新于9月14日 · 共2018字

常用软件换源和代理配置方法

本文记录了 Windows 和 Linux 平台上常用软件和开发工具的代理配置方法,镜像源优先使用中科大源,代理默认本地代理,端口号为 7890。 Windows Winget winget 使用中科大镜像 1,需要管理员权限: 1 2 winget source remove winget winget source add winget https://mirrors.ustc.edu.cn/winget-source --trust-level trusted git 1 2 git config --global https.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 WSL wsl 的配置文件默认路径为 %userprofile/.wslconfig,修改该文件为以下内容,就可以在 wsl 中使用 Windows 代理。 ...

发表于8月31日 · 更新于9月3日 · 共396字

在VSCode中对CUDA和Python代码进行联合调试

在 cmu10414 hw3 的最后实现矩阵乘法的算子的时候靠肉眼和 printf 实在是调不通,研究了一下怎么在 VSCode 中联合调试 CUDA 和 Python 代码,特此记录。 项目准备 原项目中将 CUDA 代码编译为 so 动态链接库供 Python 调用,使用 cmake 进行构建。这里我们来构建一个最小样例进行调试。 ...

发表于8月24日 · 更新于8月24日 · 共1588字

Programming Massively Parallel Processors A Hands-on Approach 4th Edition 学习笔记 Part 1

本文为Programming Massively Parallel Processors A Hands-on Approach 4th Edition(中文名:大规模并行处理器编程实战)第一部分学习笔记,包括全书前六章。 全书第一部分主要内容有:CUDA 架构、CUDA C 编程入门、CUDA 优化技术简介。 ...

发表于8月12日 · 更新于10月10日 · 共12248字