hifloat8_cast — HiFloat8 数据类型转换算子【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amctHiFloat8 数据类型转换算子支持 FP16/BF16 ↔ HiFloat8 双向转换。功能介绍支持 4 种转换模式底层统一由KernelHiFloat8CastLut实现castMode转换底层 LUT0FP16 → HiFloat832768-entry 半空间 UB-LUT32 KB1BF16 → HiFloat832768-entry 半空间 UB-LUT32 KB2HiFloat8 → FP16256-entry UB-LUT512 B3HiFloat8 → BF16256-entry UB-LUT512 BPython 接口根据输入 dtype 自动选择 castMode无需手动指定。接口说明encode_to_hifloat8(x: Tensor) - Tensor将 FP16/BF16 张量编码为 HiFloat8 格式。参数x输入张量NPU 设备dtype 为torch.float16或torch.bfloat16任意非空 shape返回torch.uint8张量shape 与输入相同异常RuntimeErrordtype 不是 float16 / bfloat16或输入不在 NPU 上示例y encode_to_hifloat8(x_fp16) y encode_to_hifloat8(x_bf16)decode_from_hifloat8(x: Tensor, dtype: dtype torch.bfloat16) - Tensor将 HiFloat8 格式解码为 FP16/BF16 张量。参数xHiFloat8 编码张量torch.uint8任意非空 shapedtype输出类型默认torch.bfloat16支持float16/bfloat16返回解码后的张量shape 与输入相同异常RuntimeError输入 dtype 不是 uint8或输出 dtype 不支持示例z decode_from_hifloat8(y) # 默认输出 BF16 z decode_from_hifloat8(y, torch.float16) # 指定输出 FP16目录结构hifloat8_cast/ ├── op_kernel/ │ ├── hifloat8_cast_kernel.cpp # device 端 kernelLUT encode decode半空间 LUT 优化 │ └── hifloat8_cast_tiling.h # TilingData 结构体定义tileLength 由 host 运行时填入 ├── op_extension/ │ ├── hifloat8_cast_torch.cpp # PyTorch host 实现CPU 端 LUT 预计算与缓存调用 ASC 生成的 host stub │ ├── ops.h # PyTorch C 扩展函数声明 │ └── register.cpp # TORCH_LIBRARY 注册 ├── python/ │ └── hifloat8_cast/ │ ├── __init__.py # Python 包入口加载 .so、注册算子 │ └── ops.py # Python 接口实现 ├── CMakeLists.txt # CMake 构建配置 └── README.md # 算子说明文档环境依赖SOC平台标称 UB / coreCANN 实测可用 UBascend910bAtlas A2系列产品256 KB~192 KBascend910_93Atlas A3系列产品512 KB~384 KBascend950Ascend950PR/Ascend950DT512 KB—CANN 运行时会保留部分 UBtileLength在每次调用时由GetCoreMemSize()查询实际可用量并计算无需手动指定。CANN 9.0.0Python ≥ 3.9PyTorch torch_npu适配对应 CANN 版本编译方式一统一打包推荐cd amct_ops bash ops_build.sh [--soc soc] [hifloat8_cast]--soc平台--npu-arch默认ascend910bA2910B1/B2/B3UB 256 KBdav-2201✓ascend910_93A3910_93UB 512 KBdav-2201ascend950A5UB 512 KBdav-3510A2/A3 共用同一 ISAdav-2201编译产物相同UB 大小差异由运行时平台 API 区分自动选择最优tileLength。 A5 构建要求当前 CANN 编译器支持dav-3510。如果bisheng报Unsupported NPU architecture or soc需要更换支持 A5 目标的 CANN 编译环境。bash ops_build.sh # 全部算子默认平台 bash ops_build.sh --soc ascend910_93 # 全部算子指定平台 bash ops_build.sh hifloat8_cast # 指定算子默认平台 bash ops_build.sh --soc ascend950 hifloat8_cast # 指定算子指定平台 pip install dist/amct_ops-*.whl方式二单算子独立编译开发调试针对单个算子进行独立编译适用于开发调试场景。通过-DNPU_ARCH指定目标平台默认 A2平台-DNPU_ARCHAtlas A2系列产品dav-2201默认Atlas A3系列产品dav-2201同 A2Ascend950PR/Ascend950DTdav-3510cd amct_ops/hifloat8_cast source $ASCEND_HOME_PATH/set_env.sh mkdir -p build cd build cmake .. -DNPU_ARCHdav-2201 # A2 / A3默认 # cmake .. -DNPU_ARCHdav-3510 # A5 make -j8编译产物build/libhifloat8_cast_ops.so已知 CMake 告警使用 pip 安装的 PyTorch 构建时find_package(Torch)可能输出如下告警static library kineto_LIBRARY-NOTFOUND not found.该告警来自 PyTorch 自带的TorchConfig.cmake表示未找到 Kineto profiler 的静态库。hifloat8_cast不依赖 PyTorch profiler / Kineto 能力只要 CMake configure、编译和链接成功该告警可以忽略。使用示例import torch import torch_npu from amct_ops.hifloat8_cast import encode_to_hifloat8, decode_from_hifloat8 # 编码FP16/BF16 → HiFloat8 x torch.randn(1024, 256, dtypetorch.bfloat16, devicenpu) y encode_to_hifloat8(x) # shape [1024, 256], dtype uint8 # 解码HiFloat8 → FP16/BF16 z decode_from_hifloat8(y, torch.bfloat16) # shape [1024, 256], dtype bfloat16也可直接通过torch.ops.amct调用底层算子y torch.ops.amct.encode_to_hifloat8(x) z torch.ops.amct.decode_from_hifloat8(y, torch.bfloat16)性能验证测试平台Ascend 910B3 (A2ascend910b)CANN 9.0.0吞吐量定义(输入字节 输出字节) / 耗时100 次迭代均值10 次预热NPU synchronize 计时推荐场景数据量 ≥ 256K 时 NPU 优势显著BF16 ↔ HiFloat8数据大小Encode (ms)吞吐 (MB/s)Decode (ms)吞吐 (MB/s)1K0.20714.90.22813.54K0.21557.20.21956.016K0.215228.40.255192.964K0.215914.00.290677.6256K0.2892723.90.2932679.81M0.8673627.20.8633645.74M3.1334016.73.1114044.316M12.2364113.412.1524141.7FP16 ↔ HiFloat8数据大小Encode (ms)吞吐 (MB/s)Decode (ms)吞吐 (MB/s)1K0.20814.80.22413.74K0.21656.90.22355.116K0.215228.60.257191.664K0.217904.10.289680.9256K0.2882734.80.2932687.81M0.8673628.10.8633645.24M3.1304019.63.1214032.216M12.2364113.412.1484143.1RoundtripEncode Decode数据大小FP16 (ms)吞吐 (MB/s)BF16 (ms)吞吐 (MB/s)1K0.38910.50.39210.54K0.39241.80.39341.716K0.394166.20.390168.164K0.388674.80.389673.7256K0.5481911.90.5541891.61M1.7142446.71.7162444.94M6.2462686.26.2492684.816M24.3932751.124.4012750.3小数据 256K吞吐较低但已通过核数优先策略优化避免过多核加载LUT开销。大数据≥ 4Mencode/decode 吞吐均超过 4 GB/s接近 HBM 带宽上限。tileLength 由运行时根据平台实际 UB 大小和核数动态计算。精度验证精度验证通过以下方式进行NPU API 综合测试类型推断、边界值、特殊值、非规格化数、全 256 个 HiFloat8 decode 完备性见tests/amct_ops/test_hifloat8_cast.py边界/特殊值±0、±Inf、NaN、最大值、最小非规格化数等边界情况测试场景结果随机 FP16/BF16 roundtrip✓ 相对误差在 HiFloat8 精度范围内边界值 roundtrip✓ 覆盖 0、正负数、小数、较大值特殊值±0 / ±Inf / NaN✓ 编码字节和解码语义符合规范全 256 个 HiF8 值解码FP16 BF16✓ 仅 0x80 为 NaN 编码注FP16 subnormal 编解码含 HiFloat8 非规格化值映射到 FP16 非规格化值已全部验证正确。测试方法# 在仓库根目录执行。先构建 amct_ops再通过 staging 运行测试。 bash amct_ops/ops_build.sh hifloat8_cast # Python API 综合测试类型推断、边界值、特殊值、非规格化数 PYTHONPATHamct_ops/staging python3 -m unittest tests.amct_ops.test_hifloat8_cast也可以先安装 wheel 后再执行测试pip install amct_ops/dist/amct_ops-*.whl python3 -m unittest tests.amct_ops.test_hifloat8_cast更多测试执行说明见tests/amct_ops/README.md。【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
昇腾AMCT HiFloat8转换算子
hifloat8_cast — HiFloat8 数据类型转换算子【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amctHiFloat8 数据类型转换算子支持 FP16/BF16 ↔ HiFloat8 双向转换。功能介绍支持 4 种转换模式底层统一由KernelHiFloat8CastLut实现castMode转换底层 LUT0FP16 → HiFloat832768-entry 半空间 UB-LUT32 KB1BF16 → HiFloat832768-entry 半空间 UB-LUT32 KB2HiFloat8 → FP16256-entry UB-LUT512 B3HiFloat8 → BF16256-entry UB-LUT512 BPython 接口根据输入 dtype 自动选择 castMode无需手动指定。接口说明encode_to_hifloat8(x: Tensor) - Tensor将 FP16/BF16 张量编码为 HiFloat8 格式。参数x输入张量NPU 设备dtype 为torch.float16或torch.bfloat16任意非空 shape返回torch.uint8张量shape 与输入相同异常RuntimeErrordtype 不是 float16 / bfloat16或输入不在 NPU 上示例y encode_to_hifloat8(x_fp16) y encode_to_hifloat8(x_bf16)decode_from_hifloat8(x: Tensor, dtype: dtype torch.bfloat16) - Tensor将 HiFloat8 格式解码为 FP16/BF16 张量。参数xHiFloat8 编码张量torch.uint8任意非空 shapedtype输出类型默认torch.bfloat16支持float16/bfloat16返回解码后的张量shape 与输入相同异常RuntimeError输入 dtype 不是 uint8或输出 dtype 不支持示例z decode_from_hifloat8(y) # 默认输出 BF16 z decode_from_hifloat8(y, torch.float16) # 指定输出 FP16目录结构hifloat8_cast/ ├── op_kernel/ │ ├── hifloat8_cast_kernel.cpp # device 端 kernelLUT encode decode半空间 LUT 优化 │ └── hifloat8_cast_tiling.h # TilingData 结构体定义tileLength 由 host 运行时填入 ├── op_extension/ │ ├── hifloat8_cast_torch.cpp # PyTorch host 实现CPU 端 LUT 预计算与缓存调用 ASC 生成的 host stub │ ├── ops.h # PyTorch C 扩展函数声明 │ └── register.cpp # TORCH_LIBRARY 注册 ├── python/ │ └── hifloat8_cast/ │ ├── __init__.py # Python 包入口加载 .so、注册算子 │ └── ops.py # Python 接口实现 ├── CMakeLists.txt # CMake 构建配置 └── README.md # 算子说明文档环境依赖SOC平台标称 UB / coreCANN 实测可用 UBascend910bAtlas A2系列产品256 KB~192 KBascend910_93Atlas A3系列产品512 KB~384 KBascend950Ascend950PR/Ascend950DT512 KB—CANN 运行时会保留部分 UBtileLength在每次调用时由GetCoreMemSize()查询实际可用量并计算无需手动指定。CANN 9.0.0Python ≥ 3.9PyTorch torch_npu适配对应 CANN 版本编译方式一统一打包推荐cd amct_ops bash ops_build.sh [--soc soc] [hifloat8_cast]--soc平台--npu-arch默认ascend910bA2910B1/B2/B3UB 256 KBdav-2201✓ascend910_93A3910_93UB 512 KBdav-2201ascend950A5UB 512 KBdav-3510A2/A3 共用同一 ISAdav-2201编译产物相同UB 大小差异由运行时平台 API 区分自动选择最优tileLength。 A5 构建要求当前 CANN 编译器支持dav-3510。如果bisheng报Unsupported NPU architecture or soc需要更换支持 A5 目标的 CANN 编译环境。bash ops_build.sh # 全部算子默认平台 bash ops_build.sh --soc ascend910_93 # 全部算子指定平台 bash ops_build.sh hifloat8_cast # 指定算子默认平台 bash ops_build.sh --soc ascend950 hifloat8_cast # 指定算子指定平台 pip install dist/amct_ops-*.whl方式二单算子独立编译开发调试针对单个算子进行独立编译适用于开发调试场景。通过-DNPU_ARCH指定目标平台默认 A2平台-DNPU_ARCHAtlas A2系列产品dav-2201默认Atlas A3系列产品dav-2201同 A2Ascend950PR/Ascend950DTdav-3510cd amct_ops/hifloat8_cast source $ASCEND_HOME_PATH/set_env.sh mkdir -p build cd build cmake .. -DNPU_ARCHdav-2201 # A2 / A3默认 # cmake .. -DNPU_ARCHdav-3510 # A5 make -j8编译产物build/libhifloat8_cast_ops.so已知 CMake 告警使用 pip 安装的 PyTorch 构建时find_package(Torch)可能输出如下告警static library kineto_LIBRARY-NOTFOUND not found.该告警来自 PyTorch 自带的TorchConfig.cmake表示未找到 Kineto profiler 的静态库。hifloat8_cast不依赖 PyTorch profiler / Kineto 能力只要 CMake configure、编译和链接成功该告警可以忽略。使用示例import torch import torch_npu from amct_ops.hifloat8_cast import encode_to_hifloat8, decode_from_hifloat8 # 编码FP16/BF16 → HiFloat8 x torch.randn(1024, 256, dtypetorch.bfloat16, devicenpu) y encode_to_hifloat8(x) # shape [1024, 256], dtype uint8 # 解码HiFloat8 → FP16/BF16 z decode_from_hifloat8(y, torch.bfloat16) # shape [1024, 256], dtype bfloat16也可直接通过torch.ops.amct调用底层算子y torch.ops.amct.encode_to_hifloat8(x) z torch.ops.amct.decode_from_hifloat8(y, torch.bfloat16)性能验证测试平台Ascend 910B3 (A2ascend910b)CANN 9.0.0吞吐量定义(输入字节 输出字节) / 耗时100 次迭代均值10 次预热NPU synchronize 计时推荐场景数据量 ≥ 256K 时 NPU 优势显著BF16 ↔ HiFloat8数据大小Encode (ms)吞吐 (MB/s)Decode (ms)吞吐 (MB/s)1K0.20714.90.22813.54K0.21557.20.21956.016K0.215228.40.255192.964K0.215914.00.290677.6256K0.2892723.90.2932679.81M0.8673627.20.8633645.74M3.1334016.73.1114044.316M12.2364113.412.1524141.7FP16 ↔ HiFloat8数据大小Encode (ms)吞吐 (MB/s)Decode (ms)吞吐 (MB/s)1K0.20814.80.22413.74K0.21656.90.22355.116K0.215228.60.257191.664K0.217904.10.289680.9256K0.2882734.80.2932687.81M0.8673628.10.8633645.24M3.1304019.63.1214032.216M12.2364113.412.1484143.1RoundtripEncode Decode数据大小FP16 (ms)吞吐 (MB/s)BF16 (ms)吞吐 (MB/s)1K0.38910.50.39210.54K0.39241.80.39341.716K0.394166.20.390168.164K0.388674.80.389673.7256K0.5481911.90.5541891.61M1.7142446.71.7162444.94M6.2462686.26.2492684.816M24.3932751.124.4012750.3小数据 256K吞吐较低但已通过核数优先策略优化避免过多核加载LUT开销。大数据≥ 4Mencode/decode 吞吐均超过 4 GB/s接近 HBM 带宽上限。tileLength 由运行时根据平台实际 UB 大小和核数动态计算。精度验证精度验证通过以下方式进行NPU API 综合测试类型推断、边界值、特殊值、非规格化数、全 256 个 HiFloat8 decode 完备性见tests/amct_ops/test_hifloat8_cast.py边界/特殊值±0、±Inf、NaN、最大值、最小非规格化数等边界情况测试场景结果随机 FP16/BF16 roundtrip✓ 相对误差在 HiFloat8 精度范围内边界值 roundtrip✓ 覆盖 0、正负数、小数、较大值特殊值±0 / ±Inf / NaN✓ 编码字节和解码语义符合规范全 256 个 HiF8 值解码FP16 BF16✓ 仅 0x80 为 NaN 编码注FP16 subnormal 编解码含 HiFloat8 非规格化值映射到 FP16 非规格化值已全部验证正确。测试方法# 在仓库根目录执行。先构建 amct_ops再通过 staging 运行测试。 bash amct_ops/ops_build.sh hifloat8_cast # Python API 综合测试类型推断、边界值、特殊值、非规格化数 PYTHONPATHamct_ops/staging python3 -m unittest tests.amct_ops.test_hifloat8_cast也可以先安装 wheel 后再执行测试pip install amct_ops/dist/amct_ops-*.whl python3 -m unittest tests.amct_ops.test_hifloat8_cast更多测试执行说明见tests/amct_ops/README.md。【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考