转载:【AI系统】推理引擎示例:AscendCL

   日期:2024-12-28    作者:soap51 移动:http://mip.riyuangf.com/mobile/quote/76689.html

AscendCL 作为华为 Ascend 系列 AI 处理器的软件开发框架,为用户提供了强大的编程支持。通过 AscendCL,开发者可以更加高效地进行 AI 应用的开发和优化,从而加速 AI 技术在各个领域的应用和落地。AscendCL 的易用性和高效性,使得它成为开发 AI 应用的重要工具之一。

本文将介绍 AscendCL 的概念、优势、应用场景以及基本开发流程。

AscendCL 基本介绍

AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发神经网络应用的 C 语言 API 库,提供运行资源管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等 API,能够实现利用昇腾硬件计算资源、在昇腾 CANN 平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。

简单来说,就是统一的 API 框架,实现对所有资源的调用。其中,计算资源层是昇腾 AI 处理器的硬件算力基础,主要完成神经网络的矩阵相关计算、完成控制算子/标量/向量等通用计算和执行控制功能、完成图像和视频数据的预处理,为神经网络计算提供了执行上的保障。

AscendCL 优势

AscendCL 优势主要有三个要点:

    AscendCL 应用场景

      基本概念

      Device、Context、Stream 关系

      下面将会介绍 Device、Context 和 Stream 在 AscendCL 框架中的作用及其相互关系:

        Device 的生命周期源于首次调用 aclrtSetDevice 接口。每次调用 aclrtSetDevice 接口,系统会进行引用计数加 1;调用 aclrtResetdevice 接口,系统会进行引用计数减 1。当引用计数减为零时,在本进程中 Device 上的资源不可用。

        2 Context,在 Device 下,一个 Context 一定属于一个唯一的 Device。

        Context 分隐式创建和显式创建。隐式创建的 Context(即默认 Context),生命周期始于调用 aclrtSetDevice 接口,终结于调用 aclrtResetdevice 接口使引用计数为零时。隐式 Context 只会被创建一次,调用 aclrtSetDevice 接口重复指定同一个 Device,只增加隐式创建的 Context 的引用计数。

        显式创建的 Context,生命周期始于调用 aclrtCreateContext 接口,终结于调用 aclrtDestroyContext 接口。若在某一进程内创建多个 Context(Context 的数量与 Stream 相关,Stream 数量有限制,请参见 aclrtCreateStream),当前线程在同一时刻内只能使用其中一个 Context,建议通过 aclrtSetCurrentContext 接口明确指定当前线程的 Context,增加程序的可维护性。

        值得注意的是,进程内的 Context 是共享的,可以通过 aclrtSetCurrentContext 进行切换。

        3. Stream,是 Device 上的执行流,在同一个 stream 中的任务执行严格保序。

        其中 Stream 分隐式创建和显式创建。每个 Context 都会包含一个默认 Stream,这个属于隐式创建,隐式创建的 stream 生命周期同归属的 Context。

        用户可以显式创建 stream,显式创建的 stream 生命周期始于调用 aclrtCreateStream,终结于调用 aclrtDestroyStream 接口。显式创建的 stream 归属的 Context 被销毁或生命周期结束后,会影响该 stream 的使用,虽然此时 stream 没有被销毁,但不可再用。

        4. Task/Kernel,是 Device 上真正的任务执行体。

        线程、Context、Stream 关系

        一个用户线程一定会绑定一个 Context,所有 Device 的资源使用或调度,都必须基于 Context。一个线程中当前会有一个唯一的 Context 在用,Context 中已经关联了本线程要使用的 Device。此时可以通过 aclrtSetCurrentContext 进行 Device 的快速切换。

        一个线程中可以创建多个 Stream,不同的 Stream 上计算任务是可以并行执行;多线程场景下,推荐每个线程创建一个 Stream,线程之间的 Stream 在 Device 上相互独立,每个 Stream 内部的任务是按照 Stream 下发的顺序执行。

        多线程的调度依赖于运行应用的操作系统调度,多 Stream 在 Device 侧的调度,由 Device 上调度组件进行调度。

        进程内多线程间 Context 切换

          默认 Context 和默认 Stream

          Device 上执行操作下发前,必须有 Context 和 Stream,这个 Context、Stream 可以显式创建,也可以隐式创建。隐式创建的 Context、Stream 就是默认 Context、默认 Stream。

          默认 Stream 作为接口入参时,直接传 NULL。

          默认 Context 不允许用户执行 aclrtGetCurrentContext 或 aclrtSetCurrentContext 操作,也不允许执行 aclrtDestroyContext 操作。

          默认 Context、默认 Stream 一般适用于简单应用,用户仅仅需要一个 Device 的计算场景下。多线程应用程序建议全部使用显式创建的 Context 和 Stream。

          多线程、多 Stream 性能考虑

          线程调度依赖运行的操作系统,Stream 上下发了任务后,Stream 的调度由 Device 的调度单元调度,但如果一个进程内的多 Stream 上的任务在 Device 存在资源争抢的时候,性能可能会比单 Stream 低。

          当前昇腾 AI 处理器有不同的执行部件,如 AI Core、AI CPU、Vector Core 等,对应使用不同执行部件的任务,建议多 Stream 的创建按照算子执行引擎划分。

          单线程多 Stream 与多线程多 Stream(一个进程中可以包含多个线程,每个线程中一个 Stream)性能上哪个更优,具体取决于应用本身的逻辑实现,一般来说前者性能略好,原因是相对后者,应用层少了线程调度开销。

          基本开发流程

          调用 AscendCL 接口,可开发包含模型推理、媒体数据处理、单算子调用等功能的应用,这些功能可以独立存在,也可以组合存在。下图给出了使用 AscendCL 接口开发 AI 应用的整体接口调用流程。

          上图根据应用开发中的典型功能抽象出主要的接口调用流程。例如,如果模型对输入图片的宽高要求与用户提供的源图不一致,则需要媒体数据处理,将源图裁剪成符合模型的要求;如果需要实现模型推理的功能,则需要先加载模型,模型推理结束后,则需要卸载模型;如果模型推理后,需要从推理结果中查找最大置信度的类别标识对图片分类,则需要数据后处理。

          其基本流程如下所示:

                4. 运行管理资源释放:所有数据处理都结束后,需要依次释放运行管理资源。

                5. AscendCL 去初始化:调用 aclFinalize 接口实现 AscendCL 去初始化。

                如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~

                转载自:

                【AI系统】推理引擎示例:AscendCL - ZOMI酱的文章 - 知乎


                特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


                举报收藏 0评论 0
                0相关评论
                相关最新动态
                推荐最新动态
                点击排行
                {
                网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号