Apple官方优化Stable Diffusion绘画教程

news2024/12/23 19:41:51

Apple官方优化Stable Diffusion绘画教程

苹果为M1芯片优化Stable Diffusion模型,其中Mac Studio (M1 Ultra, 64-core GPU)生成512*512的图像时间为9秒。想要1秒出图,可以在线体验3090显卡AI绘画。

AI绘图在线体验

二次元绘图

在线体验地址:Stable Diffusion

中文输入绘图

在线体验地址:Stable Diffusion

CoreML Stable Diffusion

苹果官方发布Python 包,用于使用 diffusers 和 coremltools 将 Stable Diffusion 模型从 PyTorch 转换到 Core ML,以及一个 Swift 包来部署模型。请访问 Core ML Stable Diffusion 代码存储库以启动,并获取关于基准测试和部署的详细说明。

项目地址

使用 Core ML 在 Apple Silicon 上运行stable-diffusion

该存储库包括:

  • python_coreml_stable_diffusion,一个 Python 包,用于将 PyTorch 模型转换为 Core ML 格式并在 Python 中使用 Hugging Facestable-diffusion图像生成

  • StableDiffusion,一个 Swift 包,开发人员可以将其作为依赖项添加到他们的 Xcode 项目中,以在他们的应用程序中部署图像生成功能。Swift 包依赖于由生成的 Core ML 模型文件python_coreml_stable_diffusion

如果您在安装或运行时遇到问题,请参阅常见问题解答部分。

将模型转换为 Core ML

第一步:创建Python环境并安装依赖:

conda create -n coreml_stable_diffusion python=3.8 -yconda activate coreml_stable_diffusioncd /path/to/cloned/ml-stable-diffusion/repositorypip install -e .

第 2 步:登录或注册您的Hugging Face 帐户,生成用户访问令牌huggingface-cli login并使用此令牌通过在终端窗口中运行来设置 Hugging Face API 访问。

第 3 步:导航至您想在Hugging Face Hub上使用的 Stable Diffusion 版本并接受其使用条款。默认模型版本为CompVis/stable-diffusion-v1-4。用户可以按照下一步中的描述更改模型版本。

