liuhongwei-2026/PickScore_v1
模型介绍
文件和版本
Pull Requests
讨论
分析

PickScore_v1 在昇腾 NPU 上的部署与推理

适配仓库(AI.AtomGit):liuhongwei-2026/PickScore_v1 模型来源:yuvalkirstain/PickScore_v1(HuggingFace / ModelScope 镜像可拉取) 适配分类:计算机视觉(偏好评分 / 文生图质量评估)

1. 简介

PickScore_v1 是 Yuval Kirstain 等人基于 CLIP-H(ViT-H-14)架构,在 Pick-a-Pic 数据集上微调训练的偏好评分模型。它接收一个文本提示词和一张/多张生成图像作为输入,输出偏好评分,可用于:

  • 人类偏好预测
  • 文生图模型评估
  • 图像排序选择
  • 生成结果筛选

本仓库将其从默认的 cuda/cpu 运行方式适配到 华为昇腾 NPU(Ascend),通过 torch_npu 将推理计算放到 npu:0,并提供单次推理与 HTTP 服务化推理两种用法。

2. 适配状态与方式

项目说明
模型来源yuvalkirstain/PickScore_v1(HF / ModelScope 镜像)
架构CLIP-H(ViT-H-14),文本编码器 + 图像编码器,logit 相似度评分
参数量~2.4B(CLIP ViT-H-14)
适配方式torch_npu 后端,显式指定 device="npu:0" 覆盖默认 CUDA 自动探测
服务化FastAPI + uvicorn,POST /predict 返回 JSON
适配状态成功(精度/性能需在目标 NPU 机器复核)
许可参考原模型许可

说明:PickScore_v1 为视觉语言模型,无法使用 vLLM 传统文本服务;本仓库采用 torch_npu + FastAPI 的 NPU 服务化方案,与昇腾推理生态一致。

3. 验证环境

组件版本/说明
操作系统Linux(昇腾 910B4 及以上)
CANN5.x(与 torch_npu 匹配)
torch2.x
torch_npu与 torch 同版本
transformers4.36+
NPUAscend 910B4

4. 目录结构

PickScore_v1/
├── inference.py        # 推理脚本(单次推理 + 服务化推理)
├── README.md           # 部署说明文档
├── requirements.txt    # 环境依赖清单
└── assets/             # 截图素材
    ├── agent_workflow.png
    ├── npu_device_call.png
    └── model_result.png

5. 安装与部署

# 1) 创建虚拟环境(建议 Python 3.10+)
python3 -m venv .venv && source .venv/bin/activate

# 2) 安装依赖(先按 CANN 环境安装匹配的 torch/torch_npu,见 requirements.txt 注释)
pip install -r requirements.txt

若依赖从海外拉取失败,可先通过 ModelScope 镜像下载权重到本地,再通过本地路径加载(见下文"本地权重缓存")。

6. 模型权重下载

方式一:从 ModelScope 镜像拉取(推荐)

git clone https://ai.gitcode.com/hf_mirrors/yuvalkirstain/PickScore_v1.git /path/to/local/PickScore_v1

方式二:从 HuggingFace 直接下载

pip install huggingface-hub
huggingface-cli download yuvalkirstain/PickScore_v1 --local-dir /path/to/local/PickScore_v1

7. 复现步骤(NPU)

单次推理

python inference.py \
  --image image1.jpg [image2.jpg ...] \
  --prompt "a beautiful cat sitting on a sofa" \
  --device npu:0

预期输出:每张图片的评分分数(score)和选择概率(prob),最高分标记为"最佳"。

日志首行打印:

[PickScore@NPU] device = npu:0 (Ascend 910B4 ...)
[PickScore@NPU] 模型加载完成,耗时 xx.xxs

自动设备选择

python inference.py --image img.jpg --prompt "a cat" --device auto

--device auto 会自动识别为 npu → cuda → cpu。

本地权重(离线)

将权重下载到本地目录后,用本地路径加载:

python inference.py \
  --model /path/to/local/PickScore_v1 \
  --image img.jpg \
  --prompt "a cat" \
  --device npu:0

8. 服务化推理

python inference.py --serve --host 0.0.0.0 --port 8000 --device npu:0

请求示例

方式一:本地图片路径

curl -X POST http://127.0.0.1:8000/predict \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a beautiful cat",
    "image_paths": ["/path/to/cat1.jpg", "/path/to/cat2.jpg"]
  }'

方式二:base64 编码图片

curl -X POST http://127.0.0.1:8000/predict \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a beautiful cat",
    "images": ["<base64_encoded_image_data>"]
  }'

方式三:图片 URL

curl -X POST http://127.0.0.1:8000/predict \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a beautiful cat",
    "image_urls": ["https://example.com/cat.jpg"]
  }'

响应格式

{
  "prompt": "a beautiful cat",
  "num_images": 2,
  "scores": [0.8532, 0.2176],
  "probs": [0.6547, 0.3453],
  "best_idx": 0,
  "elapsed_seconds": 0.4231
}

健康检查

curl http://127.0.0.1:8000/health
# {"status": "ok", "device": "npu:0 (Ascend910_9362)"}

9. 缓存与可复现

  • 首次加载模型权重会下载缓存;可通过 HF_HOME 环境变量指定缓存目录以便复用。
  • 推理脚本输出末尾带 __RESULT_JSON__ 标记的机器可读 JSON,便于做精度/性能采样与对比。

10. 已知限制

  • PickScore_v1 基于 CLIP-H(ViT-H-14),参数量约 2.4B,在 NPU 上推理时需确保设备显存充足(建议 16GB+)。
  • 本仓库在真实昇腾环境中已验证模型加载与推理通路,但具体精度/性能需在目标 NPU 机器上复核。

11. 参考

  • 模型卡片:yuvalkirstain/PickScore_v1
  • 论文:Pick-a-Pic: An Open Dataset of User Preferences for Text-to-Image Generation
  • 原仓库:PickScore

贡献者:liuhongwei-2026 赛道:模型适配赛道(计算机视觉)

b6a68ee (feat: PickScore_v1 昇腾 NPU 部署适配)