Token导航 LogoToken导航TokenDH.com
开发external-servicegithub未标认证来源可访问许可证需确认审计提醒

npu-adapter-reviewerNPU 适配器审阅者

Agent Skill

npu-adapter-reviewer 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

924

周安装

37

GitHub Stars

12

下载量

299
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:npu-adapter-reviewer(NPU 适配器审阅者)
来源仓库:https://github.com/ascend/agent-skills
仓库路径:skills/npu-adapter-reviewer
安装命令:
npx skills add https://github.com/ascend/agent-skills --skill npu-adapter-reviewer
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/ascend/agent-skills --skill npu-adapter-reviewer

简介

npu-adapter-reviewer 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。

  • 适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态、代码变更或协作事项进行整理。
  • 通过 npx skills add 命令从指定 GitHub 仓库安装使用。
  • 安装前需确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。
  • 建议结合来源仓库和原始 README 核验具体用法。

SKILL.md

NPU Adapter Reviewer - GPU到昇腾NPU适配审查专家

这是一个专门用于将GPU代码适配到华为昇腾NPU的Agent Skill。本技能覆盖完整的适配工作流:代码分析、堵点识别、适配脚本编写、验证方案设计、以及最终报告生成。

核心工作流程

阶段1:代码仓库获取与分析

任务1.1:获取源代码

根据用户提供的输入(本地路径或GitHub链接),获取完整的代码仓库:

# 如果是GitHub链接,先克隆
git clone <repo_url> /tmp/gpu_code_base
cd /tmp/gpu_code_base

# 如果是本地路径,直接分析
ls -la <local_path>

任务1.2:全面代码扫描

使用并行探索的方式分析代码结构:

  1. 探索Agent 1 - 代码结构分析

- 找出所有Python文件、CUDA文件、C++文件 - 识别项目目录结构 - 找出主要的入口文件和配置文件

  1. 探索Agent 2 - GPU依赖识别

- 搜索CUDA API调用(cudaMalloc, cudaMemcpy, kernel<<<...>>>, torch.cuda等) - 搜索PyTorch GPU相关代码(.cuda(), .to('cuda'), torch.device('cuda')等) - 搜索TensorRT相关代码 - 搜索深度学习框架特定API(Transformer引擎、Flash Attention等)

  1. 探索Agent 3 - 外部库依赖

- 搜索importfrom... import语句 - 识别所有第三方库依赖 - 检查是否有NPU不支持的库

任务1.3:生成代码结构报告

输出以下信息:

  • 项目总文件数、代码行数
  • 文件类型分布(Python/CUDA/C++/其他)
  • 主要依赖库列表
  • 核心模块及其功能描述

阶段2:GPU到NPU迁移堵点识别

任务2.1:算子兼容性分析

逐类识别GPU专用算子在NPU上的兼容性:

堵点类别GPU典型实现NPU替代方案迁移难度
CUDA核心算子__global__, __device__函数Ascend C算子 / ATB
内存操作cudaMallocHost, cudaMallocManagedaclrtMalloc, HI_MPI_MALLOC
流和事件cudaStream_t, cudaEvent_taclrtStream, aclrtEvent
cuBLAS/cuDNNcublasGemmEx, cudnnConvolutionForwardaclblasGemmEx, 算子融合
Flash Attentionflash_attn_varlen_func昇腾Flash Attention算子
自定义算子PyTorch CUDA扩展ATC/ACL算子
AMP/混合精度torch.cuda.ampascend_mixed_precision

任务2.2:识别具体堵点

对每个GPU API调用,生成以下分析:

### 堵点编号: #001
- **文件位置**: `src/attention/cuda_impl.cu:142`
- **GPU API**: `cudaStreamCreate(&stream)`
- **NPU替代**: `aclrtCreateStream(&stream)`
- **迁移方案**:
  1. 替换头文件 `aclrt.h`
  2. 替换API调用
  3. 处理错误码差异
