MAC搭建M1环境的stable-diffusion

2023-11-13

MAC M1 搭建 stable-diffusion 环境


苹果公司的程序员为 M1,M2 之类的ARM64芯片专门创建了一个 stable-diffusion 的仓库:

Run Stable Diffusion on Apple Silicon with Core ML

链接为: https://github.com/apple/ml-stable-diffusion

可以充分利用 M1 内置的人工智能芯片(神经网络芯片), 需要转换 PyTorch 模型为 Apple Core ML 模型。

本文基于这个仓库进行操作。

环境准备

1. 硬件环境

  • M1芯片的Apple MacBook Pro
  • 16G内存; 8G也可以, 但是需要一些额外的配置。

2. 系统环境

3. 基础软件环境

  • git: 下载仓库源码; 理论上需要更新到最新版
  • conda: 主要用来创建Python环境
  • Python: 需要3.8 版本, 高了低了都不行, 使用 conda 来安装即可。

conda下载页面为: https://docs.conda.io/en/latest/miniconda.html

主要参考资料

网上找了很多资料, 折腾了很多次, 发现这篇比较好:

如果碰到问题, 请打开这个页面查看。

操作步骤

1. 下载git

参考官方网站: https://git-scm.com/downloads

下载或者安装好即可。

2. 下载conda

参考官方网站: https://docs.conda.io/en/latest/miniconda.html

下载 miniconda 并安装即可。

miniconda是一个简化版, 只内置了python。 其他什么 C++, Java什么的环境都暂时去除了。

3. 创建python环境

参考: https://zhuanlan.zhihu.com/p/590869015

对应的命令为:

# 创建和准备Python环境
conda create -n coreml_stable_diffusion python=3.8 -y

# 查看conda的环境列表
conda env list

# 激活特定环境
conda activate coreml_stable_diffusion

## 查看Python版本, 注意是大V
python -V

这些环境的作用域范围是操作系统用户级别的。 主要是shell中使用。

4. 下载仓库

使用的命令为:

git clone https://github.com/apple/ml-stable-diffusion.git

github支持下载zip包, 但身处天国的话得需要一些技巧才能下载成功。

如果速度过慢, 可能你需要一些下载技巧, 比如购买网络服务。

5. 安装依赖

# 进入仓库目录
cd ml-stable-diffusion

# 激活特定环境
conda activate coreml_stable_diffusion

# 安装python依赖; pip 是和 python 环境一起自动安装的;
pip install -r requirements.txt

如果速度过慢, 可能你需要一些下载技巧, 比如购买网络服务。

如果因为网速原因安装失败, 可以再次重复执行安装。

6. 转换模型

为了利用 M1 内置的人工智能芯片(神经网络芯片), 需要转换 PyTorch 模型为 Apple Core ML 模型。

转换模型对应的命令为:

# 进入仓库目录
cd ml-stable-diffusion

# 激活特定环境
conda activate coreml_stable_diffusion

# 模型转换; 需要下载几个GB的文件
# (默认值是脚本里面内置的1.4版本)
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o ./models

如果内存不够的话, 尝试先关掉一些其他程序。

我这里在执行过程中报了一个错:

RuntimeError: PyTorch convert function for op 'scaled_dot_product_attention' not implemented.

解决办法, 参考: https://blog.csdn.net/cainiao1412/article/details/131204867

pip show torch # 查看torch版本
pip uninstall torch # 卸载torch版本
pip install torch==1.13.1 # 安装指定版本

报错的话, 切换 torch 版本, 然后再次执行模型转换的命令。

7. 验证和测试

使用的命令为:

python -m python_coreml_stable_diffusion.pipeline --prompt "magic book on the table" -i ./models -o ./output --compute-unit ALL --seed 93

因为需要初始化环境, 加载模型和处理, 所以过程比较慢, 我这里需要好几分钟。

8. 构造Web界面

好处是不需要每次执行提示词 prompt 都去初始化一次环境。

安装gradio, 参考: https://www.gradio.app/quickstart/

对应的安装命令为:

pip install gradio

然后参考 https://zhuanlan.zhihu.com/p/590869015 专栏中提到的脚本:

