用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/mindspore-ai/akg --skill verifier-agent命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | verifier-agent |
| description | 验证Agent,负责测试代码正确性和性能profiling |
| category | agent |
| version | 1.5.0 |
| license | MIT |
Verifier Agent负责全方位验证生成的代码,确保:
def test_accuracy(kernel_output, reference_output, rtol=1e-5, atol=1e-8):
"""测试数值精度"""
return np.allclose(kernel_output, reference_output, rtol=rtol, atol=atol)
# GPU计时
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
start_event.record()
kernel_function(*args)
end_event.record()
torch.cuda.synchronize()
elapsed_time_ms = start_event.elapsed_time(end_event)
# GFLOPS计算
flops = 2 * M * N * K # MatMul的FLOP数
gflops = (flops / elapsed_time_ms) / 1e6
# 理论带宽 vs 实际带宽
bytes_transferred = (M*K + K*N + M*N) * 4 # float32
bandwidth_gbps = (bytes_transferred / elapsed_time_ms) / 1e6
efficiency = bandwidth_gbps / theoretical_bandwidth
输入: 生成的代码 + 测试用例
↓
步骤1: 编译代码
↓
步骤2: 功能测试(正确性)
├─ 通过 → 步骤3
└─ 失败 → 报告错误,返回Coder
↓
步骤3: 性能测试(Profiling)
↓
步骤4: 资源分析
↓
步骤5: 生成报告
↓
输出: 验证报告 + 性能指标
def generate_test_cases(op_type, input_shapes):
"""生成测试用例"""
test_cases = []
# 1. 正常情况
test_cases.append(generate_normal_case(input_shapes))
# 2. 边界情况
test_cases.extend([
generate_zero_case(input_shapes),
generate_large_case(input_shapes),
generate_small_case(input_shapes),
])
# 3. 特殊情况
test_cases.extend([
generate_nan_case(input_shapes),
generate_inf_case(input_shapes),
])
# 4. 随机情况
for _ in range(10):
test_cases.append(generate_random_case(input_shapes))
return test_cases
def compare_with_baseline(custom_kernel, baseline_impl, inputs):
"""与baseline对比"""
# 测试正确性
custom_output = custom_kernel(*inputs)
baseline_output = baseline_impl(*inputs)
accuracy = test_accuracy(custom_output, baseline_output)
# 测试性能
custom_time = benchmark(custom_kernel, inputs)
baseline_time = benchmark(baseline_impl, inputs)
speedup = baseline_time / custom_time
return {
'accuracy': accuracy,
'custom_time': custom_time,
'baseline_time': baseline_time,
'speedup': speedup
}
验证报告:
算子: matmul
版本: 1.0.0
时间: 2026-01-24 10:30:00
正确性:
状态: PASS
测试用例: 15
通过: 15
失败: 0
精度: 1.2e-6 (相对误差)
性能:
平均延迟: 2.35 ms
标准差: 0.12 ms
吞吐量: 4.2 TFLOPS
带宽利用率: 78%
对比Baseline:
PyTorch: 3.1 ms (1.32x speedup)
cuBLAS: 2.8 ms (1.19x speedup)
资源:
Register/thread: 48
Shared memory/block: 48 KB
Occupancy: 75%
建议:
- ✅ 功能正确,可以部署
-
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 数值误差大 | 累加顺序不同 | 使用Kahan求和 |
| 偶发错误 | Race condition | 添加同步 |
| 边界错误 | 索引越界 | 添加边界检查 |
| NaN输出 | 除零/log(0) | 添加epsilon |
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 慢于baseline | 内存访问未合并 | 调整访问模式 |
| 低occupancy | Register压力大 | 减少局部变量 |
| 低带宽利用 | 计算访存比低 | 增加计算密度 |
| Bank conflict | Shared memory布局 | Padding避免冲突 |
ncu --set full -o profile kernel_program
nsys profile --stats=true python script.py
rocprof --stats python script.py
with torch.profiler.profile(
activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
record_shapes=True,
profile_memory=True,
with_stack=True
) as prof:
kernel(*inputs)
print(prof.key_averages().table(sort_by="cuda_time_total"))
verifier_agent:
mode: standard # fast, standard, strict
accuracy:
rtol: 1e-5
atol: 1e-8
test_nan: true
test_inf: true
performance:
warmup_runs: 3
measure_runs: 10
use_percentile: 50 # 中位数
profiling:
enable: true
tool: nsight-compute
metrics:
- sm_efficiency
- memory_throughput
- achieved_occupancy
from skill_system import SkillLoader, SkillRegistry
# 加载verifier-agent skill
loader = SkillLoader()
skills = loader.load_from_directory(Path("./skills"))
registry = SkillRegistry()
registry.register_batch(skills)
verifier_skill = registry.get("verifier-agent")
# 使用skill内容指导验证
def verify_kernel(kernel, inputs, expected_outputs):
"""根据skill指导进行验证"""
# 正确性测试
outputs = kernel(*inputs)
accuracy_pass = all(
np.allclose(out, exp, rtol=1e-5, atol=1e-8)
for out, exp in zip(outputs, expected_outputs)
)
# 性能测试
times = []
for _ in range(10):
start = time.time()
kernel(*inputs)
torch.cuda.synchronize()
times.append(time.time() - start)
avg_time = np.mean(times)
std_time = np.std(times)
return {
'accuracy': accuracy_pass,
'avg_time': avg_time,
'std_time': std_time
}