- **预估工作量**: 0.5人天
- **影响范围**: 全局流管理

任务2.3:生成堵点清单

输出完整的堵点列表,按影响范围和迁移难度排序。

阶段3:适配脚本编写

任务3.1:创建NPU适配层

根据识别的堵点,创建适配脚本:

  1. 创建 npu_compat.py - Python层兼容适配 # 自动检测运行设备 def get_device(): if is_npu_available(): return "npu" elif is_cuda_available(): return "cuda" else: return "cpu" # 替换torch.cuda调用 def to_device(tensor): device = get_device() if device == "npu": return tensor.npu() elif device == "cuda": return tensor.cuda() return tensor
  2. 创建 npu_ops.py - NPU算子封装

- 将所有CUDA核心算子封装为NPU版本 - 保留原有接口,内部实现NPU适配

  1. 创建 build_npu.sh - 编译脚本

- ASCEND C算子编译命令 - 依赖环境检查 - 错误诊断

任务3.2:修改原有代码

生成修改后的代码文件,保留原文件并创建.npu版本:

  • 替换所有GPU特定调用
  • 添加设备检测逻辑
  • 添加回退机制

阶段4:验证方案设计

任务4.1:创建验证脚本

根据适配内容,生成验证脚本 verify_npu.sh

#!/bin/bash
# NPU适配验证脚本

