通过DirectML和ONNXRuntime运行Phi-3模型

更多精彩内容,欢迎关注我的公众号“ONE生产力”!

上篇我们讲到通过Intel Core Ultra系列处理器内置的NPU加速运行Phi-3模型,有朋友评论说他没有Intel处理器是否有什么办法加速Phi-3模型。通常,使用GPU特别是NVIDA的GPU加速AI模型是最佳的方法,但这年头英伟达的显卡不是一般贵,很多朋友苦于囊中羞涩,还在使用核显中。今天,我们介绍一种使用核显通过DirectML和ONNXRuntime运行Phi-3模型的方法。

相信这两年很多朋友都在使用苏妈极具性价比的APU,今天我将以我手上这颗AMD Ryzen™ 7 7840HS为例展示核显也能用于AI场景。在开始本文前,我们先简单介绍一下DirectML和ONNXRuntime。

什么是DirectML?

DirectML(Direct Machine Learning)是微软提供的一种高性能、跨平台的机器学习加速库。DirectML的设计理念类似于DirectX在图形处理领域的作用,即通过统一的接口,充分利用底层硬件的计算能力,为开发者提供高效、简便的开发体验。

DirectML支持多种硬件加速,包括GPU和CPU,可以在不同的Windows设备上无缝运行。它基于DirectX 12,因此能够充分利用现代GPU的计算资源,实现深度学习任务的加速。

DirectML的优势

高性能:通过DirectX 12的低级别API调用,DirectML能够充分发挥GPU的计算能力。

跨平台:支持Windows平台的多种硬件设备,包括AMD、NVIDIA和Intel的GPU。

易于集成:提供了与其他深度学习框架(如TensorFlow和PyTorch)的兼容接口,便于在现有项目中集成和使用。

什么是ONNX?

ONNX(Open Neural Network Exchange)是一种开放的神经网络交换格式,旨在促进不同深度学习框架之间的互操作性。ONNX使得模型可以在多个框架之间进行转换和共享,从而避免了平台锁定问题。

ONNX的优势

互操作性:支持主流的深度学习框架,如PyTorch、TensorFlow等。

可移植性:ONNX模型可以在多种硬件加速器上运行,如GPU、CPU、FPGA等。

丰富的工具生态:ONNX有丰富的工具支持,包括模型优化、转换和部署等。

DirectML上的ONNX Runtime

DirectML 执行提供程序是 ONNX 运行时的一个组件,它使用 DirectML 加速 ONNX 模型的推理。DirectML 执行提供程序能够使用商用 GPU 硬件大大缩短模型的评估时间,而不会牺牲广泛的硬件支持或要求安装特定于供应商的扩展。

ONNX Runtime在DirectML运行的架构

AMD对LLM的优化

通常我们需要使用独立GPU并配备大量显存在运行LLM,AMD针对CPU继承的核心显卡运行LLM做了大量优化工作,包括利用ROCm平台和MIOpen库来提升深度学习框架的运行效率,通过改进内存分配和数据传输机制来减少内存碎片化和不必要的数据复制,应用量化技术来压缩模型,降低内存需求和计算复杂度,并使用优化的数学计算库(如BLASFFT)提高矩阵运算效率。这些优化措施显著减少了内存占用,提高了模型推理速度和能效比,使得在资源有限的核显环境下也能高效运行复杂的深度学习模型。

AMD官网展现的Radeon™ 780M核显的LLM加速能力

Radeon™ 780M上通过DirectMLONNXRuntime运行Phi-3模型的步骤

环境准备

1、安装Git确保你的系统上安装了GitWindows用户可以下载Git for Windows

2、安装AnacondaAnaconda是一个流行的Python发行版,用于管理Python环境和包。

3、安装ONNX RuntimeONNX Runtime是一个跨平台的库,支持ONNX格式的机器学习模型。确保安装了1.18.0或更高版本的onnxruntime_directml

