Arm上的DirectML终于来了

智能真的很好说 2024-09-10 20:24:36

微软推出了 Windows Copilot Runtime 的首部分内容。我们对此进行了一番尝试,然而结果却令人倍感失望,其中存在诸多错误,且所支持的模型寥寥无几。

随着Arm构建的DirectML AI工具的开发者预览版的发布,微软在推进其Windows Copilot项目方面迈出了重要一步,尽管该项目的全面推出仍需时日。尽管Windows Copilot尚未准备好投入生产环境,但现在借助集成了高通Hexagon神经处理单元(NPU)的Copilot+ PC,开发者们已经开始能够针对本地人工智能应用程序进行初步的实验与探索。

将AI能力推向边缘计算领域,离不开高效的加速器硬件支持。基于Arm架构的Copilot+ PC方案,为开发者们提供了一个宝贵的平台,使他们能够利用内置的、高达45 TOPs(每秒万亿次操作)的AI加速器,并结合预装的人工智能模型和工具集,轻松部署和运行自己的AI应用。

尽管微软Win App SDK API的Phi Silica模型已经更新至1.7版本,但关于完全集成PyTorch等流行AI不过框架的承诺目前仍未见明显进展。这首批发布的工具已经足够为开发者们提供一个起点,帮助他们开始编码并探索Windows Copilot在边缘AI领域的潜力。这一举措标志着微软在推动AI技术普及与应用方面,又向前迈出了坚实的一步。

NPU司机来了

DirectML Arm版本的核心是Copilot+ PC的NPU的新驱动程序。这与新构建的开放神经网络交换(ONNX)运行时相关联,支持来自Hugging Face的几个开源模型。微软创建了一个由高通优化的DirectML就绪模型存储库,可与新的运行时一起使用。

但不要太兴奋。第一个版本存在严重的错误,使其几乎无法使用,支持的模型数量有限,限制了您可以构建的应用程序。

为Windows Copilot Runtime和新的Arm Copilot+ PC提供DirectML支持是一个重要的里程碑。DirectML是DirectX API系列的一部分,该API允许访问GPU和NPU,允许您的C++和。利用硬件加速器的NET代码。因此,它是Copilot Runtime的基础组件,提供对ONNX格式模型的访问,并简化应用程序打包和分发。

新的高通驱动程序需要手动安装,从高通开发人员门户网站下载。这需要一个帐户,注册过程可能需要时间。获得批准并登录后,将Windows Arm驱动程序下载为zip文件。请务必下载正确的版本;还有Linux和macOS版本。解压缩下载的文件并运行NPU驱动程序安装程序。安装完毕后,您需要重新启动。

微软正在为Arm64提供新的ONNX和DirectML版本。使用最新的1.15.2版本(或更高版本)作为代码的先决条件,以及DirectML ONNX运行时的1.18版本。

构建C++ Windows Copilot运行时应用程序

有了这个,您可以使用新驱动程序的DirectML支持开始构建第一个Windows Copilot Runtime应用程序。需要注意的一点是,第一组支持的模型主要是计算机视觉模型。这也许并不奇怪,因为最初的人工智能PC加速器专注于图像和视频处理。观察NPU驱动程序和支持的模型以及DirectML等抽象是如何演变的,这将是有趣的。

值得一看的是微软现有的DirectML样本,因为它们不需要太多工作来支持最新的驱动程序构建。最有趣的是,使用ESRGAN模型的图像升级应用程序,展示了NPU如何用于照片升级或去声,就像Lightroom等照片处理应用程序使用的基于GPU的人工智能图像处理工具一样。

不幸的是,我无法让样品工作。一旦我克隆了整个DirectML存储库,事情似乎很有希望。然后问题开始出现。

首先,它需要一个独立版本的cmake来构建构建所需的文件,而不是与Visual Studio 2022捆绑的版本。一旦安装完毕,cmake就可用于Visual Studio,并允许样本自我配置。不要忘记明确选择制作应用程序的Arm64版本,以使用Copilot+ PC NPU。

尽管Visual Studio包含自己的Git实现,但您需要在cmake的PATH中使用一个独立的Git实例才能从GitHub获取所有所需的DirectML标头。在这里,我安装了Windows版Git,我发现它有一个可用的命令行和GUI工具组合,与Visual Studio配合得很好。

许多底层工具仍然是pre-alpha,因此您应该预计会有错误和缺失的功能。这些遗漏不是大问题,但如果文档包含完整的先决条件列表,那将有所帮助。

我现在可以编译代码了。这提供了ESRGAN示例应用程序的构建版本,并带有即用型的ONNX模型。您确实需要使用命令行明确调用NPU来运行示例。这使得Visual Studio调试器难以使用。

它会运行吗?

尽管应用程序编译和运行并正确检测NPU,但它目前在加载ONNX模型时挂起。这似乎是NPU驱动程序的问题,因为该应用程序在CPU上使用DirectML工作。看看未来的构建或其他模型会带来什么会很有趣。

在等了很长时间才等到第一个Windows Copilot Runtime工具到达后,这是一个令人失望的结果,特别是因为挂起不仅会锁定NPU应用程序,还会影响任务管理器等工具。唯一的出路是重新启动你的电脑。我相信更新的驱动程序很快就会交付,但就目前而言,这感觉像是死胡同。

从桌面到WebNN

这些驱动程序旨在支持WebNN以及您自己的代码。WebNN是在浏览器中使用ONNX的开发标准,允许小型模型在本地运行,而不是使用远程服务器。微软一直在其Edge浏览器中构建对WebNN的实验性支持,将其放在Dev和Canary Insider构建的标志后面。

作为宣布对高通NPU的DirectML支持的一部分,微软包括了将DirectML与WebNN一起使用的说明。同样,目前这是一个相当复杂的过程,因为它涉及从NuGet软件包中提取DirectML DLL,并手动将其安装在适当的Edge目录中。

WebNN设置说明需要注意的一件事:当您从命令行运行Edge Dev或Canary时,原始博客文章中的说明存在格式问题。三个参数中每个参数开头的em破折号实际上是两个独立的标准破折号。如果您只是从博客中复制并粘贴命令行,Edge将无法正确加载ONNX驱动程序。

可悲的是,与示例DirectML应用程序一样,无论我使用哪个浏览器版本,WebNN模型都无法加载和运行。

微软早在2024年5月就宣布了Windows Copilot Runtime,我们预计7月会发布第一个代码。遗憾的是,这第一组驱动程序有如此大的缺陷。希望固定版本很快就会发布,我们最终能够在这50个TOPs NPU上运行AI代码。

在那之前,我们至少可以通过DirectML的CPU支持编写和测试代码,当我们有有效的代码和模型时,准备切换到NPU。这意味着等待高通NPU驱动程序的生产版本需要长时间,以及对Olive等基本工具的支持,以帮助我们为Copilot+硬件调整自己的模型。目前,让我们希望微软和高通尽快推出工作驱动程序,尤其是现在AMD已经宣布了其首款x64 Copilot+ PC。

0 阅读:8