CMU10-414 Assigenment

CMU 10-414 Assignments 实验笔记 前言 本文记录了完成《CMU 10-414/714 Deep Learning System》配套 Assignments 的过程和对应笔记。共有 6 个 hw,循序渐进地从头实现了一个深度学习框架,并利用搭建 DL 中厂常见的网络模型,包括 CNN、RNN、Transformer 等。 环境为 Ubuntu 24 @ WSL2。 由于官方自动评分系统目前不再接受非选课学生注册,因此本代码仅保证能够通过已有测试样例。 资源存档 源码来自官方:Assignments 所有代码均上传至 cmu10-414-assignments: cmu10-414-assignments,如官网撤包,可通过 git 回滚获取原始代码。 hw0 第一个 homework 共需完成 7 个函数,第一个很简单,用于熟悉评测系统,直接从第二个函数开始。 parse_mnist 这个函数签名为:parse_mnist(image_filename, label_filename),用于读取 MNIST 手写数据集。官网 对数据集格式有详细介绍,直接下拉到 FILE FORMATS FOR THE MNIST DATABASE 这部分即可。 整个数据集分为训练集和测试集,包括数字图像和标签。标签文件内前 8Byte 记录了 magic number 和 number of items,之后按照每个样本占 1Byte 的格式组织。图像文件内前 16Byte 记录了非图像数据,之后按照行优先的顺序按照每个像素占 1Byte 的格式以此排布,每个图片共有 28×28 个像素点。 具体实现中,使用 gzip 库按字节读取数据文件,注意整个数据集需要进行标准化,即将每个像素的灰度值除以 255。完整实现为: ...

January 23, 2025 · 69 min · 14672 words · Me

CMU10-414 lecture

《CMU 10-414 deep learning system》学习笔记 写在最前面 从 2024-04-28 到 2024-09-08,历时四个多月,总算把 DLSys 学完了。这门课的一些收获: 自动微分理论知识和在实践过程中衍生的包括计算图等知识 系统学习了 ML 中几个基本模型和组件 Tensor 的 strides 相关内容 基础 CUDA 编程 个人认为这门课一些没达到我预期的地方: CUDA 编程的内容太浅 后续讲 CNN、RNN、Transformer 的部分没必要,可以继续深入 CUDA 或者压缩课时 本门课程的核心内容在 Lecture 015,对应的 homework 是 hw03,后面的内容没有时间可以跳过。 ps:全文章两万余字,Chrome 渲染图片时可能会很卡,建议使用 Microsoft Edge 浏览。 Lecture 1: Introduction and Logistics 课程的目标 本课程的目标是学习现代深度学习系统,了解包括自动微分、神经网络架构、优化以及 GPU 上的高效操作在内的技术的底层原理。作为实践,本课程将实现一个 needle(deep learning library)库,类似 PyTorch。 为什么学习深度学习系统? 为什么学习?深度学习这一概念很早就存在了,但直到 PyTorch、TensorFlow 此类现代深度学习框架发布,深度学习才开始迅速发展。简单易用的自动差分库是深度学习发展的最大动力。 除了使用这些库,我们为什么还要学习深度学习系统? 为了构建深度学习系统 如果想要从事深度学习系统的开发,那毫无疑问得先学习它。目前深度学习框架并没完全成熟,还有很多开发新功能,乃至新的框架的机会。 为了能够更高效地使用现有系统 了解现有系统的内部实现,可以帮助我们写出更加高效的深度学习代码。如果想要提高自定义算子的效率,那必须先了解相关操作是如何实现的。 深度学习系统本身就很有趣 尽管这个系统看上去很复杂,但是其核心算法的原理确实相当简单的。两千行左右的代码,就可以写出一个深度学习库。 预备知识 systems programming 线性代数 其他数学知识:计算、概率、简单的证明 Python 和 C++ 经验 机器学习的相关经验 Lecture 2: ML Refresher & Softmax Regression 机器学习基础 深度学习是由数据驱动的,所谓数据驱动,这意味着当我们想要写一个用于识别手写数字的模型时,我们关注的不是某个数字形状上有什么特点,如何通过编程识别该特点,而是直接将数据集喂给模型,模型自动训练并识别数字类别。 ...

January 23, 2025 · 18 min · 3670 words · Me