From 0da1f757ec865e503b7f6754fe0322b60d6a3c73 Mon Sep 17 00:00:00 2001 From: xfarawayx Date: Sun, 15 Mar 2026 11:37:33 +0800 Subject: [PATCH 1/2] Initial Commit (Finish project 03_nf4_dequant) --- 03_nf4_dequant/xfarawayx/README.md | 67 ++++ 03_nf4_dequant/xfarawayx/docs/report.md | 292 ++++++++++++++++ 03_nf4_dequant/xfarawayx/docs/report.pdf | Bin 0 -> 504269 bytes .../xfarawayx/kernel/CMakeLists.txt | 48 +++ 03_nf4_dequant/xfarawayx/kernel/main.cu | 269 +++++++++++++++ .../xfarawayx/kernel/nf4_dequant_kernel.cuh | 175 ++++++++++ .../xfarawayx/kernel/run_test_ncu.sh | 17 + .../kernel_noncuda/iluvatar/Makefile | 21 ++ .../kernel_noncuda/iluvatar/README.md | 46 +++ .../xfarawayx/kernel_noncuda/iluvatar/main.cu | 312 +++++++++++++++++ .../iluvatar/nf4_dequant_kernel.cuh | 216 ++++++++++++ .../kernel_noncuda/iluvatar/run_iluvatar.sh | 105 ++++++ .../xfarawayx/kernel_noncuda/moore/Makefile | 21 ++ .../xfarawayx/kernel_noncuda/moore/README.md | 46 +++ .../xfarawayx/kernel_noncuda/moore/main.mu | 317 +++++++++++++++++ .../moore/nf4_dequant_kernel.mu | 216 ++++++++++++ .../kernel_noncuda/moore/nf4_dequant_musa | Bin 0 -> 134128 bytes .../kernel_noncuda/moore/run_moore.sh | 105 ++++++ .../xfarawayx/kernel_noncuda/mutex/Makefile | 19 ++ .../xfarawayx/kernel_noncuda/mutex/README.md | 46 +++ .../xfarawayx/kernel_noncuda/mutex/main.maca | 319 ++++++++++++++++++ .../mutex/nf4_dequant_kernel.maca | 216 ++++++++++++ .../kernel_noncuda/mutex/nf4_dequant_maca | Bin 0 -> 105168 bytes .../kernel_noncuda/mutex/run_mutex.sh | 105 ++++++ 03_nf4_dequant/xfarawayx/run.sh | 189 +++++++++++ 03_nf4_dequant/xfarawayx/scripts/bench_bnb.py | 107 ++++++ .../xfarawayx/scripts/generate_data.py | 157 +++++++++ 03_nf4_dequant/xfarawayx/scripts/verify.py | 71 ++++ 28 files changed, 3502 insertions(+) create mode 100644 03_nf4_dequant/xfarawayx/README.md create mode 100644 03_nf4_dequant/xfarawayx/docs/report.md create mode 100644 03_nf4_dequant/xfarawayx/docs/report.pdf create mode 100644 03_nf4_dequant/xfarawayx/kernel/CMakeLists.txt create mode 100644 03_nf4_dequant/xfarawayx/kernel/main.cu create mode 100644 03_nf4_dequant/xfarawayx/kernel/nf4_dequant_kernel.cuh create mode 100755 03_nf4_dequant/xfarawayx/kernel/run_test_ncu.sh create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/Makefile create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/README.md create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/main.cu create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/nf4_dequant_kernel.cuh create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/run_iluvatar.sh create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/Makefile create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/README.md create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/main.mu create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_kernel.mu create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_musa create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/moore/run_moore.sh create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/Makefile create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/README.md create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/main.maca create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_kernel.maca create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_maca create mode 100644 03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/run_mutex.sh create mode 100755 03_nf4_dequant/xfarawayx/run.sh create mode 100644 03_nf4_dequant/xfarawayx/scripts/bench_bnb.py create mode 100644 03_nf4_dequant/xfarawayx/scripts/generate_data.py create mode 100644 03_nf4_dequant/xfarawayx/scripts/verify.py diff --git a/03_nf4_dequant/xfarawayx/README.md b/03_nf4_dequant/xfarawayx/README.md new file mode 100644 index 0000000..6122986 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/README.md @@ -0,0 +1,67 @@ +# NF4 反量化 CUDA Kernel + +NF4(Normal Float 4)双重量化权重的 GPU 反量化实现,兼容 bitsandbytes 格式。技术细节与实验结果见 [`docs/report.md`](docs/report.md)。 + +## 目录结构 + +``` +03_nf4_dequant/ +├── run.sh # 统一入口脚本 +├── kernel/ +│ ├── CMakeLists.txt # CMake 构建 (自动检测 GPU 架构) +│ ├── main.cu # 主程序: 文件 IO、kernel 启动、性能计时 +│ └── nf4_dequant_kernel.cuh # 反量化 kernel 实现 +├── kernel_noncuda/ # 国产 GPU 适配 +│ ├── iluvatar/ # 天数智芯 (clang++ / CUDA 兼容) +│ ├── moore/ # 摩尔线程 (mcc / MUSA) +│ └── mutex/ # 沐曦 (mxcc / MACA) +├── scripts/ +│ ├── generate_data.py # 用 bitsandbytes 生成 NF4 量化数据 + 参考输出 +│ ├── verify.py # 正确性验证: CUDA 输出 vs bitsandbytes 参考 +│ └── bench_bnb.py # bitsandbytes 性能基准 +├── docs/ +│ └── report.md # 实现报告 +└── data/ # 生成的数据 (自动创建) +``` + +## 快速开始 + +```bash +# 全流程: 生成数据 → 编译 → 运行 kernel → 验证正确性 → bnb 性能对比 +./run.sh all +./run.sh # 等价于 ./run.sh test +``` + +## 子命令与选项 + +| 命令 | 说明 | +|------|------| +| `./run.sh generate` | 仅生成 NF4 量化测试数据 | +| `./run.sh build` | 仅编译 CUDA kernel | +| `./run.sh test` | 生成数据 → 编译 → 运行 → 验证正确性 (默认) | +| `./run.sh bench` | bitsandbytes 基准性能测试 | +| `./run.sh all` | 完整流程 | + +| 选项 | 默认值 | 说明 | +|------|--------|------| +| `--rows` | 4096 | 矩阵行数 | +| `--cols` | 4096 | 矩阵列数 | +| `--blocksize` | 64 | 量化块大小 (64/128/256/…/4096) | +| `--compute_type` | bf16 | 输出类型 (bf16/fp16) | +| `--seed` | 42 | 随机种子 | +| `--gpu_arch` | 自动检测 | GPU 架构, 如 80(A100)/89(4090)/90(H100) | +| `--warmup` | 10 | 预热次数 | +| `--repeats` | 100 | 计时重复次数 | +| `--sweep` | - | bench 时扫描多种矩阵大小 | + +```bash +# 示例 +./run.sh --rows 4096 --cols 11008 --blocksize 128 +./run.sh --compute_type fp16 +./run.sh bench --sweep +``` + +## 依赖 + +- CUDA Toolkit +- Python 3.8+, PyTorch (CUDA), bitsandbytes >= 0.43, NumPy diff --git a/03_nf4_dequant/xfarawayx/docs/report.md b/03_nf4_dequant/xfarawayx/docs/report.md new file mode 100644 index 0000000..4ee9946 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/docs/report.md @@ -0,0 +1,292 @@ +# NF4 双重量化反量化 CUDA Kernel 实现报告 + +## 1. NF4 反量化原理 + +### 1.1 NF4 量化简介 + +NF4(Normal Float 4-bit)是由 bitsandbytes 库提出的一种 4-bit 量化格式。其核心思想是:预训练神经网络的权重近似服从正态分布 $N(0, \sigma^2)$,因此可以用标准正态分布 $N(0,1)$ 的 **16 等概率分位点** 作为量化码本(codebook),使每个区间内包含的权重数量大致相等,从而最大化信息利用率。这 16 个分位值构成固定的 NF4 查找表: + +| 索引 | 值 | 索引 | 值 | +|:----:|:-----:|:----:|:-----:| +| 0 | -1.0000 | 8 | +0.0796 | +| 1 | -0.6962 | 9 | +0.1609 | +| 2 | -0.5251 | 10 | +0.2461 | +| 3 | -0.3949 | 11 | +0.3379 | +| 4 | -0.2844 | 12 | +0.4407 | +| 5 | -0.1848 | 13 | +0.5626 | +| 6 | -0.0911 | 14 | +0.7230 | +| 7 | 0.0000 | 15 | +1.0000 | + +量化时,每个权重被除以其所在块的缩放因子(absmax)进行归一化,然后映射到最近的分位值索引(0-15),以 4 bit 存储。两个 4-bit 索引打包进一个 `uint8` 字节。 + +### 1.2 双重量化 + +为进一步压缩元数据开销,bitsandbytes 对一级缩放因子 `absmax` 本身再做一次量化,形成**双重量化(double quantization)**体系: + +- **一级量化**:每 `blocksize`(通常 64)个元素共享一个缩放因子 `absmax`。经二次量化后,原始的 FP32 `absmax` 被压缩为 `uint8` 索引 `absmax_q`。 +- **二级量化**:每 `s2_blocksize`(通常 256)个一级块组成一个组,共享一个二级缩放因子 `absmax2`(FP16)。同时还有一张 256 项的二级码表 `code2`(FP16[256])和一个全局偏移 `offset`(FP32)。 + +### 1.3 反量化公式 + +反量化需要逆向还原上述两级量化过程。对于第 $k$ 个元素: + +``` +block_idx = k / blocksize +group_idx = block_idx / s2_blocksize + +absmax_real = code2[ absmax_q[block_idx] ] × absmax2[group_idx] + offset + +output[k] = NF4_TABLE[ nf4_index(k) ] × absmax_real +``` + +其中 `nf4_index(k)` 是从 `packed_weights` 中解包得到的 4-bit 索引。 + +--- + +## 2. 基础版 Kernel 实现 + +基础版 kernel 的核心策略是:**每个线程负责一个 packed byte 的反量化**,产出 2 个输出元素。以下以 `nf4_dequant_kernel_pre.cuh` 中的实现为参考,分步介绍。 + +### 2.1 线程映射与 NF4 码表 + +每个线程处理 1 个 packed byte(含 2 个 4-bit 索引),生成 2 个输出元素。总线程数为 `ceil(n_elements / 2)`,通过全局线程 ID `tid` 一一映射到 `packed_weights[tid]`。 + +16 个 NF4 分位值预存在 `__constant__` memory 中,线程通过索引直接查表: + +```cpp +__constant__ float NF4_DEQUANT_TABLE[16] = { -1.0f, -0.6962f, ..., 1.0f }; +``` + +### 2.2 反量化计算流程 + +每个线程的完整执行逻辑如下: + +**Step 1 — 读取与解包**:从全局内存读取 1 字节 packed data,分离出高 4 位和低 4 位两个索引,分别对应输出位置 `elem0 = tid * 2` 和 `elem1 = tid * 2 + 1`: + +```cpp +uint8_t packed = packed_weights[tid]; +uint8_t idx_hi = (packed >> 4) & 0x0F; // 偶数位索引 +uint8_t idx_lo = packed & 0x0F; // 奇数位索引 +``` + +**Step 2 — NF4 查表**:用索引查 constant memory 中的码表,获得归一化的浮点值: + +```cpp +float val_hi = NF4_DEQUANT_TABLE[idx_hi]; +float val_lo = NF4_DEQUANT_TABLE[idx_lo]; +``` + +**Step 3 — 还原 absmax(双重量化反解)**:通过整数除法确定元素所在的一级块和二级组,再逆向还原真实的缩放因子: + +```cpp +int block_idx0 = elem0 / blocksize; +int group_idx0 = block_idx0 / s2_blocksize; +float absmax_real0 = __half2float(code2[absmax_q[block_idx0]]) + * __half2float(absmax2[group_idx0]) + offset; +``` + +**Step 4 — 块边界复用**:相邻的两个元素(偶数位与奇数位)大概率落在同一量化块内。kernel 先为 `elem0` 计算 `absmax_real`,处理 `elem1` 时比较 `block_idx`——若相同则直接复用,仅在跨块时重新计算,避免冗余的全局内存访问和浮点运算: + +```cpp +int block_idx1 = elem1 / blocksize; +if (block_idx1 == block_idx0) { + absmax_real1 = absmax_real0; // 复用 +} else { /* 重新计算 */ } +``` + +**Step 5 — Packed Store**:将两个 16-bit 输出值(BF16/FP16)的原始位表示打包为一个 `uint32_t`,以单次 32-bit 写入全局内存。这将 2 次 16-bit store 合并为 1 次 32-bit store,减少内存事务数并保证自然对齐: + +```cpp +uint16_t bits0 = *reinterpret_cast(&out0); +uint16_t bits1 = *reinterpret_cast(&out1); +uint32_t packed_out = (uint32_t)bits0 | ((uint32_t)bits1 << 16); +reinterpret_cast(output)[tid] = packed_out; +``` + +### 2.3 基础版的性能瓶颈 + +基础版实现功能正确,但存在三个主要瓶颈,将在第 3 节依次优化: + +1. **Constant memory 串行化**:NF4 查表时 warp 内线程访问不同索引,触发串行读取; +2. **细粒度全局内存访问**:每线程仅读 1 字节 packed data,远小于 GPU 内存事务粒度(32 字节/sector),带宽利用率低; +3. **整数除法开销**:`block_idx = elem / blocksize` 在 GPU 上延迟高(数十周期),且每线程多次执行。 + +--- + +## 3. Kernel 优化 + +在基础版之上,按顺序实施了三项优化。 + +### 3.1 优化一:NF4 码表从 `__constant__` 加载到 Shared Memory + +**问题分析**:`__constant__` memory 的特点是当 warp 内所有线程访问**同一地址**时才能实现广播读取,延迟很低。但 NF4 查表时,warp 内 32 个线程各自查询不同的 4-bit 索引(0-15),访问地址各异,导致 constant memory 的访问被**串行化**,最差情况下需要 16 次串行读取才能满足一个 warp 的请求。 + +**优化方案**:在 kernel 启动时,由每个 block 的前 16 个线程协作将 NF4 码表从 `__constant__` memory 加载到 `__shared__` memory: + +```cpp +__shared__ float s_nf4_table[16]; // 64 字节 +if (threadIdx.x < 16) { + s_nf4_table[threadIdx.x] = NF4_DEQUANT_TABLE[threadIdx.x]; +} +__syncthreads(); +``` + +`__shared__` memory 支持 bank 级别的并行访问:32 个 bank 可以同时响应不同地址的请求。16 个 `float` 映射到不同的 bank,warp 内线程即使访问不同索引也可以在**一个周期**内完成。 + +**加速效果**(实验环境:NVIDIA A100-SXM4-80GB,矩阵 4096×4096,blocksize=64):V0 中位数 0.1139 ms → V1 中位数 0.0791 ms,加速比 $\textbf{1.44x}$(提升 44%)。这是三项优化中独立效果最显著的一项。 + +### 3.2 优化二:向量化读取(每线程读 4 字节 packed_weights) + +**问题分析**:基础版中每个线程仅读取 1 字节 `packed_weights`,产生大量细粒度的全局内存事务。GPU 全局内存事务的最小粒度为 32 字节(一个 sector),1 字节的标量读取会浪费大量带宽。 + +**优化方案**:将线程映射从"1 thread = 1 byte = 2 元素"扩展为"**1 thread = 4 bytes = 8 元素**": + +```cpp +// 向量化读取: 一次读 4 字节 +uint32_t packed4 = reinterpret_cast(packed_weights)[tid_vec]; + +// 从 packed4 中提取各字节 +uint8_t packed_byte = (packed4 >> (b * 8)) & 0xFF; +``` + +同时写入也从 `uint32_t`(32-bit)升级为 `uint4`(128-bit = 8 个 FP16/BF16): + +```cpp +reinterpret_cast(out_u32)[tid_vec] = + make_uint4(out_packed[0], out_packed[1], out_packed[2], out_packed[3]); +``` + +对于尾部不足 4 字节的边界情况,回退到逐字节标量读取和逐 pack 写入,确保任意矩阵尺寸的正确性。内层循环使用 `#pragma unroll` 展开以减少循环开销。 + +**加速效果**:V1 中位数 0.0791 ms → V2 中位数 0.0652 ms,增量加速比 $\textbf{1.21x}$;相对基础版累计加速比达 $\textbf{1.75x}$。值得注意的是,向量化读写单独加到基础版上仅产生 1.09x 加速,但在 shared memory 优化之后叠加效果更强(1.21x),说明两者之间存在正向交互——shared memory 消除了查表瓶颈后,访存带宽成为新的主要瓶颈,向量化此时才能充分发挥作用。 + +### 3.3 优化三:用位移代替整数除法 + +**问题分析**:基础版中计算 block 索引和 group 索引使用了整数除法: + +```cuda +int block_idx = elem / blocksize; // 整数除法 +int group_idx = block_idx / s2_blocksize; // 整数除法 +``` + +GPU 上整数除法指令的吞吐量远低于位移指令。在 NVIDIA GPU 上,32-bit 整数除法的延迟约为数十个周期,而位移仅需 1 个周期。由于每个线程需对 8 个元素执行多次除法运算,累积的延迟开销不容忽视。 + +**优化方案**:由于 `blocksize` 和 `s2_blocksize` 总是 2 的幂(如 64 = 2⁶, 256 = 2⁸),在 host 端预计算 log₂ 值,kernel 中用右移替代除法: + +```cuda +// Host 端 +int log2_bs = log2_pow2(data.blocksize); // 64 → 6 +int log2_s2 = log2_pow2(data.s2_blocksize); // 256 → 8 + +// Kernel 内 +int block_idx = elem >> log2_blocksize; // 右移代替除法 +int group_idx = block_idx >> log2_s2_blocksize; +``` + +`log2_pow2()` 辅助函数通过循环右移计算 2 的幂的对数值。 + +**加速效果**:V2 中位数 0.0652 ms → V3 中位数 0.0431 ms,增量加速比 $\textbf{1.51x}$;相对基础版累计加速比达 $\textbf{2.64x}$。位移优化单独加到基础版上仅有 1.03x 提升,但在前两项优化消除了查表和带宽瓶颈后,整数除法的延迟成为关键路径,此时替换为位移带来了显著加速(1.51x),体现了强烈的正向交互效应。 + +--- + +## 4. 项目架构与实验流程 + +### 4.1 项目架构 + +``` +03_nf4_dequant/ +├── run.sh # 统一流程入口脚本 +├── kernel/ +│ ├── CMakeLists.txt # CMake 构建系统 (自动检测 GPU 架构) +│ ├── main.cu # 主程序: 文件 IO、kernel 启动、CUDA Events 计时 +│ ├── nf4_dequant_kernel.cuh # 优化后的反量化 kernel 实现 +│ └── run_test_ncu.sh # Nsight Compute 性能分析脚本 +├── scripts/ +│ ├── generate_data.py # 数据生成: 用 bitsandbytes 生成 NF4 量化数据 + 参考输出 +│ ├── verify.py # 正确性验证: CUDA 输出 vs bitsandbytes 参考输出 +│ └── bench_bnb.py # bitsandbytes 官方库性能基准测试 +└── data/ # 生成的测试数据与输出结果 +``` + +各组件职责: + +- **`run.sh`**:统一入口脚本,支持 `generate`、`build`、`test`、`bench`、`all` 五个子命令,通过命令行选项控制矩阵大小、量化块大小、输出精度等参数。 +- **`generate_data.py`**:使用 bitsandbytes 的 `quantize_4bit()` 接口生成 NF4 量化数据,导出为自定义二进制格式,并保存 bitsandbytes 的反量化结果作为参考标准。 +- **`main.cu`**:读取二进制文件、分配 GPU 内存、启动 kernel、使用 CUDA Events 精确计时(warmup + repeats 模式,取中位数抗干扰)、输出结果。 +- **`nf4_dequant_kernel.cuh`**:包含全部三项优化的最终 kernel 实现。 +- **`verify.py`**:加载 CUDA 输出与 bitsandbytes 参考输出,计算 MAE、MaxError、RMSE、相对 MAE,判定正确性(相对 MAE < 1e-2 为 PASS)。 +- **`bench_bnb.py`**:独立测量 bitsandbytes 官方库的反量化性能,支持扫描多种矩阵尺寸,用于对比加速比。 + +### 4.2 实验流程 + +完整的实验流程通过 `./run.sh all` 一键执行,依次完成以下五个步骤: + +1. **生成数据**(`generate_data.py`):调用 bitsandbytes 的 `quantize_4bit()` 对随机权重进行 NF4 量化,导出 packed weights、absmax_q、absmax2、code2、offset 等数据为二进制文件(`nf4_weights_*.bin`),同时保存 bitsandbytes 的反量化结果作为正确性参考(`nf4_ref_output_*.bin`)。 +2. **编译 CUDA kernel**(`cmake + make`):CMake 自动检测 GPU 架构,编译生成 `nf4_dequant` 可执行文件。 +3. **运行 CUDA kernel**(`nf4_dequant`):读取二进制数据文件,在 GPU 上执行反量化 kernel,输出结果(`cuda_output_*.bin`)和性能数据。 +4. **验证正确性**(`verify.py`):加载 CUDA 输出与 bitsandbytes 参考输出,计算 MAE、MaxError、RMSE、相对 MAE,判定正确性(相对 MAE < 1e-2 为 PASS)。 +5. **基准性能对比**(`bench_bnb.py`):独立测量 bitsandbytes 官方库的反量化耗时和带宽,供计算加速比。 + +**性能计时方案**:CUDA Events 精确计时,每次 kernel 启动前执行 `cudaDeviceSynchronize()` 确保 GPU 空闲,事件同步后采集单次耗时。收集 `repeats`(默认 100)次数据后排序,报告平均值、中位数、最小值、最大值和基于中位数的有效内存带宽。 + +--- + +## 5. 实验结果 + +### 5.1 正确性验证 + +| 矩阵大小 | 块大小 | 输出类型 | MAE | MaxError | 相对 MAE | 结果 | +|:---------:|:------:|:--------:|:---:|:--------:|:--------:|:----:| +| 4096×4096 | 64 | BF16 | ~2.8e-4 | ~0.03 | ~2.6e-5 | PASS | +| 4096×4096 | 64 | FP16 | ~0 | ~0 | ~0 | PASS | +| 2047×4096 | 64 | FP16 | ~0 | ~0 | ~0 | PASS | + +BF16 的误差来源于 BF16 本身的表示精度(尾数仅 7 bit),与 bitsandbytes 使用 FP32 中间计算再存储为 BF16 存在精度差异;FP16 输出可达到与 bitsandbytes 的 bit-exact 一致。 + +### 5.2 性能对比 + +> 实验环境:NVIDIA A100-SXM4-80GB,矩阵 4096×4096,blocksize=64,warmup=20,repeats=200。 + +| 矩阵大小 | 块大小 | 输出类型 | CUDA Kernel 中位数耗时 | CUDA 带宽 | bitsandbytes 中位数耗时 | 加速比 | +|:---------:|:------:|:--------:|:--------------------:|:---------:|:---------------------:|:------:| +| 4096×4096 | 64 | BF16 | 0.0426 ms | 990.98 GB/s | 0.0488 ms | 1.15x | +| 4096×4096 | 64 | FP16 | 0.0432 ms | 976.31 GB/s | 0.0488 ms | 1.13x | + +### 5.3 各优化阶段加速比 + +> 消融实验数据(FP16,矩阵 4096×4096,blocksize=64,repeats=200): + +| 优化阶段 | 中位数耗时 | 有效带宽 | 相对基础版加速比 | +|:--------:|:---------:|:--------:|:--------------:| +| 基础版 (constant memory + 标量读取 + 整数除法) | 0.1139 ms | 370.50 GB/s | 1.00x | +| +优化一: Shared Memory 码表 | 0.0791 ms | 533.36 GB/s | 1.44x | +| +优化二: 向量化读取 (4 bytes/thread) | 0.0652 ms | 647.84 GB/s | 1.75x | +| +优化三: 位移代替除法 | 0.0431 ms | 979.93 GB/s | 2.64x | + +各优化的增量分析与交互效应: + +| 优化 | 独立加速比 | 叠加增量加速比 | 交互效应 | +|:----:|:---------:|:------------:|:-------:| +| Shared Memory NF4 码表 | 1.44x | 1.44x | 1.00x | +| 向量化读写 | 1.09x | 1.21x | 1.12x | +| 位移代替除法 | 1.03x | 1.51x | 1.48x | + +三项优化叠加后,总加速比为 **2.64x**(0.1139 ms → 0.0431 ms),有效带宽从 370.50 GB/s 提升至 979.93 GB/s。值得注意的是,向量化和位移优化的独立效果较小(1.09x、1.03x),但在前序优化消除了其他瓶颈后,叠加效果显著增强(1.21x、1.51x),体现了优化之间的正向交互:shared memory 消除查表瓶颈后,带宽成为新瓶颈,向量化得以发挥;带宽优化后,计算延迟成为新瓶颈,位移替换得以发挥。 + +--- + +## 6. 国产 GPU 平台适配 + +`kernel_noncuda/` 目录将优化后的 kernel 移植到三个国产 GPU 平台。三个版本共享相同的算法逻辑与二进制数据格式,可复用 `scripts/verify.py` 进行正确性验证。 + +| 平台 | 目录 | 编译器 | 源码后缀 | 运行时 API 前缀 | +|:----:|:----:|:------:|:--------:|:--------------:| +| 天数智芯 (Iluvatar) | `iluvatar/` | `clang++` | `.cu` | `cuda*`(兼容模式) | +| 摩尔线程 (Moore) | `moore/` | `mcc` | `.mu` | `musa*` | +| 沐曦 (Mutex) | `mutex/` | `mxcc` | `.maca` | `mc*` | + +**主要适配差异**:各平台不直接支持 CUDA 的 `half` / `__nv_bfloat16` 内建类型,因此改用 `uint16_t` 位操作配合手写的浮点转换函数(`half_bits_to_float()`、`float_to_half_bits()`、`float_to_bf16_bits()`)实现等价语义,kernel 模板参数也相应从输出类型改为 `bool OUTPUT_BF16`。除此之外,kernel 核心逻辑(shared memory 码表、向量化读写、位移索引计算)与 CUDA 版本保持一致。 + +各平台目录均提供 `Makefile` 和一键脚本(`run_*.sh`),用法与主工程类似。测试数据需在 CUDA 环境预先生成后拷贝至目标机。 + +--- diff --git a/03_nf4_dequant/xfarawayx/docs/report.pdf b/03_nf4_dequant/xfarawayx/docs/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..022279f4a988627d7adc56bd43c7b45078a3af3a GIT binary patch literal 504269 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

