Transformer for Vision (ViT)

Contributions of ViT include aligning language with vision, thus enabling the era of VLM and VLA.

Introduction to AI Agents

Finally, we have reach the era of AI agents, but that's definitely not the end of the story. To be honest, I don't think agent researches are even "researches". Most agent-related works don't dive into underlying principles, but just random and boring findings on the bare surface of LLMs. It's more like "engineering tricks and praying for god to make it work"...

Introduction to RAG

Along the thread of development of AI Agents, RAG sits between naive LLM and current AI Agent hypering harness engineering.

LLM Fundamental Knowledge

Discuss LLM fundamental knowledge in the context of AI Agents. This article is more like an overview/timeline. This article is also based on COMP3520 (2025-26 Spring) materials

Bank and Bank Conflict in GPU Programming

Introduction to Streaming Multiprocessors

Brief introduce streaming multiprocessors and explain what happens when a kernel is issued from the hardwares' view.

An Introduction to AscendNPU IR

Introduces AscendNPU IR and its architecture.

Quick Meson.Build Reference

meson.build is a new C++ project management framework that have support for external libraries. But with a very bad documentation...

zig PL: basic grammar

Programming / zig

Tucker Decomposition

A technique that is commonly used in LLM compression, as well as data mining.

Abel Summation

Abel Summation is useful in convergence.

ST Monad in Haskell

The ST monad allows programmer to write more efficient programs with internal mutable memory.

Programming / Haskell

Justice is Geometric

AEON.CO essay.

Managing Modules in Haskell

Managing modules at a production level in Haskell with Cabal or Stack.

Programming / Haskell

Generalized Algebraic Datatypes

Advanced topic: GADT in Haskell, it was also called Phantom Types

Programming / Haskell

Roofline Model & Optimization Roadmaps

Roofline model is a theoretical model to analyze whether a kernel is bounded by computation or memory.

Gluon: Linear Layout and Improvement of Triton

OpenAI released tool recently, built on Triton to fit Blackwell's warp-based execution model.

Avalanche Protocol for Blockchain

Avalanche is a protocol for Blockchain, and we may learn about L1 Design from Avalanche.

Differential Privacy

联邦学习领域中一种保护隐私的理论

Records While Testing on SWE-Bench

Just a simple diary on running swe-bench, a classic agentic task benchmark.

2025 ICPC AsiaEC Shanghai

D 我们直接枚举 3n3^n3n 个 mask (i.e., 0,1,?0,1,\texttt{?}0,1,?) 考虑 mask 的第 nnn 位,如果是 0,10,10,1,那么剩下的其实就是大小为 n−1n-1n−1 的一个子问题;比较麻烦的是...

Profiling CUDA Kernels in PyTorch

Learn (1) integrate CUDA kernels into PyTorch (2) profiling CUDA kernels in PyTorch

Divide and Conquer Reduction with CUDA

CUDA 编程中的分治规约算法.

CRTP: Static Polymorphism in C++

C++ 的 CRTP 模式可以实现静态多态.

Function Calling, Tools, MCP and Skills

简单讲解 Function Calling, Tools, MCP 和 Skills 的区别

Skill Loading in Claude Code

简单剖析一下 Agent 里 Skill 是如何加载的

Agent Memory

Design of Claude Code (1)

Agent Design & Agent Loop

现代的 Agent 如 Claude Code, Codex 都是基于这个简单的 Loop 一步一步添加 Complexity 和 Functionality.进一步而言,Agent 都可以被分解为 Memory + Planning + Tool Use + Interaction.

Java RMI Overview

Java RMI is Java's built-in framework for RPC.

Programming / Java

RISC-V 汇编简单梳理

简单记录一下 RISC-V 汇编

Design Pattern: Snapshot

Snapshot 可以在不暴露对象实现细节的情况下,保存和恢复对象之前的状态.

Design Pattern

Byzantine Fault Tolerance

Byzantine Fault Tolerance 是区块链技术里常用的共识协议.

Rust Async Programming and Coroutine

