MAC搭建M1环境的stable-diffusion

news2024/11/25 20:53:40

MAC M1 搭建 stable-diffusion 环境

文章目录

  • MAC M1 搭建 stable-diffusion 环境
    • 环境准备
      • 1. 硬件环境
      • 2. 系统环境
      • 3. 基础软件环境
    • 主要参考资料
    • 操作步骤
      • 1. 下载git
      • 2. 下载conda
      • 3. 创建python环境
      • 4. 下载仓库
      • 5. 安装依赖
      • 6. 转换模型
      • 7. 验证和测试
      • 8. 构造Web界面
      • 9. 测试WebUI
      • 10. 关闭环境
    • 踩坑日记
      • 1. brew 更新不成功
      • 2. 转换模型报错
      • 3. 网络问题
    • 相关链接

苹果公司的程序员为 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. 系统环境

  • MAC OS 13.4; 至少得升级到 13 版本(Ventura); 参考: System Requirements

3. 基础软件环境

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

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

主要参考资料

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

  • 在搭载 M1 及 M2 芯片 MacBook 设备上玩 Stable Diffusion 模型 - 知乎

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

操作步骤

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 专栏中提到的脚本:

  • python_coreml_stable_diffusion/web.py

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 关闭即可, 或者粗暴一点直接杀进程。

踩坑日记

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. 网络问题

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

相关链接

  • 在搭载 M1 及 M2 芯片 MacBook 设备上玩 Stable Diffusion 模型 - 知乎

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

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

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

相关文章

2023软件测试面试热点问题,3天刷完你的软件测试就牛了~

与开发工程师相比,软件测试工程师前期可能不会太深,但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中,主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试环境搭建问…

2022电工杯数学建模B题解题思路(5G 网络环境下应急物资配送问题)

一、前言 本文是对2022年第十四届 “电工杯” 高校数学建模挑战赛B题:5G 网络环境下应急物资配送问题的解题思路,希望能够对正在学习数学建模或者研究该类问题的读者提供帮助。作者在当届的比赛中,获得了本科组三等奖的成绩&#xff…

【新星计划·2023】Linux是什么?它与Windows有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、Linux是什么? 二、Linux的应用领域 1、服务器领域 2、嵌入式领域 3、虚拟化 三、Linux的未来 1、云计算 2、大数…

Nmap中NSE数据文件分析

Nmap中NSE数据文件分析 1.Nmap中数据文件所在的位置2.暴力穷举时所使用的用户名和密码列表数据文件3.Web应用审计数据文件http-fingerprints.luahttp-sql-errors.lsthttp-web-files-extensions.lsthttp-devframework-fingerprints.luahttp-folders.txtvhosts-default.lstwp-plu…

S32K146入门 遇到 DefaultISR

S32K146入门 遇到 DefaultISR 1、芯片型号没有选对,pin管脚匹配不对 比如我使用的是S32K146HFMLQ,100pin,就要选择对应的型号 2、时钟配置不对 开发板是外部晶振8M,类型要选对。 我选择外部时钟给信号,导致一直出…

Linux使用NDK编译libtiff库并移植到Android平台

1.系统要求: ubuntu 20.04 LTS桌面版本 2.下载libtiff源码: 打开libtiff官方网站 ,打开libtiff源码仓库 http://www.simplesystems.org/libtiff/ 复制下载仓库地址: 克隆源码到本址: git clone --recursive https://gitlab.com/libtiff/libtiff.git 进入源码目录 3.安装…

软件测试需不需要懂代码?

无论是刚入测试行业的萌新,还是已经在测试行业闯荡了两三年的小司机们,都会琢磨一个问题:如果要持续发展下去,我要不要懂代码? 在软件测试初级阶段,不需要编程能力。但是任何一个职业,都会追求…

leetcode90. 子集 II(java)

子集II leetcode90. 子集 II题目描述解题思路代码演示 回溯算法专题 leetcode90. 子集 II 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subsets-ii 题目描述 给你一个整数数组 nums ,其中可能包含重复元素…