web.py 文件准备完成后, 启动命令为:

# 进入仓库目录
cd ml-stable-diffusion

# 激活特定环境
conda activate coreml_stable_diffusion

# 启动WebUI
python -m python_coreml_stable_diffusion.web -i ./models --compute-unit ALL

启动需要加载环境, 会消耗一些时间。

启动完成后, 会看到命令行给出访问网址, 例如: http://0.0.0.0:7860

9. 测试WebUI

打开访问网址, 例如: http://0.0.0.0:7860

找一个支持的模板, 改造一下, 例如:

rabbit, anthro, very cute kid's film character, disney pixar zootopia character concept artwork, 3d concept, detailed fur, high detail iconic character for upcoming film, trending on artstation, character design, 3d artistic render, highly detailed, octane, blender, cartoon, shadows, lighting

输入词汇之后, 点击生成, 等待即可。

在这里插入图片描述

可以看到, 这个配置, 使用WebUI界面只需要7秒左右即可出图, 文件大小在500KB左右。

这个 WebUI 还是有一些问题, 有时候会生成一张黑图, 碰到的话刷新页面重试即可。

网上有很多提示词模板, 著名的有: https://github.com/Dalabad/stable-diffusion-prompt-templates

当然, 模板的好处就是, 可以把 rabbit 换成 tiger 之类词汇的试试.

10. 关闭环境

webUI 开启的时候, python 会占用很多内存, 不需要时, 从控制台 CTRL+C 关闭即可, 或者粗暴一点直接杀进程。

11. 集成App

Windows系统下有很多一键安装脚本, 搜索关键字即可: windows stable diffusion 一键安装

找了一下, MAC系统中也有类似的, 支持 Intel 以及M1/M2芯片。

踩坑日记

1. brew 更新不成功

原因是切换了国内的源。 但是, 国内的源比较坑, 经常不兼容或者报错。

重置 brew 源, 参考: 更换和重置Mac Homebrew的默认源

本质上 brew 就是依赖了几个 git 仓库, 所以有问题的话可以直接通过git处理一下对应的那几个目录。

2. 转换模型报错

报错信息为:

RuntimeError: PyTorch convert function for op 'scaled_dot_product_attention' not implemented.

解决办法, 参考: https://blog.csdn.net/cainiao1412/article/details/131204867

pip show torch # 查看torch版本
pip uninstall torch # 卸载torch版本
pip install torch==1.13.1 # 安装指定版本

OK, 1.3.1 版本可以成功处理。

3. 网络问题

强的厉害, 经常网络超时, 这时候就需要技巧了。

相关链接

作者: 铁锚
日期: 2023年06月20日

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAC搭建M1环境的stable-diffusion 的相关文章

