开源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个:

t5:文本转换为机器理解的语言

clip:文本转换为图像

flux:图像生成
第三步:编写运行代码
flux模型权重文件下载完成后,就可以修改相关代码,实现模型权重文件从本地加载。


在之前的代码逻辑里面,判断加载哪一个模型是基于模型的名称去进行判断的,但是我们现在传入的参数是路径,这个方法不适用,需要修改代码,直接说明加载的模型是T5或者CLIP。

然后运行模型,报错提示设备为CUDA,但我的设备是NPU。根据这个报错信息,我进行了对应的修改,将device="CUDA",改为device="NPU"

再次运行之后报错提示bfloat16不支持在这个设备上,我根据这个报错信息,找到bfloat16的位置,修改为float32

进行这些修改之后,运行模型,查看NPU已经进入了运行状态。
测试结果:



经过测试,模型可以通过输入的内容,去生成对应的图片,所以模型的功能在此主机上可以正常使用了。
期待各位小伙伴的加入,一起体验适配带来的乐趣。在体验过程中,如有问题可点击链接进入开源开发者专属问答区,加入开源开发者专项计划。加入我们,您可以在项目中提 Issues与其他开发者进行互动,也可以添加项目相关的微信群进行技术讨论与交流。
沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 for Huawei适配,践行“让优秀开发者支持更优秀开发者”的理念。
开源flux适配昇腾NPU分享,体验120亿参数AI文生图模型的更多相关文章
- 开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新
在云计算盛行的年代,接触开发式的平台必不可少,因项目累积的代码也不少,之前本着"重复的事情自己做一次就够了,不需要其他人在重复为此工作."的想法发布了WeiXinApi.Boots ...
- 腾讯开源进入爆发期,Plato助推十亿级节点图计算进入分钟级时代
腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...
- 一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”
摘要:都说人工智能改变了生活,你感觉到了么?AI的魔力就在你抠去路人甲的一瞬间来到了你身边.今天就跟大家聊聊--神秘的"AI消除术". 引语 旅途归来,重温美好却被秀丽河山前的路人 ...
- vue微信分享链接添加动态参数
微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...
- 千亿参数开源大模型 BLOOM 背后的技术
假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...
- 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布
引言 Odoo 12.0是目前全球Odoo社区最新推出的产品版本代号,该产品具有划时代的意义,增加了如互联网级的知识库网盘功能.工业互联网的IOT设备矩阵管控功能,全新的Python Sass前端引擎 ...
- 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验
概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...
- Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能
背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...
- 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...
- .NET开源项目 QuarkDoc 一款自带极简主义属性的文档管理系统
有些话说在前头 因为公司产品业务重构且功能拆分组件化,往后会有很多的接口文档需要留存,所以急需一款文档管理系统.当时选型要求3点: 1.不能是云平台上的Saas服务,整个系统都要在自己公司部署维护(数 ...
随机推荐
- IKAnalyzer分词工具的spring boot项目整合代码版
简介 IK Analyzer是什么呢,一个很轻量的中文分词工具,是基于java开发的轻量级的中文分词工具包.它是以开源项目Luence为主体的,结合词典分词和文法分析算法的中文分词组件.IK有很多版本 ...
- 4.7 Linux压缩文件或目录中文件为.bz2格式(bzip2命令)
bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件.当执行压缩任务完成后,会生成一个以".bz2"为后缀 ...
- postcss-px-to-viewport 移动端适配
以前做移动端项目的时候都是用rem来做适配,现在基本上都是通过viewport单位来做. postcss-px-to-viewport就是一个将px单位转换为视口单位的 (vw, vh, vmin, ...
- 初识cuda一文通
cuda学习博客 本文为本人cuda学习过程中的记录和理解,多参考@谭升等大佬前辈的博客,以及NVIDIA官方文档.如有错误烦请指正,如有侵权请联系删除. 0. 并行计算与计算机架构 计算机架构是并行 ...
- Go语言net/http包源码学习
0.前言 该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习. 该笔记很大程度的参考了网名为"小徐先生"的前辈所分享 ...
- Java网络编程之JavaMail发送邮件和接受邮件
JavaMail是API 是一个标准的Java扩展,它是J2EE的范畴,在J2EE开发过程中可能会需要用到这个API.在学习JavaMail之前,有必须要对现在的互联网的邮件协议进行有个大体的了解. ...
- JVM性能优化, Part 3 —— 垃圾回收
ImportNew注:本文是JVM性能优化 系列-第3篇-<JVM性能优化, Part 3 -- 垃圾回收> 第一篇 <JVM性能优化, Part 1 ―― JVM简介 > 第 ...
- Redis工具之redis_rdb_tools
redis_rdb_tools工具的介绍: 解析redis的dump.rdb文件,分析内存,以JSON格式导出数据.|提供的功能有: 1. 生成内存报告 2. 转储文件到JSON 3. 使用标准的di ...
- Nuxt.js 应用中的 request 事件钩子
title: Nuxt.js 应用中的 request 事件钩子 date: 2024/12/4 updated: 2024/12/4 author: cmdragon excerpt: 在构建现代 ...
- cento 申请ssl证书笔记
如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器: 安装Certbot的Nginx插件: sudo yum install certbot-ngi ...