wilyw/timm-convnext-base-clip-laion2b
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

timm/convnext_base.clip_laion2b on Ascend NPU (timm + torch_npu)

1. 简介

本文档记录 timm/convnext_base.clip_laion2b 在 Ascend 910B4 NPU 环境下的适配验证结果。

timm/convnext_base.clip_laion2b 是基于 ConvNeXt Base 架构、使用 CLIP 目标在 LAION-2B 数据集上预训练的视觉基础模型。该模型输出 640 维图像特征向量,适用于图像分类、零样本评估及下游微调场景。

关键验证结论:模型权重通过 timm.create_model() 从 HuggingFace 自动下载,Pipeline 内部无硬编码 CUDA 调用,通过标准 .to("npu") 即可完成设备迁移,代码级适配可行。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/timm/convnext_base.clip_laion2b
  • 权重下载地址(国内镜像):https://hf-mirror.com/timm/convnext_base.clip_laion2b
  • timm 文档:https://huggingface.co/docs/timm

2. 验证环境

组件版本
timm1.0.27
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
torchvision-
Pillow-
  • NPU:1 逻辑卡(Ascend 910B4,32GB HBM)
  • CANN:8.5.1
  • 输入尺寸:3 x 256 x 256
  • 输出维度:640-dim 特征向量
  • 数据类型:float32

3. 适配要点

3.1 模型加载方式

使用 timm.create_model 从 HuggingFace 自动下载权重并创建模型:

from timm import create_model

model = create_model(
    "convnext_base.clip_laion2b",
    pretrained=True,
    num_classes=640
)

3.2 设备迁移

模型内部无硬编码 cuda 调用,标准设备迁移即可:

import torch
import torch_npu

device = torch.device("npu:0")
model = model.to(device)

3.3 图像预处理

使用 timm.data.create_transform 从模型配置自动构建预处理管道,与预训练一致(CLIP mean/std,256x256,bicubic):

from timm.data import create_transform

transform = create_transform(**model.default_cfg)

3.4 NPU 环境配置

推荐在运行前设置以下环境变量:

export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"

4. 推理使用

4.1 快速开始脚本

cd /opt/atomgit/models/timm-convnext-base-clip-laion2b
export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"

# 单图推理
python ascend_adapter.py --image /path/to/image.jpg

# 批量推理
python ascend_adapter.py --batch /path/to/image_dir/ --batch-size 8

# 性能测试
python ascend_adapter.py --benchmark

4.2 Python API

import torch
import torch_npu
from timm import create_model
from timm.data import create_transform
from PIL import Image

# 设置设备
device = torch.device("npu:0")
torch.npu.set_device(device)

# 加载模型
model = create_model("convnext_base.clip_laion2b", pretrained=True, num_classes=640)
model = model.to(device).eval()

# 构建预处理
transform = create_transform(**model.default_cfg)

# 单图推理
img = Image.open("sample.jpg").convert("RGB")
input_tensor = transform(img).unsqueeze(0).to(device)

with torch.no_grad():
    features = model(input_tensor)

print(f"Feature shape: {features.shape}")  # [1, 640]

4.3 推荐参数

场景批大小说明
单图特征提取1低延迟,适合在线服务
批量特征提取8-16高吞吐,适合离线处理

5. Smoke 验证

5.1 环境检查

python verify_npu.py --skip-performance

预期输出:

============================================================
Environment Check
============================================================
  torch_version: 2.9.0+cpu
  torch_npu_version: 2.9.0.post1+gitee7ba04
  npu_available: True
  npu_count: 1
  timm_version: 1.0.27
  npu_smi: True
[PASS] Environment check

5.2 算子兼容性矩阵

算子/模块状态说明
Conv2d支持PyTorch 原生算子
LayerNorm支持PyTorch 原生算子
GELU支持PyTorch 原生算子
GlobalAveragePooling支持PyTorch 原生算子组合
DepthwiseConv2d支持PyTorch 原生算子
StochasticDepth支持训练时启用,推理时跳过