4AMD驱动程序:安装AMD Software的预览版本或Adrenalin Edition™ 24.6.1或更新版本。

部署流程

1、获取Phi-3模型:从Hugging Face下载Phi-3模型的ONNX格式文件。

git clone https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx

2、创建并激活Anaconda环境:

conda create --name=llm-int4

conda activate llm-int4

3、安装onnxruntime-genai-directml

pip install numpy onnxruntime-genai-directml

4、准备运行脚本:下载并准备运行模型的Python脚本。

curl -o model-qa.py

https://raw.githubusercontent.com/microsoft/onnxruntime-genai/main/examples/python/model-qa.py

5、运行模型:使用以下命令运行Phi-3模型,并进行推理。

python model-qa.py -m Phi-3-mini-4k-instruct-onnx_int4_awq_block-128Phi-3-mini-4k-instruct-onnx_int4_awq_block-128 --timing --max_length=256

参考资料:

DirectML 简介 | Microsoft Learn

Windows - DirectML | onnxruntime

Reduce Memory Footprint and Improve Performance Ru... - AMD Community

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react组件中的this

在React类组件中,如果你使用传统的函数声明方式定义一个方法( function xxx),那么这个方法内部的 this 通常是 undefined。这是因为JavaScript函数中的 this 是在运行时基于函数是如何被调用的来绑定的,而不是在定义时。 例如: c…

混剪素材库有哪些?分享7个高质量混剪视频素材网站

作为自媒体创作者,我们经常需要高质量的混剪视频素材来吸引观众。今天,我将为大家介绍几个优质的视频素材网站,确保您的短视频制作既高效又充满创意。 蛙学府素材网 首推蛙学府素材网,这个平台真是创作者的福音。无论是短视频素材…

重磅消息! Stable Diffusion 3将于6月12日开源 2B 版本的模型,文中附候补注册链接。

在OpenAI发布Sora后,Stability AI也发布了其最新的模型Stabled Diffusion3, 之前的文章中已经和大家介绍过,感兴趣的小伙伴可以点击以下链接阅读。Sora是音视频方向,Stabled Diffusion3是图像生成方向,那么两者没有必然的联系&…

electron-Vue: Module parse failed: Unexpected character ‘ ‘

​ electron-Vue项目中,我自己写了一个node的C扩展(xx.node),然后在.vue文件里import它,然后运行npm run electron:serve,报错如下: ​​ electron-Vue打包默认使用webpack,默认情况下webpack没…

spark学习记录-spark基础概念

背景需求 公司有项目需要将大容量数据进行迁移,经过讨论,采用spark框架进行同步、转换、解析、入库。故此,这里学习spark的一些基本的概念知识。 Apache Spark 是一个开源的大数据处理框架,可以用于高效地处理和分析大规模的数据…

盘点哪些企业容易被ddos攻击

DDoS(分布式拒绝服务)攻击已成为网络安全威胁中的重要一环。本文将探讨哪些类型的企业容易成为DDoS攻击的目标,并提出相应的防范策略,帮助企业更好地保护自身网络安全。 一、电子商务平台 电子商务平台作为线上交易和支付的重要场…

C语言题目要求实现方法总结(1-10)

