[昇腾CANN自定义算子]TIK调试器命令汇总

昇腾CANN自定义算子TIK调试指南
本文汇总了昇腾CANN自定义算子的TIK调试器使用方法,包括如何进入调试模式、调试器的交互界面及各种调试命令,如设置断点(break)、清除断点(clear)、单步执行(next)、打印表达式(print)和退出调试(quit)等。

如何进入

需要在tikdb.start_debug()函数中,把interactive参数设为True。

tik_instance.tikdb.start_debug(feed_dict=feed_dict,interactive=True)

调试器的交互方式什么样

当你看到这样的提示符,就对了。

[TIK]>

调试命令

b break

给程序加断点

  • 例:
[TIK]
<think>我们正在处理如何将集成自定义算子后的Qwen2.5模型转换为昇腾OM格式进行部署。这个过程需要经过几个关键步骤,包括模型导出为ONNX、自定义算子的注册、模型转换等。以下是详细步骤: ### 一、导出模型为ONNX格式 1. **修改模型代码以支持ONNX导出** 在调用自定义算子的模块中,需要为PyTorch的`torch.onnx.export`函数提供符号函数(symbolic function)以描述自定义算子的行为。 ```python import torch import torch.onnx.symbolic_helper as sym_help # 定义自定义算子的符号函数 def custom_forward_symbolic(g, input): # 这里需要定义在ONNX图中如何表示该算子 # 如果自定义算子可以分解为ONNX已有算子,则在此组合 # 否则,需要导出为自定义算子节点(此时需要提供算子定义文件) output = g.op("CustomOp", input, domain_s="custom_domain", # 自定义域名 attribute1_i=1) # 可选属性 return output # 注册符号函数 from torch.onnx import register_custom_op_symbolic register_custom_op_symbolic('custom_ops::forward', custom_forward_symbolic, 11) # 11为ONNX版本号 ``` 2. **导出ONNX模型** 使用标准的PyTorch ONNX导出流程,但需确保模型在NPU设备上运行并导出: ```python model = Qwen2ForCausalLM.from_pretrained("Qwen/Qwen2.5-3B").to("npu") model.eval() # 示例输入 input_ids = torch.tensor([[1, 2, 3, 4, 5]]).npu() attention_mask = torch.tensor([[1, 1, 1, 1, 1]]).npu() # 导出ONNX模型 torch.onnx.export( model, (input_ids, attention_mask), "qwen2.5-3b-custom.onnx", opset_version=11, # 根据自定义算子需求选择版本 input_names=['input_ids', 'attention_mask'], output_names=['logits'], dynamic_axes={ 'input_ids': {0: 'batch_size', 1: 'sequence_length'}, 'attention_mask': {0: 'batch_size', 1: 'sequence_length'}, 'logits': {0: 'batch_size', 1: 'sequence_length'} } ) ``` ### 二、准备自定义算子的定义文件 1. **创建算子定义文件(.json)** 由于自定义算子不在ONNX标准算子集中,需要提供算子定义文件,供后续转换工具识别。 ```json [ { "op": "CustomOp", // 算子名称,与符号函数中一致 "input_desc": [ { "name": "input", "type": "float16", "format": "ND" } ], "output_desc": [ { "name": "output", "type": "float16", "format": "ND" } ], "attr": [ { "name": "attribute1", "type": "int", "default_value": 1 } ] } ] ``` 2. **将定义文件放入昇腾自定义算子目录** 设置环境变量指向该文件: ```bash export ASCEND_OPP_PATH=/path/to/custom_op_dir # 包含custom_op.json的目录 ``` ### 三、使用昇腾模型转换工具(OMG)转换模型 1. **安装昇腾模型转换工具** 确保已安装昇腾AI处理器配套的模型转换工具(OMG),通常包含在CANN Toolkit中。 2. **执行模型转换命令** ```bash atc --model=qwen2.5-3b-custom.onnx \ --framework=5 \ --output=qwen2.5-3b-custom \ --soc_version=Ascend310 \ # 根据实际芯片版本修改 --log=info \ --op_select_implmode=high_performance \ --input_format=ND \ --input_shape="input_ids:1,5;attention_mask:1,5" # 示例输入形状,实际需根据模型调整 ``` ### 四、验证转换后的模型 1. **使用昇腾推理接口加载OM模型** 通过昇腾提供的推理引擎(如ACL)加载OM模型进行推理: ```python import acl from ais_bench.infer.interface import InferSession # 创建推理会话 device_id = 0 session = InferSession(device_id, "qwen2.5-3b-custom.om") # 准备输入数据(需转换为NPU设备内存) inputs = [np_array1, np_array2] # 根据模型输入结构准备数据 outputs = session.infer(inputs) # 处理输出结果 print(outputs) ``` ### 关键注意事项 1. **算子兼容性** - 若自定义算子无法映射到ONNX标准算子,需确保昇腾AI处理器支持该自定义算子[^1]。 - 在转换过程中,OMG会检查算子是否在昇腾AI处理器的支持列表中。 2. **动态形状支持** - 若模型需要支持动态形状,在`atc`命令中通过`--dynamic_batch_size`或`--dynamic_image_size`等参数指定动态维度范围: ```bash --input_shape="input_ids:1,-1;attention_mask:1,-1" \ --dynamic_batch_size="1,4,8" # 支持batch_size=1,4,8 ``` 3. **精度校验** - 转换后务必进行精度校验,确保OM模型与原始PyTorch模型输出一致。 4. **性能优化** - 使用`atc`的优化参数(如`--fusion_switch_file`)启用融合优化策略 - 通过`msprof`工具进行性能分析,调整算子实现 §§相关问题§§ 1. 昇腾OM模型转换过程中遇到自定义算子不支持的错误如何解决? 2. 如何为昇腾OM模型编写高性能的推理程序? 3. 昇腾平台上的动态形状支持有哪些限制?</think>要将集成自定义算子的 Qwen2.5-3B 模型转换为昇腾 OM 格式进行部署,需要经过以下关键步骤: ### 一、模型转换流程 1. **导出ONNX模型** 在PyTorch中注册自定义算子的符号函数后导出: ```python from torch.onnx import register_custom_op_symbolic # 注册自定义算子的ONNX符号函数 def custom_op_symbolic(g, input): return g.op("CustomDomain::CustomOp", input, attribute1_f=1.0, # 示例属性 domain_s="custom_domain") register_custom_op_symbolic("custom_ops::forward", custom_op_symbolic, 11) # 导出ONNX模型 torch.onnx.export(model, (input_ids, attention_mask), "qwen2.5-custom.onnx", opset_version=11, input_names=["input_ids", "attention_mask"], output_names=["logits"], dynamic_axes={"input_ids": {0: "batch", 1: "seq_len"}}) ``` 2. **准备自定义算子定义文件** 创建JSON描述文件 `custom_op.json`: ```json [ { "op": "CustomOp", // 与ONNX符号函数中命名一致 "compute_cost": 10, "flag_partial": true, "input_desc": [ {"name": "x", "type": "float16", "format": "ND"} ], "output_desc": [ {"name": "y", "type": "float16", "format": "ND"} ] } ] ``` ### 二、使用ATC工具转换 ```bash atc --model=qwen2.5-custom.onnx \ --framework=5 \ # ONNX框架 --output=qwen2.5-custom \ # 输出OM文件名 --soc_version=Ascend310P3 \ # 根据实际芯片调整 --log=info \ --op_select_implmode=high_performance \ --input_format=ND \ --input_shape="input_ids:1,1024;attention_mask:1,1024" \ --optypelist_for_implmode="CustomOp" \ # 关键:指定自定义算子 --op_name_map=./custom_op.json # 自定义算子描述文件 ``` ### 三、关键配置说明 1. **动态形状支持** 在ATC命令中添加动态维度参数: ```bash --dynamic_batch_size="1,2,4,8" \ # 支持不同batch_size --dynamic_seq_len="256,512,1024" # 支持不同序列长度 ``` 2. **自定义算子实现** 确保已编译好的算子库(`.so`文件)位于环境变量路径: ```bash export ASCEND_OPP_PATH=/path/to/custom_op_dir # 包含custom_op.json的目录 export LD_LIBRARY_PATH=/path/to/custom_op.so:$LD_LIBRARY_PATH ``` ### 四、验证与部署 1. **模型验证** 使用AscendCL接口验证OM模型: ```python from ais_bench.infer.interface import InferSession device_id = 0 session = InferSession(device_id, "qwen2.5-custom.om") outputs = session.infer([input_data])[0] # 获取输出 ``` 2. **性能优化** 使用`msprof`工具分析性能瓶颈: ```bash msprof --application="python infer.py" \ --output=profiling_data \ --aic-metrics=true ``` ### 常见问题解决方案 | 错误类型 | 解决方案 | |---------|---------| | `Unsupported op: CustomOp` | 检查`ASCEND_OPP_PATH`路径和JSON文件格式 | | `Shape inference failed` | 在ONNX符号函数中明确定义输出形状 | | `Kernel not found` | 确认`.so`文件与芯片架构匹配(如Ascend310P3) | | 性能低于预期 | 使用`Tiling`技术优化核函数内存访问模式 | > **重要提示**:转换前需确保: > 1. CANN版本与PyTorch版本兼容(建议CANN>=7.0) > 2. 自定义算子已在NPU环境中通过单算子测试 > 3. ONNX模型能正确加载自定义算子节点[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值