这一期我们分享一位开源开发者参与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文生图模型的更多相关文章

  1. 开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新

    在云计算盛行的年代,接触开发式的平台必不可少,因项目累积的代码也不少,之前本着"重复的事情自己做一次就够了,不需要其他人在重复为此工作."的想法发布了WeiXinApi.Boots ...

  2. 腾讯开源进入爆发期,Plato助推十亿级节点图计算进入分钟级时代

    腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...

  3. 一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

    摘要:都说人工智能改变了生活,你感觉到了么?AI的魔力就在你抠去路人甲的一瞬间来到了你身边.今天就跟大家聊聊--神秘的"AI消除术". 引语 旅途归来,重温美好却被秀丽河山前的路人 ...

  4. vue微信分享链接添加动态参数

    微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...

  5. 千亿参数开源大模型 BLOOM 背后的技术

    假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...

  6. 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布

    引言 Odoo 12.0是目前全球Odoo社区最新推出的产品版本代号,该产品具有划时代的意义,增加了如互联网级的知识库网盘功能.工业互联网的IOT设备矩阵管控功能,全新的Python Sass前端引擎 ...

  7. 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验

    概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...

  8. Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能

    背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...

  9. 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端

    前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...

  10. .NET开源项目 QuarkDoc 一款自带极简主义属性的文档管理系统

    有些话说在前头 因为公司产品业务重构且功能拆分组件化,往后会有很多的接口文档需要留存,所以急需一款文档管理系统.当时选型要求3点: 1.不能是云平台上的Saas服务,整个系统都要在自己公司部署维护(数 ...

随机推荐

  1. Marklogic学习 系列专栏整理

    Marklogic学习 系列专栏整理 本人就是个松鼠怪,见到好东西都想收藏,在CSDN发现了这位博主写的一系列MarkLogic相关专栏觉得不错,今天已经看到第六个了,反正很好吃,趁着最近项目使用Ma ...

  2. mysql替换内容

    UPDATE storage SET guige = REPLACE(guige, '×', 'x')

  3. php几种常用的算法

    1 <?php 2 3 // 选择排序 4 5 function select_sort($arr) 6 7 { 8 9 $count = count($arr); 10 11 for ($i ...

  4. 2-3 C++复合类型

    目录 2.3.1 引用(References) 2.3.2 指针(Pointers) 关于指针 指针操作 其它事项 空指针的三种表示 void* 指针 易混淆的符号 指针的值(地址)的四种状态 对比与 ...

  5. Spring MVC 3.2 技术预览(一):Servlet 3介绍,异步支持

    原文地址:http://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-supp ...

  6. k8s之常用命令

    Minikube # 启动集群服务 minikube start # 查看集群服务状态 minikube status# 登录集群minikube ssh # 关闭,暂停,恢复,删除集群服务 mini ...

  7. 编程辅助工具之Kite

    python作为一门门槛很低但又功能强大的编程语言,现在已经得到了非常广泛的使用,但是它的常用库非常多,而且往往更新后许多方法都有所变化,因此想要记住其大部分函数的用法对于大部分人来说比较困难,因而会 ...

  8. ThreeJs-04详解材质与纹理

    一.matcap材质 这个材质不会受到光照影响,但是如果图片本身有光就可以一直渲染这个图片本来的样子,用来将一个图片纹理渲染到物体上的材质 代码实现 加载模型后,开启纹理渲染,并把它的材质变为这个材质 ...

  9. 频繁full gc 如何排查

    频繁full gc 通常表明应用程序在内存管理方面存在问题,可能导致性能下降,下面是排查步骤和一个详细的示例 排查步骤 收集GC日志 首先,需要开启详细的GC日志,在JVM参数中添加 -XX:+Pri ...

  10. This request has been blocked; the content must be served over HTTPS.此请求已被阻止;内容必须通过HTTPS提供

    近期在做将高德地图替换为天地图时遇到了这个问题,原因是https由于安全协议禁止了http的请求 http://api.tianditu.gov.cn/api?v=4.0&tk=XXXXXXX ...