00后确实卷,公司新来的卷王,我们这帮老油条还真干不过.....

都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…

Java集合Map接口的实现类(HashMap、LinkedHashMap等面试题)的结构

HashMap /** 一、Map的实现类的结构:* |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y f(x)* |----HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value|…

AIGC之文本内容生成概述(上)

由于本文内容稍微长了一点点,所以分成了上下两篇文章来介绍,本文是上篇,下篇将会在后续发布。关于自然语言的生成方面,这一块的内容太多了,本文也只是穿针引线,帮大家理清学习路线而已,更多的内…

关于ROS/ROS2 bag包的名称修改问题

1 问题的提出 在ROS/ROS2中,ROS 的 bag包的名称通常会包含录制的具体时间:YYYY-MM-DD-小时-分钟-秒钟,但是这样可读性不强,而且过一段时间,就不知道这个包是关于什么内容的了。如果需要修改bag包的名称,该…

从0开始,手写MySQL事务

说在前面:从0开始,手写MySQL的学习价值 尼恩曾经指导过的一个7年经验小伙,凭借精通Mysql, 搞定月薪40K。 从0开始,手写一个MySQL的学习价值在于: 可以深入地理解MySQL的内部机制和原理,Mysql可谓是面试的…

渲染机制不仅在Android系设计到,Flutter中也有设计

前言 本文将介绍 Android 的渲染机制。主要是带着大家了解 Android 是如何绘制并显示一帧图像的,同时会涉及 Skia底层渲染的使用,以及关联到flutter的UI体系设计,感兴趣的可以在阅读的同时使用 Skia自己搭建一套flutter UI体系 进行尝试。在…

# Linux 学习记录37(C高级篇)

Linux 学习记录37(C高级篇) 本文目录 Linux 学习记录37(C高级篇)一、常见的shell解析器二、变量1. shell脚本外部传参2. 输入输出(1. 输出(2. 输入 3. 命令置换符4. shell中的数组 三、shell中的算数运算1. (())运算2. $[ ]运算3. let运算4. expr指令(1.数据运算(3. 字符运算 四…

Flink 学习一 Flink 简介

Flink 学习一 https://flink.apache.org/ 1.快速认识Flink 1.1 离线批计算与实时流式计算 批计算:有界流 流式计算:无界流 批计算:针对有界流,在计算结果前可以看到整个数据集;流计算:针对无界流&…

Nacos的安装和部署

接下来的时间,我会将Nacos的安装部署,以及在微服务中将其作为配置中心,注册中心,以及它的高级应用会一一为大家分享,今天为大家分享的是Nacos的安装和部署,以windows为例。 1. 下载安装包 官网下载地址&a…

LaTeX在双栏文章里面放单栏或双栏图片【有图有代码】

LaTeX在双栏文章里面放单栏或双栏图片【有图有代码】 双栏文章双栏文章放单栏图片双栏文章放单栏图片 双栏文章 在需要双栏的地方加入\begin{multicols}{2}…\end{multicols} 一般我们可能会希望摘要部分是单栏的。 其余部分设置为双栏,如下: \begin{m…

wxPython 矩形选择框 测试

如下图&#xff0c;这种矩形选择框在图形软件里是必备操作&#xff0c;用python怎么实现&#xff1f;我用wxpython 做了一个例子。 代码如下&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-# Project: test # File : SelectRectang.py # Author : Long.Xu <…

违禁词管理

目录 一、添加违禁词 1.添加一个违禁词 2.批量添加违禁词 二、违禁词实时检测 三、查看违禁词 四、删除违禁词 1.删除一个违禁词 2.批量删除违禁词 五、清空违禁词 一、添加违禁词 1.添加一个违禁词 添加违禁词 ?([\s\S]*) b:$读 违禁词/%群号% a []$ 如果:%括号1% 请…