第 4 步:从终端执行以下命令以生成 Core ML 模型文件 ( .mlpackage)

  • ounter(line
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o <output-mlpackages-directory>

警告:此命令将从 Hugging Face 下载数 GB 的 PyTorch 检查点。

在 M1 MacBook Pro 上,这通常需要 15-20 分钟。成功执行后,构成 Stable Diffusion 的 4 个神经网络模型将从 PyTorch 转换为 Core ML ( .mlpackage) 并保存到指定的<output-mlpackages-directory>. 一些额外的值得注意的论点:

  • --model-version: 模型版本默认为CompVis/stable-diffusion-v1-4。开发人员可以指定Hugging Face Hub上可用的其他版本,例如stabilityai/stable-diffusion-2-base & runwayml/stable-diffusion-v1-5。

  • --bundle-resources-for-swift-cli:编译所有 4 个模型并将它们与用于文本标记化的必要资源捆绑在一起,这些资源<output-mlpackages-directory>/Resources应作为输入提供给 Swift 包。对于基于扩散器的 Python 管道,此标志不是必需的。

  • --chunk-unet:将 Unet 模型分成两个大致相等的块(每个块的权重小于 1GB)以进行移动友好部署。这是在 iOS 和 iPadOS 上部署 ANE所必需的。这不是 macOS 所必需的。Swift CLI 能够使用 Unet 模型的分块版本和常规版本,但优先考虑前者。请注意,chunked unet 与 Python 管道不兼容,因为 Python 管道仅适用于 macOS。分块仅适用于使用 Swift 的设备上部署。

  • --attention-implementation:默认为在 Apple Neural Engine 上部署 Transformers 中SPLIT_EINSUM描述的实现。将切换到应该用于非 ANE 部署的替代方案。请参阅性能基准部分以获得进一步的指导。--attention-implementation ORIGINAL

  • --check-output-correctness:将原始 PyTorch 模型的输出与最终 Core ML 模型的输出进行比较。此标志会显着增加 RAM 消耗,因此建议仅用于调试目的。

使用 Python 生成图像

使用基于stable_diffusion的示例 Python 管道运行文本到图像生成:

  • ounter(line
python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" -i <output-mlpackages-directory> -o </path/to/output/image> --compute-unit ALL --seed 93

有关所有可用参数,请参阅帮助菜单:python -m python_coreml_stable_diffusion.pipeline -h。一些值得注意的论点:

  • -i:应该指向上面"将模型转换为 Core ML "部分的-o第 4 步中的目录。

  • --model-version:如果您在将模型转换为 Core ML 时覆盖默认模型版本,则需要在此处指定相同的模型版本。

  • --compute-unit:请注意,此特定实现的最高性能计算单元可能因不同的硬件而异。CPU_AND_GPU或者CPU_AND_NE可能比ALL. 请参阅性能基准部分以获得进一步的指导。

  • --scheduler: 如果你想尝试不同的调度器,你可以在这里指定。有关可用选项,请参阅帮助菜单。您还可以指定自定义推理步骤数--num-inference-steps,默认为 50。

使用 Swift 生成图像

系统要求

构建 Swift 项目需要:

  • macOS 13 或更新版本

  • 安装了命令行工具的 Xcode 14.1 或更高版本。请检查developer.apple.com以获取最新版本。

  • 核心 ML 模型和标记化资源。请参阅上面--bundle-resources-for-swift-cli的将模型转换为 Core ML部分

如果将此模型部署到:

  • 苹果手机
    • iOS 16.2 或更新版本

    • iPhone 12 或更新版本

  • iPad
    • iPadOS 16.2 或更新版本

    • M1 或更新版本

  • 苹果电脑
    • macOS 13.1 或更新版本

    • M1 或更新版本

CLI 用法示例

swift run StableDiffusionSample "a photo of an astronaut riding a horse on mars" --resource-path <output-mlpackages-directory>/Resources/ --seed 93 --output-path </path/to/output/image>

输出将根据提示和随机种子命名:例如</path/to/output/image>/a_photo_of_an_astronaut_riding_a_horse_on_mars.93.final.png

请使用--helpflag 了解批处理生成等。

库使用示例

import StableDiffusion...let pipeline = try StableDiffusionPipeline(resourcesAt: resourceURL)let image = try pipeline.generateImages(prompt: prompt, seed: seed).first

Swift包详情

这个 Swift 包包含两个产品:

  • StableDiffusionLib

  • StableDiffusionSample命令行工具

这两种产品都需要提供 Core ML 模型和标记化资源。通过目录路径指定资源时,该目录必须包含以下内容:

  • TextEncoder.mlmodelc(文本嵌入模型)

  • Unet.mlmodelcUnetChunk1.mlmodelcUnetChunk2.mlmodelc(去噪自动编码器模型)

  • VAEDecoder.mlmodelc(图像解码器模型)

  • vocab.json(分词器词汇文件)

  • merges.text(合并字节对编码文件)

可选地,它还可以包括安全检查器模型,某些版本的 Stable Diffusion 包括:

  • SafetyChecker.mlmodelc

请注意,首先检查 Unet 的分块版本。只有当它不存在时才会Unet.mlmodelc加载完整的。iOS 和 iPadOS 需要分块,而 macOS 则不需要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI模型神预测谁是卡塔尔世界杯冠军

推荐教程&#xff1a;AI模型神预测谁是冠军 2022年卡塔尔世界杯 猜猜他们是谁&#xff1f; 谁是最后的冠军&#xff1f; 2022年FIFA世界杯已经拉开帷幕&#xff0c;全世界的球迷都热切地想要知道&#xff1a;谁将获得那梦寐以求的 大力神杯&#xff1f; 2018年俄罗斯世界杯 方…

1,2-二苯基-1,2-二(4-羧基苯)乙烯 ;CAS: 1609575-40-7

英文名称&#xff1a; 4,4-(1,2-Diphenylethene-1,2-diyl)dibenzoic acid 中文名称&#xff1a; 1,2-二苯基-1,2-二(4-羧基苯)乙烯 MF&#xff1a; C28H20O4 MW&#xff1a; 420.46 CAS&#xff1a; 1609575-40-7 AIE聚集诱导发光材料的特点&#xff1a; 1.在固态下有强…

学编程:Python入门考级必备[11]

目录 1.查找字符串 2.字符串的格式化 3.字符串的转义字符 \ \" 4. 修改字符串 5.字符串连接与分割 附件代码&#xff1a; 炼 知识模块(11) 名符其实--字符串 1.查找字符串 # 1.1用 in 函数 a aa in acacacacaabaac print(a) # 1.2 用index 找不到就报错 b h…

ArcGIS_地质多样性评价方法

详细内容请自行查看参考文献 [1] Forte J P , Brilha J , Pereira D I , et al. Kernel Density Applied to the Quantitative Assessment of Geodiversity[J]. Geoheritage, 2018, 10:205-217. https://doi.org/10.1007/s12371-018-0282-3 本文只介绍如何在ArcGIS中实现该…

PostGIS数据测试-一百万点要素

PostGIS数据测试-一百万点要素 小小测试一下&#xff0c;看看单表百万数据的情况 服务器配置 系统版本&#xff1a;Centos7.9.2009CPU&#xff1a;两颗Intel Xeon Gold 6226R CPU 2.90GHz处理器&#xff0c;共32核心内存&#xff1a;DDR4 256G硬盘&#xff1a;Raid5 共24T数…

树选择排序(Tree Selection Sorting)介绍

简介 或许你有一个疑问&#xff1a;为什么堆排序使用二叉树&#xff0c;但是叫堆排序&#xff0c;而不是树排序&#xff1f; 因为堆排序的前身正是叫做树选择排序&#xff08;Tree Selection Sorting&#xff09;&#xff0c;使用树结构&#xff0c;但是要稍微简单一些。 高德…

CNN卷积参数量计算

参考&#xff1a;轻量级网络-Mobilenet系列(v1,v2,v3) - 知乎 盘点下每种类型的层计算可学习参数的数量 Input layer&#xff1a;输入层所做的只是读取输入图像&#xff0c;因此这里没有可以学习的参数。 Convolutional layers&#xff1a;一个卷积层&#xff0c;其输入为l个特…

cassandra安装及配置

Cassandra介绍 Cassandra是一个开源的、分布式、无中心节点、弹性可扩展、高可用、容错、一致性协调、面向列的NoSQL数据库。 Cassandra的主要组成部分主要有: • 节点(Node):Cassandra节点是存储数据的地方。 • 数据中心(Data center):数据中心是相关节点的集合。 • 集群…

Vue3 企业级优雅实战 - 组件库框架 - 8 搭建组件库 cli

前面的文章分享了组件库的开发、example、组件库文档&#xff0c;本文分享组件库 cli 开发。 1 为什么要开发组件库 cli 回顾一个新组件的完整开发步骤&#xff1a; 1 在 packages 目录下创建组件目录 xxx&#xff1a; 1.1 使用 pnpm 初始化 package.json&#xff0c;修改 n…

【正点原子FPGA连载】第二十八章 以太网ARP测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十八章 以太…

(十七) 共享模型之工具【JUC】【读写锁】

一、ReentrantReadWriteLock&#xff08;P247&#xff09; 当读操作远远高于写操作时&#xff0c;这时候使用 【读写锁】让 【读-读】可以并发&#xff0c;提高性能。 类似于数据库中的 select ... from ... lock in share mode 提供一个 数据容器类内部分别使用读锁保护数据的…

【论文阅读 CIKM‘2021】Learning Multiple Intent Representations for Search Queries

文章目录Original PaperMotivationMethodTask Description and Problem FormulationNMIR Framework: A High-Level OverviewModel Implementation and TrainingDataOriginal Paper Learning Multiple Intent Representations for Search Queries More related papers can be …

基于Electron的桌面端应用开发和实践

引言 如果开发跨桌面端的应用开发的话&#xff0c;我相信&#xff0c;electron目前绝对是不可避免的技术方案。web应用大家都知道&#xff0c;通过浏览器访问的应用就是web应用&#xff0c;那什么是桌面端&#xff1f;桌面端有两个重要特点&#xff1a; 具备独立运行于操作系…

学习压力容器中卡箍快开结构的强度计算

导读:压力容器的设计一定要考虑安全性、经济性、环保及健康问题。首先安全是核心问题&#xff0c;在保证安全的前提下尽可能的再做到经济合理。 本文从强度计算软件SW6-2011 V3.1补丁二&#xff08;单机版&#xff09;和&#xff08;网络版&#xff09;所解决的问题&#xff0…

Redis 性能问题优化方案

Redis性能问题&优化方案前言Redis真的变慢了吗&#xff1f;使用复杂度过高的命令操作bigkey集中过期实例内存达到上限fork耗时严重开启内存大页开启AOF绑定CPU使用Swap碎片整理网络带宽过载其他原因频繁短连接运维监控其它程序争抢资源总结前言 Redis 作为优秀的内存数据库…

Java高效率复习-MySQL上篇[MySQL]

前言 本文章是用于总结尚硅谷MySQL教学视频的记录文章&#xff0c;主要用于复习&#xff0c;非商用 原视频连接&#xff1a;https://www.bilibili.com/video/BV1iq4y1u7vj/?p21&spm_id_frompageDriver&vd_sourcec4ecde834521bad789baa9ee29af1f6c https://www.bilib…

Spring Boot 项目优化和 JVM 调优,亲测!真实有效。。

三、Jvm调优实战 1、未设置JVM参数的情况 我现在有一个项目&#xff0c;默认情况下&#xff0c;没有设置任何Jvm参数。 下面我来启动看一下。 看一下堆栈分配&#xff1a; 很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。 2、下面我们来设置下Jvm参数 例如要配置JVM…

vue2 ElementUI 表单标签、表格表头添加问号图标提示

文章目录1. 问题背景2. element-ui悬浮提示定义3. 基础4. 延申5. 参考1. 问题背景 使用element-ui有时候需要对表格的表头、表单的标签进行自定义&#xff0c;添加问号的悬浮提示。 要达到的效果&#xff0c;如图所示&#xff1a; 2. element-ui悬浮提示定义 https://elemen…

【菜菜的sklearn课堂笔记】聚类算法Kmeans-基于轮廓系数来选择n_clusters

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 我们通常会绘制轮廓系数分布图和聚类后的数据分布图来选择我们的最佳n_clusters from sklearn.metrics import silhouette_samples,silhouette_s…

c++还原简单的vector

文章目录vectorvecotor的介绍vector的模拟实现类的框架成员变量迭代器构造函数析构函数size()capacity()operator[]重载扩容resize()尾插验证是否为空尾删clear 清除swap交换insert插入erase删除迭代器区间初始化构造函数拷贝构造赋值运算符重载n个val构造函数再谈构造函数vect…