开源 flux 适配昇腾 NPU 分享,体验 120 亿参数 AI 文生图模型
这一期我们分享一位开源开发者参与 flux 适配昇腾 NPU 的实践经验,欢迎广大开发者对华为技术栈适配进行讨论。
开源适配实践
flux 是一个 AI 图像生成模型,有 120 亿参数量,具有大量的用户基础,可以根据命令行输入的文字去生成对应的图片。本次适配使用的 flux 模型权重文件是 schnell 版本。
下面我简单分享一下 flux 模型适配昇腾 NPU 的实践心得,如有改进之处,欢迎指正,也希望对华为生态感兴趣的小伙伴可以加入进来一起探讨。
如何验证开源项目
本次适配我需要在拥有昇腾 NPU 的主机上将 flux 模型运行起来,验证其功能是否可以正常使用。昇腾 NPU 主机需要先安装 CANN 软件,CANN 软件的安装可参考昇腾社区的开发资源。后续的所有操作都在此主机上进行。
在 GitHub 平台上下载项目源码(点击链接下载),通过分析 README 文件中的内容可以知道 flux 模型开发环境所需要的 python 版本是 python3.10,其相关依赖都封装在 pyproject.toml 文件中。同时 flux 模型主要采用 python 语言进行开发,所以我使用 anaconda 管理模型环境。anaconda 作为环境管理工具,可以为不同的模型创建独立的环境,这样可以避免依赖版本冲突,保持环境的整洁性。该主机需要的 anaconda 为 Linux 系统 ARM64 版,查找相关文档进行安装配置后,使用 anaconda 去创建属于 flux 的虚拟环境。
第一步:进入创建的 conda 环境,安装相关依赖
在代码仓库中,是由 pyproject.toml 文件去管理的依赖,使用【pip install -e ".[all]"】命令下载依赖。我们下载好 flux 模型所需要的相关依赖之后,需要安装对应版本的 torch_npu,使 pytorch 框架可以运行在昇腾 NPU 上,这样 flux 模型所需要的环境就搭建完成了。torch_npu 是华为为昇腾 NPU 设计的 pytorch 后端库,使得 pytorch 框架能够在昇腾 NPU 上运行,是连接 pytorch 框架与昇腾 NPU 的桥梁。
第二步:准备模型权重文件
我先运行了一次模型,发现权重文件在运行时会自动从 Hugging Face 上下载,由于模型权重文件较大,且每次运行都会重新下载,比较占用内存。所以我们提前下载模型权重文件到主机上。
分析代码文件,涉及到的相关模型权重有以下 3 个:
第三步:编写运行代码
flux 模型权重文件下载完成后,就可以修改相关代码,实现模型权重文件从本地加载。
在之前的代码逻辑里面,判断加载哪一个模型是基于模型的名称去进行判断的,但是我们现在传入的参数是路径,这个方法不适用,需要修改代码,直接说明加载的模型是 T5 或者 CLIP。
然后运行模型,报错提示设备为 CUDA,但我的设备是 NPU。根据这个报错信息,我进行了对应的修改,将 device="CUDA",改为 device="NPU"
再次运行之后报错提示 bfloat16 不支持在这个设备上,我根据这个报错信息,找到 bfloat16 的位置,修改为 float32
进行这些修改之后,运行模型,查看 NPU 已经进入了运行状态。
测试结果:
经过测试,模型可以通过输入的内容,去生成对应的图片,所以模型的功能在此主机上可以正常使用了。
期待各位小伙伴的加入,一起体验适配带来的乐趣。在体验过程中,如有问题可点击链接进入开源开发者专属问答区,加入开源开发者专项计划。加入我们,您可以在项目中提 Issues 与其他开发者进行互动,也可以添加项目相关的微信群进行技术讨论与交流。
沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 for Huawei 适配,践行“让优秀开发者支持更优秀开发者”的理念。
评论