无论是线程级还是进程级的并发,开销都很大. Non-Blocking I/O 在 IO 密集型任务中,大部分线程处于阻塞状态,占用内存和 CPU 资源.所以一个 straightforward 方法就是少开点线程,用少量线程处理大量任务:当 sock...

[Paper] SplitCom

Challenges Observation Methodology Similarity-Aware Activation Reuse Adaptive Similarity Threshold Control Dimensiona...

Context Switch

What is Context Switch Execution Flow and Context 我们先看什么是执行流 execution flow,execution flow 是一个抽象的概括,包含两个维度:CPU 寄存器中的值随着时间而变化...

RWLock 读写锁

三种读写锁的策略 读优先 写优先 公平/FIFO

SpinLock and the Idea of LockGuard

Spin Lock 自旋锁 原子操作只能保护单个变量,保护多个数据就需要一把锁.自旋锁的机制就是拿不到锁就原地转圈等待,不进内核.我们需要用 UnsafeCell<T> 来包裹数据,唯一合法的内部可变性的来源,允许通过 &self...

Atomic Operations and Locks

Atomic Operations Compare-and-Swap 操作 先假设没人跟我抢,那么我先拿到旧值,等我计算出新值后,再检查现在的值是不是和我拿到的旧值相等:如果不相等,说明有人抢数据了,那么我就重新试一遍;否则说明没人跟我抢,或者没抢...

Rust no_std 开发

简单介绍一下 syscall 调用机制,以及 Rust 里调用 syscall 的方法.手写 Heap Allocator 分配算法,Handle Table 的简单介绍.

Data Center for AI

How Do Computation Power Scale? Scale-up: 通过增加单节点的算力或者资源提升整体性能 Scale-out: 增加更多节点.但是需要搭配高速网络支撑 Scale-across: 通过跨越多个数据中心或者地理位...

Behavioural Design Pattern: Template Method

当算法步骤流程不变而只需要修改其中的几个步骤时,我们可以用模板方法模式,将流程抽象为不可重写的模板方法,在子类里重写步骤.

Design Pattern

Behavioural Design Pattern: Strategy

Strategy 行为模式简单来说,就是将 framework 中的一块具体板块拆出来,通过接口,使得 framework 可以方便地替换这个板块.

Design Pattern

大模型基础设施集群与通信概述

从单机单卡、单机多卡进化到多机多卡,简单谈一谈 GPU 之间的通信技术、相应的硬件技术、互联技术

Codeforces Round 1088

做了 5 题,rank 789

PyTorch FX 框架

PyTorch 在 1.8 版本引入的图变换工具,允许开发者直接操作计算图.在 2.0 版本后被 torch.compile 取代

PyTorch FX IR

PyTorch 在 1.8 版本引入的 Python 层 IR.与之配套的,还引入了图变换工具,可以直接操作计算图,以图的形式表达和转换模型.这里我们主要提及 PyTorch FX IR

PyTorch v2: TorchDynamo

TorchDynamo 是 PyTorch 2.0 推出的 torch.compile 优化框架中前端部分,负责捕获 Python 代码的解释器级别 tracing,并利用 torch.fx IR 构建静态图

PyTorch TorchInductor

TorchInductor 对前端 (TorchDynamo) 传回来的 Tensor Graph 做计算图层面的优化

AtCoder Beginner Contest 450

ABC450 Solutions

CUDA Multiple GPU

1. Explicit Cross GPU Memcpy + Per-Device Operation Use DMA for P2P data transmission, otherwise use CPU for hopping. cudaS...

CUDA Data Transmission

Async Memory Move cudaMemcpy(), cudaMalloc() are explicitly synchronized. To make them async, use cudaMallocAsync(), cudaMem...

CUDA Multi Streaming

Stream is like a FIFO queue, tasks in the same stream will be executed sequentially. By default, CUDA executes kernels in def...

Latency Hiding: CUDA Async Pipeline Execution

After cuda kernel issuance, it returns immediately and host continues to execute, i.e., device and host executions are async....

