新闻详情

新闻详情

首页 / 资讯中心 / 详情

CANN Runtime TDT Channel 入门:基于 acltdt 接口实现 Tensor 的单进程收发与数据校验

发布时间:2026/9/19 3:49:42来源:尧图网络
CANN Runtime TDT Channel 入门:基于 acltdt 接口实现 Tensor 的单进程收发与数据校验
CANN Runtime TDT Channel 入门基于 acltdt 接口实现 Tensor 的单进程收发与数据校验【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtimeTDT Channel 是 CANN Runtime 提供的一种基于队列的数据传输通道用于在 Host 与 Device 之间按序传递封装为 Dataset 的 Tensor 数据。本文以example/2_advanced_features/tdt_channel/0_simple_channel示例为主体完整讲解 Channel、Dataset、DataItem 的创建、发送、接收与资源释放全流程并结合include/external/acl/acl_tdt.h头文件与示例源码给出可复现、可校验的实战方案。一、示例概述与适用产品0_simple_channel是一个聚焦 TDT Channel 基础数据传输的最小可运行样例核心覆盖以下能力创建一个 TDT Channel并构造浮点 Tensor 对应的 DataItem使用 Dataset 封装单个 Tensor 并通过 Channel 发送在同一进程中接收 Dataset并读取维度、数据类型、数据地址和首元素值查询 Channel 当前尺寸并完成停止、清理与销毁。该样例关键接口在不同产品上的支持情况如下数据来源于示例 README 的产品支持表产品是否支持Ascend 950PR / Ascend 950DT×Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√产品支持表仅列出当前样例已完成验证或已明确声明支持情况的产品未在表格中列出的产品不代表不支持。如果你需要在其他产品上体验 TDT Channel可参考带容量限制的进阶样例 1_channel_capacity。二、核心概念Channel、Dataset 与 DataItemTDT Channel 的数据模型由三层结构组成分别对应头文件 acl_tdt.h 中定义的不透明句柄类型acltdtChannelHandleTDT 通道句柄通过acltdtCreateChannelWithCapacity/acltdtCreateChannel创建承载通道的名称、所属 Device 与容量信息acltdtDataset数据集句柄一个 Dataset 对应一次完整的数据传递单元内部可包含多个 DataItemacltdtDataItem数据项句柄封装单个 Tensor 的元信息Tensor 类型、维度、数据类型与数据指针一个 Dataset 可挂载多个 DataItem。示例采用“一进程内收发”的模式发送方构造 Dataset 后通过acltdtSendTensor投递到通道接收方通过acltdtReceiveTensor取出 Dataset从而实现单进程内的数据闭环便于快速验证接口语义。从数据结构看acl_tdt.hTensor 类型枚举acltdtTensorType除常规的ACL_TENSOR_DATA_TENSOR外还包含ACL_TENSOR_DATA_END_OF_SEQUENCE、ACL_TENSOR_DATA_ABNORMAL、ACL_TENSOR_DATA_SLICE_TENSOR、ACL_TENSOR_DATA_END_TENSOR等特殊类型用于表达流式数据的序列结束、异常数据或切片数据等语义。本样例使用的是最基础的ACL_TENSOR_DATA_TENSOR类型。三、环境准备与编译运行编译运行前需获取固件、驱动及 CANN 软件包并安装环境安装与运行详情可参考 example 目录下的 README。本样例的编译运行步骤如下# ${install_root} 替换为 CANN 安装根目录默认安装在 /usr/local/Ascend 目录 source ${install_root}/cann/set_env.sh export ASCEND_INSTALL_PATH${install_root}/cann # 编译运行 bash run.shrun.shrun.sh的执行逻辑分为三步先通过source $_ASCEND_INSTALL_PATH/bin/setenv.bash加载编译环境再以ASCEND_CANN_PACKAGE_PATH作为 CANN 包路径执行 CMake 配置与make编译最后运行生成的./build/main可执行文件。编译配置CMakeLists.txt中有两点值得注意编译选项为-O2 -stdc17 -D_GLIBCXX_USE_CXX11_ABI0 -Wall -Werror其中-D_GLIBCXX_USE_CXX11_ABI0用于与 CANN 运行时库的 ABI 保持一致避免因双 ABI 模式不匹配导致链接或运行异常链接阶段显式依赖两个库libacl_tdt_channel.soTDT Channel 能力与libascendcl.soAscendCL 基础能力头文件搜索路径为${ASCEND_CANN_PACKAGE_PATH}/include库搜索路径为${ASCEND_CANN_PACKAGE_PATH}/lib64。四、示例主流程详解示例主程序main.cpp的执行流程如下初始化调用aclInit(nullptr)完成 AscendCL 配置初始化随后调用aclrtSetDevice(0)指定 Device 0创建 Channel调用acltdtCreateChannelWithCapacity(deviceId, simple_tdt_channel, kChannelCapacity)创建容量为 2 的通道。若当前 Runtime 未启用队列式 TDT Channel 能力该接口返回nullptr样例将记录告警并正常结束构造发送 Dataset通过工具函数tdt::CreateFloatDataset将{1.0F, 2.0F, 3.0F, 4.0F}浮点向量封装为 DataItem 并挂载进 Dataset发送与查询调用acltdtSendTensor(channel, sendDataset, kTimeoutMs)发送再调用acltdtQueryChannelSize查询通道当前大小接收与校验调用acltdtReceiveTensor(channel, recvDataset, kTimeoutMs)接收并通过DumpDataset校验接收数据的维度、类型、字节数、首元素值资源释放依次调用acltdtCleanChannel、acltdtStopChannel、acltdtDestroyChannel清理通道随后释放 Dataset/DataItem最后调用aclrtResetDeviceForce复位 Device 并调用aclFinalize完成去初始化。4.1 DataItem 的构造acltdtCreateDataItem发送侧数据构造依赖 tdt_common_utils.h 中的工具函数其关键调用为acltdtDataItem* item acltdtCreateDataItem( ACL_TENSOR_DATA_TENSOR, // TDT Tensor 类型 dims, // 维度数组 {1, 4} dimNum, // 维度个数 2 ACL_FLOAT, // 数据类型 values.data(), // 数据指针 values.size() * sizeof(float)); // 数据字节数其中dims被设置为{1, values.size()}即{1, 4}ACL_FLOAT对应单精度浮点。随后通过acltdtCreateDataset()创建空 Dataset并调用acltdtAddDataItem(dataset, item)将 DataItem 挂载到 Dataset 中任一环节失败时工具函数会调用acltdtDestroyDataItem或acltdtDestroyDataset及时释放已创建对象。4.2 发送与接收acltdtSendTensor / acltdtReceiveTensor发送与接收接口的签名见 acl_tdt.h均包含timeout参数单位为毫秒用于控制阻塞等待时长。本样例中kTimeoutMs 1000即发送方在通道不可写、接收方在通道无数据时最多等待 1000msCHECK_ERROR(acltdtSendTensor(channel, sendDataset, kTimeoutMs)); CHECK_ERROR(acltdtReceiveTensor(channel, recvDataset, kTimeoutMs));发送完成后立即查询通道大小可观察到通道中积压的 Dataset 数量接收完成后再次查询可确认数据已被消费。4.3 接收侧校验DumpDataset接收侧通过DumpDataset完成数据校验依次调用acltdtGetDatasetSize获取 Dataset 中 DataItem 数量acltdtGetDataItem(dataset, 0)取出首个 DataItemacltdtGetDimNumFromItem/acltdtGetDimsFromItem读取维度个数与维度值acltdtGetDataAddrFromItem获取数据地址acltdtGetDataSizeFromItem获取数据字节数acltdtGetTensorTypeFromItem/acltdtGetDataTypeFromItem读取 Tensor 类型与数据类型通过数据地址读取首元素值并与发送侧1.0F对比验证数据完整性。五、涉及的 CANN RUNTIME API 全景该样例覆盖的关键接口按功能分组如下初始化aclInit初始化 AscendCL 配置aclFinalize实现 AscendCL 去初始化。Device 管理aclrtSetDevice指定用于运算的 DeviceaclrtResetDeviceForce强制复位当前 Device回收其上的资源单机单进程样例使用强制复位避免多进程场景下影响同机其他进程。Channel 与 Dataset 创建acltdtCreateChannelWithCapacity创建带容量 TDT ChannelacltdtCreateDataItem基于 Tensor 构造 DataItemacltdtCreateDataset与acltdtAddDataItem封装 Dataset。Tensor 收发与信息查询acltdtSendTensor/acltdtReceiveTensor完成 Dataset 发送与接收acltdtGetDatasetSize/acltdtGetDataItem读取 Dataset 内容acltdtGetDataAddrFromItem、acltdtGetDataSizeFromItem、acltdtGetDataTypeFromItem、acltdtGetTensorTypeFromItem、acltdtGetDimNumFromItem、acltdtGetDimsFromItem查看数据、类型与维度信息。Channel 状态与资源释放acltdtQueryChannelSize查询 Channel 当前大小acltdtStopChannel、acltdtCleanChannel、acltdtDestroyChannel依次完成停止、清理与销毁acltdtDestroyDataItem/acltdtDestroyDataset释放 Dataset 资源。各查询类接口的返回值语义可直接对照头文件注释acltdtGetDataTypeFromItem在dataItem为空时返回ACL_DT_UNDEFINEDacltdtGetDataSizeFromItem失败时返回 0acltdtGetDataAddrFromItem失败时返回nullacltdtGetDimNumFromItem失败时返回 0。六、示例输出与容错行为正常运行时样例输出如下[INFO] Dataset size: 1 [INFO] Tensor type..., data type..., bytes16, dims(2, 2), firstValue1.000 [INFO] Channel size after send: 1 [INFO] Dataset size: 1 [INFO] Tensor type..., data type..., bytes16, dims(2, 2), firstValue1.000 [INFO] Channel size after receive: 0 [INFO] Run the simple_channel sample successfully.其中bytes16对应4 × sizeof(float)dims(2, 2)对应维度展开后的形状发送与接收两侧输出一致说明数据在通道中无损传递。Channel size after send: 1与Channel size after receive: 0验证了通道的队列语义发送后积压 1 个 Dataset接收后归零。若当前运行环境未启用队列式 TDT Channel 能力acltdtCreateChannelWithCapacity返回nullptr样例输出如下告警并正常结束返回码为 0[WARN] acltdtCreateChannelWithCapacity returned nullptr: this sample needs a queue-backed TDT channel so it can send and receive within one host process这种“降级为告警并正常退出”的处理方式使得样例在能力受限环境如底层队列初始化/创建失败的产品或构建版本下也能安全运行不会因接口不可用而崩溃。七、进一步阅读与进阶样例tdt_channel 目录 READMETDT Channel 基础数据传输与容量控制能力总览1_channel_capacity 样例演示带容量限制的 Channel容量最小值为 2、非阻塞发送下的容量压力观察以及acltdtGetSliceInfoFromItem、acltdtGetTensorTypeFromItem、acltdtGetDatasetName等附加信息查询接口TDT Channel 接口声明include/external/acl/acl_tdt.h包含全部acltdt*接口的签名与返回值语义说明样例公共工具example/2_advanced_features/tdt_common_utils.h包含 DataItem/Dataset 的构造、销毁与错误处理封装example 目录总览example/README.md涵盖环境准备、产品支持表说明与 Device 复位接口使用约定。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MiroThinker大模型生产环境部署与VLLM优化实践 2026/9/19 5:19:56

