通过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.rhkb.cn/news/340915.html

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

相关文章

windows上安装MongoDB,springboot整合MongoDB

上一篇文章已经通过在Ubuntu上安装MongoDB详细介绍了MongoDB的各种命令用法。 Ubuntu上安装、使用MongoDB详细教程https://blog.csdn.net/heyl163_/article/details/133781878 这篇文章介绍一下在windows上安装MongoDB,并通过在springboot项目中使用MongoDB记录用户…

SpaceX: 太空火箭自主精准着陆

本文是根据Lars Blackmore在16年的一篇公开论文翻译而来,虽然有些早而且是科普文章,但是可以初见一些SpaceX火箭着陆的细节,后面我会对spaceX landing control 技术主管MIT博士期间研究火箭控制算法的论文进行讲解,敬请期待。 Lar…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

C/C++ 进阶(5)二叉平衡搜索树(AVL树)

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 目录 一、概念 二、平衡因子 三、操作 插入 旋转 左单旋 右单旋 左右双旋 右左双旋 一、概念 二叉平衡搜索树又称AVL树,是一种特殊的二叉搜索树。一般的二叉搜索树在遇到数据有序时&…

SOLIDWORKS修改零件时出现错误怎么办?

我们在使用SOLIDWOKRS进行零件建模过程中往往避免不了修改,但在修改后又常常会出现零件报错的情况,设计树中会出现一堆的错误和警告,我们如何快速处理这些问题呢? 我们都知道SOLIDWOKRS零件通常包含两大类的对象,分别…

Docker 入门版

目录 1. 关于Docker 2. Dockr run命令中常见参数解读 3. Docker常见命令 4. Docker 数据卷 5. Docker本地目录挂载 6. 自定义镜像 Dockerfile 语法 自定义镜像模板 Demo 7. Docker网络 1. 关于Docker 在docker里面下载东西,就是相当于绿色面安装板&#x…

python之生成器表达式

背景 生成器表达式,整个表达式都是另一个函数的唯一入参,则不需要带括号;若他只是其中一个参数,则需要圆括号包裹。 演示

响应式流和reactor框架进阶

响应式流和reactor框架进阶 响应式流创建、转换、处理 本文档主要介绍在响应式编程中如何从流中获取数据并处理。 前提条件 假设您已经能掌握Java基础、Maven使用、Lamda表达式、响应式编程等基础。 如何获取流中数据 🌏 说明 1、不要试图从流中获取数据出来&a…

MMUNet:形态学特征增强网络在结肠癌病理图像分割中的应用

MMUNet: Morphological feature enhancement network for colon cancer segmentation in pathological images. 发表在:Biomedical Signal Processing and Control2024--影响因子:3.137 南华大学的论文 论文地址:main.pdf (sciencedirecta…

地理信息科学中的大数据挑战

在信息化爆炸的时代,地理信息科学(GIScience)正经历着前所未有的变革,其中,地理空间大数据的涌现为科学研究与应用带来了前所未有的机遇与挑战。作为地理信息与遥感领域的探索者,本文旨在深入剖析地理空间大…

找不到steam_api64.dll,无法继续执行的原因及解决方法

电脑已经成为我们生活中不可或缺的一部分。然而,在使用电脑的过程中,我们经常会遇到一些常见的问题,其中之一就是找不到某个特定的动态链接库文件,比如steamapi64.dll。这个问题可能会导致某些应用程序无法正常运行,给…

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换(ADC)1.1ADC的关键步骤: 2.数字模拟转换(DAC)2.1DAC 的基本流程包括: 3.PCM数据3.1PCM 数据的关键要素包括: 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…

kettle从入门到精通 第六十五课 ETL之kettle 执行动态SQL语句,轻松实现全量增量数据同步

本次课程的逻辑是同步t1表数据到t2表,t1和t2表的表机构相同,都有id,name,createtime三个字段。 CREATE TABLE t1 (id bigint NOT NULL AUTO_INCREMENT,name varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,cr…

View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)

Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形,也可能为宽高不同的矩形缩放方向可以为中心缩放,左上角缩放,右上角缩放,左下角缩放,右下角缩放Bitmap中心缩放,包含了缩放和平移两个操作&#xf…

数据整理操作及众所周知【数据分析】

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

Opencv 色彩空间

一 核心知识 色彩空间变换; 像素访问; 矩阵的、-、*、、; 基本图形的绘制 二 颜色空间 RGB:人眼的色彩空间; OpenCV默认使用BGR; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…

Pytorch 笔记

执行下面这段代码后,为什么返回的是 2 ? vector torch.tensor([7, 7]) vector.shape为什么返回的是 torch.Size([2])? 当你创建一个PyTorch张量时,它会记住张量中元素的数量和每个维度的大小。在你的代码中,torch.t…

Redis 线程模型

Redis 线程模型 背景简介Redis 单线程客户端发起 Redis 请求命令的工作原理单线程面临的挑战及问题 Redis 多线程Redis v4.0 多线程命令Redis v6.0 多线程网络模型 总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术…

LangChain学习之 Question And Answer的操作

1. 学习背景 在LangChain for LLM应用程序开发中课程中,学习了LangChain框架扩展应用程序开发中语言模型的用例和功能的基本技能,遂做整理为后面的应用做准备。视频地址:基于LangChain的大语言模型应用开发构建和评估。 2. Q&A的作用 …

了解VS安全编译选项GS

缓冲区溢出攻击的基本原理就是溢出时覆盖了函数返回地址,之后就会去执行攻击者自己的函数; 针对缓冲区溢出时覆盖函数返回地址这一特征,微软在编译程序时使用了安全编译选项-GS; 目前版本的Visual Studio中默认启用了这个编译选项…