FlagTensor 标准验收命令#
本文档提供运行 FlagTensor 验收检查的标准命令。
前提条件#
# 安装包
python -m pip install .
# 安装 pre-commit 钩子(可选但推荐)
pre-commit install
静态质量检查#
# 本地运行 pre-commit 检查
pre-commit run --all-files --show-diff-on-failure
# 构建包用于验证
python -m build
# 检查包元数据
twine check dist/*
正确性测试#
冒烟正确性(CI 级)#
# 运行所有算子的冒烟正确性
python tools/run_flagtensor_ci.py --smoke --run-correctness --results-dir ci_results_correctness --dump-json-summary
# 运行特定算子的冒烟正确性
python tools/run_flagtensor_ci.py --op acos --smoke --run-correctness --results-dir ci_results_correctness --dump-json-summary
# 运行特定类别的冒烟正确性
python tools/run_flagtensor_ci.py --category unary --smoke --run-correctness --results-dir ci_results_correctness --dump-json-summary
验收正确性(完整覆盖率)#
# 运行所有算子的验收级正确性
python tools/run_flagtensor_ci.py --run-correctness --results-dir acceptance_results_correctness --dump-json-summary
# 运行特定类别的验收级正确性
python tools/run_flagtensor_ci.py --category unary --run-correctness --results-dir acceptance_results_correctness --dump-json-summary
# 以特定基准测试模式运行验收级正确性
python tools/run_flagtensor_ci.py --run-correctness --mode operator --results-dir acceptance_results_correctness --dump-json-summary
通过 Pytest 进行正确性测试 —— 类别文件(主要)#
类别级正确性文件是正式验收接口:
# 通过 tests/ 入口运行所有正确性测试
python -m pytest -vs tests
# 通过标记运行特定算子正确性
python -m pytest -vs tests -m acos
# 运行某个类别中的所有算子
python -m pytest -vs tests/unary/
性能测试#
冒烟性能(CI 级)#
# 运行所有算子的冒烟性能
python tools/run_flagtensor_ci.py --smoke --run-perf --results-dir ci_results_perf --dump-json-summary
# 运行特定算子的冒烟性能
python tools/run_flagtensor_ci.py --op acos --smoke --run-perf --results-dir ci_results_perf --dump-json-summary
# 运行特定类别的冒烟性能
python tools/run_flagtensor_ci.py --category unary --smoke --run-perf --results-dir ci_results_perf --dump-json-summary
验收性能(完整覆盖率)#
# 运行所有算子的验收级性能
python tools/run_flagtensor_ci.py --run-perf --results-dir acceptance_results_perf --dump-json-summary
# 以特定基准测试模式运行验收级性能
python tools/run_flagtensor_ci.py --run-perf --mode operator --results-dir acceptance_results_perf --dump-json-summary
通过类别基准测试进行性能测试(主要)#
类别级基准测试文件是正式验收接口。单个算子通过 pytest -m <op> 标记选择:
# 运行一元类别基准测试
python -m pytest -vs benchmark/test_unary_perf.py -m identity
# 运行二元类别基准测试
python -m pytest -vs benchmark/test_binary_perf.py -m add
# 运行收缩类别基准测试
python -m pytest -vs benchmark/test_contraction_perf.py -m Contraction
# 运行稀疏类别基准测试
python -m pytest -vs benchmark/test_sparse_perf.py -m BlockSparseContraction
通过单个算子进行性能测试 —— 旧版/调试#
旧版每个算子基准测试文件保留用于调试,但不属于验收接口:
python -m pytest -vs benchmark/test_CUTENSOR_OP_ACOS_perf.py
每周回归#
# 使用注册表驱动的算子选择运行每周回归
python tools/run_flagtensor_weekly.py --project-root . --results-dir weekly_results --gpus 0 --mode kernel
# 使用特定算子列表运行每周(可选;省略时从注册表生成)
python tools/run_flagtensor_weekly.py --project-root . --op-list my_ops.txt --results-dir weekly_results --gpus 0 --mode kernel
# 使用类别过滤运行每周
python tools/run_flagtensor_weekly.py --project-root . --category unary --results-dir weekly_results --gpus 0 --mode kernel
注册表操作#
# 加载并检查注册表
python - <<'PY'
import sys
sys.path.insert(0, 'src')
from flagtensor_registry import load_operator_registry
for spec in load_operator_registry():
print(f"{spec.name}: category={spec.category}, status={spec.status}")
PY
# 检查注册表一致性
python - <<'PY'
import sys
from pathlib import Path
sys.path.insert(0, 'src')
from flagtensor_registry import load_operator_registry
registry = load_operator_registry()
errors = []
for spec in registry:
impl_path = Path(spec.impl_file)
if not impl_path.exists():
errors.append(f"Missing impl: {spec.name} -> {spec.impl_file}")
test_path = Path(spec.correctness_test)
if not test_path.exists():
errors.append(f"Missing test: {spec.name} -> {spec.correctness_test}")
bench_path = Path(spec.benchmark_test)
if not bench_path.exists():
errors.append(f"Missing benchmark: {spec.name} -> {spec.benchmark_test}")
if errors:
print("Registry consistency errors:")
for e in errors:
print(f" - {e}")
else:
print(f"Registry consistency OK: {len(registry)} operators")
PY
报告生成#
# 从 CI 结果生成 HTML 报告
python tools/generate_flagtensor_html_report.py --results-dir ci_results_correctness --output ci_results_correctness/report.html
# 从验收结果生成 HTML 报告
python tools/generate_flagtensor_html_report.py --results-dir acceptance_results_correctness --output acceptance_results_correctness/report.html
环境导出#
# 导出环境用于可复现性
python tools/export_env.py --project-root . --output env.json
GPU 集群验证(Slurm)#
# 在 GPU 集群节点上运行正确性
srun -N 1 --job-name flagtensor-correctness --nodelist <node_name> --gres=gpu:1 --cpus-per-task=24 --mem=242144 \
docker exec -w /workspace/FlagGems/flagtensor triton_cuda12 \
bash -lc "python tools/run_flagtensor_ci.py --smoke --run-correctness --results-dir /tmp/flagtensor_ci_results"
# 在 GPU 集群节点上运行每周
srun -N 1 --job-name flagtensor-weekly --nodelist <node_name> --gres=gpu:1 --cpus-per-task=24 --mem=242144 \
docker exec -w /workspace/FlagGems/flagtensor triton_cuda12 \
bash -lc "python tools/run_flagtensor_weekly.py --project-root /workspace/FlagGems/flagtensor --results-dir /tmp/flagtensor_weekly_results --gpus 0"
快速验收检查清单#
要验证验收就绪状态,按顺序运行以下命令:
静态质量
pre-commit run --all-files --show-diff-on-failure
注册表一致性
python -c "import sys; sys.path.insert(0, 'src'); from flagtensor_registry import load_operator_registry; print(f'Registry OK: {len(list(load_operator_registry()))} operators')"
冒烟正确性
python tools/run_flagtensor_ci.py --smoke --run-correctness --results-dir /tmp/flagtensor_smoke_correctness --dump-json-summary && cat /tmp/flagtensor_smoke_correctness/summary.json
冒烟性能
python tools/run_flagtensor_ci.py --smoke --run-perf --results-dir /tmp/flagtensor_smoke_perf --dump-json-summary && cat /tmp/flagtensor_smoke_perf/summary.json
类别基准测试验证
python -m pytest -vs benchmark/test_unary_perf.py -m identity python -m pytest -vs benchmark/test_binary_perf.py -m add python -m pytest -vs benchmark/test_contraction_perf.py -m Contraction python -m pytest -vs benchmark/test_sparse_perf.py -m BlockSparseContraction