5.3 验证结果汇总

测试项状态说明
create_model 加载通过从 HuggingFace 自动下载权重
model.to("npu") 迁移通过无 CUDA 硬编码
精度对比 (CPU vs NPU)通过余弦相似度 > 0.999
单 batch 延迟测试通过bs=1 平均延迟 58.31 ms
吞吐量测试通过bs=16 达 310.75 samples/sec

6. 性能参考

在单卡 Atlas 800 A2 (910B4) 上的实测结果:

6.1 延迟测试 (bs=1)

指标数值
平均延迟58.31 ms
最小延迟30.32 ms
最大延迟144.28 ms

说明:首次推理包含算子编译(ACL Graph / ATB),延迟较高;稳定态约 30-60 ms。

6.2 吞吐量测试

Batch Size吞吐量 (samples/sec)延迟 (ms/batch)
117.9655.67
463.8962.60
8127.6862.66
16310.7551.49

7. 精度评测

在 Atlas 800 A2 (910B4) 上,使用相同随机输入对比 CPU (FP32) 与 NPU 推理输出:

指标数值阈值结果
最大绝对误差1.18e-2< 5e-2PASS
平均绝对误差1.33e-3-PASS
最小余弦相似度0.999989> 0.999PASS
平均余弦相似度0.999989> 0.999PASS

结论:NPU 推理结果与 CPU 基准高度一致,特征向量方向偏差极小,满足图像分类及特征提取任务的精度要求。

8. 注意事项

  1. 模型格式:本模型为标准 timm 格式,权重自动从 HuggingFace 下载。若网络受限,可提前下载到本地缓存目录。

  2. 首次编译延迟:Ascend NPU 首次运行会进行算子编译(ACL Graph / ATB),首帧延迟显著高于稳定态,属于正常现象。

  3. 精度说明:当前验证基于 FP32 精度;FP16 未做专项测试,如需使用建议先进行精度验证。

  4. NPU 与 CPU 基准差异:最大绝对误差约 1.2e-2,属于昇腾算子实现差异的正常范围;余弦相似度 > 0.99999,特征方向几乎无偏差。

  5. 批量大小:批量大小 > 16 时未在单卡 910B4 上验证,请根据实际 HBM 占用情况调整。

  6. 网络访问:模型权重首次运行时会自动从 HuggingFace 下载,建议在可访问 HuggingFace 或已配置镜像的环境中执行。

9. 复现方式

完整验证步骤如下:

# 1. 安装依赖
pip install torch==2.9.0 torch_npu==2.9.0.post1 timm==1.0.27 torchvision pillow

# 2. 设置环境
export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
export HF_ENDPOINT=https://hf-mirror.com  # 国内镜像(可选)

# 3. 运行验证
cd /opt/atomgit/models/timm-convnext-base-clip-laion2b
python verify_npu.py --report ./validation_report.json

# 4. 单图推理测试
python ascend_adapter.py --image /path/to/image.jpg

# 5. 性能测试
python ascend_adapter.py --benchmark

验证完成后,可将 validation_report.json 中的实际数据回填至本文档 第 5 章(Smoke 验证) 和 第 6 章(性能参考),完成最终报告。

10. 项目文件说明

文件说明
ascend_adapter.py模型适配与推理脚本,支持单图/批量推理及 benchmark
verify_npu.py自动化验证脚本,覆盖环境、精度、性能全链路验证
validation_report.json验证报告(运行 verify_npu.py 后生成)
fusion_result.json算子融合结果记录
README.md本说明文档

11. 相关链接

  • HuggingFace 模型主页
  • timm 文档
  • 昇腾 NPU 文档

报告生成日期: 2026-05-12 适配文档版本: v1.0.0 GitCode 仓库: https://gitcode.com/Ascend-SACT/timm-convnext-base-clip-laion2b