目录 一、互换A, B的值 1. 1使用中间变量 1.2 使用异或^(不允许创建中间变量) 1.3 使用函数(指针传参) 二、 按降序输出A, B的值 2.1 直接实现 2.2 使用指针 三、 找出最大值 3.1 遍历数组 先输入再找(常规&#xff09…

一文了解JVM(中)

HotSpot 虚拟机对象探秘 对象的创建 Header解释使用 new 关键字调用了构造函数使用 Class 的 newInstance 方法调用了构造函数使用 Constructor 类的newInstance 方法调用了构造函数使用 clone 方法没有调用构造函数使用反序列化没有调用构造函数说到对象的创建,首先让我们看…

6个迹象表明你的电脑电缆管理很糟糕,看下你有没有中招

​清理电脑内部的电缆可能看起来像是徒劳的忙碌。毕竟,如果一切都正常,为什么还要麻烦呢?好吧,我有六个很好的理由可以说服你打开你的机箱,修复你电脑里的混乱。 你很难打开侧板 如果你的电缆离侧板的边缘太近,你将无法毫不费力地将它们滑开。虽然这不是你每天都要做的…

完全指南:C语言学习资源汇总

C语言是编程学习的基石,无论是为了职业发展还是个人兴趣,掌握C语言都是技术生涯的重要一步。为了帮助初学者和有经验的程序员更好地学习和深化对C语言的理解,我们汇总了一系列优秀的书籍和在线资源。这些资源将帮助你从基础知识到高级概念&am…

数据结构——图论详细笔记

一 图论基本概念 Directed Acyclic Graph (DAG) 二 图的存储 ①邻接矩阵(适用于稠密图) ②邻接表(适用于稀疏图) 三、图的遍历 ①深度优先搜索 //(基于邻接表实现,以有向图为例) //DFS:Depth First Search 深度优先搜索 //1、访问起始顶点 …

为什么要开发盲盒小程序?商家企业的盈利方向?

近几年,盲盒已经成为了一种娱乐消费的流行趋势,受到了年轻人的喜欢,推动了盲盒经济的快速发展。在互联网的支持下,盲盒行业也获得了数字化发展,盲盒小程序为市场创新发展提供了重要动力。在当下小程序快速发展的时代&a…

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系? 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝? 2. 赋值运算符只能重载成类的…

MongoDB CRUD操作:可重试写入

MongoDB CRUD操作:可重试写入 文章目录 MongoDB CRUD操作:可重试写入使用的先决条件部署的限制支持的存储引擎3.6 MongoDB 驱动程序MongoDB 版本写确认 可重试写入和多文档事务启用可重试写入MongoDB驱动mongosh 可重试的写操作行为持续的网络错误故障切…

Linux如何远程连接服务器?

远程连接服务器是当代计算机技术中一个非常重要的功能,在各种领域都有广泛的应用。本文将重点介绍如何使用Linux系统进行远程连接服务器操作。 SSH协议 远程连接服务器最常用的方式是使用SSH(Secure Shell)协议。SSH是一种网络协议&#xff…

Java常规题技术分享

一、数组排序和添加成员 设计类Student和类StudentClass。 (1) 类Student有字符串属性name、double属性grade和int属性age 有带参数的构造方法,可设置三个属性的值 有各个属性的置取方法 (2)类StudentClass有Student数组属性stus存放班级成员,有int…

「不只是框架:Django REST framework的超能力大揭秘」

想要让你的API服务像五星级餐厅一样令人难忘吗?今天阿佑将为你揭晓!从基础的RESTful原则到Django REST framework的高级特性,我们一步步带你走进API开发的后厨,展示如何准备食材(数据模型)、调制酱料&#…

揭秘GPU技术新趋势:从虚拟化到池化

从GPU虚拟化到池化 大模型兴起加剧GPU算力需求,企业面临GPU资源有限且利用率不高的挑战。为打破这一瓶颈,实现GPU算力资源均衡与国产化替代,GPU算力池化成为关键。本文深入探讨GPU设备虚拟化途径、共享方案及云原生实现,旨在优化资…

Java EE-Spring Session实现(如何导入依赖、配置文件)

Spring Session Session 共享问题 在 Web 项目开发中,Session 会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据。 通常情况下 session 交由容器(tomcat)来负责存储和管理,但是如果项目部署在多台…

yolov5模型结构与构建原理

一.yolov5模型结构与构建原理 修改模型结构,全部在models文件夹下面 models/common.py (加入新增网络细节) models/yolo.py (设定网络结构传参细节) models/##.yaml (修改模型结构配置文…