uA^uIO63T956B-!Q;Y!x;l%SYurE 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

>L; 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 D6Y2Dh literal 0 HcmV?d00001 diff --git a/03_nf4_dequant/xfarawayx/kernel/CMakeLists.txt b/03_nf4_dequant/xfarawayx/kernel/CMakeLists.txt new file mode 100644 index 0000000..aa0ec99 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 3.18) +project(nf4_dequant LANGUAGES CXX CUDA) + +set(CMAKE_CUDA_STANDARD 17) +set(CMAKE_CXX_STANDARD 17) + +# ---------- GPU 架构 ---------- +# 用法: +# cmake .. -DGPU_ARCH=80 # A100 +# cmake .. -DGPU_ARCH=89 # RTX 4090 +# cmake .. -DGPU_ARCH=90 # H100 +# cmake .. -DGPU_ARCH="80;89;90" # 多架构 +# cmake .. # 自动检测 +if(DEFINED GPU_ARCH) + set(CMAKE_CUDA_ARCHITECTURES ${GPU_ARCH}) + message(STATUS "GPU architecture (user-specified): ${CMAKE_CUDA_ARCHITECTURES}") +else() + # 自动检测当前 GPU 的 compute capability + execute_process( + COMMAND nvidia-smi --query-gpu=compute_cap --format=csv,noheader,nounits + OUTPUT_VARIABLE _detected_arch + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _detect_result + ) + if(_detect_result EQUAL 0 AND _detected_arch) + # 取第一块 GPU,格式 "8.0" → "80" + string(REGEX MATCH "^[0-9]+\\.[0-9]+" _first_arch "${_detected_arch}") + string(REPLACE "." "" _arch_num "${_first_arch}") + set(CMAKE_CUDA_ARCHITECTURES ${_arch_num}) + message(STATUS "GPU architecture (auto-detected): sm_${_arch_num}") + else() + # 检测失败时回退到常见架构 + set(CMAKE_CUDA_ARCHITECTURES "80;89;90") + message(STATUS "GPU architecture (fallback): ${CMAKE_CUDA_ARCHITECTURES}") + endif() +endif() + +# ---------- 临时目录 ---------- +set(NF4_LOCAL_TMP_DIR "${CMAKE_BINARY_DIR}/.tmp") +file(MAKE_DIRECTORY "${NF4_LOCAL_TMP_DIR}") +set(NF4_TMP_ENV_PREFIX + "${CMAKE_COMMAND} -E env TMPDIR=${NF4_LOCAL_TMP_DIR} TMP=${NF4_LOCAL_TMP_DIR} TEMP=${NF4_LOCAL_TMP_DIR}") +set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${NF4_TMP_ENV_PREFIX}") +set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${NF4_TMP_ENV_PREFIX}") + +# ---------- 构建目标 ---------- +add_executable(nf4_dequant main.cu) +target_include_directories(nf4_dequant PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/03_nf4_dequant/xfarawayx/kernel/main.cu b/03_nf4_dequant/xfarawayx/kernel/main.cu new file mode 100644 index 0000000..91ec693 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel/main.cu @@ -0,0 +1,269 @@ +// NF4 反量化 CUDA 程序 +// 用法: ./nf4_dequant [bf16|fp16] [warmup] [repeats] + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "nf4_dequant_kernel.cuh" + +// CUDA 错误检查 +#define CUDA_CHECK(call) \ + do { \ + cudaError_t err = (call); \ + if (err != cudaSuccess) { \ + fprintf(stderr, "CUDA error at %s:%d: %s\n", \ + __FILE__, __LINE__, cudaGetErrorString(err)); \ + exit(EXIT_FAILURE); \ + } \ + } while (0) + +// 二进制权重文件布局: header (rows, cols, blocksize) + packed_weights + absmax_q + absmax2 + code2 + offset +struct NF4Data { + int64_t num_rows; + int64_t num_cols; + int32_t blocksize; + + std::vector packed_weights; + std::vector absmax_q; + std::vector absmax2; // fp16 raw bits + std::vector code2; // fp16[256] raw bits + float offset; + + int64_t n_elements; + int32_t num_blocks; + int32_t num_groups; + int32_t s2_blocksize; +}; + +bool read_nf4_data(const char* filepath, NF4Data& data) { + FILE* f = fopen(filepath, "rb"); + if (!f) { + fprintf(stderr, "[ERROR] Cannot open file: %s\n", filepath); + return false; + } + + // Header + fread(&data.num_rows, sizeof(int64_t), 1, f); + fread(&data.num_cols, sizeof(int64_t), 1, f); + fread(&data.blocksize, sizeof(int32_t), 1, f); + + data.n_elements = data.num_rows * data.num_cols; + data.num_blocks = (int32_t)((data.n_elements + data.blocksize - 1) / data.blocksize); + + int64_t packed_size = data.n_elements / 2; + data.packed_weights.resize(packed_size); + fread(data.packed_weights.data(), 1, packed_size, f); + + data.absmax_q.resize(data.num_blocks); + fread(data.absmax_q.data(), 1, data.num_blocks, f); + + // 从剩余字节反推 num_groups(文件中未显式存储) + long current_pos = ftell(f); + fseek(f, 0, SEEK_END); + long file_size = ftell(f); + fseek(f, current_pos, SEEK_SET); + + long remaining = file_size - current_pos; + long fixed_tail = 256 * 2 + 4; // code2 (512B) + offset (4B) + long absmax2_bytes = remaining - fixed_tail; + data.num_groups = (int32_t)(absmax2_bytes / 2); + data.s2_blocksize = (data.num_blocks + data.num_groups - 1) / data.num_groups; + + data.absmax2.resize(data.num_groups); + fread(data.absmax2.data(), 2, data.num_groups, f); + + data.code2.resize(256); + fread(data.code2.data(), 2, 256, f); + + fread(&data.offset, sizeof(float), 1, f); + + fclose(f); + return true; +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + fprintf(stderr, "用法: %s [bf16|fp16] [warmup] [repeats]\n", argv[0]); + return 1; + } + + const char* weight_file = argv[1]; + const char* output_file = argv[2]; + std::string compute_type = (argc > 3) ? argv[3] : "bf16"; + int warmup = (argc > 4) ? atoi(argv[4]) : 10; + int repeats = (argc > 5) ? atoi(argv[5]) : 100; + + bool use_bf16 = (compute_type == "bf16"); + + // 读取数据 + printf("[INFO] 读取权重文件: %s\n", weight_file); + NF4Data data; + if (!read_nf4_data(weight_file, data)) return 1; + + printf(" num_rows = %ld\n", (long)data.num_rows); + printf(" num_cols = %ld\n", (long)data.num_cols); + printf(" blocksize = %d\n", data.blocksize); + printf(" n_elements = %ld\n", (long)data.n_elements); + printf(" num_blocks = %d\n", data.num_blocks); + printf(" num_groups = %d\n", data.num_groups); + printf(" s2_blocksize = %d\n", data.s2_blocksize); + printf(" offset = %f\n", data.offset); + printf(" compute_type = %s\n", compute_type.c_str()); + + // 分配 GPU 内存 + uint8_t* d_packed_weights; + uint8_t* d_absmax_q; + half* d_absmax2; + half* d_code2; + void* d_output; + + int64_t packed_size = data.n_elements / 2; + int64_t output_bytes = data.n_elements * 2; // bf16/fp16 = 2 bytes each + + CUDA_CHECK(cudaMalloc(&d_packed_weights, packed_size)); + CUDA_CHECK(cudaMalloc(&d_absmax_q, data.num_blocks)); + CUDA_CHECK(cudaMalloc(&d_absmax2, data.num_groups * sizeof(half))); + CUDA_CHECK(cudaMalloc(&d_code2, 256 * sizeof(half))); + CUDA_CHECK(cudaMalloc(&d_output, output_bytes)); + + // H2D 传输 + CUDA_CHECK(cudaMemcpy(d_packed_weights, data.packed_weights.data(), + packed_size, cudaMemcpyHostToDevice)); + CUDA_CHECK(cudaMemcpy(d_absmax_q, data.absmax_q.data(), + data.num_blocks, cudaMemcpyHostToDevice)); + CUDA_CHECK(cudaMemcpy(d_absmax2, data.absmax2.data(), + data.num_groups * sizeof(half), cudaMemcpyHostToDevice)); + CUDA_CHECK(cudaMemcpy(d_code2, data.code2.data(), + 256 * sizeof(half), cudaMemcpyHostToDevice)); + + // Kernel launch 配置 + int n_packed = (int)((data.n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; // 每线程 4 字节 + int threads_per_block = 256; + int num_blocks_kernel = (n_packed_vec + threads_per_block - 1) / threads_per_block; + + // 预计算 log2 用于位移优化 + int log2_bs = log2_pow2(data.blocksize); + int log2_s2 = log2_pow2(data.s2_blocksize); + + printf("\n[INFO] Kernel 配置:\n"); + printf(" n_packed = %d\n", n_packed); + printf(" n_packed_vec = %d (向量化后)\n", n_packed_vec); + printf(" threads_per_block = %d\n", threads_per_block); + printf(" grid_size = %d\n", num_blocks_kernel); + printf(" log2_blocksize = %d\n", log2_bs); + printf(" log2_s2_blocksize = %d\n", log2_s2); + + // 预热 + printf("\n[INFO] 预热 %d 次...\n", warmup); + for (int i = 0; i < warmup; i++) { + if (use_bf16) { + nf4_dequantize_kernel<__nv_bfloat16><<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, (__nv_bfloat16*)d_output + ); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, (half*)d_output + ); + } + } + CUDA_CHECK(cudaDeviceSynchronize()); + + // 计时: CUDA Events,每次迭代间同步以隔离测量 + printf("[INFO] 计时 %d 次...\n", repeats); + + cudaEvent_t ev_start, ev_end; + CUDA_CHECK(cudaEventCreate(&ev_start)); + CUDA_CHECK(cudaEventCreate(&ev_end)); + + std::vector times(repeats); + + for (int i = 0; i < repeats; i++) { + CUDA_CHECK(cudaDeviceSynchronize()); + CUDA_CHECK(cudaEventRecord(ev_start)); + if (use_bf16) { + nf4_dequantize_kernel<__nv_bfloat16><<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, (__nv_bfloat16*)d_output + ); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, (half*)d_output + ); + } + CUDA_CHECK(cudaEventRecord(ev_end)); + CUDA_CHECK(cudaEventSynchronize(ev_end)); + CUDA_CHECK(cudaEventElapsedTime(×[i], ev_start, ev_end)); + } + + // 排序取中位数,抗干扰 + std::vector sorted_times = times; + std::sort(sorted_times.begin(), sorted_times.end()); + + float total_ms = 0.0f; + float min_ms = sorted_times.front(); + float max_ms = sorted_times.back(); + for (int i = 0; i < repeats; i++) total_ms += times[i]; + float avg_ms = total_ms / repeats; + float median_ms = sorted_times[repeats / 2]; + + // 有效内存带宽 (基于中位数) + double read_bytes = (double)packed_size + data.num_blocks + data.num_groups * 2 + 256 * 2; + double write_bytes = (double)output_bytes; + double total_bytes = read_bytes + write_bytes; + double bandwidth_gbps = total_bytes / (median_ms * 1e-3) / 1e9; + + printf("\n========================================\n"); + printf(" NF4 反量化 Kernel 性能\n"); + printf("========================================\n"); + printf(" 矩阵大小 : (%ld, %ld)\n", (long)data.num_rows, (long)data.num_cols); + printf(" 块大小 : %d\n", data.blocksize); + printf(" 输出类型 : %s\n", compute_type.c_str()); + printf(" 平均耗时 : %.4f ms\n", avg_ms); + printf(" 中位数耗时 : %.4f ms\n", median_ms); + printf(" 最小耗时 : %.4f ms\n", min_ms); + printf(" 最大耗时 : %.4f ms\n", max_ms); + printf(" 有效带宽 : %.2f GB/s (基于中位数)\n", bandwidth_gbps); + printf("========================================\n"); + + // 写出结果 + std::vector h_output(output_bytes); + CUDA_CHECK(cudaMemcpy(h_output.data(), d_output, output_bytes, cudaMemcpyDeviceToHost)); + + FILE* fout = fopen(output_file, "wb"); + if (!fout) { + fprintf(stderr, "[ERROR] Cannot open output file: %s\n", output_file); + return 1; + } + fwrite(h_output.data(), 1, output_bytes, fout); + fclose(fout); + printf("\n[INFO] 已写入解量化输出: %s (%ld bytes)\n", output_file, (long)output_bytes); + + // 清理 + cudaEventDestroy(ev_start); + cudaEventDestroy(ev_end); + CUDA_CHECK(cudaFree(d_packed_weights)); + CUDA_CHECK(cudaFree(d_absmax_q)); + CUDA_CHECK(cudaFree(d_absmax2)); + CUDA_CHECK(cudaFree(d_code2)); + CUDA_CHECK(cudaFree(d_output)); + + printf("[DONE] 完成\n"); + return 0; +} diff --git a/03_nf4_dequant/xfarawayx/kernel/nf4_dequant_kernel.cuh b/03_nf4_dequant/xfarawayx/kernel/nf4_dequant_kernel.cuh new file mode 100644 index 0000000..eafd686 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel/nf4_dequant_kernel.cuh @@ -0,0 +1,175 @@ +#pragma once + +#include +#include +#include +#include + +// NF4 码表 (bitsandbytes create_normal_map),kernel 启动时加载到 shared memory +__constant__ float NF4_DEQUANT_TABLE[16] = { + -1.0f, + -0.6961928009986877f, + -0.5250730514526367f, + -0.39491748809814453f, + -0.28444138169288635f, + -0.18477343022823334f, + -0.09105003625154495f, + 0.0f, + 0.07958029955625534f, + 0.16093020141124725f, + 0.24611230194568634f, + 0.33791524171829224f, + 0.44070982933044434f, + 0.5626170039176941f, + 0.7229568362236023f, + 1.0f +}; + +// float → half / __nv_bfloat16 模板转换 +template +__device__ __forceinline__ OutT nf4_cast_from_float(float x); + +template <> +__device__ __forceinline__ half nf4_cast_from_float(float x) { + return __float2half(x); +} + +template <> +__device__ __forceinline__ __nv_bfloat16 nf4_cast_from_float<__nv_bfloat16>(float x) { + return __float2bfloat16(x); +} + +// 取 half/__nv_bfloat16 的原始 16-bit 位表示 +template +__device__ __forceinline__ uint16_t nf4_raw_bits(OutT v) { + return *reinterpret_cast(&v); +} + +// log2(x),要求 x 为 2 的幂 +inline int log2_pow2(int x) { + int r = 0; + while (x > 1) { x >>= 1; r++; } + return r; +} + +// NF4 双重量化反量化 kernel +// 线程映射: 1 thread → 4 packed bytes → 8 output elements +// absmax_real = code2[absmax_q[block_idx]] * absmax2[group_idx] + offset +// output[i] = NF4_TABLE[index] * absmax_real + +template +__global__ void nf4_dequantize_kernel( + const uint8_t* __restrict__ packed_weights, // [n/2] 每字节 2 个 4-bit 索引 + const uint8_t* __restrict__ absmax_q, // [num_blocks] 一级缩放(二次量化后) + const half* __restrict__ absmax2, // [num_groups] 二级缩放因子 + const half* __restrict__ code2, // [256] 二级码表: uint8 → float16 + float offset, // 二级量化偏移 + int log2_blocksize, // log2(blocksize),用位移代替除法 + int log2_s2_blocksize, // log2(s2_blocksize) + int64_t n_elements, // 总元素数 M*N + OutT* __restrict__ output // [n] 反量化输出 +) +{ + // NF4 码表加载到 shared memory,避免 constant memory 的 warp 串行化 + __shared__ float s_nf4_table[16]; + if (threadIdx.x < 16) { + s_nf4_table[threadIdx.x] = NF4_DEQUANT_TABLE[threadIdx.x]; + } + __syncthreads(); + + // 每线程处理 4 packed bytes = 8 输出元素 + int tid_vec = blockIdx.x * blockDim.x + threadIdx.x; + int n_packed = (int)((n_elements + 1) / 2); + + if (tid_vec >= (n_packed + 3) / 4) return; + + // 向量化读 4 字节,尾部不足时逐字节回退 + int byte_offset = tid_vec * 4; + uint32_t packed4; + if (byte_offset + 4 <= n_packed) { + packed4 = reinterpret_cast(packed_weights)[tid_vec]; + } else { + packed4 = 0; + for (int b = 0; b < 4 && byte_offset + b < n_packed; b++) { + packed4 |= ((uint32_t)packed_weights[byte_offset + b]) << (b << 3); + } + } + + int elem_base = tid_vec * 8; + + uint32_t out_packed[4]; + + #pragma unroll + for (int b = 0; b < 4; b++) { + int elem0 = elem_base + b * 2; + int elem1 = elem0 + 1; + + // 解包高 4 位 / 低 4 位索引,查 NF4 码表 + uint8_t packed_byte = (packed4 >> (b * 8)) & 0xFF; + uint8_t idx_hi = (packed_byte >> 4) & 0x0F; + uint8_t idx_lo = packed_byte & 0x0F; + + float val_hi = s_nf4_table[idx_hi]; + float val_lo = s_nf4_table[idx_lo]; + + // 双重量化反解: absmax_real = code2[absmax_q[block_idx]] * absmax2[group_idx] + offset + int block_idx0 = elem0 >> log2_blocksize; + int group_idx0 = block_idx0 >> log2_s2_blocksize; + + uint8_t aq0 = absmax_q[block_idx0]; + float absmax_real0 = __half2float(code2[aq0]) + * __half2float(absmax2[group_idx0]) + + offset; + + OutT out0, out1; + + if (elem0 < n_elements) { + float dq0 = val_hi * absmax_real0; + out0 = nf4_cast_from_float(dq0); + } else { + out0 = nf4_cast_from_float(0.0f); + } + + if (elem1 < n_elements) { + // 相邻元素大概率同块,跨块时才重新计算 absmax + int block_idx1 = elem1 >> log2_blocksize; + float absmax_real1; + if (block_idx1 == block_idx0) { + absmax_real1 = absmax_real0; + } else { + uint8_t aq1 = absmax_q[block_idx1]; + int group_idx1 = block_idx1 >> log2_s2_blocksize; + absmax_real1 = __half2float(code2[aq1]) + * __half2float(absmax2[group_idx1]) + + offset; + } + float dq1 = val_lo * absmax_real1; + out1 = nf4_cast_from_float(dq1); + } else { + out1 = nf4_cast_from_float(0.0f); + } + + // 两个 fp16/bf16 打包为一个 uint32_t + uint16_t bits0 = nf4_raw_bits(out0); + uint16_t bits1 = nf4_raw_bits(out1); + out_packed[b] = (uint32_t)bits0 | ((uint32_t)bits1 << 16); + } + + // 向量化写入: 完整 4-pack 用 uint4 (128-bit) 一次写出,尾部逐个写 + int out_base = tid_vec * 4; + uint32_t* out_u32 = reinterpret_cast(output); + + int valid_packs = 0; + for (int b = 0; b < 4; b++) { + if (byte_offset + b < n_packed) valid_packs++; + } + + if (valid_packs == 4) { + reinterpret_cast(out_u32)[tid_vec] = + make_uint4(out_packed[0], out_packed[1], out_packed[2], out_packed[3]); + } else { + for (int b = 0; b < valid_packs; b++) { + out_u32[out_base + b] = out_packed[b]; + } + } +} diff --git a/03_nf4_dequant/xfarawayx/kernel/run_test_ncu.sh b/03_nf4_dequant/xfarawayx/kernel/run_test_ncu.sh new file mode 100755 index 0000000..05219e1 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel/run_test_ncu.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Nsight Compute profiling +# 用法: sudo bash kernel/run_test_ncu.sh [run.sh 选项] +# +# 示例: +# sudo bash kernel/run_test_ncu.sh +# sudo bash kernel/run_test_ncu.sh --rows 2048 --cols 2048 + +PROJ_DIR="$(cd "$(dirname "$0")/.." && pwd)" + +sudo ncu \ + --target-processes all \ + -k "nf4_dequantize_kernel" \ + -s 10 -c 1 \ + --set full \ + -o profile_result -f \ + "${PROJ_DIR}/run.sh" "$@" diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/Makefile b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/Makefile new file mode 100644 index 0000000..46c349b --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/Makefile @@ -0,0 +1,21 @@ +ILCC ?= clang++ +TARGET ?= nf4_dequant_iluvatar +SRC ?= main.cu + +CXXFLAGS ?= -O3 -std=c++17 -fPIC +INCLUDES ?= -I. -I/usr/local/corex/include +LDFLAGS ?= -L/usr/local/corex/lib64 +LDLIBS ?= -lcudart + +.PHONY: all clean run + +all: $(TARGET) + +$(TARGET): $(SRC) nf4_dequant_kernel.cuh + $(ILCC) $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) -o $@ $(SRC) $(LDLIBS) + +run: $(TARGET) + @echo "Usage: ./$(TARGET) [bf16|fp16] [warmup] [repeats]" + +clean: + rm -f $(TARGET) diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/README.md b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/README.md new file mode 100644 index 0000000..9ebcf74 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/README.md @@ -0,0 +1,46 @@ +# 天数智芯 (Iluvatar) 适配版 NF4 反量化 + +该目录是对 `kernel/` 中 CUDA 版本的平移适配,目标是在天数智芯环境优先使用 CUDA 兼容编译链跑通。 + +当前策略: + +- 默认编译器使用 `clang++`(可通过 `ILCC` 覆盖) +- 源码保持 `.cu` 形式,便于复用 CUDA 风格 kernel 与运行时 API +- 运行时 API 维持 `cuda*` 命名,依赖目标机提供 CUDA 兼容 SDK +- 保留与原工程一致的二进制输入输出格式,可直接复用 `scripts/verify.py` + +## 目录文件 + +- `main.cu`: 主入口,负责文件 IO / kernel 启动 / 性能统计 +- `nf4_dequant_kernel.cuh`: 适配后的 NF4 反量化 kernel +- `Makefile`: 使用 `ILCC` 构建 `nf4_dequant_iluvatar` +- `run_iluvatar.sh`: 一键 build/run/verify + +## 构建 + +```bash +cd kernel_noncuda/iluvatar +make ILCC=clang++ -j +``` + +## 运行 + +```bash +# 需要已有 data/nf4_weights_*.bin +./nf4_dequant_iluvatar ../../data/nf4_weights_4096x4096_bs64.bin \ + ../../data/iluvatar_output_4096x4096_bs64_fp16.bin \ + fp16 10 100 +``` + +## 一键流程 + +```bash +cd kernel_noncuda/iluvatar +bash run_iluvatar.sh test --rows 4096 --cols 4096 --blocksize 64 --compute_type fp16 +``` + +说明: + +- `run_iluvatar.sh` 默认只消费已有测试数据,不会调用 `generate_data.py`。 + - 可先在 CUDA 机器执行 `./run.sh generate` 生成 `data/` 再拷贝到目标机。 +- `compute_type` 支持 `fp16` 和 `bf16`,输出文件格式与原验证脚本兼容。 \ No newline at end of file diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/main.cu b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/main.cu new file mode 100644 index 0000000..67b5470 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/main.cu @@ -0,0 +1,312 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#if __has_include() +#include +#else +#error "CUDA-compatible runtime header not found. Please install Iluvatar SDK and set include paths." +#endif + +#include "nf4_dequant_kernel.cuh" + +#define ILUVATAR_BACKEND_NAME "ILUVATAR (CUDA-Compatible)" + +#define ILU_CHECK(call) \ + do { \ + cudaError_t err__ = (call); \ + if (err__ != cudaSuccess) { \ + std::fprintf(stderr, "Runtime error at %s:%d: %s\n", \ + __FILE__, __LINE__, cudaGetErrorString(err__)); \ + std::exit(EXIT_FAILURE); \ + } \ + } while (0) + +struct NF4Data { + int64_t num_rows = 0; + int64_t num_cols = 0; + int32_t blocksize = 0; + + std::vector packed_weights; + std::vector absmax_q; + std::vector absmax2; + std::vector code2; + float offset = 0.0f; + + int64_t n_elements = 0; + int32_t num_blocks = 0; + int32_t num_groups = 0; + int32_t s2_blocksize = 0; +}; + +static bool is_power_of_two(int x) { + return x > 0 && ((x & (x - 1)) == 0); +} + +static bool read_nf4_data(const char* filepath, NF4Data& data) { + FILE* f = std::fopen(filepath, "rb"); + if (!f) { + std::fprintf(stderr, "[ERROR] Cannot open file: %s\n", filepath); + return false; + } + + if (std::fread(&data.num_rows, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.num_cols, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.blocksize, sizeof(int32_t), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad header in file: %s\n", filepath); + return false; + } + + data.n_elements = data.num_rows * data.num_cols; + data.num_blocks = (int32_t)((data.n_elements + data.blocksize - 1) / data.blocksize); + + int64_t packed_size = data.n_elements / 2; + data.packed_weights.resize(packed_size); + if (std::fread(data.packed_weights.data(), 1, packed_size, f) != (size_t)packed_size) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad packed data in file: %s\n", filepath); + return false; + } + + data.absmax_q.resize(data.num_blocks); + if (std::fread(data.absmax_q.data(), 1, data.num_blocks, f) != (size_t)data.num_blocks) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax_q in file: %s\n", filepath); + return false; + } + + long current_pos = std::ftell(f); + std::fseek(f, 0, SEEK_END); + long file_size = std::ftell(f); + std::fseek(f, current_pos, SEEK_SET); + + long remaining = file_size - current_pos; + long fixed_tail = 256 * 2 + 4; + long absmax2_bytes = remaining - fixed_tail; + + if (absmax2_bytes <= 0 || (absmax2_bytes % 2) != 0) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Invalid absmax2 segment in file: %s\n", filepath); + return false; + } + + data.num_groups = (int32_t)(absmax2_bytes / 2); + data.s2_blocksize = (data.num_blocks + data.num_groups - 1) / data.num_groups; + + data.absmax2.resize(data.num_groups); + if (std::fread(data.absmax2.data(), 2, data.num_groups, f) != (size_t)data.num_groups) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax2 in file: %s\n", filepath); + return false; + } + + data.code2.resize(256); + if (std::fread(data.code2.data(), 2, 256, f) != 256) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad code2 in file: %s\n", filepath); + return false; + } + + if (std::fread(&data.offset, sizeof(float), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Missing offset in file: %s\n", filepath); + return false; + } + + std::fclose(f); + return true; +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::fprintf(stderr, "Usage: %s [bf16|fp16] [warmup] [repeats]\n", argv[0]); + return 1; + } + + const char* weight_file = argv[1]; + const char* output_file = argv[2]; + std::string compute_type = (argc > 3) ? argv[3] : "bf16"; + int warmup = (argc > 4) ? std::atoi(argv[4]) : 10; + int repeats = (argc > 5) ? std::atoi(argv[5]) : 100; + + bool use_bf16 = (compute_type == "bf16"); + if (!use_bf16 && compute_type != "fp16") { + std::fprintf(stderr, "[ERROR] compute_type must be bf16 or fp16\n"); + return 1; + } + + std::printf("[INFO] Backend: %s\n", ILUVATAR_BACKEND_NAME); + std::printf("[INFO] Loading weight file: %s\n", weight_file); + + NF4Data data; + if (!read_nf4_data(weight_file, data)) { + return 1; + } + + std::printf(" num_rows = %ld\n", (long)data.num_rows); + std::printf(" num_cols = %ld\n", (long)data.num_cols); + std::printf(" blocksize = %d\n", data.blocksize); + std::printf(" n_elements = %ld\n", (long)data.n_elements); + std::printf(" num_blocks = %d\n", data.num_blocks); + std::printf(" num_groups = %d\n", data.num_groups); + std::printf(" s2_blocksize = %d\n", data.s2_blocksize); + std::printf(" offset = %f\n", data.offset); + std::printf(" compute_type = %s\n", compute_type.c_str()); + + if (!is_power_of_two(data.blocksize) || !is_power_of_two(data.s2_blocksize)) { + std::fprintf(stderr, + "[ERROR] blocksize and s2_blocksize must be powers of two. got blocksize=%d s2_blocksize=%d\n", + data.blocksize, data.s2_blocksize); + return 1; + } + + uint8_t* d_packed_weights = nullptr; + uint8_t* d_absmax_q = nullptr; + uint16_t* d_absmax2 = nullptr; + uint16_t* d_code2 = nullptr; + uint16_t* d_output_bits = nullptr; + + int64_t packed_size = data.n_elements / 2; + int64_t output_bytes = data.n_elements * 2; + + ILU_CHECK(cudaMalloc((void**)&d_packed_weights, packed_size)); + ILU_CHECK(cudaMalloc((void**)&d_absmax_q, data.num_blocks)); + ILU_CHECK(cudaMalloc((void**)&d_absmax2, data.num_groups * sizeof(uint16_t))); + ILU_CHECK(cudaMalloc((void**)&d_code2, 256 * sizeof(uint16_t))); + ILU_CHECK(cudaMalloc((void**)&d_output_bits, output_bytes)); + + ILU_CHECK(cudaMemcpy(d_packed_weights, data.packed_weights.data(), + packed_size, cudaMemcpyHostToDevice)); + ILU_CHECK(cudaMemcpy(d_absmax_q, data.absmax_q.data(), + data.num_blocks, cudaMemcpyHostToDevice)); + ILU_CHECK(cudaMemcpy(d_absmax2, data.absmax2.data(), + data.num_groups * sizeof(uint16_t), cudaMemcpyHostToDevice)); + ILU_CHECK(cudaMemcpy(d_code2, data.code2.data(), + 256 * sizeof(uint16_t), cudaMemcpyHostToDevice)); + + int n_packed = (int)((data.n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + int threads_per_block = 256; + int num_blocks_kernel = (n_packed_vec + threads_per_block - 1) / threads_per_block; + int log2_bs = log2_pow2(data.blocksize); + int log2_s2 = log2_pow2(data.s2_blocksize); + + std::printf("\n[INFO] Kernel config:\n"); + std::printf(" n_packed = %d\n", n_packed); + std::printf(" n_packed_vec = %d\n", n_packed_vec); + std::printf(" threads_per_block = %d\n", threads_per_block); + std::printf(" grid_size = %d\n", num_blocks_kernel); + std::printf(" log2_blocksize = %d\n", log2_bs); + std::printf(" log2_s2_blocksize = %d\n", log2_s2); + + std::printf("\n[INFO] Warmup %d iterations...\n", warmup); + for (int i = 0; i < warmup; ++i) { + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + ILU_CHECK(cudaGetLastError()); + } + ILU_CHECK(cudaDeviceSynchronize()); + + std::printf("[INFO] Timing %d iterations...\n", repeats); + + cudaEvent_t ev_start; + cudaEvent_t ev_end; + ILU_CHECK(cudaEventCreate(&ev_start)); + ILU_CHECK(cudaEventCreate(&ev_end)); + + std::vector times(repeats); + + for (int i = 0; i < repeats; ++i) { + ILU_CHECK(cudaDeviceSynchronize()); + ILU_CHECK(cudaEventRecord(ev_start)); + + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + + ILU_CHECK(cudaGetLastError()); + ILU_CHECK(cudaEventRecord(ev_end)); + ILU_CHECK(cudaEventSynchronize(ev_end)); + ILU_CHECK(cudaEventElapsedTime(×[i], ev_start, ev_end)); + } + + std::vector sorted_times = times; + std::sort(sorted_times.begin(), sorted_times.end()); + + float total_ms = 0.0f; + for (float t : times) { + total_ms += t; + } + + float min_ms = sorted_times.front(); + float max_ms = sorted_times.back(); + float avg_ms = total_ms / repeats; + float median_ms = sorted_times[repeats / 2]; + + double read_bytes = (double)packed_size + data.num_blocks + + data.num_groups * 2.0 + 256.0 * 2.0; + double write_bytes = (double)output_bytes; + double total_bytes = read_bytes + write_bytes; + double bandwidth_gbps = total_bytes / (median_ms * 1e-3) / 1e9; + + std::printf("\n========================================\n"); + std::printf(" NF4 Dequant Kernel Performance (ILUVATAR)\n"); + std::printf("========================================\n"); + std::printf(" matrix shape : (%ld, %ld)\n", (long)data.num_rows, (long)data.num_cols); + std::printf(" blocksize : %d\n", data.blocksize); + std::printf(" output type : %s\n", compute_type.c_str()); + std::printf(" avg latency : %.4f ms\n", avg_ms); + std::printf(" median latency : %.4f ms\n", median_ms); + std::printf(" min latency : %.4f ms\n", min_ms); + std::printf(" max latency : %.4f ms\n", max_ms); + std::printf(" bandwidth : %.2f GB/s (median)\n", bandwidth_gbps); + std::printf("========================================\n"); + + std::vector h_output_bits(data.n_elements); + ILU_CHECK(cudaMemcpy(h_output_bits.data(), d_output_bits, output_bytes, cudaMemcpyDeviceToHost)); + + FILE* fout = std::fopen(output_file, "wb"); + if (!fout) { + std::fprintf(stderr, "[ERROR] Cannot open output file: %s\n", output_file); + return 1; + } + + std::fwrite(h_output_bits.data(), sizeof(uint16_t), h_output_bits.size(), fout); + std::fclose(fout); + + std::printf("\n[INFO] Wrote output: %s (%ld bytes)\n", output_file, (long)output_bytes); + + ILU_CHECK(cudaEventDestroy(ev_start)); + ILU_CHECK(cudaEventDestroy(ev_end)); + ILU_CHECK(cudaFree(d_packed_weights)); + ILU_CHECK(cudaFree(d_absmax_q)); + ILU_CHECK(cudaFree(d_absmax2)); + ILU_CHECK(cudaFree(d_code2)); + ILU_CHECK(cudaFree(d_output_bits)); + + std::printf("[DONE] Finished\n"); + return 0; +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/nf4_dequant_kernel.cuh b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/nf4_dequant_kernel.cuh new file mode 100644 index 0000000..c4449c8 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/nf4_dequant_kernel.cuh @@ -0,0 +1,216 @@ +#pragma once + +#include + +__constant__ float NF4_DEQUANT_TABLE[16] = { + -1.0f, + -0.6961928009986877f, + -0.5250730514526367f, + -0.39491748809814453f, + -0.28444138169288635f, + -0.18477343022823334f, + -0.09105003625154495f, + 0.0f, + 0.07958029955625534f, + 0.16093020141124725f, + 0.24611230194568634f, + 0.33791524171829224f, + 0.44070982933044434f, + 0.5626170039176941f, + 0.7229568362236023f, + 1.0f +}; + +inline int log2_pow2(int x) { + int r = 0; + while (x > 1) { + x >>= 1; + r++; + } + return r; +} + +__device__ __forceinline__ uint32_t float_to_bits(float v) { + union { + float f; + uint32_t u; + } x; + x.f = v; + return x.u; +} + +__device__ __forceinline__ float bits_to_float(uint32_t v) { + union { + float f; + uint32_t u; + } x; + x.u = v; + return x.f; +} + +__device__ __forceinline__ float half_bits_to_float(uint16_t h) { + uint32_t sign = (uint32_t)(h & 0x8000u) << 16; + uint32_t exp = (h >> 10) & 0x1Fu; + uint32_t mant = h & 0x03FFu; + + uint32_t out; + if (exp == 0) { + if (mant == 0) { + out = sign; + } else { + exp = 127 - 15 + 1; + while ((mant & 0x0400u) == 0) { + mant <<= 1; + exp--; + } + mant &= 0x03FFu; + out = sign | (exp << 23) | (mant << 13); + } + } else if (exp == 0x1Fu) { + out = sign | 0x7F800000u | (mant << 13); + } else { + out = sign | ((exp + (127 - 15)) << 23) | (mant << 13); + } + + return bits_to_float(out); +} + +__device__ __forceinline__ uint16_t float_to_half_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t sign = (x >> 16) & 0x8000u; + int32_t exp = (int32_t)((x >> 23) & 0xFFu) - 127 + 15; + uint32_t mant = x & 0x7FFFFFu; + + if (exp <= 0) { + if (exp < -10) { + return (uint16_t)sign; + } + mant = (mant | 0x800000u) >> (1 - exp); + if ((mant & 0x00001000u) != 0) { + mant += 0x00002000u; + } + return (uint16_t)(sign | (mant >> 13)); + } + + if (exp >= 31) { + return (uint16_t)(sign | 0x7C00u); + } + + uint32_t out = sign | ((uint32_t)exp << 10) | (mant >> 13); + if ((mant & 0x00001000u) != 0) { + out += 1; + } + return (uint16_t)out; +} + +__device__ __forceinline__ uint16_t float_to_bf16_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t lsb = (x >> 16) & 1u; + x += 0x7FFFu + lsb; + return (uint16_t)(x >> 16); +} + +template +__global__ void nf4_dequantize_kernel( + const uint8_t* __restrict__ packed_weights, + const uint8_t* __restrict__ absmax_q, + const uint16_t* __restrict__ absmax2, + const uint16_t* __restrict__ code2, + float offset, + int log2_blocksize, + int log2_s2_blocksize, + int64_t n_elements, + uint16_t* __restrict__ output_bits) { + __shared__ float s_nf4_table[16]; + if (threadIdx.x < 16) { + s_nf4_table[threadIdx.x] = NF4_DEQUANT_TABLE[threadIdx.x]; + } + __syncthreads(); + + int tid_vec = blockIdx.x * blockDim.x + threadIdx.x; + int n_packed = (int)((n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + if (tid_vec >= n_packed_vec) { + return; + } + + int byte_offset = tid_vec * 4; + uint32_t packed4 = 0; + if (byte_offset + 4 <= n_packed) { + packed4 = reinterpret_cast(packed_weights)[tid_vec]; + } else { + for (int b = 0; b < 4 && byte_offset + b < n_packed; ++b) { + packed4 |= ((uint32_t)packed_weights[byte_offset + b]) << (b << 3); + } + } + + int elem_base = tid_vec * 8; + uint32_t out_packed[4]; + + #pragma unroll + for (int b = 0; b < 4; ++b) { + int elem0 = elem_base + b * 2; + int elem1 = elem0 + 1; + + uint8_t packed_byte = (packed4 >> (b * 8)) & 0xFF; + uint8_t idx_hi = (packed_byte >> 4) & 0x0F; + uint8_t idx_lo = packed_byte & 0x0F; + + float val_hi = s_nf4_table[idx_hi]; + float val_lo = s_nf4_table[idx_lo]; + + int block_idx0 = elem0 >> log2_blocksize; + int group_idx0 = block_idx0 >> log2_s2_blocksize; + uint8_t aq0 = absmax_q[block_idx0]; + + float absmax_real0 = half_bits_to_float(code2[aq0]) + * half_bits_to_float(absmax2[group_idx0]) + + offset; + + uint16_t out0; + if (elem0 < n_elements) { + float dq0 = val_hi * absmax_real0; + out0 = OUTPUT_BF16 ? float_to_bf16_bits(dq0) : float_to_half_bits(dq0); + } else { + out0 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + uint16_t out1; + if (elem1 < n_elements) { + int block_idx1 = elem1 >> log2_blocksize; + float absmax_real1; + if (block_idx1 == block_idx0) { + absmax_real1 = absmax_real0; + } else { + uint8_t aq1 = absmax_q[block_idx1]; + int group_idx1 = block_idx1 >> log2_s2_blocksize; + absmax_real1 = half_bits_to_float(code2[aq1]) + * half_bits_to_float(absmax2[group_idx1]) + + offset; + } + float dq1 = val_lo * absmax_real1; + out1 = OUTPUT_BF16 ? float_to_bf16_bits(dq1) : float_to_half_bits(dq1); + } else { + out1 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + out_packed[b] = (uint32_t)out0 | ((uint32_t)out1 << 16); + } + + int out_base = tid_vec * 4; + uint32_t* out_u32 = reinterpret_cast(output_bits); + + int valid_packs = 0; + for (int b = 0; b < 4; ++b) { + if (byte_offset + b < n_packed) { + valid_packs++; + } + } + + #pragma unroll + for (int b = 0; b < 4; ++b) { + if (b < valid_packs) { + out_u32[out_base + b] = out_packed[b]; + } + } +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/run_iluvatar.sh b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/run_iluvatar.sh new file mode 100644 index 0000000..4433707 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/iluvatar/run_iluvatar.sh @@ -0,0 +1,105 @@ +#!/bin/bash +set -e +set -o pipefail + +PROJ_DIR="$(cd "$(dirname "$0")/../.." && pwd)" +KERNEL_DIR="${PROJ_DIR}/kernel_noncuda/iluvatar" +SCRIPTS_DIR="${PROJ_DIR}/scripts" +DATA_DIR="${PROJ_DIR}/data" + +if [ -x "${PROJ_DIR}/.venv/bin/python" ]; then + PYTHON="${PROJ_DIR}/.venv/bin/python" +elif command -v python3 >/dev/null 2>&1; then + PYTHON="$(command -v python3)" +else + echo "[ERROR] 找不到 python3" + exit 1 +fi + +ROWS=4096 +COLS=4096 +BLOCKSIZE=64 +COMPUTE_TYPE="bf16" +WARMUP=10 +REPEATS=100 +ILCC_BIN="${ILCC:-clang++}" +COMMAND="test" + +if [[ "$#" -gt 0 && ! "$1" == --* ]]; then + COMMAND="$1" + shift +fi + +while [[ "$#" -gt 0 ]]; do + case "$1" in + --rows) ROWS="$2"; shift ;; + --cols) COLS="$2"; shift ;; + --blocksize) BLOCKSIZE="$2"; shift ;; + --compute_type) COMPUTE_TYPE="$2"; shift ;; + --warmup) WARMUP="$2"; shift ;; + --repeats) REPEATS="$2"; shift ;; + --ilcc) ILCC_BIN="$2"; shift ;; + *) echo "[ERROR] 未知参数: $1"; exit 1 ;; + esac + shift +done + +TAG="${ROWS}x${COLS}_bs${BLOCKSIZE}" +WEIGHT_FILE="${DATA_DIR}/nf4_weights_${TAG}.bin" +REF_FILE="${DATA_DIR}/nf4_ref_output_${TAG}_${COMPUTE_TYPE}.bin" +ILUVATAR_OUTPUT="${DATA_DIR}/iluvatar_output_${TAG}_${COMPUTE_TYPE}.bin" + +build_kernel() { + echo "[build] 使用编译器: ${ILCC_BIN}" + make -C "${KERNEL_DIR}" clean >/dev/null + make -C "${KERNEL_DIR}" ILCC="${ILCC_BIN}" -j"$(nproc)" +} + +run_kernel() { + if [ ! -f "${WEIGHT_FILE}" ]; then + echo "[ERROR] 缺少权重文件: ${WEIGHT_FILE}" + echo " 请先在支持 CUDA 的环境执行 ./run.sh generate 生成数据" + exit 1 + fi + + "${KERNEL_DIR}/nf4_dequant_iluvatar" \ + "${WEIGHT_FILE}" "${ILUVATAR_OUTPUT}" "${COMPUTE_TYPE}" "${WARMUP}" "${REPEATS}" +} + +verify_output() { + if [ ! -f "${REF_FILE}" ]; then + echo "[WARN] 缺少参考文件: ${REF_FILE}" + echo " 跳过 verify。可先在 CUDA 环境运行 ./run.sh generate --compute_type ${COMPUTE_TYPE}" + return 0 + fi + + "${PYTHON}" "${SCRIPTS_DIR}/verify.py" \ + --weight_file "${WEIGHT_FILE}" \ + --ref_file "${REF_FILE}" \ + --cuda_file "${ILUVATAR_OUTPUT}" \ + --compute_type "${COMPUTE_TYPE}" +} + +case "${COMMAND}" in + build) + build_kernel + ;; + run) + run_kernel + ;; + verify) + verify_output + ;; + test) + build_kernel + run_kernel + verify_output + ;; + *) + echo "[ERROR] 未知命令: ${COMMAND}" + echo "可用命令: build | run | verify | test" + exit 1 + ;; +esac + +echo "[DONE] ${COMMAND} 完成" diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/Makefile b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/Makefile new file mode 100644 index 0000000..dc34f83 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/Makefile @@ -0,0 +1,21 @@ +MCC ?= mcc +TARGET ?= nf4_dequant_musa +SRC ?= main.mu + +CXXFLAGS ?= -O3 -std=c++17 +INCLUDES ?= -I. +LDFLAGS ?= +LDLIBS ?= -lmusart + +.PHONY: all clean run + +all: $(TARGET) + +$(TARGET): $(SRC) nf4_dequant_kernel.mu + $(MCC) $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) -o $@ $(SRC) $(LDLIBS) + +run: $(TARGET) + @echo "Usage: ./$(TARGET) [bf16|fp16] [warmup] [repeats]" + +clean: + rm -f $(TARGET) diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/README.md b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/README.md new file mode 100644 index 0000000..088e9fe --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/README.md @@ -0,0 +1,46 @@ +# 摩尔线程 (MUSA) 适配版 NF4 反量化 + +该目录是对 `kernel/` 中 CUDA 版本的平移适配,目标是运行在摩尔线程 GPU 环境。 + +## 适配要点 + +- 编译器从 `nvcc` 切换为 `mcc` +- 主源码使用 `.mu` 后缀 +- 运行时 API 使用 `musa*`(例如 `musaMalloc` / `musaMemcpy`) +- 保留与原工程一致的二进制输入输出格式,直接复用 `scripts/verify.py` + +## 目录文件 + +- `main.mu`: 主入口,负责文件 IO / kernel 启动 / 性能统计 +- `nf4_dequant_kernel.mu`: NF4 反量化 kernel +- `Makefile`: 使用 `mcc` 构建 `nf4_dequant_musa` +- `run_moore.sh`: 一键 build/run/verify + +## 构建 + +```bash +cd kernel_noncuda/moore +make MCC=mcc -j +``` + +## 运行 + +```bash +# 需要已有 data/nf4_weights_*.bin +./nf4_dequant_musa ../../data/nf4_weights_4096x4096_bs64.bin \ + ../../data/moore_output_4096x4096_bs64_fp16.bin \ + fp16 10 100 +``` + +## 一键流程 + +```bash +cd kernel_noncuda/moore +bash run_moore.sh test --rows 4096 --cols 4096 --blocksize 64 --compute_type fp16 +``` + +说明: + +- `run_moore.sh` 默认只消费已有测试数据,不会调用 `generate_data.py`。 + - 可先在另一台 CUDA 机器执行 `./run.sh generate` 生成 `data/` 再拷贝过来。 +- `compute_type` 支持 `fp16` 和 `bf16`,输出文件格式与原验证脚本兼容。 diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/main.mu b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/main.mu new file mode 100644 index 0000000..930b978 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/main.mu @@ -0,0 +1,317 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __has_include() +#include +#else +#error "MUSA runtime header not found. Please install MUSA SDK and set include paths." +#endif + +#if __has_include() +#include +#endif + +#include "nf4_dequant_kernel.mu" + +#define MOORE_BACKEND_NAME "MUSA" + +#define MUSA_CHECK(call) \ + do { \ + musaError_t err__ = (call); \ + if (err__ != musaSuccess) { \ + std::fprintf(stderr, "MUSA error at %s:%d: %s\n", \ + __FILE__, __LINE__, musaGetErrorString(err__)); \ + std::exit(EXIT_FAILURE); \ + } \ + } while (0) + +struct NF4Data { + int64_t num_rows = 0; + int64_t num_cols = 0; + int32_t blocksize = 0; + + std::vector packed_weights; + std::vector absmax_q; + std::vector absmax2; + std::vector code2; + float offset = 0.0f; + + int64_t n_elements = 0; + int32_t num_blocks = 0; + int32_t num_groups = 0; + int32_t s2_blocksize = 0; +}; + +static bool is_power_of_two(int x) { + return x > 0 && ((x & (x - 1)) == 0); +} + +static bool read_nf4_data(const char* filepath, NF4Data& data) { + FILE* f = std::fopen(filepath, "rb"); + if (!f) { + std::fprintf(stderr, "[ERROR] Cannot open file: %s\n", filepath); + return false; + } + + if (std::fread(&data.num_rows, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.num_cols, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.blocksize, sizeof(int32_t), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad header in file: %s\n", filepath); + return false; + } + + data.n_elements = data.num_rows * data.num_cols; + data.num_blocks = (int32_t)((data.n_elements + data.blocksize - 1) / data.blocksize); + + int64_t packed_size = data.n_elements / 2; + data.packed_weights.resize(packed_size); + if (std::fread(data.packed_weights.data(), 1, packed_size, f) != (size_t)packed_size) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad packed data in file: %s\n", filepath); + return false; + } + + data.absmax_q.resize(data.num_blocks); + if (std::fread(data.absmax_q.data(), 1, data.num_blocks, f) != (size_t)data.num_blocks) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax_q in file: %s\n", filepath); + return false; + } + + long current_pos = std::ftell(f); + std::fseek(f, 0, SEEK_END); + long file_size = std::ftell(f); + std::fseek(f, current_pos, SEEK_SET); + + long remaining = file_size - current_pos; + long fixed_tail = 256 * 2 + 4; + long absmax2_bytes = remaining - fixed_tail; + + if (absmax2_bytes <= 0 || (absmax2_bytes % 2) != 0) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Invalid absmax2 segment in file: %s\n", filepath); + return false; + } + + data.num_groups = (int32_t)(absmax2_bytes / 2); + data.s2_blocksize = (data.num_blocks + data.num_groups - 1) / data.num_groups; + + data.absmax2.resize(data.num_groups); + if (std::fread(data.absmax2.data(), 2, data.num_groups, f) != (size_t)data.num_groups) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax2 in file: %s\n", filepath); + return false; + } + + data.code2.resize(256); + if (std::fread(data.code2.data(), 2, 256, f) != 256) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad code2 in file: %s\n", filepath); + return false; + } + + if (std::fread(&data.offset, sizeof(float), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Missing offset in file: %s\n", filepath); + return false; + } + + std::fclose(f); + return true; +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::fprintf(stderr, "用法: %s [bf16|fp16] [warmup] [repeats]\n", argv[0]); + return 1; + } + + const char* weight_file = argv[1]; + const char* output_file = argv[2]; + std::string compute_type = (argc > 3) ? argv[3] : "bf16"; + int warmup = (argc > 4) ? std::atoi(argv[4]) : 10; + int repeats = (argc > 5) ? std::atoi(argv[5]) : 100; + + bool use_bf16 = (compute_type == "bf16"); + if (!use_bf16 && compute_type != "fp16") { + std::fprintf(stderr, "[ERROR] compute_type must be bf16 or fp16\n"); + return 1; + } + + std::printf("[INFO] Backend: %s\n", MOORE_BACKEND_NAME); + std::printf("[INFO] 读取权重文件: %s\n", weight_file); + + NF4Data data; + if (!read_nf4_data(weight_file, data)) { + return 1; + } + + std::printf(" num_rows = %ld\n", (long)data.num_rows); + std::printf(" num_cols = %ld\n", (long)data.num_cols); + std::printf(" blocksize = %d\n", data.blocksize); + std::printf(" n_elements = %ld\n", (long)data.n_elements); + std::printf(" num_blocks = %d\n", data.num_blocks); + std::printf(" num_groups = %d\n", data.num_groups); + std::printf(" s2_blocksize = %d\n", data.s2_blocksize); + std::printf(" offset = %f\n", data.offset); + std::printf(" compute_type = %s\n", compute_type.c_str()); + + if (!is_power_of_two(data.blocksize) || !is_power_of_two(data.s2_blocksize)) { + std::fprintf(stderr, + "[ERROR] blocksize and s2_blocksize must be powers of two for log2-shift kernel. got blocksize=%d s2_blocksize=%d\n", + data.blocksize, data.s2_blocksize); + return 1; + } + + uint8_t* d_packed_weights = nullptr; + uint8_t* d_absmax_q = nullptr; + uint16_t* d_absmax2 = nullptr; + uint16_t* d_code2 = nullptr; + uint16_t* d_output_bits = nullptr; + + int64_t packed_size = data.n_elements / 2; + int64_t output_bytes = data.n_elements * 2; + + MUSA_CHECK(musaMalloc((void**)&d_packed_weights, packed_size)); + MUSA_CHECK(musaMalloc((void**)&d_absmax_q, data.num_blocks)); + MUSA_CHECK(musaMalloc((void**)&d_absmax2, data.num_groups * sizeof(uint16_t))); + MUSA_CHECK(musaMalloc((void**)&d_code2, 256 * sizeof(uint16_t))); + MUSA_CHECK(musaMalloc((void**)&d_output_bits, output_bytes)); + + MUSA_CHECK(musaMemcpy(d_packed_weights, data.packed_weights.data(), + packed_size, musaMemcpyHostToDevice)); + MUSA_CHECK(musaMemcpy(d_absmax_q, data.absmax_q.data(), + data.num_blocks, musaMemcpyHostToDevice)); + MUSA_CHECK(musaMemcpy(d_absmax2, data.absmax2.data(), + data.num_groups * sizeof(uint16_t), musaMemcpyHostToDevice)); + MUSA_CHECK(musaMemcpy(d_code2, data.code2.data(), + 256 * sizeof(uint16_t), musaMemcpyHostToDevice)); + + int n_packed = (int)((data.n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + int threads_per_block = 256; + int num_blocks_kernel = (n_packed_vec + threads_per_block - 1) / threads_per_block; + int log2_bs = log2_pow2(data.blocksize); + int log2_s2 = log2_pow2(data.s2_blocksize); + + std::printf("\n[INFO] Kernel 配置:\n"); + std::printf(" n_packed = %d\n", n_packed); + std::printf(" n_packed_vec = %d (向量化后)\n", n_packed_vec); + std::printf(" threads_per_block = %d\n", threads_per_block); + std::printf(" grid_size = %d\n", num_blocks_kernel); + std::printf(" log2_blocksize = %d\n", log2_bs); + std::printf(" log2_s2_blocksize = %d\n", log2_s2); + + std::printf("\n[INFO] 预热 %d 次...\n", warmup); + for (int i = 0; i < warmup; ++i) { + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + MUSA_CHECK(musaGetLastError()); + } + MUSA_CHECK(musaDeviceSynchronize()); + + std::printf("[INFO] 计时 %d 次...\n", repeats); + + musaEvent_t ev_start; + musaEvent_t ev_end; + MUSA_CHECK(musaEventCreate(&ev_start)); + MUSA_CHECK(musaEventCreate(&ev_end)); + + std::vector times(repeats); + + for (int i = 0; i < repeats; ++i) { + MUSA_CHECK(musaDeviceSynchronize()); + MUSA_CHECK(musaEventRecord(ev_start)); + + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + + MUSA_CHECK(musaGetLastError()); + MUSA_CHECK(musaEventRecord(ev_end)); + MUSA_CHECK(musaEventSynchronize(ev_end)); + MUSA_CHECK(musaEventElapsedTime(×[i], ev_start, ev_end)); + } + + std::vector sorted_times = times; + std::sort(sorted_times.begin(), sorted_times.end()); + + float total_ms = 0.0f; + for (float t : times) { + total_ms += t; + } + + float min_ms = sorted_times.front(); + float max_ms = sorted_times.back(); + float avg_ms = total_ms / repeats; + float median_ms = sorted_times[repeats / 2]; + + double read_bytes = (double)packed_size + data.num_blocks + + data.num_groups * 2.0 + 256.0 * 2.0; + double write_bytes = (double)output_bytes; + double total_bytes = read_bytes + write_bytes; + double bandwidth_gbps = total_bytes / (median_ms * 1e-3) / 1e9; + + std::printf("\n========================================\n"); + std::printf(" NF4 反量化 Kernel 性能 (MUSA)\n"); + std::printf("========================================\n"); + std::printf(" 矩阵大小 : (%ld, %ld)\n", (long)data.num_rows, (long)data.num_cols); + std::printf(" 块大小 : %d\n", data.blocksize); + std::printf(" 输出类型 : %s\n", compute_type.c_str()); + std::printf(" 平均耗时 : %.4f ms\n", avg_ms); + std::printf(" 中位数耗时 : %.4f ms\n", median_ms); + std::printf(" 最小耗时 : %.4f ms\n", min_ms); + std::printf(" 最大耗时 : %.4f ms\n", max_ms); + std::printf(" 有效带宽 : %.2f GB/s (基于中位数)\n", bandwidth_gbps); + std::printf("========================================\n"); + + std::vector h_output_bits(data.n_elements); + MUSA_CHECK(musaMemcpy(h_output_bits.data(), d_output_bits, output_bytes, musaMemcpyDeviceToHost)); + + FILE* fout = std::fopen(output_file, "wb"); + if (!fout) { + std::fprintf(stderr, "[ERROR] Cannot open output file: %s\n", output_file); + return 1; + } + + std::fwrite(h_output_bits.data(), sizeof(uint16_t), h_output_bits.size(), fout); + std::fclose(fout); + + std::printf("\n[INFO] 已写入解量化输出: %s (%ld bytes)\n", output_file, (long)output_bytes); + + MUSA_CHECK(musaEventDestroy(ev_start)); + MUSA_CHECK(musaEventDestroy(ev_end)); + MUSA_CHECK(musaFree(d_packed_weights)); + MUSA_CHECK(musaFree(d_absmax_q)); + MUSA_CHECK(musaFree(d_absmax2)); + MUSA_CHECK(musaFree(d_code2)); + MUSA_CHECK(musaFree(d_output_bits)); + + std::printf("[DONE] 完成\n"); + return 0; +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_kernel.mu b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_kernel.mu new file mode 100644 index 0000000..f4b1e4e --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_kernel.mu @@ -0,0 +1,216 @@ +#pragma once + +#include + +__constant__ float NF4_DEQUANT_TABLE[16] = { + -1.0f, + -0.6961928009986877f, + -0.5250730514526367f, + -0.39491748809814453f, + -0.28444138169288635f, + -0.18477343022823334f, + -0.09105003625154495f, + 0.0f, + 0.07958029955625534f, + 0.16093020141124725f, + 0.24611230194568634f, + 0.33791524171829224f, + 0.44070982933044434f, + 0.5626170039176941f, + 0.7229568362236023f, + 1.0f +}; + +inline int log2_pow2(int x) { + int r = 0; + while (x > 1) { + x >>= 1; + r++; + } + return r; +} + +__device__ __forceinline__ uint32_t float_to_bits(float v) { + union { + float f; + uint32_t u; + } x; + x.f = v; + return x.u; +} + +__device__ __forceinline__ float bits_to_float(uint32_t v) { + union { + float f; + uint32_t u; + } x; + x.u = v; + return x.f; +} + +__device__ __forceinline__ float half_bits_to_float(uint16_t h) { + uint32_t sign = (uint32_t)(h & 0x8000u) << 16; + uint32_t exp = (h >> 10) & 0x1Fu; + uint32_t mant = h & 0x03FFu; + + uint32_t out; + if (exp == 0) { + if (mant == 0) { + out = sign; + } else { + exp = 127 - 15 + 1; + while ((mant & 0x0400u) == 0) { + mant <<= 1; + exp--; + } + mant &= 0x03FFu; + out = sign | (exp << 23) | (mant << 13); + } + } else if (exp == 0x1Fu) { + out = sign | 0x7F800000u | (mant << 13); + } else { + out = sign | ((exp + (127 - 15)) << 23) | (mant << 13); + } + + return bits_to_float(out); +} + +__device__ __forceinline__ uint16_t float_to_half_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t sign = (x >> 16) & 0x8000u; + int32_t exp = (int32_t)((x >> 23) & 0xFFu) - 127 + 15; + uint32_t mant = x & 0x7FFFFFu; + + if (exp <= 0) { + if (exp < -10) { + return (uint16_t)sign; + } + mant = (mant | 0x800000u) >> (1 - exp); + if ((mant & 0x00001000u) != 0) { + mant += 0x00002000u; + } + return (uint16_t)(sign | (mant >> 13)); + } + + if (exp >= 31) { + return (uint16_t)(sign | 0x7C00u); + } + + uint32_t out = sign | ((uint32_t)exp << 10) | (mant >> 13); + if ((mant & 0x00001000u) != 0) { + out += 1; + } + return (uint16_t)out; +} + +__device__ __forceinline__ uint16_t float_to_bf16_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t lsb = (x >> 16) & 1u; + x += 0x7FFFu + lsb; + return (uint16_t)(x >> 16); +} + +template +__global__ void nf4_dequantize_kernel( + const uint8_t* __restrict__ packed_weights, + const uint8_t* __restrict__ absmax_q, + const uint16_t* __restrict__ absmax2, + const uint16_t* __restrict__ code2, + float offset, + int log2_blocksize, + int log2_s2_blocksize, + int64_t n_elements, + uint16_t* __restrict__ output_bits) { + __shared__ float s_nf4_table[16]; + if (threadIdx.x < 16) { + s_nf4_table[threadIdx.x] = NF4_DEQUANT_TABLE[threadIdx.x]; + } + __syncthreads(); + + int tid_vec = blockIdx.x * blockDim.x + threadIdx.x; + int n_packed = (int)((n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + if (tid_vec >= n_packed_vec) { + return; + } + + int byte_offset = tid_vec * 4; + uint32_t packed4 = 0; + if (byte_offset + 4 <= n_packed) { + packed4 = reinterpret_cast(packed_weights)[tid_vec]; + } else { + for (int b = 0; b < 4 && byte_offset + b < n_packed; ++b) { + packed4 |= ((uint32_t)packed_weights[byte_offset + b]) << (b << 3); + } + } + + int elem_base = tid_vec * 8; + uint32_t out_packed[4]; + + #pragma unroll + for (int b = 0; b < 4; ++b) { + int elem0 = elem_base + b * 2; + int elem1 = elem0 + 1; + + uint8_t packed_byte = (packed4 >> (b * 8)) & 0xFF; + uint8_t idx_hi = (packed_byte >> 4) & 0x0F; + uint8_t idx_lo = packed_byte & 0x0F; + + float val_hi = s_nf4_table[idx_hi]; + float val_lo = s_nf4_table[idx_lo]; + + int block_idx0 = elem0 >> log2_blocksize; + int group_idx0 = block_idx0 >> log2_s2_blocksize; + uint8_t aq0 = absmax_q[block_idx0]; + + float absmax_real0 = half_bits_to_float(code2[aq0]) + * half_bits_to_float(absmax2[group_idx0]) + + offset; + + uint16_t out0; + if (elem0 < n_elements) { + float dq0 = val_hi * absmax_real0; + out0 = OUTPUT_BF16 ? float_to_bf16_bits(dq0) : float_to_half_bits(dq0); + } else { + out0 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + uint16_t out1; + if (elem1 < n_elements) { + int block_idx1 = elem1 >> log2_blocksize; + float absmax_real1; + if (block_idx1 == block_idx0) { + absmax_real1 = absmax_real0; + } else { + uint8_t aq1 = absmax_q[block_idx1]; + int group_idx1 = block_idx1 >> log2_s2_blocksize; + absmax_real1 = half_bits_to_float(code2[aq1]) + * half_bits_to_float(absmax2[group_idx1]) + + offset; + } + float dq1 = val_lo * absmax_real1; + out1 = OUTPUT_BF16 ? float_to_bf16_bits(dq1) : float_to_half_bits(dq1); + } else { + out1 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + out_packed[b] = (uint32_t)out0 | ((uint32_t)out1 << 16); + } + + int out_base = tid_vec * 4; + uint32_t* out_u32 = reinterpret_cast(output_bits); + + int valid_packs = 0; + for (int b = 0; b < 4; ++b) { + if (byte_offset + b < n_packed) { + valid_packs++; + } + } + + #pragma unroll + for (int b = 0; b < 4; ++b) { + if (b < valid_packs) { + out_u32[out_base + b] = out_packed[b]; + } + } +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_musa b/03_nf4_dequant/xfarawayx/kernel_noncuda/moore/nf4_dequant_musa new file mode 100644 index 0000000000000000000000000000000000000000..5096c549ed224f6d8209bea223c4ceda29f1fa34 GIT binary patch literal 134128 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/dev/null 2>&1; then + PYTHON="$(command -v python3)" +else + echo "[ERROR] 找不到 python3" + exit 1 +fi + +ROWS=4096 +COLS=4096 +BLOCKSIZE=64 +COMPUTE_TYPE="bf16" +WARMUP=10 +REPEATS=100 +MCC_BIN="${MCC:-mcc}" +COMMAND="test" + +if [[ "$#" -gt 0 && ! "$1" == --* ]]; then + COMMAND="$1" + shift +fi + +while [[ "$#" -gt 0 ]]; do + case "$1" in + --rows) ROWS="$2"; shift ;; + --cols) COLS="$2"; shift ;; + --blocksize) BLOCKSIZE="$2"; shift ;; + --compute_type) COMPUTE_TYPE="$2"; shift ;; + --warmup) WARMUP="$2"; shift ;; + --repeats) REPEATS="$2"; shift ;; + --mcc) MCC_BIN="$2"; shift ;; + *) echo "[ERROR] 未知参数: $1"; exit 1 ;; + esac + shift +done + +TAG="${ROWS}x${COLS}_bs${BLOCKSIZE}" +WEIGHT_FILE="${DATA_DIR}/nf4_weights_${TAG}.bin" +REF_FILE="${DATA_DIR}/nf4_ref_output_${TAG}_${COMPUTE_TYPE}.bin" +MOORE_OUTPUT="${DATA_DIR}/moore_output_${TAG}_${COMPUTE_TYPE}.bin" + +build_kernel() { + echo "[build] 使用编译器: ${MCC_BIN}" + make -C "${KERNEL_DIR}" clean >/dev/null + make -C "${KERNEL_DIR}" MCC="${MCC_BIN}" -j"$(nproc)" +} + +run_kernel() { + if [ ! -f "${WEIGHT_FILE}" ]; then + echo "[ERROR] 缺少权重文件: ${WEIGHT_FILE}" + echo " 请先在支持 CUDA 的环境执行 ./run.sh generate 生成数据" + exit 1 + fi + + "${KERNEL_DIR}/nf4_dequant_musa" \ + "${WEIGHT_FILE}" "${MOORE_OUTPUT}" "${COMPUTE_TYPE}" "${WARMUP}" "${REPEATS}" +} + +verify_output() { + if [ ! -f "${REF_FILE}" ]; then + echo "[WARN] 缺少参考文件: ${REF_FILE}" + echo " 跳过 verify。可先在 CUDA 环境运行 ./run.sh generate --compute_type ${COMPUTE_TYPE}" + return 0 + fi + + "${PYTHON}" "${SCRIPTS_DIR}/verify.py" \ + --weight_file "${WEIGHT_FILE}" \ + --ref_file "${REF_FILE}" \ + --cuda_file "${MOORE_OUTPUT}" \ + --compute_type "${COMPUTE_TYPE}" +} + +case "${COMMAND}" in + build) + build_kernel + ;; + run) + run_kernel + ;; + verify) + verify_output + ;; + test) + build_kernel + run_kernel + verify_output + ;; + *) + echo "[ERROR] 未知命令: ${COMMAND}" + echo "可用命令: build | run | verify | test" + exit 1 + ;; +esac + +echo "[DONE] ${COMMAND} 完成" diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/Makefile b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/Makefile new file mode 100644 index 0000000..38ee0eb --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/Makefile @@ -0,0 +1,19 @@ +MXCC ?= mxcc +TARGET ?= nf4_dequant_maca +SRC ?= main.maca + +CXXFLAGS ?= -O3 -std=c++17 +INCLUDES ?= -I. + +.PHONY: all clean run + +all: $(TARGET) + +$(TARGET): $(SRC) nf4_dequant_kernel.maca + $(MXCC) $(CXXFLAGS) $(INCLUDES) -o $@ $(SRC) + +run: $(TARGET) + @echo "Usage: ./$(TARGET) [bf16|fp16] [warmup] [repeats]" + +clean: + rm -f $(TARGET) diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/README.md b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/README.md new file mode 100644 index 0000000..5964061 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/README.md @@ -0,0 +1,46 @@ +# 沐曦 (MACA) 适配版 NF4 反量化 + +该目录是对 `kernel/` 中 CUDA 版本的平移适配,目标是运行在沐曦 GPU 环境。 + +## 适配要点 + +- 编译器从 `nvcc` 切换为 `mxcc` +- 主源码使用 `.maca` 后缀 +- 运行时 API 使用 `mc*`(例如 `mcMalloc` / `mcMemcpy`) +- 保留与原工程一致的二进制输入输出格式,直接复用 `scripts/verify.py` + +## 目录文件 + +- `main.maca`: 主入口,负责文件 IO / kernel 启动 / 性能统计 +- `nf4_dequant_kernel.maca`: NF4 反量化 kernel +- `Makefile`: 使用 `mxcc` 构建 `nf4_dequant_maca` +- `run_mutex.sh`: 一键 build/run/verify + +## 构建 + +```bash +cd kernel_noncuda/mutex +make MXCC=mxcc -j +``` + +## 运行 + +```bash +# 需要已有 data/nf4_weights_*.bin +./nf4_dequant_maca ../../data/nf4_weights_4096x4096_bs64.bin \ + ../../data/mutex_output_4096x4096_bs64_fp16.bin \ + fp16 10 100 +``` + +## 一键流程 + +```bash +cd kernel_noncuda/mutex +bash run_mutex.sh test --rows 4096 --cols 4096 --blocksize 64 --compute_type fp16 +``` + +说明: + +- `run_mutex.sh` 默认只消费已有测试数据,不会调用 `generate_data.py`。 + - 可先在另一台 CUDA 机器执行 `./run.sh generate` 生成 `data/` 再拷贝过来。 +- `compute_type` 支持 `fp16` 和 `bf16`,输出文件格式与原验证脚本兼容。 diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/main.maca b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/main.maca new file mode 100644 index 0000000..10c52eb --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/main.maca @@ -0,0 +1,319 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __has_include() +#include +#elif __has_include() +#include +#else +#error "MACA runtime header not found. Please install MACA SDK and set include paths." +#endif + +#if __has_include() +#include +#endif + +#include "nf4_dequant_kernel.maca" + +#define MUTEX_BACKEND_NAME "MACA" + +#define MC_CHECK(call) \ + do { \ + mcError_t err__ = (call); \ + if (err__ != mcSuccess) { \ + std::fprintf(stderr, "MC error at %s:%d: %s\n", \ + __FILE__, __LINE__, mcGetErrorString(err__)); \ + std::exit(EXIT_FAILURE); \ + } \ + } while (0) + +struct NF4Data { + int64_t num_rows = 0; + int64_t num_cols = 0; + int32_t blocksize = 0; + + std::vector packed_weights; + std::vector absmax_q; + std::vector absmax2; + std::vector code2; + float offset = 0.0f; + + int64_t n_elements = 0; + int32_t num_blocks = 0; + int32_t num_groups = 0; + int32_t s2_blocksize = 0; +}; + +static bool is_power_of_two(int x) { + return x > 0 && ((x & (x - 1)) == 0); +} + +static bool read_nf4_data(const char* filepath, NF4Data& data) { + FILE* f = std::fopen(filepath, "rb"); + if (!f) { + std::fprintf(stderr, "[ERROR] Cannot open file: %s\n", filepath); + return false; + } + + if (std::fread(&data.num_rows, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.num_cols, sizeof(int64_t), 1, f) != 1 || + std::fread(&data.blocksize, sizeof(int32_t), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad header in file: %s\n", filepath); + return false; + } + + data.n_elements = data.num_rows * data.num_cols; + data.num_blocks = (int32_t)((data.n_elements + data.blocksize - 1) / data.blocksize); + + int64_t packed_size = data.n_elements / 2; + data.packed_weights.resize(packed_size); + if (std::fread(data.packed_weights.data(), 1, packed_size, f) != (size_t)packed_size) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad packed data in file: %s\n", filepath); + return false; + } + + data.absmax_q.resize(data.num_blocks); + if (std::fread(data.absmax_q.data(), 1, data.num_blocks, f) != (size_t)data.num_blocks) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax_q in file: %s\n", filepath); + return false; + } + + long current_pos = std::ftell(f); + std::fseek(f, 0, SEEK_END); + long file_size = std::ftell(f); + std::fseek(f, current_pos, SEEK_SET); + + long remaining = file_size - current_pos; + long fixed_tail = 256 * 2 + 4; + long absmax2_bytes = remaining - fixed_tail; + + if (absmax2_bytes <= 0 || (absmax2_bytes % 2) != 0) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Invalid absmax2 segment in file: %s\n", filepath); + return false; + } + + data.num_groups = (int32_t)(absmax2_bytes / 2); + data.s2_blocksize = (data.num_blocks + data.num_groups - 1) / data.num_groups; + + data.absmax2.resize(data.num_groups); + if (std::fread(data.absmax2.data(), 2, data.num_groups, f) != (size_t)data.num_groups) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad absmax2 in file: %s\n", filepath); + return false; + } + + data.code2.resize(256); + if (std::fread(data.code2.data(), 2, 256, f) != 256) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Bad code2 in file: %s\n", filepath); + return false; + } + + if (std::fread(&data.offset, sizeof(float), 1, f) != 1) { + std::fclose(f); + std::fprintf(stderr, "[ERROR] Missing offset in file: %s\n", filepath); + return false; + } + + std::fclose(f); + return true; +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::fprintf(stderr, "用法: %s [bf16|fp16] [warmup] [repeats]\n", argv[0]); + return 1; + } + + const char* weight_file = argv[1]; + const char* output_file = argv[2]; + std::string compute_type = (argc > 3) ? argv[3] : "bf16"; + int warmup = (argc > 4) ? std::atoi(argv[4]) : 10; + int repeats = (argc > 5) ? std::atoi(argv[5]) : 100; + + bool use_bf16 = (compute_type == "bf16"); + if (!use_bf16 && compute_type != "fp16") { + std::fprintf(stderr, "[ERROR] compute_type must be bf16 or fp16\n"); + return 1; + } + + std::printf("[INFO] Backend: %s\n", MUTEX_BACKEND_NAME); + std::printf("[INFO] 读取权重文件: %s\n", weight_file); + + NF4Data data; + if (!read_nf4_data(weight_file, data)) { + return 1; + } + + std::printf(" num_rows = %ld\n", (long)data.num_rows); + std::printf(" num_cols = %ld\n", (long)data.num_cols); + std::printf(" blocksize = %d\n", data.blocksize); + std::printf(" n_elements = %ld\n", (long)data.n_elements); + std::printf(" num_blocks = %d\n", data.num_blocks); + std::printf(" num_groups = %d\n", data.num_groups); + std::printf(" s2_blocksize = %d\n", data.s2_blocksize); + std::printf(" offset = %f\n", data.offset); + std::printf(" compute_type = %s\n", compute_type.c_str()); + + if (!is_power_of_two(data.blocksize) || !is_power_of_two(data.s2_blocksize)) { + std::fprintf(stderr, + "[ERROR] blocksize and s2_blocksize must be powers of two for log2-shift kernel. got blocksize=%d s2_blocksize=%d\n", + data.blocksize, data.s2_blocksize); + return 1; + } + + uint8_t* d_packed_weights = nullptr; + uint8_t* d_absmax_q = nullptr; + uint16_t* d_absmax2 = nullptr; + uint16_t* d_code2 = nullptr; + uint16_t* d_output_bits = nullptr; + + int64_t packed_size = data.n_elements / 2; + int64_t output_bytes = data.n_elements * 2; + + MC_CHECK(mcMalloc((void**)&d_packed_weights, packed_size)); + MC_CHECK(mcMalloc((void**)&d_absmax_q, data.num_blocks)); + MC_CHECK(mcMalloc((void**)&d_absmax2, data.num_groups * sizeof(uint16_t))); + MC_CHECK(mcMalloc((void**)&d_code2, 256 * sizeof(uint16_t))); + MC_CHECK(mcMalloc((void**)&d_output_bits, output_bytes)); + + MC_CHECK(mcMemcpy(d_packed_weights, data.packed_weights.data(), + packed_size, mcMemcpyHostToDevice)); + MC_CHECK(mcMemcpy(d_absmax_q, data.absmax_q.data(), + data.num_blocks, mcMemcpyHostToDevice)); + MC_CHECK(mcMemcpy(d_absmax2, data.absmax2.data(), + data.num_groups * sizeof(uint16_t), mcMemcpyHostToDevice)); + MC_CHECK(mcMemcpy(d_code2, data.code2.data(), + 256 * sizeof(uint16_t), mcMemcpyHostToDevice)); + + int n_packed = (int)((data.n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + int threads_per_block = 256; + int num_blocks_kernel = (n_packed_vec + threads_per_block - 1) / threads_per_block; + int log2_bs = log2_pow2(data.blocksize); + int log2_s2 = log2_pow2(data.s2_blocksize); + + std::printf("\n[INFO] Kernel 配置:\n"); + std::printf(" n_packed = %d\n", n_packed); + std::printf(" n_packed_vec = %d (向量化后)\n", n_packed_vec); + std::printf(" threads_per_block = %d\n", threads_per_block); + std::printf(" grid_size = %d\n", num_blocks_kernel); + std::printf(" log2_blocksize = %d\n", log2_bs); + std::printf(" log2_s2_blocksize = %d\n", log2_s2); + + std::printf("\n[INFO] 预热 %d 次...\n", warmup); + for (int i = 0; i < warmup; ++i) { + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + MC_CHECK(mcGetLastError()); + } + MC_CHECK(mcDeviceSynchronize()); + + std::printf("[INFO] 计时 %d 次...\n", repeats); + + mcEvent_t ev_start; + mcEvent_t ev_end; + MC_CHECK(mcEventCreate(&ev_start)); + MC_CHECK(mcEventCreate(&ev_end)); + + std::vector times(repeats); + + for (int i = 0; i < repeats; ++i) { + MC_CHECK(mcDeviceSynchronize()); + MC_CHECK(mcEventRecord(ev_start)); + + if (use_bf16) { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } else { + nf4_dequantize_kernel<<>>( + d_packed_weights, d_absmax_q, d_absmax2, d_code2, + data.offset, log2_bs, log2_s2, + data.n_elements, d_output_bits); + } + + MC_CHECK(mcGetLastError()); + MC_CHECK(mcEventRecord(ev_end)); + MC_CHECK(mcEventSynchronize(ev_end)); + MC_CHECK(mcEventElapsedTime(×[i], ev_start, ev_end)); + } + + std::vector sorted_times = times; + std::sort(sorted_times.begin(), sorted_times.end()); + + float total_ms = 0.0f; + for (float t : times) { + total_ms += t; + } + + float min_ms = sorted_times.front(); + float max_ms = sorted_times.back(); + float avg_ms = total_ms / repeats; + float median_ms = sorted_times[repeats / 2]; + + double read_bytes = (double)packed_size + data.num_blocks + + data.num_groups * 2.0 + 256.0 * 2.0; + double write_bytes = (double)output_bytes; + double total_bytes = read_bytes + write_bytes; + double bandwidth_gbps = total_bytes / (median_ms * 1e-3) / 1e9; + + std::printf("\n========================================\n"); + std::printf(" NF4 反量化 Kernel 性能 (MACA)\n"); + std::printf("========================================\n"); + std::printf(" 矩阵大小 : (%ld, %ld)\n", (long)data.num_rows, (long)data.num_cols); + std::printf(" 块大小 : %d\n", data.blocksize); + std::printf(" 输出类型 : %s\n", compute_type.c_str()); + std::printf(" 平均耗时 : %.4f ms\n", avg_ms); + std::printf(" 中位数耗时 : %.4f ms\n", median_ms); + std::printf(" 最小耗时 : %.4f ms\n", min_ms); + std::printf(" 最大耗时 : %.4f ms\n", max_ms); + std::printf(" 有效带宽 : %.2f GB/s (基于中位数)\n", bandwidth_gbps); + std::printf("========================================\n"); + + std::vector h_output_bits(data.n_elements); + MC_CHECK(mcMemcpy(h_output_bits.data(), d_output_bits, output_bytes, mcMemcpyDeviceToHost)); + + FILE* fout = std::fopen(output_file, "wb"); + if (!fout) { + std::fprintf(stderr, "[ERROR] Cannot open output file: %s\n", output_file); + return 1; + } + + std::fwrite(h_output_bits.data(), sizeof(uint16_t), h_output_bits.size(), fout); + std::fclose(fout); + + std::printf("\n[INFO] 已写入解量化输出: %s (%ld bytes)\n", output_file, (long)output_bytes); + + MC_CHECK(mcEventDestroy(ev_start)); + MC_CHECK(mcEventDestroy(ev_end)); + MC_CHECK(mcFree(d_packed_weights)); + MC_CHECK(mcFree(d_absmax_q)); + MC_CHECK(mcFree(d_absmax2)); + MC_CHECK(mcFree(d_code2)); + MC_CHECK(mcFree(d_output_bits)); + + std::printf("[DONE] 完成\n"); + return 0; +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_kernel.maca b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_kernel.maca new file mode 100644 index 0000000..f4b1e4e --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_kernel.maca @@ -0,0 +1,216 @@ +#pragma once + +#include + +__constant__ float NF4_DEQUANT_TABLE[16] = { + -1.0f, + -0.6961928009986877f, + -0.5250730514526367f, + -0.39491748809814453f, + -0.28444138169288635f, + -0.18477343022823334f, + -0.09105003625154495f, + 0.0f, + 0.07958029955625534f, + 0.16093020141124725f, + 0.24611230194568634f, + 0.33791524171829224f, + 0.44070982933044434f, + 0.5626170039176941f, + 0.7229568362236023f, + 1.0f +}; + +inline int log2_pow2(int x) { + int r = 0; + while (x > 1) { + x >>= 1; + r++; + } + return r; +} + +__device__ __forceinline__ uint32_t float_to_bits(float v) { + union { + float f; + uint32_t u; + } x; + x.f = v; + return x.u; +} + +__device__ __forceinline__ float bits_to_float(uint32_t v) { + union { + float f; + uint32_t u; + } x; + x.u = v; + return x.f; +} + +__device__ __forceinline__ float half_bits_to_float(uint16_t h) { + uint32_t sign = (uint32_t)(h & 0x8000u) << 16; + uint32_t exp = (h >> 10) & 0x1Fu; + uint32_t mant = h & 0x03FFu; + + uint32_t out; + if (exp == 0) { + if (mant == 0) { + out = sign; + } else { + exp = 127 - 15 + 1; + while ((mant & 0x0400u) == 0) { + mant <<= 1; + exp--; + } + mant &= 0x03FFu; + out = sign | (exp << 23) | (mant << 13); + } + } else if (exp == 0x1Fu) { + out = sign | 0x7F800000u | (mant << 13); + } else { + out = sign | ((exp + (127 - 15)) << 23) | (mant << 13); + } + + return bits_to_float(out); +} + +__device__ __forceinline__ uint16_t float_to_half_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t sign = (x >> 16) & 0x8000u; + int32_t exp = (int32_t)((x >> 23) & 0xFFu) - 127 + 15; + uint32_t mant = x & 0x7FFFFFu; + + if (exp <= 0) { + if (exp < -10) { + return (uint16_t)sign; + } + mant = (mant | 0x800000u) >> (1 - exp); + if ((mant & 0x00001000u) != 0) { + mant += 0x00002000u; + } + return (uint16_t)(sign | (mant >> 13)); + } + + if (exp >= 31) { + return (uint16_t)(sign | 0x7C00u); + } + + uint32_t out = sign | ((uint32_t)exp << 10) | (mant >> 13); + if ((mant & 0x00001000u) != 0) { + out += 1; + } + return (uint16_t)out; +} + +__device__ __forceinline__ uint16_t float_to_bf16_bits(float v) { + uint32_t x = float_to_bits(v); + uint32_t lsb = (x >> 16) & 1u; + x += 0x7FFFu + lsb; + return (uint16_t)(x >> 16); +} + +template +__global__ void nf4_dequantize_kernel( + const uint8_t* __restrict__ packed_weights, + const uint8_t* __restrict__ absmax_q, + const uint16_t* __restrict__ absmax2, + const uint16_t* __restrict__ code2, + float offset, + int log2_blocksize, + int log2_s2_blocksize, + int64_t n_elements, + uint16_t* __restrict__ output_bits) { + __shared__ float s_nf4_table[16]; + if (threadIdx.x < 16) { + s_nf4_table[threadIdx.x] = NF4_DEQUANT_TABLE[threadIdx.x]; + } + __syncthreads(); + + int tid_vec = blockIdx.x * blockDim.x + threadIdx.x; + int n_packed = (int)((n_elements + 1) / 2); + int n_packed_vec = (n_packed + 3) / 4; + if (tid_vec >= n_packed_vec) { + return; + } + + int byte_offset = tid_vec * 4; + uint32_t packed4 = 0; + if (byte_offset + 4 <= n_packed) { + packed4 = reinterpret_cast(packed_weights)[tid_vec]; + } else { + for (int b = 0; b < 4 && byte_offset + b < n_packed; ++b) { + packed4 |= ((uint32_t)packed_weights[byte_offset + b]) << (b << 3); + } + } + + int elem_base = tid_vec * 8; + uint32_t out_packed[4]; + + #pragma unroll + for (int b = 0; b < 4; ++b) { + int elem0 = elem_base + b * 2; + int elem1 = elem0 + 1; + + uint8_t packed_byte = (packed4 >> (b * 8)) & 0xFF; + uint8_t idx_hi = (packed_byte >> 4) & 0x0F; + uint8_t idx_lo = packed_byte & 0x0F; + + float val_hi = s_nf4_table[idx_hi]; + float val_lo = s_nf4_table[idx_lo]; + + int block_idx0 = elem0 >> log2_blocksize; + int group_idx0 = block_idx0 >> log2_s2_blocksize; + uint8_t aq0 = absmax_q[block_idx0]; + + float absmax_real0 = half_bits_to_float(code2[aq0]) + * half_bits_to_float(absmax2[group_idx0]) + + offset; + + uint16_t out0; + if (elem0 < n_elements) { + float dq0 = val_hi * absmax_real0; + out0 = OUTPUT_BF16 ? float_to_bf16_bits(dq0) : float_to_half_bits(dq0); + } else { + out0 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + uint16_t out1; + if (elem1 < n_elements) { + int block_idx1 = elem1 >> log2_blocksize; + float absmax_real1; + if (block_idx1 == block_idx0) { + absmax_real1 = absmax_real0; + } else { + uint8_t aq1 = absmax_q[block_idx1]; + int group_idx1 = block_idx1 >> log2_s2_blocksize; + absmax_real1 = half_bits_to_float(code2[aq1]) + * half_bits_to_float(absmax2[group_idx1]) + + offset; + } + float dq1 = val_lo * absmax_real1; + out1 = OUTPUT_BF16 ? float_to_bf16_bits(dq1) : float_to_half_bits(dq1); + } else { + out1 = OUTPUT_BF16 ? float_to_bf16_bits(0.0f) : float_to_half_bits(0.0f); + } + + out_packed[b] = (uint32_t)out0 | ((uint32_t)out1 << 16); + } + + int out_base = tid_vec * 4; + uint32_t* out_u32 = reinterpret_cast(output_bits); + + int valid_packs = 0; + for (int b = 0; b < 4; ++b) { + if (byte_offset + b < n_packed) { + valid_packs++; + } + } + + #pragma unroll + for (int b = 0; b < 4; ++b) { + if (b < valid_packs) { + out_u32[out_base + b] = out_packed[b]; + } + } +} diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_maca b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/nf4_dequant_maca new file mode 100644 index 0000000000000000000000000000000000000000..2054cff372a058d3b886e379fa10c1c65e4993a2 GIT binary patch literal 105168 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 literal 0 HcmV?d00001 diff --git a/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/run_mutex.sh b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/run_mutex.sh new file mode 100644 index 0000000..6e71022 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/kernel_noncuda/mutex/run_mutex.sh @@ -0,0 +1,105 @@ +#!/bin/bash +set -e +set -o pipefail + +PROJ_DIR="$(cd "$(dirname "$0")/../.." && pwd)" +KERNEL_DIR="${PROJ_DIR}/kernel_noncuda/mutex" +SCRIPTS_DIR="${PROJ_DIR}/scripts" +DATA_DIR="${PROJ_DIR}/data" + +if [ -x "${PROJ_DIR}/.venv/bin/python" ]; then + PYTHON="${PROJ_DIR}/.venv/bin/python" +elif command -v python3 >/dev/null 2>&1; then + PYTHON="$(command -v python3)" +else + echo "[ERROR] 找不到 python3" + exit 1 +fi + +ROWS=4096 +COLS=4096 +BLOCKSIZE=64 +COMPUTE_TYPE="bf16" +WARMUP=10 +REPEATS=100 +MXCC_BIN="${MXCC:-mxcc}" +COMMAND="test" + +if [[ "$#" -gt 0 && ! "$1" == --* ]]; then + COMMAND="$1" + shift +fi + +while [[ "$#" -gt 0 ]]; do + case "$1" in + --rows) ROWS="$2"; shift ;; + --cols) COLS="$2"; shift ;; + --blocksize) BLOCKSIZE="$2"; shift ;; + --compute_type) COMPUTE_TYPE="$2"; shift ;; + --warmup) WARMUP="$2"; shift ;; + --repeats) REPEATS="$2"; shift ;; + --mxcc) MXCC_BIN="$2"; shift ;; + *) echo "[ERROR] 未知参数: $1"; exit 1 ;; + esac + shift +done + +TAG="${ROWS}x${COLS}_bs${BLOCKSIZE}" +WEIGHT_FILE="${DATA_DIR}/nf4_weights_${TAG}.bin" +REF_FILE="${DATA_DIR}/nf4_ref_output_${TAG}_${COMPUTE_TYPE}.bin" +MUTEX_OUTPUT="${DATA_DIR}/mutex_output_${TAG}_${COMPUTE_TYPE}.bin" + +build_kernel() { + echo "[build] 使用编译器: ${MXCC_BIN}" + make -C "${KERNEL_DIR}" clean >/dev/null + make -C "${KERNEL_DIR}" MXCC="${MXCC_BIN}" -j"$(nproc)" +} + +run_kernel() { + if [ ! -f "${WEIGHT_FILE}" ]; then + echo "[ERROR] 缺少权重文件: ${WEIGHT_FILE}" + echo " 请先在支持 CUDA 的环境执行 ./run.sh generate 生成数据" + exit 1 + fi + + "${KERNEL_DIR}/nf4_dequant_maca" \ + "${WEIGHT_FILE}" "${MUTEX_OUTPUT}" "${COMPUTE_TYPE}" "${WARMUP}" "${REPEATS}" +} + +verify_output() { + if [ ! -f "${REF_FILE}" ]; then + echo "[WARN] 缺少参考文件: ${REF_FILE}" + echo " 跳过 verify。可先在 CUDA 环境运行 ./run.sh generate --compute_type ${COMPUTE_TYPE}" + return 0 + fi + + "${PYTHON}" "${SCRIPTS_DIR}/verify.py" \ + --weight_file "${WEIGHT_FILE}" \ + --ref_file "${REF_FILE}" \ + --cuda_file "${MUTEX_OUTPUT}" \ + --compute_type "${COMPUTE_TYPE}" +} + +case "${COMMAND}" in + build) + build_kernel + ;; + run) + run_kernel + ;; + verify) + verify_output + ;; + test) + build_kernel + run_kernel + verify_output + ;; + *) + echo "[ERROR] 未知命令: ${COMMAND}" + echo "可用命令: build | run | verify | test" + exit 1 + ;; +esac + +echo "[DONE] ${COMMAND} 完成" diff --git a/03_nf4_dequant/xfarawayx/run.sh b/03_nf4_dequant/xfarawayx/run.sh new file mode 100755 index 0000000..f6f6fa7 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/run.sh @@ -0,0 +1,189 @@ +#!/bin/bash +# ============================================================ +# NF4 反量化 —— 统一流程脚本 +# +# 用法: +# ./run.sh [子命令] [选项] +# +# 子命令: +# generate 仅生成测试数据 +# build 仅编译 CUDA kernel +# test 编译 → 运行 kernel → 验证正确性 (默认) +# bench bitsandbytes 基准性能测试 +# all 数据生成 → 编译 → 运行 → 验证 → bnb 对比 +# +# 选项: +# --rows R 矩阵行数 (默认: 4096) +# --cols C 矩阵列数 (默认: 4096) +# --blocksize B 量化块大小 (默认: 64) +# --compute_type T bf16|fp16 (默认: bf16) +# --seed S 随机种子 (默认: 42) +# --gpu_arch A GPU 架构, 如 80/89/90 (默认: 自动检测) +# --warmup W 预热次数 (默认: 10) +# --repeats N 计时重复次数 (默认: 100) +# --sweep bench 时扫描多种矩阵大小 +# ============================================================ +set -e +set -o pipefail + +PROJ_DIR="$(cd "$(dirname "$0")" && pwd)" +KERNEL_DIR="${PROJ_DIR}/kernel" +SCRIPTS_DIR="${PROJ_DIR}/scripts" +BUILD_DIR="${KERNEL_DIR}/build" +DATA_DIR="${PROJ_DIR}/data" + +# ---------- 自动查找 Python ---------- +# 优先使用 venv (含所需依赖), 再回退到系统 python3 +if [ -x "${PROJ_DIR}/.venv/bin/python" ]; then + PYTHON="${PROJ_DIR}/.venv/bin/python" +elif [ -x "~/.venv/bin/python" ]; then + PYTHON="~/.venv/bin/python" +elif command -v python3 &>/dev/null; then + PYTHON="$(command -v python3)" +else + echo "[ERROR] 找不到 Python, 请设置 PYTHON 环境变量" + exit 1 +fi + +# ---------- 默认参数 ---------- +ROWS=4096 +COLS=4096 +BLOCKSIZE=64 +COMPUTE_TYPE="bf16" +SEED=42 +GPU_ARCH="" +WARMUP=10 +REPEATS=100 +SWEEP="" + +# ---------- 解析子命令 ---------- +COMMAND="test" +if [[ "$#" -gt 0 && ! "$1" == --* ]]; then + COMMAND="$1" + shift +fi + +# ---------- 解析选项 ---------- +while [[ "$#" -gt 0 ]]; do + case $1 in + --rows) ROWS="$2"; shift ;; + --cols) COLS="$2"; shift ;; + --blocksize) BLOCKSIZE="$2"; shift ;; + --compute_type) COMPUTE_TYPE="$2"; shift ;; + --seed) SEED="$2"; shift ;; + --gpu_arch) GPU_ARCH="$2"; shift ;; + --warmup) WARMUP="$2"; shift ;; + --repeats) REPEATS="$2"; shift ;; + --sweep) SWEEP="--sweep" ;; + *) echo "[ERROR] 未知参数: $1"; exit 1 ;; + esac + shift +done + +TAG="${ROWS}x${COLS}_bs${BLOCKSIZE}" +WEIGHT_FILE="${DATA_DIR}/nf4_weights_${TAG}.bin" +REF_FILE="${DATA_DIR}/nf4_ref_output_${TAG}_${COMPUTE_TYPE}.bin" +CUDA_OUTPUT="${DATA_DIR}/cuda_output_${TAG}_${COMPUTE_TYPE}.bin" + +# ============================================================ +# 阶段函数 +# ============================================================ + +do_generate() { + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " [Step 1] 生成测试数据" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + if [ -f "${WEIGHT_FILE}" ] && [ -f "${REF_FILE}" ]; then + echo " 数据已存在: ${TAG}, 跳过 (删除 data/ 可强制重新生成)" + else + ${PYTHON} "${SCRIPTS_DIR}/generate_data.py" \ + --rows ${ROWS} --cols ${COLS} --blocksize ${BLOCKSIZE} \ + --seed ${SEED} --compute_type ${COMPUTE_TYPE} --outdir "${DATA_DIR}" + fi +} + +do_build() { + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " [Step 2] 编译 CUDA kernel" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + mkdir -p "${BUILD_DIR}" + + local cmake_args="-DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc" + if [ -n "${GPU_ARCH}" ]; then + cmake_args="${cmake_args} -DGPU_ARCH=${GPU_ARCH}" + fi + + cd "${BUILD_DIR}" + cmake .. ${cmake_args} 2>&1 | tail -5 + make -j$(nproc) 2>&1 | tail -5 + cd "${PROJ_DIR}" + + echo " 可执行文件: ${BUILD_DIR}/nf4_dequant" +} + +do_test() { + do_generate + do_build + + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " [Step 3] 运行 CUDA kernel" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + "${BUILD_DIR}/nf4_dequant" \ + "${WEIGHT_FILE}" "${CUDA_OUTPUT}" "${COMPUTE_TYPE}" ${WARMUP} ${REPEATS} + + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " [Step 4] 验证正确性" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + ${PYTHON} "${SCRIPTS_DIR}/verify.py" \ + --weight_file "${WEIGHT_FILE}" \ + --ref_file "${REF_FILE}" \ + --cuda_file "${CUDA_OUTPUT}" \ + --compute_type ${COMPUTE_TYPE} +} + +do_bench() { + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " bitsandbytes 基准性能测试" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + ${PYTHON} "${SCRIPTS_DIR}/bench_bnb.py" \ + --rows ${ROWS} --cols ${COLS} --blocksize ${BLOCKSIZE} \ + --seed ${SEED} --warmup ${WARMUP} --repeats ${REPEATS} ${SWEEP} +} + +do_all() { + do_test + do_bench +} + +# ============================================================ +# 入口 +# ============================================================ + +echo "============================================" +echo " NF4 反量化测试" +echo " 矩阵: ${ROWS} x ${COLS}, 块大小: ${BLOCKSIZE}" +echo " 输出类型: ${COMPUTE_TYPE}, 命令: ${COMMAND}" +echo "============================================" + +case ${COMMAND} in + generate) do_generate ;; + build) do_build ;; + test) do_test ;; + bench) do_bench ;; + all) do_all ;; + *) + echo "[ERROR] 未知子命令: ${COMMAND}" + echo "可用子命令: generate | build | test | bench | all" + exit 1 + ;; +esac + +echo "" +echo "============================================" +echo " 完成: ${COMMAND}" +echo "============================================" diff --git a/03_nf4_dequant/xfarawayx/scripts/bench_bnb.py b/03_nf4_dequant/xfarawayx/scripts/bench_bnb.py new file mode 100644 index 0000000..026b57b --- /dev/null +++ b/03_nf4_dequant/xfarawayx/scripts/bench_bnb.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +""" +NF4 反量化 —— bitsandbytes 性能基准 + +测量 bitsandbytes dequantize_4bit 的执行时间和带宽, +供 CUDA kernel 实现计算加速比。 +""" + +import argparse +import statistics + +import torch +import bitsandbytes.functional as F + + +def parse_args(): + parser = argparse.ArgumentParser(description="bitsandbytes NF4 解量化性能基准") + parser.add_argument("--rows", type=int, default=4096) + parser.add_argument("--cols", type=int, default=4096) + parser.add_argument("--blocksize", type=int, default=64, choices=[64, 128]) + parser.add_argument("--warmup", type=int, default=10) + parser.add_argument("--repeats", type=int, default=100) + parser.add_argument("--seed", type=int, default=42) + parser.add_argument("--sweep", action="store_true", + help="测试多种矩阵大小") + return parser.parse_args() + + +def bench_one(rows, cols, blocksize, seed, warmup, repeats): + """对单个配置运行基准测试,返回 (avg_ms, median_ms, min_ms, max_ms, bw_gbps).""" + torch.manual_seed(seed) + weight = torch.randn(rows, cols, dtype=torch.float16, device="cuda") + quant, state = F.quantize_4bit( + weight, quant_type="nf4", blocksize=blocksize, + compress_statistics=True, + ) + + n_elements = rows * cols + total_bytes = n_elements // 2 + n_elements * 2 # packed_in + fp16_out + + # 预热 + for _ in range(warmup): + _ = F.dequantize_4bit(quant, state) + torch.cuda.synchronize() + + # 计时 + starts = [torch.cuda.Event(enable_timing=True) for _ in range(repeats)] + ends = [torch.cuda.Event(enable_timing=True) for _ in range(repeats)] + + for i in range(repeats): + starts[i].record() + _ = F.dequantize_4bit(quant, state) + ends[i].record() + + torch.cuda.synchronize() + times = sorted(s.elapsed_time(e) for s, e in zip(starts, ends)) + + avg_ms = statistics.mean(times) + median_ms = statistics.median(times) + min_ms = times[0] + max_ms = times[-1] + bw_gbps = total_bytes / (median_ms * 1e-3) / 1e9 + + return avg_ms, median_ms, min_ms, max_ms, bw_gbps + + +def main(): + args = parse_args() + + # 主测试 + avg, med, mn, mx, bw = bench_one( + args.rows, args.cols, args.blocksize, + args.seed, args.warmup, args.repeats, + ) + + print(f"\n bitsandbytes dequantize_4bit 性能") + print(f" {'─' * 44}") + print(f" 矩阵 : ({args.rows}, {args.cols})") + print(f" 块大小 : {args.blocksize}") + print(f" 平均耗时 : {avg:.4f} ms") + print(f" 中位数耗时 : {med:.4f} ms") + print(f" 最小耗时 : {mn:.4f} ms") + print(f" 最大耗时 : {mx:.4f} ms") + print(f" 有效带宽 : {bw:.2f} GB/s (基于中位数)") + + # 可选:扫描不同矩阵大小 + if args.sweep: + shapes = [ + (1024, 1024), (2048, 2048), (4096, 4096), + (4096, 11008), (4096, 14336), + (1536, 1536), (1536, 8960), + ] + blocksizes = [64, 128] + + print(f"\n {'Shape':>18s} {'BS':>4s} {'Avg(ms)':>9s} {'Med(ms)':>9s} {'BW(GB/s)':>10s}") + print(f" {'─' * 54}") + + for r, c in shapes: + for bs in blocksizes: + a, m, _, _, b = bench_one(r, c, bs, args.seed, 5, 50) + print(f" ({r:>5d}, {c:>5d}) {bs:>4d} {a:>9.4f} {m:>9.4f} {b:>10.2f}") + + print(f"\n[bench_bnb] 完成") + + +if __name__ == "__main__": + main() diff --git a/03_nf4_dequant/xfarawayx/scripts/generate_data.py b/03_nf4_dequant/xfarawayx/scripts/generate_data.py new file mode 100644 index 0000000..b4d2ff6 --- /dev/null +++ b/03_nf4_dequant/xfarawayx/scripts/generate_data.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +""" +NF4 反量化 —— 输入数据生成 + +使用 bitsandbytes 对随机正态分布权重矩阵进行 NF4 量化(双重量化), +将量化结果按二进制格式写入文件,同时保存 bitsandbytes 解量化的参考输出。 + +二进制文件格式: + [header] + num_rows : int64 + num_cols : int64 + blocksize : int32 + [data] + packed_weights : uint8[N/2] 每字节存两个 4-bit 索引 + absmax_q : uint8[num_blocks] 一级量化缩放因子 + absmax2 : float16[num_groups] 二级缩放因子 + code2 : float16[256] 二级码表 + offset : float32 量化偏移 +""" + +import argparse +import math +import os +import struct +import sys + +import numpy as np +import torch +import bitsandbytes.functional as F + + +def parse_args(): + parser = argparse.ArgumentParser(description="NF4 量化数据生成") + parser.add_argument("--rows", type=int, default=4096) + parser.add_argument("--cols", type=int, default=4096) + parser.add_argument("--blocksize", type=int, default=64, + choices=[64, 128, 256, 512, 1024, 2048, 4096]) + parser.add_argument("--seed", type=int, default=42) + parser.add_argument("--compute_type", type=str, default="bf16", + choices=["bf16", "fp16"]) + parser.add_argument("--outdir", type=str, default=None, + help="输出目录 (默认: <项目根>/data)") + return parser.parse_args() + + +def generate_and_save(rows, cols, blocksize, seed, compute_type, outdir): + os.makedirs(outdir, exist_ok=True) + + # 1. 生成随机权重 + torch.manual_seed(seed) + weight = torch.randn(rows, cols, dtype=torch.float16, device="cuda") + print(f"[generate] shape=({rows}, {cols}), dtype=float16, seed={seed}") + + # 2. NF4 量化 (双重量化) + quant, state = F.quantize_4bit( + weight, quant_type="nf4", blocksize=blocksize, + compress_statistics=True, + ) + + n_elements = rows * cols + num_blocks = math.ceil(n_elements / blocksize) + + assert state.state2 is not None, "compress_statistics=True 应启用双重量化" + s2 = state.state2 + num_groups = s2.absmax.shape[0] + + print(f"[generate] blocksize={blocksize}, num_blocks={num_blocks}, " + f"num_groups={num_groups}, s2_blocksize={s2.blocksize}") + + # 3. 提取数据 + packed_weights = quant.cpu().numpy().astype(np.uint8).flatten() + assert packed_weights.shape[0] == n_elements // 2 + + absmax_q = state.absmax.cpu().numpy().astype(np.uint8) + assert absmax_q.shape[0] == num_blocks + + absmax2 = s2.absmax.cpu().numpy().astype(np.float16) + code2 = s2.code.cpu().numpy().astype(np.float16) + assert code2.shape[0] == 256 + + offset_val = state.offset.cpu().item() if state.offset is not None else 0.0 + + # 4. 写二进制权重文件 + tag = f"{rows}x{cols}_bs{blocksize}" + weight_file = os.path.join(outdir, f"nf4_weights_{tag}.bin") + + with open(weight_file, "wb") as f: + f.write(struct.pack(" Date: Sun, 15 Mar 2026 12:35:13 +0800 Subject: [PATCH 2/2] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- 03_nf4_dequant/xfarawayx/run.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/03_nf4_dequant/xfarawayx/run.sh b/03_nf4_dequant/xfarawayx/run.sh index f6f6fa7..6c2edf5 100755 --- a/03_nf4_dequant/xfarawayx/run.sh +++ b/03_nf4_dequant/xfarawayx/run.sh @@ -33,11 +33,13 @@ BUILD_DIR="${KERNEL_DIR}/build" DATA_DIR="${PROJ_DIR}/data" # ---------- 自动查找 Python ---------- -# 优先使用 venv (含所需依赖), 再回退到系统 python3 -if [ -x "${PROJ_DIR}/.venv/bin/python" ]; then +# 优先使用环境变量 PYTHON,其次使用 venv (含所需依赖),再回退到系统 python3 +if [ -n "${PYTHON:-}" ] && [ -x "${PYTHON}" ]; then + : # 使用用户提供的 PYTHON +elif [ -x "${PROJ_DIR}/.venv/bin/python" ]; then PYTHON="${PROJ_DIR}/.venv/bin/python" -elif [ -x "~/.venv/bin/python" ]; then - PYTHON="~/.venv/bin/python" +elif [ -n "${HOME:-}" ] && [ -x "${HOME}/.venv/bin/python" ]; then + PYTHON="${HOME}/.venv/bin/python" elif command -v python3 &>/dev/null; then PYTHON="$(command -v python3)" else

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 cF0_ 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