存算重叠:双缓冲 (Double Buffering) 与多级流水线 (pipelining)

可以并行的条件?计算单元和访存单元是独立的硬件 Double Buffering: 设置两个相同的 SMem Buffer,用线程束特化,不同的 warp 负责不同的任务,e.g. 前一半 warp 负责计算,后一半 warp 负责存取. Late...

cuda 常用官方库

算子性能调优的话,block size 也是可以进行调优的,包括 kernel 实现的选择. cuDNN cuBLAS, cuBLASXt, cuBLASLt CUB 底层并行算法原语库,提供高效的 thread-level, wrap-level...

Rust: Multi-Processing

Rust 中的多进程编程

Concurrency in OS: Instruction Reordering & Memory Model

Go beyond concurrency programming, this article dives deeper into OS to discuss about concurrency related issues.

Rust: 并发编程

通过练习学一点 Rust 小知识,包含基础的线程创建、Arc 指针的运用、mpsc 的使用

Tuning Technique

根据算法和硬件进行自动搜索,选择最优的参数配置,以最大化程序效率

.pth Model Format of PyTorch

随笔记一记 PyTorch 里 .pth 格式模型的数据布局

Sage Attention v1,v2,v3 代码梳理 (2): SA 的 CUDA 实现

直面深渊,,,

[Paper] HO-SFL: Hybrid-Order Split Federated Learning with BP-Free Client and Dimension-Free Aggregation

隶属于 SFL 的衍生方法,主要结合了 Zeroth-order 训练方法,在 SFL 的背景下,在 client-side 使用 zeroth-order optimization 以及在 server-side 使用 backprop 进行训练,并为其提供理论支持

ReAct Agent 框架

在 ReAct 之前,Agent 方面的研究基本上都是純粹 reasoning 或者純粹 action.ReAct 框架的貢獻就在於將 reasoning 和 action 結合起來,並依此循環迭代.

单例模式 (Singleton)

单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。

Design Pattern

Git Snippets: hard reset + soft reset + merge 清理复杂历史