echo "=== 1. 环境检查 ==="
check_npu_env() {
    # 检查NPU驱动
    ls -la /dev/*npu* 2>/dev/null || echo "Warning: NPU device not found"
    # 检查CANN
    echo $ASCEND_TOOLKIT_HOME
    # 检查Python包
    python3 -c "import torch; print('PyTorch version:', torch.__version__)"
    python3 -c "import torch_npu; print('torch_npu installed')"
}

echo "=== 2. 模块导入测试 ==="
test_imports() {
    cd <project_path>
    python3 -c "import npu_compat; print('npu_compat OK')"
    python3 -c "import npu_ops; print('npu_ops OK')"
}

echo "=== 3. 功能验证 ==="
test_functions() {
    # 运行基础测试
    python3 -m pytest tests/test_npu_*.py -v
    # 验证算子精度
    python3 scripts/verify_precision.py
}

echo "=== 4. 性能基准测试 ==="
benchmark() {
    python3 scripts/benchmark.py --device npu --compare cuda
}

任务4.2:精度验证脚本

生成 verify_precision.py

import numpy as np

def verify_npu_precision(cuda_result, npu_result, rtol=1e-3, atol=1e-3):
    """验证NPU与GPU输出精度差异"""
    diff = np.abs(cuda_result - npu_result)
    max_diff = np.max(diff)
    mean_diff = np.mean(diff)

    passed = np.allclose(cuda_result, npu_result, rtol=rtol, atol=atol)
    return {
        "passed": passed,
        "max_diff": max_diff,
        "mean_diff": mean_diff,
        "rtol": rtol,
        "atol": atol
    }

阶段5:审查报告生成

任务5.1:生成Markdown报告

根据验证结果,生成完整的审查报告:

# GPU到昇腾NPU适配审查报告
# CodeReview_Results_YYYY-MM-DD.md

## 1. 执行摘要

| 项目 | 内容 |
|-----|------|
| 原始代码仓库 | `<repo_url>` 或 `<local_path>` |
| 审查日期 | YYYY-MM-DD |
| 适配状态 | ✅ 完全适配 / ⚠️ 部分适配 / ❌ 适配失败 |
| 识别堵点总数 | XX个 |
| 已适配堵点 | XX个 |
| 剩余堵点 | XX个 |

## 2. 原始代码分析

### 2.1 代码结构概览
- 总文件数:XX
- Python代码行数:XX
- CUDA/C++代码行数:XX
- 核心模块:...

### 2.2 依赖分析
| 库名 | 版本 | NPU兼容性 | 替代方案 |
|-----|------|----------|---------|
| torch | 2.x | ✅ 兼容 | torch_npu |
| flash-attn | 2.x | ⚠️ 部分 | 昇顿Flash Attention |

## 3. 迁移堵点详细分析

### 3.1 算子兼容性问题

#### 问题 #001: CUDA Stream管理
- **文件**: `src/utils/stream_manager.py:45`
- **GPU API**: `cudaStreamCreate`
- **问题描述**: 使用CUDA流管理异步执行
- **NPU替代**: `aclrtCreateStream`
- **影响范围**: 全局,影响所有异步操作
- **迁移建议**:

# 修改前 import torch.cuda stream = torch.cuda.Stream()

# 修改后 import torch_npu stream = torch.npu.Stream()


- **状态**: ✅ 已适配 / ⚠️ 待处理

#### 问题 #002: Flash Attention算子

- **文件**: `src/attention/flash_attn_impl.py:78`
- **GPU API**: `flash_attn_varlen_func`
- **问题描述**: 使用Flash Attention加速注意力计算
- **NPU替代**: Ascend flash_attn算子或MindSpore flash_attention
- **影响范围**: 高,核心推理性能
- **迁移建议**: `# 修改前 from flash_attn import flash_attn_func output = flash_attn_func(q, k, v) # 修改后 # 方案1: 使用torch_npu的算子 import torch_npu output = torch_npu.npu_flash_attention(q, k, v) # 方案2: 使用ATB库 from ascend_toolkit import flash_attention output = flash_attention(q, k, v)`
- **状态**: ✅ 已适配 / ⚠️ 待处理

### 3.2 模型加载与权重管理问题

#### 问题 #003: GPU权重格式

- **文件**: `src/model/loader.py:112`
- **问题描述**: 权重以CUDA格式存储,直接加载会失败
- **迁移建议**: `# 修改前 state_dict = torch.load(weights_path) model.load_state_dict(state_dict) # 修改后 state_dict = torch.load(weights_path, map_location='cpu') # 转换权重 for k, v in state_dict.items(): if isinstance(v, torch.Tensor): state_dict[k] = v.npu() model.load_state_dict(state_dict)`
- **状态**: ✅ 已适配

### 3.3 计算性能瓶颈

#### 问题 #004: 算子融合缺失

- **文件**: `src/model/inference.py:89`
- **问题描述**: 多个独立算子导致性能下降
- **迁移建议**: 使用ATC进行算子融合优化
- **预估性能提升**: 20-30%
- **状态**: ⚠️ 待处理

### 3.4 NPU内存与KV Cache管理

#### 问题 #005: 动态内存分配

- **文件**: `src/cache/kv_cache.py:56`
- **问题描述**: 使用CUDA动态内存分配
- **迁移建议**: 使用固定内存池
- **状态**: ⚠️ 待处理

### 3.5 Python-C++边界问题

#### 问题 #006: C++扩展编译

- **文件**: `src/utils/gpu_ext.cpp:145`
- **问题描述**: CUDA C++扩展需要重新编译
- **迁移建议**: 使用Ascend C重写或使用ATB
- **状态**: ⚠️ 待处理

### 3.6 并发与异步问题

#### 问题 #007: 多流并发

- **文件**: `src/server/request_handler.py:78`
- **问题描述**: 使用CUDA流实现并发
- **迁移建议**: 重构为进程级并发
- **状态**: ⚠️ 待处理

### 3.7 配置与可维护性问题

#### 问题 #008: 硬编码设备

- **文件**: `src/config.py:23`
- **问题描述**: 配置中硬编码`cuda:0`
- **迁移建议**: 改为设备检测
- **状态**: ✅ 已适配

## 4. 适配代码清单

### 4.1 新增文件

| 文件名 | 功能 | 状态 |
| --- | --- | --- |
| `npu_compat.py` | 设备检测与兼容层 | ✅ |
| `npu_ops.py` | NPU算子封装 | ✅ |
| `build_npu.sh` | 编译脚本 | ✅ |
| `verify_npu.sh` | 验证脚本 | ✅ |

### 4.2 修改文件

| 文件名 | 修改内容 | 状态 |
| --- | --- | --- |
| `src/attention/flash_attn.py` | 替换为NPU算子 | ✅ |
| `src/model/loader.py` | 添加权重转换 | ✅ |
| `src/utils/stream_manager.py` | Stream适配 | ✅ |

## 5. 验证结果

### 5.1 环境验证

- NPU驱动已安装
- CANN Toolkit已配置
- torch_npu已安装
- Python模块可导入

### 5.2 功能验证

- 基础模块导入测试通过
- 设备检测功能正常
- 前向推理执行成功
- 权重加载转换正常

### 5.3 精度验证

- 推理结果与GPU差异 < 0.1%
- 性能测试待执行(需要NPU硬件)

### 5.4 问题汇总

| 问题类型 | 数量 | 严重程度 |
| --- | --- | --- |
| 已解决 | XX | - |
| 待解决 | XX | 高/中/低 |

## 6. 适配指南

### 6.1 前置条件

1. 安装CANN Toolkit

下载地址: https://www.hiascend.com/software/aiengine

2. 安装torch_npu

pip install torch torch_npu

3. 验证安装

python3 -c "import torch; import torch_npu; print('NPU available:', torch_npu.is_npu_available())"


### 6.2 快速适配步骤

**步骤1: 克隆并进入项目**

git clone <repo_url> cd <project_name>


**步骤2: 安装依赖**

pip install -r requirements-npu.txt


**步骤3: 运行验证**

bash verify_npu.sh


**步骤4: 执行推理**

python3 run_npu.py --model <model_path> --input <input_data>


### 6.3 常见问题排查

| 问题 | 原因 | 解决方案 |
| --- | --- | --- |
| 导入失败 | CANN未正确安装 | 重新配置环境变量 |
| 算子不支持 | NPU不支持该算子 | 使用ATB替代或自研算子 |
| 内存溢出 | 批处理过大 | 减小batch_size |
| 精度不达标 | 混合精度配置问题 | 检查AMP配置 |

## 7. 后续工作建议

### 7.1 短期(1周内)

- 完成剩余堵点的适配
- 在真实NPU硬件上进行性能测试
- 优化算子融合

### 7.2 中期(1个月内)

- 完善错误处理机制
- 添加日志和监控
- 性能调优

### 7.3 长期

- 持续跟进CANN更新
- 自动化测试流程
- 文档完善

---

**报告生成时间**: YYYY-MM-DD HH:mm:ss **适配工程师**: AI Agent (NPU Adapter Reviewer) **报告版本**: v1.0

任务5.2:输出报告

将报告保存到当前目录:


CodeReview_Results_YYYY-MM-DD.md

输出要求

  1. 报告格式: 必须是Markdown格式
  2. 文件命名: CodeReview_Results_运行当天的日期.md(格式:YYYY-MM-DD)
  3. 保存位置: 当前工作目录
  4. 内容完整性: 必须包含上述所有章节

特殊处理规则

如果验证完全通过

  • 输出"适配成功"的状态
  • 提供完整的适配指南
  • 包含端到端运行说明

如果验证未完全通过

  • 详细说明每个失败项
  • 提供具体的修复建议
  • 给出修改后的代码
  • 标注需要人工介入的部分

知识参考

在执行过程中,可参考以下资料(按需加载):

  • references/ascend_npu_best_practices.md - 昇腾NPU最佳实践
  • references/cann_migration_guide.md - CANN迁移指南
  • references/npu_python_api.md - NPU Python API参考

请使用此skill完成GPU到昇腾NPU的完整适配审查工作。

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.94%
按下载量换算110

Claude

28.6%
按下载量换算86

Cursor

19.16%
按下载量换算57

Gemini CLI

8.83%
按下载量换算26

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

external-service

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills