2301_76761127/fairface_age_image_detection-npu
模型介绍
文件和版本
Pull Requests
讨论
分析

dima806/fairface_age_image_detection — Ascend NPU 迁移验收

1. 模型身份

  • 模型:dima806/fairface_age_image_detection(ViTForImageClassification, google/vit-base-patch16-224-in21k 在 FairFace 上微调的 9 类年龄段分类器)
  • 官方 URL:https://huggingface.co/dima806/fairface_age_image_detection (镜像:https://ai.gitcode.com/hf_mirrors/dima806/fairface_age_image_detection)
  • 固定 revision:4e02ab8057ea7fd74b1670940995c5dfda3e6ec0
  • 权重:model.safetensors,343,245,508 bytes, SHA-256 1265d8e5a8a363a615898be873c224aebc6f310654bf23b1745da0975a7b7555
  • 许可:Apache-2.0;参数量 85,805,577(探针实测);输入 224×224 RGB (mean/std 0.5,双线性缩放),输出 9 维年龄段 logits

2. 硬件软件矩阵(平台栈未替换)

  • 硬件:Ascend 910B3 单卡(逻辑设备 npu:0)
  • CANN 9.0.0;Python 3.11.15;PyTorch(torch)2.10.0+cpu;torch_npu 2.10.0
  • 模型级依赖(见 requirements.txt):transformers 4.57.6、numpy 2.4.4、 pillow 12.3.0、safetensors 0.8.0;未替换任何平台组件(target_stack_gate PASS)

3. 外部权重准备与完整性门禁

权重从官方固定 revision 快照离线加载(本仓不含权重)。inference.py 启动时逐文件 校验 config.json、preprocessor_config.json 与 model.safetensors 的 SHA-256, 任何不符即 fail-closed 退出;禁止回退网络 model id (HF_HUB_OFFLINE=1、TRANSFORMERS_OFFLINE=1)。

4. 唯一推理入口

python inference.py --model_path <快照目录> --device <cpu|npu:0> \
  --seed 20260816 --output_json result.json

官方加载路径:AutoModelForImageClassification.from_pretrained(<本地快照>, local_files_only=True)。预处理与快照 preprocessor_config.json (ViTImageProcessor:双线性缩放 224×224 → /255 → mean/std 0.5 归一化)逐步一致。

5. 固定样本、输出计数与有限值要求

完整测试用例为 8 张确定性程序生成的合成 RGB fixture(固定 seed,梯度/圆环/噪声 图案,无真实人像),PNG 字节 SHA-256 冻结于 accuracy/manifest.json,运行时逐张 重新校验(input_sha256 锚定)。每图输出 9 维 logits 与 softmax 概率, 总计 8×9×2=144 值;shape、计数、样本身份、有限值(拒绝 NaN/Inf)任一不符即失败。

6. Fast-track 验收契约

本行适用 fast-track 政策:仅验证 NPU 全程真实运行,未评估精度。 验收契约(冻结于 accuracy/manifest.json):

  • NPU 端到端运行:actual_model_device/actual_tensor_device/ actual_output_device 均为 npu:0,输出完整有限,exit_status=0
  • NPU 双跑逐位一致:同一冻结 fixture 两次独立 NPU 运行的全部 144 个冻结值 逐位相等,且每图 argmax 一致(accuracy/compare_accuracy.py,唯一比较器, 不启动任何推理路径)
  • 负向门禁 fail-closed(见 §9)

7. 真实 NPU 运行与实测指标

实测环境:CANN 9.0.0 + torch 2.10.0+cpu + torch_npu 2.10.0 + transformers 4.57.6, 设备 npu:0(Ascend 910B3,queue 准入 est-mem 3072 MiB)。fast-track: 仅验证 NPU 全程运行,未评估精度。

  • NPU 端到端运行:8 样本一次 batch 前向 forward_ms≈1871.2 ms(float32, 85,805,577 参数),actual_model_device/actual_tensor_device/ actual_output_device 实测均为 npu:0,144/144 输出值完整有限,exit_status=0
  • NPU 双跑逐位一致(accuracy/accuracy.json):144 值 mismatch=0、 max_abs_error=0.0、argmax_mismatch=0,status=PASS
  • 8 张合成 fixture 的 argmax 均稳定(合成噪声图无真实语义,类别分布不构成精度结论)
  • 真实 NPU 取证:进程 PID、Ascend maps、/dev/davinci fd、npu-smi 含子 PID 均采样留存于私有审计目录(监控器逐进程包裹两次运行)

8. 证据图

三张证据图(assets/agent_workflow.png / assets/npu_device_call.png / assets/model_result.png)由后半段在对应 RUN 中即时截取并放入 assets/; 本前半段交付的真实运行取证(进程 PID、Ascend maps、/dev/davinci fd、 npu-smi 含子 PID)保存在私有审计目录。

9. compare 命令与负向门禁

python accuracy/compare_accuracy.py --cpu_result <npu_run1.json> \
  --npu_result <npu_run2.json> --output_json accuracy.json

负向门禁(各一次,均按预期 fail-closed):缺/错权重快照 → snapshot identity mismatch; 非法设备 cuda:0 → 拒绝运行;截断的 compare 输入 → primary identity ... mismatch。

10. 提交与限制

唯一验收入口为 inference.py;比较器不启动任何推理路径。fast-track 未做 CPU/NPU 数值精度比对;完整 NPU JSON、日志、PID 采样保留在私有审计区, 本仓仅含最小复现代码与摘要。匿名 HEAD 与 fresh clone 审计由协调者统一执行。

本仓为 2301_76761127 队伍交付件(与备份账号合并提交)。