news 2026/9/19 9:24:54

CANN pyasc 运行时配置指南:set_platform 与 Backend/Platform 枚举详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN pyasc 运行时配置指南:set_platform 与 Backend/Platform 枚举详解

CANN pyasc 运行时配置指南:set_platform 与 Backend/Platform 枚举详解

【免费下载链接】pyasc本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc

本指南基于 CANN pyasc 开源仓库,围绕asc.runtime.config模块的运行时配置能力展开:通过set_platform接口一键设置后端执行模式(Model 仿真 / NPU 真实硬件)、SOC 版本与设备 ID。读完本文,你将掌握 pyasc 中"仿真优先、硬件验证"的经典开发流程,能够在 Model 后端完成算子功能调试、在 NPU 后端完成真实硬件验证,并学会处理平台不匹配、运行库缺失等常见异常场景。

一、asc.runtime.config模块定位

在 CANN pyasc 中,用户编写的@asc.jit算子代码本身与具体硬件解耦:同一个 Kernel 既可以运行在昇腾 AI 处理器的真实 NPU 上,也可以运行在 CPU 上的仿真/模型环境中。决定"代码跑在哪里"的开关,正是asc.runtime.config模块——它负责配置后端执行模式(Model/NPU)、SOC 版本(芯片型号)和设备 ID三类运行时信息。

该模块的完整文档位于 docs/python-api/lib/config.md,与 docs/python-api/lib/host.md 共同构成 docs/python-api/lib/index.md 所划分的 "Programming models" 两大编程入口。其接口列表非常精简,核心只有一个函数:

set_platform(backend[, soc_version, device_id, check])设置运行时后端、SOC 版本和设备 ID。当 backend 为 Model 时,soc_version 默认为 Ascend910B1;当 backend 为 NPU 时,soc_version 自动从当前平台获取,且会校验与输入的 soc_version 是否一致。

二、枚举类型详解

asc.runtime.config定义了两组在调用set_platform时必须使用的枚举,它们均可在 python/asc/runtime/config.py 中找到对应实现,枚举值同时接受枚举对象或等值字符串两种写法。

2.1 Backend:后端执行模式

Backend枚举指定 Kernel 编译与执行的后端,共两个取值:

枚举值说明
Backend.Model使用 Model 后端执行,适用于仿真或模型运行场景
Backend.NPU使用 NPU 后端执行,适用于真实 NPU 硬件场景

从源码看,Backend是一个标准Enum(config.py),其值分别为字符串"Model""NPU"。因此调用时既可以直接传Backend.Model,也可以传"Model"——set_platform内部通过Backend(backend)完成归一化。

2.2 Platform:SOC 版本

Platform枚举指定目标芯片型号,决定代码生成与优化的硬件特征。文档(config.md)列出的取值如下:

枚举值说明
Platform.Ascend910B1Ascend 910B1
Platform.Ascend910B2Ascend 910B2
Platform.Ascend910B2CAscend 910B2C
Platform.Ascend910B3Ascend 910B3
Platform.Ascend910B4Ascend 910B4
Platform.Ascend910B4_1Ascend 910B4-1
Platform.Ascend910_9362Ascend 910 9362
Platform.Ascend910_9372Ascend 910 9372
Platform.Ascend910_9381Ascend 910 9381
Platform.Ascend910_9382Ascend 910 9382
Platform.Ascend910_9391Ascend 910 9391
Platform.Ascend910_9392Ascend 910 9392

需要补充的是,当前仓库源码(config.py)中的Platform枚举还包含了文档表格未列出的Ascend 950PR 系列Ascend950PR_950zAscend950PR_9579Ascend950PR_957bAscend950PR_957cAscend950PR_957dAscend950PR_9589Ascend950PR_958bAscend950PR_9599),使用时以源码为准。

三、set_platform函数全解析

3.1 函数签名与参数

def set_platform( backend: Union[Backend, str], soc_version: Optional[Union[Platform, str]] = None, device_id: Optional[int] = None, check=True, ) -> None

各参数含义如下:

参数类型必选说明
backendBackend枚举或str执行后端类型,Backend.ModelBackend.NPU;字符串"Model"/"NPU"同样被接受
soc_versionPlatform枚举或str目标 SOC 版本。Model 后端不传时默认Ascend910B1;NPU 后端不传时自动取当前硬件平台
device_idint执行使用的设备 ID,不传默认使用 0 号设备
checkbool是否校验运行时库可用性,默认True;库不可用时抛异常

3.2 内部执行流程

set_platform的实现位于 python/asc/runtime/config.py,其核心逻辑分为四步:

  1. 参数归一化backend = Backend(backend)soc_version = Platform(soc_version),将字符串统一转为枚举。
  2. 后端分支处理
    • Model后端:若未指定soc_version,自动填充默认值Platform.Ascend910B1,然后调用rt.use_model()切换全局状态为仿真模式;
    • NPU后端:调用rt.current_platform()从硬件层读取实际 SOC 版本(底层通过 ctypes 调用GetSocVersionWrapper,见 python/asc/lib/runtime/interface.py),若传入的soc_version与真实平台不一致,抛出ValueError;随后调用rt.use_npu()切换到硬件模式。
  3. 写入 SOC 版本:统一调用rt.set_soc_version(soc_version)保存到全局状态(对应state.soc_verison,见 interface.py),该值会在后续编译阶段决定目标指令集。
  4. 设备设置与可用性检查:若指定了device_id,调用rt.set_device(device_id);若check=True且运行库不可用(rt.is_available()返回False),抛出RuntimeError,并针对 Model 后端在错误信息中提示需要导出的仿真库路径。

