TinyML

Author

Marcobisky

Published

September 30, 2025

0.1 Hi there!

This is my graduation project titled System-Level Co-Design and AI-EDA of RISC-V Accelerators for TinyML at the Edge under my supervisor Prof. Yun Li. His PhD student Jintao Li also helps me greatly. This is a place where I record my learning journey into TinyML and RISC-V accelerators – from scratch. The contents are actively updating. Some of the content may be too basic or even technically incorrect up to now, but they are, hopefully, informative and motivation-boosting. English documentation will be available soon.

Correctness is the enemy of progress. – Myself

本项目有关的代码主要存放在两个仓库:

0.2 Intended Outcomes

  1. Developing an intelligent co-design framework that integrates RISC-V architecture customization with TinyML workload characteristics to enable joint optimization.

  2. Designing and implementing hardware-accelerated TinyML kernels that are adaptable and efficient for edge computing scenarios.

  3. Exploring a large multi-dimensional design space using automated methods (such as heuristic or evolutionary algorithms) to identify optimal configurations balancing accuracy, energy, and latency.

  4. Advancing the understanding of system-level TinyML accelerator optimization, pushing the boundary beyond traditional manual design methods.

0.3 Motivation 动机

大量应用程序都配备了图像处理的深度学习算法 (如 Animoji), 若想要利用服务器的算力资源, 则每秒至少需要输入 \(30\) 帧图片到网络当中, 对于 ResNet-50 这种小网络, 模型运行时也需要占用 \(3\text{ GB/s}\) 的带宽 [1]. 因此, 需要 将云端的一部分计算任务下放到端设备, 以减轻云端和网络带宽的压力. 然而端设备大多采用嵌入式处理器 —— 嵌入式处理器受到功耗、体积、散热等多方客观因素的限制, 其性能远不如桌面平台. 我们可以利用 FPGA、ASIC 等 低功耗、高能效 的器件, 为相应的应用场景定制该领域所专用的加速器 [2].

0.4 🗓️ Change Logs 更新日志

Date Update Message
2025-09-19 学习 blockchain: Proof (NP hard prob), 创世区块, 签名和加密, 最长链, 51% 攻击, 非对称加密, 哈希函数. 当然也有很多问题没解决. 讨论了 LLM, CNN 和 Transformer 的本质是 pretrained FCNN (通过给 FCNN 加先验的结构信息); DSC, Transformer 中的 \(W_V\) 矩阵 和「注意力 + 全连接」的机制都可以理解为降低了参数量 (自由度), 类比为 \((a+b)^2\)\(a^2 + b^2\) 的关系; 问题: 如何形式化理解张量的指标运算 (mental picture 是单个元素而不是整个 tensor). GNN 是如何工作的? RAG 的具体原理?
2025-09-16 老子雅思 7 分考出来了! (小分: 8/7/7/6.5)
2025-09-14~15 复习强化学习, 学习了 DQN, Q-learning, 独立成功实现了 Tic-tac-toe 的 DQN 实现 (虽然性能不好, 但 from scratch)
2025-09-13 考雅思
2025-09-03~12 复习 IELTS.
2025-09-02 学习了强化学习和 AnalogGYM 框架, 学习了 DSC (= DWC + PWC), Winograd加速算法没看懂 (与 FFT 的本质区别是什么?), 也跟与学长讨论了, 很有意思.
2025-09-01 做了一套 IELTS 题目.
2025-08-16 雅思出分 6.5, 小分 7/6/5.5/6.5, 还得考 lol.
2025-08-13 考雅思
2025-08-09~12 复习 IELTS.
2025-08-08 学习 APB 协议, 发现有时候工程学也需要一点数学思维, 要把每个存在物 (比如总线、decoder、switch hub, etc.) 当作某个抽象观点的特例! 不要背协议, 而是理解协议这样规定的本质原因.
2025-08-05~07 复习 IELTS.
2025-08-04 刷 Chisel 的时候感到很无力, 编程语言的本质到底是什么? 为什么 when() 在 Scala 里面是函数而在 C 语言里面是语句? 一定有一套统一的思维方式来思考所有的编程语言, 使得学某种特定语言的过程相当于把大脑中的这个思维方式实例化. I felt stuck in this path, maybe I need a little bit encouragement. This happens, I know.
2025-08-03 入门 CUDA 编程, 学习 NVIDIA 的 GPU 架构. 也学习了 Transformer 的原理, 加强了对注意力机制的理解.
2025-08-01 按照 汪辰老师的课程, 初步复习了操作系统的 Memory Management, Linker script, Control flow, exceptional control flow, interrupt处理等.
2025-07-30~31 在学习 ysyx 的过程中感到 extremely depressed, 我开始浏览 ysyx 入学之后的学习资料, 发现这些资料存在明显的平行性, 没有必要严格按照顺序来学习. 重新拾起烂尾的 my-riscv 项目, 决定退出依赖 ysyx 的学习方法.
2025-07-29 继续 ysyx 的 E4 (即 PA1), make run 成功运行
2025-07-28 开始 ysyx 的 E4 (即 PA1), 发现 ysyx PA 的思路是自顶向下的
2025-07-27 在 MacOS 和 Ubuntu 上完成了 ysyx 环境的配置, 可同时在两台设备上开发, man 这个命令感觉挺有用的.
2025-07-24~26 通过 HDLBits 刷了一些 verilog 题目.
2025-07-23 报名一生一芯 (ysyx), 准备先造个 CPU 出来, 再来加速 ML.
2025-07-17 准备进行 Vitis HLS 的学习, 初步学习了 YOLO V1 的原理.
2025-07-12 成功将 CFU-playground 的 proj_template 烧到 Arty 开发板上. 认识到开发环境的搭建和理解是一项较大的工程, 但是实际有用的信息并不多, 所以打算并行地学习环境的搭建和 CPU、GPU、Cuda 的知识.
2025-07-11 大致了解了各大 submodule 的功能.
2025-07-10 在 Ubuntu 24.04 和 MacOS 上成功搭建 iCESugar-UP5K 开发环境, 并成功烧录! 完善了教程内容, 建立了 My TinyML Repo 用来存放 iCESugar-UP5K 开发板的例子代码和 ML 加速器的代码.
2025-07-09 在 Ubuntu 24.04 上成功构建 CFU-Playground/proj/proj_template 实例工程. 并且发现 MacOS 上也可以用 Docker 成功生成比特流文件.
2025-07-08 喜提新 Thinkbook, 由于显卡和网卡驱动找不到安装 Debian 失败特别狂躁, Tonic 上报复性狂练 3 小时降 E 大调音阶. 后来安装 Ubuntu 24.04 实体机成功编译. btw, Spark 推荐的 AtlasOS 太好用啦, Synergy 同步 Win, Mac, IOS, Linux 剪切板太方便啦 (就是没有安卓hh)
2025-07-07 发现在 M 芯片 MacOS 上无法安装 linux-64 架构, 改用 Docker 搭建环境成功 … 了一半, 最后因为 Docker 无法连接访问 MacOS 连接的 USB 而构建实例工程失败.
2025-07-06 尝试在 MacOS 上原生搭建和用 Docker 搭建, 无果, 遂改用 Parallel Desktop 上安装 Ubuntu 24.04.
2025-06-29 Initial commit.