博客

  • Fast Transformer Decoding: One Write-Head is All You Need

    引言

    《Fast Transformer Decoding: One Write-Head is All You Need》是一篇提出了一种变换模型多头注意力机制变体的研究论文。该论文解决了变换模型在增量推理过程中由于反复加载大规模“键”和“值”张量而导致的内存带宽成本问题。

    论文要点

    1. 多查询注意力(Multi-Query Attention)

    作者提出了一种称为多查询注意力的变体,其中键和值在所有注意力头之间共享。这种方法减少了张量的大小以及在增量解码过程中对内存带宽的需求。

    2. 内存带宽的减少

    通过共享键和值,所提出的方法显著减少了在解码过程中反复加载这些张量的内存带宽成本。

    3. 更快的解码速度

    采用多查询注意力的模型在解码速度上比传统的多头注意力模型要快得多。

    4. 质量轻微下降

    作者通过实验验证了多查询注意力模型在相较于基线模型的情况下,质量仅有轻微下降。

    进一步了解

    1. [1911.02150] Fast Transformer Decoding: One Write-Head is All You Need
    2. Fast Transformer Decoding: One Write-Head is All You Need | Papers With Code
    3. dblp: Fast Transformer Decoding: One Write-Head is All You Need.

    通过这篇论文,我们可以看到在不牺牲太多模型质量的前提下,通过优化内存带宽和共享键值对,可以显著提高变换模型的解码速度。这对于提升自然语言处理任务中的推理效率具有重要意义。


    多查询注意力

    多查询注意力是一种注意力机制,其中键和值在所有注意力头之间共享。这意味着在解码过程中,只需要加载一次键和值向量,从而显著减少了内存带宽成本。

    传统多头注意力

    传统的多头注意力是一种注意力机制,其中每个注意力头都有自己的键和值向量。这意味着在解码过程中,需要反复加载这些向量,从而导致内存带宽成本高。

    多查询注意力和传统多头注意力之间的区别

    多查询注意力和传统多头注意力之间的主要区别在于键和值的共享方式。在多查询注意力中,键和值在所有注意力头之间共享,而在传统的多头注意力中,每个注意力头都有自己的键和值向量。

    多查询注意力和传统多头注意力之间的区别是否会对模型的性能产生影响?

    实验表明,采用多查询注意力的模型在解码速度上比传统的多头注意力模型要快得多,且质量仅有轻微下降。

  • OpenVINO-Java-API

    📚 简介

    OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。

    该项目通过Java Native Access (JNA) 实现了基于OpenVINO™工具套件的OpenVINO™ Java API,旨在推动 OpenVINO™在Java领域的应用。由于是基于 OpenVINO™ 开发,OpenVINO™ Java API 支持的所有平台与OpenVINO™ 一致。

    版本计划

    • 1.0: 实现基本函数,并提供Yolov8范例
    • 1.1: 实现Maven在线安装
    • 2.0: 实现库本地加载,告别复杂安装
    • 3.0: 实现在线加载

    Java库公示

    • JNA
    • OpenCV
    • OpenVINO

    ⚙ 如何安装

    以下文章提供了OpenVINO™ Java API在不同平台的安装方法,可以根据自己使用的平台进行安装。

    简短安装步骤

    1. 在OpenVINO官网下载对应平台的runtime库
    2. 将Runtime库加入环境变量
      • Windows: 放在系统路径中
      • Linux/Mac OS: 将库文件放入 /usr/lib/

    详细使用文档

    🏷 开始使用

    快速体验

    使用以下代码简单了解OpenVINO Java API的使用方法:

    public class OpenVINOTest {
    
        public static void main(String[] args) {
            // 实现OpenVINO 库加载
            OpenVINO vino = OpenVINO.load("libopenvino_c.dylib");
            // 如果将库放置在系统路径中,可以这样简写
            // OpenVINO vino = OpenVINO.load();
            Core core = new Core();  // 初始化 Core 核心
            Model model = core.read_model("./model.xml");  // 读取模型文件
            CompiledModel compiled_model = core.compiled_model(model, "AUTO");  // 将模型加载到设备
            InferRequest infer_request = compiled_model.create_infer_request();  // 创建推理通道
            Tensor input_tensor = infer_request.get_tensor("images");  // 获取输入节点Tensor
            infer_request.infer();  // 模型推理
            Tensor output_tensor = infer_request.get_tensor("output0");  // 获取输出节点Tensor
            // 清理 Core 非托管内存
            core.free();  
        }
    }

    项目中所封装的类、对象例如Core、Model、Tensor等,通过调用 C API 接口实现,具有非托管资源,需要调用 dispose() 方法处理,否则就会出现内存泄漏。

    💻 应用案例

    • 爱克斯开发板使用OpenVINO™ Java API部署Yolov8模型
    • 基于Spring Boot 的在线AI服务
    • 基于客户端模式运行

    测试系统

    • Mac OS: Sonoma
    • Ubuntu: 23.04 (64位)
    • Windows

    🗂 API 文档

    (链接到相关API文档)

    🔃 更新日志

    (链接到更新日志)

    🎖 贡献

    如果您对OpenVINO™ 在Java使用感兴趣,有兴趣对开源社区做出自己的贡献,欢迎加入我们,一起开发OpenVINO™ Java API。如果你对该项目有一些想法或改进思路,欢迎联系我们,指导我们的工作。

    许可证书

    本项目的发布受Apache 2.0 license许可认证。


    GitHub 仓库地址: Hmm466/OpenVINO-Java-API


    通过这个项目,您可以在Java中更方便地使用OpenVINO™进行AI推理,加速您的开发流程并优化性能。如果有任何问题或建议,欢迎在仓库中提出Issue或进行讨论。


    OpenVINO™ Java API 安装指南(Windows)

    当前验证/测试环境

    • Windows: 7
    • JDK: 11.0.10
    • OpenVINO Runtime: 2023.2.0-12538-e7c1344d3c3
    • OpenCV: 4.8.0

    OpenVINO™ 环境配置

    OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。

    步骤

    1. 下载OpenVINO™ Runtime库 下载适用于您电脑平台的OpenVINO™ Runtime库。
    2. 拷贝动态链接库runtime/3rdparty/tbb/lib/*.dll 拷贝至 runtime/lib/intel64/release/ 下。
    3. 配置默认库路径runtime/lib/intel64/release/*.dll 拷贝至以下任意路径之一:
    • 自己喜欢的路径
    • C:\Windows

    OpenCV 环境配置

    1. 下载OpenCV 在官网下载适用于Windows平台的OpenCV,解压缩,并将其加入环境变量。
    2. 拷贝OpenCV动态链接库opencv_java*.dll 拷贝到自己喜欢的目录,或者将 build/lib/libopencv_java*.dll 移动到自己喜欢的目录。
    3. 加载OpenCV库 使用以下代码加载OpenCV库:
       OpenVINO.loadCvDll({opencv_java所在的目录});

    OpenVINO™ Java API 安装

    源码构建

    1. 克隆代码仓库
       git clone https://github.com/Hmm466/OpenVINO-Java-API.git
    1. 使用Maven安装 在代码仓库根目录下运行:
       mvn install

    Maven 引用

    如果您想在Maven项目中引用OpenVINO™ Java API,可以在 pom.xml 文件中添加以下依赖项:

    <dependencies>
        <dependency>
            <groupId>org.openvino</groupId>
            <artifactId>java-api</artifactId>
            <version>[按照最新下载的版本填入]</version>
        </dependency>
    </dependencies>

    在线Maven 安装

    该功能将在1.1版本上线


    通过以上步骤,您可以在Windows平台上成功安装并配置OpenVINO™ Java API。如果有任何问题或需要进一步的帮助,请在GitHub仓库中提出Issue或进行讨论。

    GitHub 仓库地址: Hmm466/OpenVINO-Java-API


    OpenVINO™ 生态系统概述

    简介

    OpenVINO™ 不只是一个工具,它还是一个庞大的实用程序生态系统,提供用于开发深度学习解决方案的整套工作流程。通过详细了解每个实用程序,可以充分利用 OpenVINO™ 工具套件。

    神经网络压缩框架 (NNCF)

    NNCF 是一套用于优化神经网络推理的高级算法,可以最大限度地减少准确度下降。在训练期间,NNCF 会对 PyTorch 和 TensorFlow 模型应用量化、过滤器修剪、二值化和稀疏性算法。

    更多资源:

    OpenVINO™ 安全插件

    OpenVINO™ 安全插件为模型开发人员和独立软件开发商提供了用于进行安全封装并安全执行模型的解决方案。

    更多资源:

    OpenVINO™ 与 TensorFlow 集成 (OVTF)

    OVTF 为 TensorFlow 开发人员提供 OpenVINO™ 优化功能的解决方案。只需在应用中添加两行代码,即可将推理分载给 OpenVINO™,同时保留 TensorFlow API。

    更多资源:

    DL Streamer

    DL Streamer 是一个基于 GStreamer 多媒体框架的流媒体分析框架,用于创建复杂的媒体分析管道。

    更多资源:

    深度学习工作台

    深度学习工作台是一个用于部署深度学习模型的基于 Web 的工具。它依托 OpenVINO™ 的核心功能并配有图形用户界面,提供了一种用于探索 OpenVINO™ 工作流程的各种可能性,以及导入、分析、优化并构建预训练模型的绝佳途径。您可以通过访问英特尔® DevCloud for the Edge 并在线启动深度学习工作台,执行所有此类任务。

    更多资源:

    OpenVINO™ 训练扩展 (OTE)

    OpenVINO™ 训练扩展 (OTE) 提供了一种用于使用 OpenVINO™ 工具套件训练深度学习模型并对其进行转换,以优化推理的便捷环境。

    更多资源:

    计算机视觉注释工具 (CVAT)

    CVAT 是一款用于计算机视觉的在线交互式视频和图像注释工具。

    更多资源:

    数据集管理框架 (Datumaro)

    Datumaro 是一个用于构建、转换和分析数据集的框架兼 CLI 工具。

    更多资源:


    通过详细了解和使用这些实用工具,能够充分发挥 OpenVINO™ 的强大功能,优化和部署高性能的深度学习解决方案。

    详细文档地址: OpenVINO™ 生态系统概述


    OpenVINO™ API 2.0 迁移指南

    概述

    本指南介绍了全新的 OpenVINO™ API (API 2.0) 以及新型 OpenVINO™ IR 模型格式:IR v11。本文将对新旧版本进行比较,并提供详细的迁移步骤。

    API 2.0 简介

    在从 TensorFlow、ONNX 运行时、PyTorch、PaddlePaddle 等其他框架迁移应用时,2022.1 之前的 OpenVINO™ 版本需要更改应用逻辑。这是因为:

    • 模型优化器更改了某些输入的输入精度。例如,具有 I64 输入的神经语言处理模型已更改为包含 I32 输入。
    • 模型优化器更改了 TensorFlow 模型的布局(请参阅 OpenVINO™ 中的布局)。
    • 由于设备插件的限制,推理引擎 API (InferenceEngine::CNNNetwork) 应用了一些输入和输出精度的转换规则。
    • 在模型优化器中进行模型转换期间,用户需要指定输入形状,并在应用中使用静态形状。

    OpenVINO™ 2022.1 引入了 API 2.0(也称为 OpenVINO™ API v2),以调整使用模型的逻辑。API 2.0 未更改布局和精度,使用张量名称和索引来执行操作以对输入和输出进行寻址。OpenVINO™ 运行时将用于推理的推理引擎 API 与用于处理模型和操作的 nGraph API 结合在一起。API 2.0 有通用的结构、命名约定样式、命名空间,并移除了重复的结构。

    现有的应用将继续正常使用 OpenVINO™ 运行时 2022.1,但强烈建议迁移到 API 2.0,以便使用其他功能,如预处理和动态形状支持。

    全新 OpenVINO™ IR v11

    为了支持这些功能,OpenVINO™ 引入了 OpenVINO™ IR v11,它现在是默认版本的模型优化器。以 OpenVINO™ IR v11 表示的模型的输入和输出与原始框架格式下的原始模型完全匹配,无需在转换过程中指定输入形状。生成的 OpenVINO™ IR v11 包含 -1,用于表示未定义维度。OpenVINO™ IR v11 完全兼容借助旧版 OpenVINO™ 使用的推理引擎 API 编写的应用。这种向后兼容性归功于 OpenVINO™ IR v11 中包含的其他运行时信息。

    向后兼容 OpenVINO™ IR v10

    API 2.0 还支持向后兼容 OpenVINO™ IR v10 模型。如果您拥有 OpenVINO™ IR v10 文件,也可以将其馈送到 OpenVINO™ 运行时。某些 OpenVINO™ 开发工具也支持将 OpenVINO™ IR v10 和 v11 作为输入:

    • 精度检查器默认使用 API 2.0 来测量模型精度,也支持通过使用 --use_new_api False 命令行参数切换到旧版 API。
    • 编译工具默认编译要在 API 2.0 中使用的模型。要在推理引擎 API 下使用生成的已编译 Blob,应传递附加 ov_api_1_0 选项。

    OpenVINO™ 2022.1 的训练后优化工具和深度学习工作台不支持 OpenVINO™ IR v10,需使用最新版本的模型优化器生成 OpenVINO™ IR v11 文件。

    API 2.0 与推理引擎 API 的行为差异

    推理引擎和 nGraph API 不会因引入了新 API 而被弃用,用户仍可以在应用中使用这些 API。但强烈建议迁移到 API 2.0,因为它提供了更多功能(在未来版本中会进一步扩展),例如:

    • 使用动态形状,提高神经语言处理 (NLP) 和超分辨率模型等兼容模型的性能。
    • 预处理模型,在推理模型中添加预处理操作并完全占用加速器,从而释放 CPU 资源。

    下表说明了基于这两个 API 的模型会使用哪种行为:旧行为还是新行为。

    APIIR v10IR v11ONNX 文件使用代码创建的模型
    推理引擎/nGraph API
    API 2.0

    通过迁移到 OpenVINO™ API 2.0,您可以充分利用新特性和增强功能,提升模型推理的性能和灵活性。

    详细文档地址: OpenVINO™ API 2.0 迁移指南

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-06-23 04:55:36
沪ICP备2024052574号-1