MiroThinker大模型生产环境部署与VLLM优化实践

1. 项目背景与核心价值去年第一次接触MiroThinker大模型时,我就被它的多轮对话连贯性惊艳到了。这个由MiroMind团队开发的千亿参数模型,在SCNet(智能客服网络)场景下表现尤为突出。最近我们团队在VLLM推理框架上的实践表明&#x…

阅读更多 →
create-t3-app 入门导读:T3 Stack 的组成、设计哲学与三大公理 2026/9/19 5:19:56

create-t3-app 入门导读:T3 Stack 的组成、设计哲学与三大公理

create-t3-app 入门导读:T3 Stack 的组成、设计哲学与三大公理 【免费下载链接】create-t3-app The best way to start a full-stack, typesafe Next.js app 项目地址: https://gitcode.com/gh_mirrors/cr/create-t3-app T3 Stack 是一套以极简、模块化、全…

阅读更多 →
大模型技术革命如何重塑职场竞争力 2026/9/19 5:19:55

大模型技术革命如何重塑职场竞争力

1. 大模型技术革命与职业生态重塑过去一年,基础大模型参数量从千亿级跃升至万亿规模,推理成本却下降了80%。这种技术跃迁正在重构职场竞争力图谱——2023年LinkedIn数据显示,AI相关岗位招聘量同比增长340%,但传统岗位需求曲线首次…

