讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

cupynumeric-migration-readiness

Polar Sponsor
爱发电 赞助
.NET 9.0

预迁移就绪评估器,用于将 NumPy 代码移植到 cuPyNumeric。在开始大量移植工作之前使用,当用户询问代码能否在 GPU 上扩展、是否应该迁移到 cu

cuPyNumeric 迁移就绪评估

功能概述

cuPyNumeric 迁移就绪评估是一项面向实际任务的技能,主要用于在迁移之前(而非迁移期间)使用本技能;回答一个核心问题: 在用户投入数周的移植工作之前,其现有的 NumPy API 中有哪些能在 cuPyNumeric 上扩展,哪些需要重构?

核心要点

  • 为此:阅读源代码,根据在 Legate/NVIDIA GPU 栈上的多 GPU 扩展能力对每个 NumPy 惯用模式进行分类,交叉参考附带的 API 支持清单,并生成。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

cuPyNumeric 迁移就绪评估

目的

在迁移之前(而非迁移期间)使用本技能。 回答一个核心问题:在用户投入数周的移植工作之前,其现有的 NumPy API 中有哪些能在 cuPyNumeric 上扩展,哪些需要重构? 为此:阅读源代码,根据在 Legate/NVIDIA GPU 栈上的多 GPU 扩展能力对每个 NumPy 惯用模式进行分类,交叉参考附带的 API 支持清单,并生成结构化结论,包含每个发现的推理和配方指引。

这是一项静态的只读评估。 使用 Read、Grep 和 Glob 工具检查用户的源代码。不要执行用户的代码、修改或写入文件,也不要打印环境变量或密钥。下面展示的 legate 和 cuPyNumeric Doctor 命令是建议由用户运行的,而非本技能执行的操作。

如果之前从未见过本技能,请先前往 references/getting-started.md。

何时使用本技能

当用户即将将 NumPy 代码迁移到 GPU,并询问是否能在 cuPyNumeric/GPU 上扩展、是否应该迁移、哪些部分会受益、移植前需要更改什么、移植是否值得,或提及预移植评估、扩缩容分析、惯用模式分析、GPU 重构规划、识别 NumPy GPU 反模式时使用。

在以下情况拒绝并重定向(请求不是预迁移评估时):

  • 迁移后的性能/性能分析("已经移植了,为什么慢?")→ 指向 legate --profile 和上游的性能分析与调试指南。
  • 自定义 CUDA / 内核编写("编写/优化 CUDA 内核")

用户要求评估的图谱/稀疏/ML/NLP 工作负载仍然在范围内:进行评估并通过关卡 4 返回 NOT RECOMMENDED。这是一种结论,而非拒绝。

指令

按顺序执行以下所有五个步骤。语义性地阅读用户的代码并推理;不要一次性输出散文式结论。

步骤 1 — 收集上下文

在扫描代码之前先收集信息。以下每项都针对典型工作负载提供了默认值——当用户未主动提供细节时使用默认值;不要卡在提问上。

  • 源代码位置。 未指定路径时默认使用当前工作目录。
  • 运行时的热路径数组大致大小。 默认 3000 万到 5000 万个元素。将用户提供的数字(或此默认值)映射到关卡 2 层级(每 GPU 下限 65K;10M+ 可实现真正单 GPU 加速;100M+ 可实现多 GPU)。
  • 目标硬件。 默认 1-4 GPU,单节点。在假设多节点前确认。仅 CPU 运行时,询问每节点 RAM 而非 FBMEM。
  • 主要计算模式。 模板计算 / GEMM / 蒙特卡洛 / 归约 / 混合-SciPy。让用户说明;否则在步骤 3 中从代码推断。

在评估报告顶部说明你使用的默认值,以便用户修正。如果某个值无法确定,如实说明并仅进行定性评估——不要编造超出上述默认值的数字。

步骤 2 — 加载 API 支持清单