如果没有 AI 帮我清理 commit,感觉就会越拉越大(

Git Snippets: 本地合并上游分支

首先先将上游仓库添加到 git remote 中 1git remote add upstream [repo_url] 接着 fetch 上游仓库的代码和分支 1git fetch upstream 假设我想将本地分支 A 和原仓库分支 B 进行合...

NVIDIA GPU 大学习之 Tensor Core

Tensor Core 是专门用于高效执行混合精度的矩阵乘累加运算的,从 Volta 架构开始支持.

CUDA 算子优化:Warp Divergence

如果同一个 warp 内线程执行的操作不一样,GPU 就必须串行化执行所有分支路径. NCU 指标 Source Page > Avg. Predicated-On Threads Executed 查看 PTX,发现 bra 分支跳转占了很...

CUDA 算子优化:ILP

stall: 空闲 TLP: 增大 per-block thread count TLP = 每个 SM 更多线程,每个线程资源更少 ILP = 每个 SM 更少线程,每个线程资源更多 Dual Issue: 两条指令必须独立类型且无资源冲突 AoS...

CUDA 算子优化:微指令调优

#pragma unroll,减少循环控制的开销,如条件判断、分支跳转、计数器更新;提高指令级并行. __builtin_assume(cond) 向编译器断言表达式 cond 在此时为 true,编译器可能启用特定优化 __restrict__ 应...

CUDA 算子优化:PTX

CUDA 算子优化:量化

量化也可以用于算子优化.基本上就是精度与速度/吞吐之间的权衡

Design Pattern: Factory Method

工厂模式,一种用于创建对象的范式

Design Pattern

ninetoothed: CodeGenerator workflow

InfiniTensor 九齿项目梳理.CodeGenerator 是在 Python AST 上进行分析和优化,再转换成 Triton 代码

Rust Iterators

Rust Trait (3): TryFrom, TryInto

Rust 中表示类型转换可能失败的 trait

ninetoothed 项目整理

ninetoothed 是搭建在 Triton 上的 DSL,相当于是在 Triton 上再搭了一层抽象层.这篇文章简单分析一下 ninetoothed

Rust STL (2): Vector

Rust 内置库 STL 提供的动态数组

Rust STL (1): HashMap

Rust 内置标准库中的哈希表

Rust Trait (2): From, Into

与 Type Conversion 相关的 trait

Rust Trait (1): AsRef, AsMut

AsRef<T> 是一个通用的 Trait,用于从某种类型“借用”一个引用,U: AsRef<T> 表示 U 类型可以转换成 &T.例如,AsRef<str> 可以接收 str, String 类型,并转换...

LLM Inference (1): Chat Server 与流式输出

以 llaisys 项目为例,简单展开一下如何实现推理系统的应用层组件 —— Chat Server.我们一点一点展开推理系统的这些组件该怎么实现

gflags 简易指南:C++ 命令行参数解析库

模型训练框架:Model Checkpoints

做 InfiniTrain 项目时的笔记,这篇笔记是 Checkpoint 相关的方向

分布式训练

数据并行 将训练数据进行切分 梯度聚合 Param Server All-Reduce 模型并行 将大模型的权重进行切分

PyTorch Extension: 算子集成

用 PyTorch 的 Cpp/CUDA Extension 接口,开发 CUDA 算子并接入 PyTorch.做 Attention 算子方向研究的时候会很有用,因为不仅需要用 PyTorch 做 benchmark,还要集成到 PyTorch 里便于 production

Sage Attention v1,v2,v3 代码梳理 (1):INT8 Per-Block Quant Kernel

我承认看到一坨 cuda 源文件平铺在 csrc/ 文件夹下的时候,我崩溃了

Bank Conflict

Checking Bank Conflict in NCU NCU -> Source -> L1 Wavefronts Shared Excessive NCU -> Details -> Memory Workload...

GPU Parallelism: PTX

使用 PTX 可以对 cuda 算子进行极致的优化

Memory Alignment & Coalescing

和计算机里关于缓存类似,在读取字节时,GPU 的全局内存会同时缓存临近的数据,放入更快的 L2 Cache

SIMD 优化

Nsight Compute 简易指南

Stall Sampling -> Lg Throttle => Warp waiting due to local/global memory access

cuda-gdb 简易指南

使用 cuda-gdb 对 cuda 程序进行排错

CUDA 查询设备信息

我们可以用 cudaDeviceProp() 来获取设备信息,例如最多支持的线程数量,这样,我们可以在代码里动态调整线程数量.

CUDA Technique: Grid-Strided Loop

Nsight Systems 简易指南

1nsys profile -t cuda,nvtx,osrt -f true -o stream ./stream Stats System View

CUDA 编译流程

GPU Architecture for CUDA

线程模型 NVIDIA GPU 是 SIMT (Single Instruction Multiple Thread) 模型,每一个指令可以被多个线程执行. 从底层的执行模型来讲,GPU 对线程的组织分为三层: Grid, a collectio...

CUDA Optimization: Swizzling

Swizzling 技术用于解决 CUDA 并行编程中 Bank Conflict 的问题.

CUDA Kernel: ArgMax

用 CUDA 编写 ArgMax 算子,加深理解

AI Infra Engineering: Abstraction

底层硬件抽象:设备、运行时、存储 Device 抽象层:向上提供统一的硬件接口 将 Device/Runtime 抽象是 AI Infra 工程里非常常见的步骤,因为通常来说,我们的 AI Infra 需要支持不同的后端,如 Intel CPU,...

Git Snippets: 合并 Commits

通过合并 Commits 让提交记录更加简洁

InfiniTensor AI Compiler v2.0 整理:GraphBuilder

GraphBuilder 是 AI Compiler 框架中最重要的东西,连接前端的语法和后端的计算引擎,将前端框架的操作转换为底层的、可执行的计算图表示.这篇笔记通过 InfiniTensor 框架来理解一下 AI Compiler 的通常方案

Raft Consensus Protocol

Motivation of Consensus Raft: State Machine

[Paper] Merge Then Compress

对于 pretrained MoE 模型,通过将每一层的 Experts 合并起来,达到减少显存占用、加速推理的同时不掉精度

InfiniTensor AI Compiler v2.0 整理

InfiniTensor_v2.0 是一个支持多硬件后端的张量计算与深度学习推理框架,特别关注于动态形状 (Dynamic Shape) 支持和与前端框架(如 PyTorch)的无缝集成。

Python 与 C/C++ 联合开发(二):Pybind11

恰好在做 InfiniTensor AI Compiler 方向作业的时候,看到 InfiniTensor 是使用 Pybind11 为 Python 提供 C++ 接口的.那么就顺便记录一下吧

NumPy 与 PyTorch 在数据格式上的互转与二进制存储

当我们对模型做低比特量化的时候,总是不可避免地需要将奇奇怪怪的浮点数格式或者整数格式 dump 为二进制文件,方便 C/C++/CUDA 进行读取.PyTorch 可以方便地进行计算,而 NumPy 可以方便地写入二进制进行存储——但很可惜,对于 PyTorch 的一些数据格式,NumPy 是不支持的,所以需要用奇奇怪怪的方法绕过……

NF4 Dequant CUDA Kernel 优化过程 (1)

InfiniTensor CUDA 方向项目之 NF4 反量化算子,算是记录一下 CUDA Kernel 的实现思路与优化历程(然而大部分是 AI 写的)。既然是第一集,就先简单提一下项目背景什么的。

Rust 的智能指针

包括 Box, Rc, Arc, Cow 等等常用指针

Git Snippets: 先 clone 后下载 submodule

有时不清楚项目是否有 submodule 的情况下,可以选择先 clone 下来,再 clone submodules

Git Snippets: 将原仓库下的新分支同步到自己 fork 的仓库中

其实算是 git 里非常常见的操作了

在 ArchLinux 上从零构建 RISC-V Linux 并使用 QEMU 进行模拟

确实是很实践的项目,虽然大多数时候还是不太懂操作的具体含义,不过还是边看边学嘛

Bash Associative Array (Dictionary)

本质就是字典,怎么起这么复杂的名字.jpg

Programming / Bash

Rust: Crate & Package & Module

PyTorch 中的图优化

PyTorch 中三条 AI 编译器的技术路线,现在主要采用的是 TorchDynamo 技术路线

CUDA Graph 介绍

解决 cudaLaunchKernel 调用次数过多以及避免 CPU-GPU 交互瓶颈.亮点在于一次性提交整个计算图、GPU 可以直接执行预编译的指令序列从而消除大量启动开销.

Rust 泛型

类似于 C++ 的模板,灵活,可以重复利用代码

C++ 智能指针与资源管理

用智能指针自动管理资源分配和删除.Rust 的所有权设计也很大程度上与 C++ 的智能指针很相似.

Programming / C++

Google C++ 风格指南

简单提一下 Google C++ 编码风格中的重点,开发 C++ 项目时应该会经常用到

Python Decorator

Python Decorator(装饰器)可以很灵活地达成多种目的

C++ 的 static 关键字

static 主要有两种用法:用在变量上,表示只在第一次运行的时候进行一次初始化;用在函数上,表示该函数仅在当前文件中可见.

Python 与 C/C++ 联合开发(一):ctypes 库

在做 LLAISys 项目作业的时候,需要用 C++ 或者 CUDA 作为模型推理的后端进行提速,而 Python 基本只做一些数据处理工作以及显式调用 C++ 后端暴露出来的 API.所以需要在 Python 里与 C++ 进行联合开发。故写一个 blog 简单做个记录。

[Paper] Does Training with Synthetic Data Truly Protect Privacy?

ICLR2025 会议论文.作者研究了四种联邦学习 training paradigm 在**无差分隐私**措施的情况下,对隐私的保护是否到位,作者选取的四种训练范式是 (1) core-set selection; (2) dataset distillation; (3) data-free knowledge distillation; (4) diffusion-generated synthetic data,并揭示四种范式在隐私保护方面的优劣处.

Laziness and Evaluation Model of Haskell

Haskell 运行的底层原理

用 Foundry 工具链开发智能合约

实际上我觉得 Web3 的前景并没有那么大,或者说仅仅从目前来看前景一般

Solidity 重要语法

(本文写于 Solidity 0.8.24 版本)Solidity 是一种面向对象的高级编程语言,专门用于在以太坊(Ethereum)以及其他兼容以太坊虚拟机(EVM)的区块链上编写智能合约,其地位类似于前端世界里的 JavaScript。通过 Solidity 内置的类型和约束检查,我们可以在 Ethereum Virtual Machine (EVM) 上实现安全的交易、日志记录。除了智能合约以外,还可以用于开发 DApps(去中心化应用),是构建 DeFi(去中心化金融)的基础建设。本文主要简单讲解一下 Solodity 的语法。

OCaml:基础类型

对 List, Variant, Record, Tuple 的简单介绍以及用 OUnit 进行单元测试的简单介绍

OCaml:基础语法

OCaml 的基础语法,数值运算等等

Haskell Monads

The Monad type class is a way to represent different ways of executing recipes

Programming / Haskell

Haskell Applicative

Applicative Why we need Applicative? Its common use case could be the following. We have several values with contexts and wa...

Programming / Haskell

Haskell Functors

Introduction to Functors Explanation of Functor. A new Functor, f b, can be made from another Functor f a by transforming al...

Programming / Haskell

Haskell 中的 IO

do block 的返回值必须是 IO <something>. return :: a -> IO a 是一个函数 value <- something 表明 something :: IO X 且 value :: X,并...

Introduction to Haskell's Type System

Type Class Type Class 类似其他语言里的 Interface、Rust 里的 Trait,定义了一组函数,任何属于该 Type Class 的类型都必须实现这些函数。 When to use Type Class? ...

Basic Grammars in Haskell

临时变量语法、模式匹配

Git Snippets: 从旧 commit 分叉出新 branch

假设我们希望从 branch A 的某个旧 commit 上分叉出 branch B.首先查看 branch A 的所有 commit,找到想分叉出来的那个 commit 1git log 然后直接从 commit 分叉 branch 1git br...

Triton 编写 Flash Attention

用 Triton 来编写 Flash Attention

cuda 编写 flash attention 算子

ArchLinux 下将 CapsLock 映射到 Escape

换了 Arch Linux 之后,感觉需要用到 vim 的场景也变多了。那么干脆把 CapsLock 映射成 Escape 好了,反正我也基本不怎么用 CapsLock. 我们主要用到一个包 interception-dual-function-...

[Paper] Deepseek FP8 训练方案

Deepseek v3 发布的时候,也披露了其 FP8 训练的 solution 和 pipeline.实际上低精度训练框架的重要性也在日益凸显,毕竟又快又好就是王道.

[Paper] Flash Attention

Attention 计算的新范式,开启了 Attention 的并行化

The Second Half of AI

AI 的上半场是基础模型算法的狂欢,Transformer 的爆火引发 LLM 模型算法的演进,但是不过几年的发展似乎已经看到瓶颈了。与之相对的,近年来 LLM 应用端开始走进我们的视野,LLM 逐渐从实验室走向商业企业,其中比较引人注目的应用是 AI Agent,即让 AI 自己进行规划、行动,帮助我们完成目标。但是 AI Agent 有自己的缺陷:它的能力实在是太弱了。本篇文章来自于 OpenAI 科学家(现在是在腾讯了)姚顺雨的博客对 AI 后续发展的看法。

nmcli 配置 HKU WiFi

为什么要搞这么复杂呢?因为刚刚安装的 Arch Linux 根本没有 Network Manager 的 GUI,所以只能自己用 nmcli 手动配置了……