阅读更多 →
终端也能生成视频?Claude Code + Veo MCP 实战指南 2026/9/19 5:19:55

终端也能生成视频?Claude Code + Veo MCP 实战指南

最近有个很有意思的趋势,越来越多的 AI 能力开始从网页端往开发者终端里迁移。Claude Code 本来就是终端里写代码的神器,但现在它配合 MCP 协议,能干的事远远超出了代码范围。我最近试着把视频生成塞进了这套工作流,用 Claude Cod…

阅读更多 →
商汤免费API接入实战:Kimi K3与DeepSeek V4快速调用指南 2026/9/19 5:19:55

商汤免费API接入实战:Kimi K3与DeepSeek V4快速调用指南

商汤开放5款大模型免费API这个事,这几天在开发圈里讨论度很高。尤其是Kimi K3和DeepSeek V4这两个名字一出现,很多做AI应用的朋友立刻坐不住了——这可是免费能用的大模型API,而且不用申请白名单,注册实名就能拿到Key。我抢在第一…

阅读更多 →
Python知识推理引擎开发实战与优化技巧 2026/9/19 5:16:55

Python知识推理引擎开发实战与优化技巧

1. 知识推理引擎的行业背景与核心价值知识推理引擎作为认知智能的关键组件,正在重塑企业决策和知识管理的方式。在医疗诊断领域,梅奥诊所的临床决策支持系统通过症状与病理的关联推理,将误诊率降低了37%;金融风控场景中&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