读取 assets/api-support.md,即上游 NumPy 与 cuPyNumeric 对比表的已提交快照。对于代码中调用的每个 NumPy API,找到其所在行并读取前导符号:

  • ✓✓ numpy.X —— 已实现且可在多 GPU 上工作(最佳路径)。
  • ✓ numpy.X —— 已实现但仅限单 GPU/CPU(多节点有限制)。
  • 🟡 numpy.X — <注释> —— 部分支持;阅读注释。
  • ✗ numpy.X —— 未在 cuPyNumeric 分布式路径上实现。调用时的行为因版本而异(部分不支持的 API 会通过主机 NumPy 路由,其他会抛出异常)——无论哪种情况,在热路径上使用都是迁移阻塞项。不要向用户承诺会静默回退到主机 NumPy。

如果 Fetched: 行超过约 90 天,请刷新快照——参见可用脚本部分。

步骤 3 — 语义性读取代码

使用 Read 和 Grep 遍历用户文件,根据 references/idioms-that-scale.md 和 references/idioms-that-block.md(完整的推理和 R-code 见上述文件)对每个数组数学区域进行分类。进行语义性阅读,而非正则表达式匹配:标记前,确认 arr 追踪到 cupynumeric 数组(或别名为它的 np.*),并检查访问是否位于热循环内。应用以下规则:

  • 标记元素循环(for i in range(n): arr[i] = ...)为阻塞项;将 epoch/step/file 循环(循环体已向量化)视为正常——区分二者。
  • 标记标量同步——在热循环内(每次迭代的主机同步)对 cuPyNumeric 数组调用 .item() / float() / int() / bool() / complex();在边界处允许。
  • 标记归约条件——在数组归约上的 if/while(while np.max(err) > tol:)每次迭代都会同步。
  • 标记循环中的可提权分配作为可修复的低效项。
  • 标记运行时代码中的 mpi4py(与 cupynumeric 配合进行数组分区/通信的代码)(R108)——但首先确认其在热路径上发出了 MPI 调用;忽略 README、构建脚本或备用启动器中的 grep 匹配。
  • 在 reshape / asarray / flatten 上标记 order= 为 R109——始终标记,无论版本是警告还是静默无操作。
  • 始终在多 GPU 下为 np.random.* 引用 [R304](references/idioms-that-scale.md#r304] 作为 INFO:跨 GPU 的按位一致可重现性默认不可能实现(--gpus N / LEGATE_GPUS 是 Legate 启动器参数)。
  • 标记数组上的 Python 内置函数(sum/max/min/any/iter(arr))——主机迭代回退(R110;上游最佳实践)。允许 len(arr)(形状查找;优先使用 arr.shape[0] / arr.size 以确保零维安全)。
  • 标记在热循环中混合使用 cupy 和 cupynumeric(R111);运行时不共享 GPU 内存,因此每次跳转都经过主机 NumPy。
  • 在 assets/api-support.md 中查找代码调用的每个 NumPy API(符号图例见步骤 2)。

关于深层原理,阅读 references/gpu-stack.md(内存、SM、通信、调度)和 references/execution-model.md(惰性执行、同步点、映射器)。

步骤 4 — 生成结构化评估报告

按以下顺序交付报告。每个发现都引用 file:line,方便用户导航。

  1. 结论——一句话概括——见下方的"结论框架"。
  2. 可扩展部分(SCALES 发现)——引用具有代表性的代码行,让用户看到导入替换后哪些会加速。
  3. 阻塞项(BLOCKS 发现)——每个都与 idioms-that-block.md 及 refactor-recipes.md 中的配方关联。
  4. 可修复项(REFACTOR 发现)——按配方分组;一个配方通常可修复多处。
  5. 兼容性/成本说明(INFO 发现)——SciPy 边界、仅单 GPU 的线性代数/FFT、RNG 布局与 --gpus N。
  6. API 支持缺口——代码调用的、清单中未实现或仅单 GPU 的 API。
  7. 决策框架摘要——来自 references/decision-framework.md 的关卡 1-6,标记为通过/未通过/不确定。
  8. 推荐后续步骤——优先应用哪些配方、是否先移植一个模块、何时引入 cuPyNumeric Doctor。

所有 8 个部分都必须出现,即使结论是 READY 或 NOT RECOMMENDED。在空部分下写 "None for this code" 或 "n/a — see verdict" 一行即可——不要省略标题;标题是评估报告评分的结构契约。参见 assets/sample_report.md 了解实际报告示例。

步骤 5 — 转交至 cuPyNumeric Doctor 进行运行时验证

引导用户在应用配方且代码可运行后,运行 cuPyNumeric Doctor:

CUPYNUMERIC_DOCTOR=1 CUPYNUMERIC_DOCTOR_FORMAT=json CUPYNUMERIC_DOCTOR_FILENAME=doctor-report.json legate --gpus 1 main.py

cuPyNumeric Doctor 能在运行时捕获源代码审查可能遗漏的问题(标量元素访问、ndarray 迭代、高级索引、nonzero 误用、mpi4py 导入、视图的原地操作)。评估的结束语为:"现在启用 cuPyNumeric Doctor 运行;以下是你需要在其输出中关注的内容。"

结论框架

定性分配结论,基于发现的类型而非分数:

结论 适用条件 行动
READY 无 BLOCKS;很少或没有 REFACTOR 替换导入;进行基准测试
LIGHT REFACTOR 少量配方可修复的模式(R201–R206),或一两个简单的 BLOCKS 从 refactor-recipes.md 应用 1-3 个配方;重新评估至 READY
SIGNIFICANT REFACTOR 热路径中存在多个 BLOCKS,或任何 R108(mpi4py)——需要重写,但非不推荐 真实项目;预计每模块 1-3 工程师周
NOT RECOMMENDED 仅两种失败情况:关卡 2(数组低于 65,536 下限)或关卡 4(计算模式不匹配)。大量 BLOCKS 不归入此类 先重构或使用其他运行时

按顺序应用,第一个匹配即获胜:

  1. 关卡 4 失败(稀疏/图谱/ML/顺序/字符串)→ NOT RECOMMENDED。
  2. 关卡 2 失败(热路径数组 < 65,536 元素/GPU,无可行的批处理路径)→ NOT RECOMMENDED。
  3. 任何 R108(mpi4py) → SIGNIFICANT REFACTOR(并行层重写的成本是代价,而非不推荐的原因)。
  4. 热路径中存在多个 BLOCKS(R101–R111)→ SIGNIFICANT REFACTOR(计数不会超过这个级别——每个 BLOCKS 都有记录的配方)。
  5. 一两个配方可修复的 BLOCKS(例如 R101–R104 元素循环/同步)→ LIGHT REFACTOR。
  6. 仅有 REFACTOR 模式(R201–R206)→ LIGHT REFACTOR;配方是机械性的。
  7. 无 BLOCKS,无 REFACTOR → READY。
  8. 热路径上清单中缺失的 API → 降级一级(SIGNIFICANT 保持 SIGNIFICANT,从不降为 NOT RECOMMENDED)。仅单 GPU 的 API 仅对多节点有意义。

权衡发现的类型,而非数量。 热循环中的一个 R101 比十个 R001 更重要——它破坏了 R001 本该提供的扩展能力。反之,大量 BLOCKS + R108 仍然是 SIGNIFICANT,而非 NOT RECOMMENDED——层级衡量的是工程成本,而非绝望程度。NOT RECOMMENDED 需要规模或计算模式的失败。完整框架:references/decision-framework.md。

可扩展与阻塞项一览

  • SCALES(保持原样)——向量化逐元素操作、归约、matmul/einsum、np.where、每 GPU 大型模板切片 arr[1:-1, 1:-1]、out=、布尔掩码索引。
  • BLOCKS(迁移前移除)——元素循环、np.vectorize、for row in arr、热循环中的 .item()/.tolist()/bool(arr)、循环中的归约式 if/while、arr[::2]、dtype=object、mpi4py、order=、min/max/sum(arr)。
  • REFACTOR(应用配方)——循环中的分配、循环中的 x = x + y 重新绑定、循环中的 vstack/hstack/concatenate、np.nonzero() + 索引、视图突变 diag/flip/flatten、热循环中的 reshape。
  • INFO(成本说明,非阻塞)——SciPy 导入、单设备 linalg.qr/svd、单变换 fft.*、有大小阈值的 linalg.solve/cholesky。

完整分类见 idioms-that-scale.md 和 idioms-that-block.md。清单中未列出的 API 静默忽略(超出上游表格范围——标记会造成噪音)。

阅读顺序

规范化的按序阅读指南位于 references/getting-started.md 中——阅读一次以了解方向。

对于非平凡的评估,必须阅读的是 idioms-that-block.md、refactor-recipes.md 和 decision-framework.md;其余内容(idioms-that-scale.md、gpu-stack.md、execution-model.md、partitioning-and-balance.md、case-studies.md)按需阅读。

限制

  • 不运行 cuPyNumeric。 不需要运行时;这是移植前的检查。实际的加速测量发生在迁移之后。
  • 不自动生成重构后的代码。 它识别需要更改的内容并指向配方;由用户(或后续代理)应用。
  • 不对工作负载进行性能分析。 运行时测量请使用 legate.timing.time() 和上游的性能分析与调试指南。
  • 不能替代判断。 模式匹配会遗漏日志记录中的隐式同步、隐藏 .tolist() 的装饰器、运行时数据相关的分区不匹配。需要(尤其是在边界情况下)同时阅读源代码。

示例

附带 assets/examples/ 夹具的工作评估(示例,非模板):

结论:LIGHT REFACTOR。 scales_well.py 可以顺利翻译;needs_refactor.py 需要提权一次分配;blocks_scaling.py 通过 .item() 每次迭代同步。

可扩展部分: scales_well.py:23-31(模板计算 R005)、:40-44(归约 R002)、:18-22(逐元素 R001)。 阻塞项: blocks_scaling.py:51-58(R104 —— 热循环中的 .item())→ RR-sync。 可修复项: needs_refactor.py:21-28(R201 —— 循环中的分配)→ RR-alloc。 下一步: 应用配方;重新评估至 READY;首次实际运行时启用 CUPYNUMERIC_DOCTOR=1。

完整的工作报告见 assets/sample_report.md。

权威上游参考资料

  • 对比表(assets/api-support.md 的来源):https://nv-legate.github.io/cupynumeric/api/comparison.html(镜像,最新)/ .../latest/api/comparison.html on docs.nvidia.com(官方)
  • 最佳实践、Doctor、性能分析、与 NumPy 的差异、Legate 启动器——位于 https://docs.nvidia.com/cupynumeric/latest/(`user/practices.html`、`user/doctor.html`、`user/profiling_debugging.html`、`user/differences.html`)和 https://docs.nvidia.com/legate/latest/manual/usage/running.html
  • 源代码:https://github.com/nv-legate/cupynumeric

可用脚本

脚本 目的 参数
scripts/fetch_api_support.py 抓取上游对比表到 assets/api-support.md。仅需 Python 标准库;可独立运行。 --default-path(写入已提交的 assets/api-support.md);--docs-nvidia-url(使用官方 docs.nvidia.com 替代默认的 GitHub Pages 镜像)

用户运行此命令以刷新清单(python scripts/fetch_api_support.py --default-path)。

附带的参考文件和资源

references/ 中的文件已在必需阅读顺序上方列出(R-code 范围:idioms-that-scale.md = R001–R007 / R301–R305;idioms-that-block.md = R101–R111 / R201–R206)。资源:assets/api-support.md(已提交的 API 快照,步骤 2 中加载)、assets/sample_report.md 和 assets/examples/*.py(工作报告和夹具)。

故障排除

症状 原因 修复
清单中的 Fetched: 行超过约 90 天 快照过期 运行 fetch_api_support.py --default-path(用户操作)
清单缺失或抓取工具失败 上游 HTML 变更 对该评估使用 WebFetch 获取对比表
针对许多可修复的 BLOCKS 给出 NOT RECOMMENDED 启发式规则顺序错误 重新应用顺序:关卡 4 → 关卡 2 → R108 → BLOCKS → REFACTOR;权衡类型而非数量
内核编写或迁移后性能分析 超出范围 拒绝并重定向(参见"何时使用")——不输出结论
目录

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

0

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

0

2026.11.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

0

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn