dotnet 基于 DirectML 控制台运行 Phi-3 模型

💡 原文中文,约8500字,阅读约需21分钟。
📝

内容提要

本文介绍了如何在C# dotnet的控制台应用中使用DirectML运行Phi-3模型。通过DirectML可以方便地在用户机器上部署Phi-3模型,并利用机器设备资源。文章提供了具体的代码示例,并建议将模型文件放入项目输出文件夹中以便其他人使用。

🔎

延伸解读

DirectML 的部署优势与硬件兼容性

文章指出,使用 DirectML 可以屏蔽底层运行细节,简化 Phi-3 模型的部署工作。即使设备 GPU 不支持,也能自动降级使用 CPU 运行,从而在多种机器型号上运行。这意味着开发者无需针对不同硬件编写特定代码,只需拷贝模型文件即可部署,降低了环境配置的复杂度。

模型文件获取与存储注意事项

Phi-3 模型需从 Hugging Face 仓库下载,且必须使用 git-lfs 工具,因为模型文件较大,仓库总大小约 20GB。下载后需取出 directml-int4-awq-block-128 文件夹内的所有文件,并放入项目输出文件夹或自定义路径。文章提醒,若下载困难,可邮件联系作者获取网盘分享。

TokenizerStream 处理多 token 单词的机制

文章提到一个关键点:并非每个 token 都对应一个完整单词,有些单词需要多个 token 组合。直接使用 tokenizer.Decode 可能导致输出不连贯。为此,微软提供了 TokenizerStream 类型,它支持逐个传入 token,自动合并需要多个 token 的单词,中间 token 返回空字符串,最后一个 token 才返回完整单词,从而实现流畅的逐词输出。

当前库的预览状态与未来变化

文章明确说明,所使用的 Microsoft.ML.OnnxRuntimeGenAI.DirectML 库版本为 0.2.0-rc7,仍处于预览版阶段。这意味着后续正式版本可能会更改 API 或行为,开发者在实际项目中需关注版本更新,并做好适配准备。

❓

Q&A

如何在C# dotnet控制台应用中使用DirectML运行Phi-3模型?

可以通过创建dotnet控制台项目,安装Microsoft.ML.OnnxRuntimeGenAI.DirectML库,并加载Phi-3模型文件来实现。

Phi-3模型的特点是什么?

Phi-3模型是一个小型语言模型,体积小且运行速度快,可以在用户设备上运行。

如何下载Phi-3模型文件?

需要从指定链接下载Phi-3模型,并使用git lfs工具进行下载。

使用DirectML的优势是什么?

DirectML简化了模型部署,支持在多种机器上运行,包括不支持GPU的设备,并能充分利用机器资源。

如何处理用户输入并生成模型输出?

通过创建Tokenizer对象将用户输入转换为token,然后使用Generator对象生成模型输出。

如何将模型文件分享给其他人?

可以将模型文件放入项目输出文件夹,以便其他人使用和运行。

🏷️

标签

➡️

继续阅读