3.3 异常行为

  • 未知后端:抛出ValueError(f"Unknown execution backend: ...")
  • NPU 平台不匹配:输入 SOC 与真实硬件不一致时,抛出ValueError,提示 "Input soc version ... is different from actual ..."。
  • 运行库不可用check=True):抛出RuntimeError。对 Model 后端,错误信息会指导你补齐LD_LIBRARY_PATH,形如:
Please export LD_LIBRARY_PATH=$ASCEND_HOME_PATH/tools/simulator/Ascend910B3/lib:$LD_LIBRARY_PATH

这一错误消息中的 SOC 版本占位符会被真实值替换,相关行为在单元测试 python/test/unit/runtime/test_config.py 中有专门断言。

四、典型使用示例

4.1 最小调用形式

import asc.runtime.config as config from asc.runtime.config import Backend, Platform # 1) Model 后端 + 默认平台(Ascend910B1),仿真运行 config.set_platform(Backend.Model) # 2) Model 后端 + 显式指定平台 config.set_platform(Backend.Model, Platform.Ascend910B1) config.set_platform(Backend.Model, "Ascend910B3", check=False) # 3) NPU 后端 + 指定设备,平台自动从硬件获取并校验 config.set_platform("NPU", device_id=0)

4.2 与算子运行结合的完整流程

仓库中的 examples/01_add/add.py 给出了一个完整的可运行范式:先用命令行参数指定后端与平台,再调用set_platform,随后根据后端类型把输入张量放到npucpu设备上执行:

def vadd_custom(backend: config.Backend, platform: config.Platform): config.set_platform(backend, platform) device = "npu" if config.Backend(backend) == config.Backend.NPU else "cpu" size = 8 * 2048 x = torch.rand(size, dtype=torch.float32, device=device) y = torch.rand(size, dtype=torch.float32, device=device) z = vadd_launch(x, y) assert torch.allclose(z, x + y)

其命令行入口校验了BackendPlatform的合法取值,并支持如下运行方式(源码注释见 add.py):

# Model 仿真运行(默认平台) python add.py -r Model # Model 仿真运行,指定平台 python add.py -r Model -v Ascend910B3 # NPU 真实硬件运行 python add.py -r NPU

05_matmul_leakyrelu/matmul_leakyrelu.py07_swiglu/swiglu.py等其余 examples 示例均沿用同一模式,可作为参考。

4.3 在性能剖析场景中的使用

在 docs/op_debug_prof.md 的 PyTorch Profiler 采集示例中,set_platform被用来统一两个场景的设备选择逻辑——仿真时张量放cpu,硬件时放npu,从而让同一段剖析代码可在两种后端下切换运行。

五、底层原理与状态流转

set_platform的开关动作最终都落在asc.lib.runtime的全局状态上,理解这条链路有助于排查运行时问题:

  1. 模式切换use_model()/use_npu()仅修改全局标志state.model(见 python/asc/lib/runtime/interface.py),后续编译与启动流程通过is_model()查询当前模式。
  2. 平台写入set_soc_version()保存平台枚举,供编译期生成对应指令(interface.py)。
  3. 设备与流set_device()触发底层SetDeviceWrapper,并为该设备创建默认流current_stream()(interface.py)。
  4. 惰性初始化:真正加载运行库发生在首次调用时(_lazy_init),因此"仿真优先"的开发模式下,Model 后端并不需要真实的 NPU 驱动与硬件即可完成算子功能验证,这正是 pyasc 推荐先 Model 后 NPU 的开发节奏(可参考 docs/quick_start.md 与 docs/pyasc_op_develop_guide.md)。

六、常见问题与注意事项

  • NPU 后端平台必须一致soc_version与真实硬件不符会直接抛ValueError;不传该参数可自动适配当前硬件。
  • Model 后端需要仿真库:若check=True时报RuntimeError,请按错误提示导出LD_LIBRARY_PATH,或临时以check=False跳过校验(仅用于快速原型验证)。
  • 多设备选择device_id不传默认使用 0 号设备;切换设备时旧设备的流会被自动释放(见 interface.py)。
  • 枚举与字符串等价Backend/Platform的所有参数都可用等值字符串传入,便于从命令行或配置文件驱动。

七、参考资源

  • 接口文档:docs/python-api/lib/config.md
  • 源码实现:python/asc/runtime/config.py
  • 运行时底层封装:python/asc/lib/runtime/interface.py
  • 单元测试:python/test/unit/runtime/test_config.py
  • 完整示例:examples/01_add/add.py
  • 环境准备与算子开发指引:docs/quick_start.md、docs/pyasc_op_develop_guide.md

【免费下载链接】pyasc本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 9:24:46

把 WorkBuddy 的模型源切到 TaoToken 后怎么验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 9:24:43

Artificial Analysis:GLM 5.3 Flash 性价比散点,TaoToken 当默认供应商

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 9:20:52

Codex 和 Claude Code 一起配,CC Switch 里走 TaoToken 通道行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 9:19:30

通达信多周期共振KDJ+MACD主升浪指标公式详解

简介:面向股票技术分析爱好者的通达信指标公式文档,聚焦短线与中线操作场景。文档以完整公式源码为核心,围绕KDJ日、周、月三周期金叉共振识别“金牛启动”信号:当日、周、月线KDJ金叉同时出现时触发“日周月赚”提示,…

作者头像 李华