随机推荐

  • springboot子模块 @Autowired无法找到其他模块的接口和类的解决方法

    在main的启动类上添加 SpringBootApplication scanBasePackages com shangsheng 或者 ComponentScan com shangsheng 注意 只能写两个包的连接点 不能写到最低包
  • 基数排序(Radix Sort)-- 特殊排序算法

    1 基数排序 Radix Sort 基数排序是按照低位先排序 然后收集 再按照高位排序 然后再收集 依次类推 直到最高位 有时候有些属性是有优先级顺序的 先按低优先级排序 再按高优先级排序 最后的次序就是高优先级高的在前 高优先级相同的低优
  • webService接口对接医院lis系统接口

    文章目录 1 应用场景 2 http协议简述 3 webService协议 soup简述 4 发送webService请求 4 1建立HttpUtils工具类 来发送post请求 4 2 调用医院给的url和xml内容 5 接收webSer
  • DC-DC开关电源 拓扑结构(BUCK BOOST BUCK-BOOST)电路

    比较粗略的BUCK BOOST电路的分析 http tech hqew com fangan 522451 http blog csdn net u011388550 article details 23841023 这个还是不错的 htt
  • group by的工作原理和优化思路

    引入 日常开发中 我们经常会使用到group by 你是否知道group by的工作原理呢 group by和having有什么区别呢 group by的优化思路是怎样的呢 使用group by有哪些需要注意的问题呢 使用group by的
  • 下载技巧汇总

    目录 5 下载资源链接 4 下载工具 Free Download Manager 1 1用cmd下载百度网盘中资料 1 2 在网上找到资源用迅雷下载 结果出现 应版权方要求 文件无法下载 的字样 1 3 下载搜索方法 2 查找资源地址 3
  • localhost 对应IP 127.0.0.1

    在使用tomcat gdb等工具调试时会输入localhost localhost 什么意思呢 localhost 对应 映射着一个IP地址 127 0 0 1 代表PC端上的本地服务器 使用的端口号 8080 8084 8089
  • springboot学习(十一)整合JDBC

    之前拿的那个项目都是没有数据库的 这里涉及到整合数据库进来 springboot工程初始化要勾选SQL里面的jdbc api和MySQL 你要是别的数据库就勾选对应的 对于数据访问层 无论是 SQL 关系型数据库 还是 NOSQL 非关系型
  • Kafka eagle的介绍及安装(基于linux环境)

    kafka eagle kafka鹰 是一款由国内公司开源的Kafka集群监控系统 用于监控 Kafka 集群中 Topic 被消费的情况 包含 Lag 的产生 Offset 的变动 Partition 的分布 Owner Topic 被创
  • PCB走线辟谣总结,究竟应该怎么找拐角?

    现在但凡打开 SoC原厂的PCBLayout Guide 都会提及到高速信号的走线的拐角角度问题 都会说高速信号不要以直角走线 要以 45 度角走线 并且会说走圆弧会比 45 度拐角更好 事实是不是这样 PCB 走线角度该怎样设置 是走 4
  • java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别

    现在以信用卡为例简单介绍下 public class TestEncapsulation public sataic void main String args CreditCard card new CreditCard System o
  • 如何更改Visual Studio 2019的语言

    第0步 开启Visual Studio 2019 第1步 工具 gt 获取工具和功能 第2步 下载语言包 等待下载 第3步 设置语言 工具 Tools gt 选项 Options 然后重启 VS 就可以看到变化了
  • MediaMetadataRetriever类取得媒体文件信息

    http blog csdn net ameyume article details 7849641 API说明 MediaMetadataRetriever class provides a unified interface for r
  • Java内存管理和面向对象

    Java内存管理 Java的内存管理是自动化的 通过垃圾回收器 Garbage Collector 简称GC 来管理内存分配和释放 在本教程中 我们将探讨Java中的内存管理概念 垃圾回收和一些内存管理相关的最佳实践 步骤1 Java的内存
  • 数据集【NO.10】天池布匹瑕疵检测

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 今天分享一个非常好的非常小众的研究方向 有应用创新
  • 分布式强一致算法 —— Raft算法

    背景 Paxos算法是最早的强一致性算法 1990年被Leslie Lamport提出 但是由于其难以理解和实现 导致没有被广泛使用 因此 2013年Raft算法被提出 功能与Paxos算法相同 更易于理解 实现简单 因此迅速被广泛推广使用
  • 嵌入式linux驱动之路19:U-Boot 移植(2)

    uboot 的最终目的就是启动 Linux 内核 所以需要通过启动 Linux 内核来判断 uboot 移植是否成功 在启动 Linux 内核之前我们先来学习两个重要的环境变量 bootcmd 和 bootargs bootcmd 环境变量
  • vue3+vite+ts 图标封装3种方案

    目录 一 使用 iconify 图标库 1 下载插件 2 配置 vite config ts 3 使用 3 1 方式 1 3 2 方式 2 二 使用 iconfont 图标库 1 下载 iconfont js 2 将 iconfont js
  • ElementUI 中 Tree 树形控件 添加自定义样式 虚线及图标样式

    修改前样式 修改后样式如图
  • MAC搭建M1环境的stable-diffusion

    MAC M1 搭建 stable diffusion 环境 文章目录 MAC M1 搭建 stable diffusion 环境 环境准备 1 硬件环境 2 系统环境 3 基础软件环境 主要参考资料 操作步骤 1 下载git 2 下载con