MACBOOK PRO M2 MAX 安装Stable Diffusion及文生图实例

news2025/6/20 8:11:57

以前偶尔会使用Midjourney生成一些图片,现在使用的头像就是当时花钱在Midjourney上生成的。前段时间从某鱼上拍了一台性价比还不错的macbook,想着不如自己部署Stable Diffusion(以下简称SD)尝试一下。

网上有很多教程,但是SD持续在更新,仍然碰到了很多新的问题,花了大半天才搞定。最后更新时间:2024年3月9日。

1. 设备

型号:macbook pro 14寸

CPU:M2 MAX (12+38)

内存:96G

硬盘:8T

操作系统:maxOS 14.3.1

2. 安装过程

2.1. 参考官方教程

Installation on Apple Silicon · AUTOMATIC1111/stable-diffusion-webui Wiki · GitHub

2.2. 安装brew

使用国内的安装源,我使用的是中科大,速度还不错。根据提示一路下去就行。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

配置环境变量

echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.bash_profile 
source ~/.bash_profile

echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc   
source ~/.zshrc

2.3. 安装GIT等依赖

比官方教程少了git,因为我的git使用anaconda来安装和隔离。

brew install cmake protobuf rust git wget

2.4. 安装anaconda

因为python版本有多种,一些软件又依赖特定的版本,所以使用anaconda进行隔离。

brew install --cask anaconda

echo 'export PATH="/opt/homebrew/anaconda3/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc
conda init zsh
conda create --name sdwebui python=3.10.6

conda activate sdwebui

2.5. 下载stable-diffusion-webui

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

2.6. 下载模型

训练或微调模型对我来说过于复杂,所以我直接下载了几个模型试用。

国外的站点:https://civitai.com/

国内的站点:LiblibAI·哩布哩布AI - 中国领先的AI创作平台

试用的话,两个网站下载都比较快,根据自己的喜好就行。其中liblib当前支持不需要登录就能下载,更方便一些。

下载完成后,放到:“./stable-diffusion-webui/models/Stable-diffusion/”目录下。我下了好几个模型做测试用。

2.7. 启动及排错

进入目录“./stable-diffusion-webui/”,启动“./webui.sh”。

./webui.sh

2.7.1. 下载报错

启动后,会自行安装很多依赖包,但网络不好时,容易出现下载失败,需要多次重试。

经实践发现,建议早上安装。晚上网络特别差,经常下载到一半就被断掉,尝试了十几次都失败。最后在早上只重试了两次,就成功。

2.7.2. 缺少openai/clip-vit-large-patch14类库

各依赖下载完成后,在启动时报“OSError: Can't load tokenizer for 'openai/clip-vit-large-patch14'.”。

解决方案:手动下载https://huggingface.co/openai/clip-vit-large-patch14/tree/main,并放到:“stable-diffusion-webui/openai ”目录下,如果目录不存在就创建。

需要先安装git-lft,否则会报:“git-lfs filter-process: git-lfs: command not found”。

安装脚本:

brew install git-lfs
git lfs install

重新下载,报没有权限,需要生成ssh公私钥,再上传到站点。

先在本地生成ssh 公私钥,使用命令行窗口执行:

git config --global user.name "yinmo"
git config --global user.email "yinmo_sc@foxmail.com"
ssh-keygen -t rsa -C "yinmo_sc@foxmail.com"
ssh-add ~/.ssh/id_rsa

通过cat ~/.ssh/id_rsa.pub展示公钥内容,复制放到https://huggingface.co中的SSH and GPG Keys中配置。

重新下载成功,并复制到“./stable-diffusion-webui/openai/”目录下。

重新运行“./webui.sh”,成功的话,会自动打开游览器:http://127.0.0.1:7860/。

2.8. 安装中文包

默认是英文界面,网上有些简洁的办法安装中文界面,我安装失败,所以手动安装。

打开“Extensions->Available”,找到:https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui-extensions/master/index.json,使用浏览器打开。

搜索“chinese”,找到"https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN",使用游览器打开并下载。

下载后解压放到目录“./stable-diffusion-webui/extensions-builtin/”下面。

进入“Setting -> User Interface -> User Interface -> Localization”,选择“zh_CN”,保存配置,重新加载UI。

出现中文界面。

3. 测试数据

试用模型“epicrealismXL_v4Photoreal”,生成样例如下:

试用了“LEOSAM HelloWorld SDXL真实感大模型_v5.0.safetensors”,生成样例如下:

4. 整体感受

如果生成的图片比较小,一次只生成一张图,基本上是秒出,且内存消耗在20G左右。如果图片比较大,且一次生成多张,就会比较耗时和耗内存。

现在网上已经有很多公开的模型,根据自己的需求采用不同的模型,比如有真实感的,有二次元的,有建筑的,有电影风格的等等。

如果想生成精美的图,往往需要多个模型配合,比如上面的熊猫,还需要其它一些模型修饰。

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

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

相关文章

四个领域,企业官网依然无可替代。

2023-10-23 14:17贝格前端工场 企业官网在以下领域无可替代: 专业性强的领域:如金融、法律、医学等,这些领域专业性很强,需要权威、专业的官网来提供详细、准确的信息1。需要展示企业形象、实力的领域:如制造业、房地…

【2023最全kafka面试和答案】

2023最全kafka面试和答案 ​ 1.Kafka中的ISR(InSyncReplicate)、OSR(OutSyncReplicate)、AR(AllReplicate)代表什么? ISR : 速率和leader相差低于10秒的follower的集合OSR : 速率和leader相差大于10秒的followerAR : 所有分区的followerARISROSR 2.Kafka中的HW、L…

Flink 学习3 - 流处理API的基本转换算子 + 多流转换算子

流处理API-Transform 1、基本转换算子 map、flatMap、filter通常被统一称为基本转换算子(简单转换算子) DataStream 里没有 reduce 和 sum 这类聚合操作的方法,因为 Flink 设计中,所有数据必须先分组才能做聚合操作。 先 keyB…

Java设计模式:建造者模式之经典与流式的三种实现(四)

本文将深入探讨Java中建造者模式的两种实现方式:经典建造者与流式建造者。建造者模式是一种创建型设计模式,它允许你构建复杂对象的步骤分解,使得对象的创建过程更加清晰和灵活。我们将通过示例代码详细解释这两种实现方式,并分析…

图分割 Graph Partition 学习笔记1

文章目录 前言一、graph-partition是什么?二、具体分类三、graph-partition的意义参考链接 前言 最近在学习图论划分的方法,碰巧搜索到了这个算是对我而言全新的一个体系,在这里将逐步记载自己的学习资料和进度,希望和大家一起探讨…

《汇编语言》第3版(王爽)实验9

第9章 实验9 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 ‘welcome to masm!’ assume cs:code,ds:datadata segmentdb welcome to masm!,0 data endscode segmentstart:mov ax,data mov ds,ax ;ds指向data段mov ax,0B800H ;显存空间从B800H…

波奇学Linux: 信号捕捉

sigaction:修改信号对应的handler方法 act输入型参数&#xff0c;oldact输出型参数 void (*sa_handler) (int) //修改的自定义函数 sigset_t sa_mask // void handler(int signo) {cout<<"catch a signal, signal number: "<<signo<<endl; } int …

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…

记录一次排查负载均衡不能创建的排查过程

故障现象&#xff0c;某云上&#xff0c;运维同事在创建负载均衡的时候&#xff0c;发现可以创建资源&#xff0c;但是创建完之后&#xff0c;不显示对应的负载均衡。 创建负载均衡时候&#xff0c;按f12发现console有如下报错 后来请后端网络同事排查日志发现&#xff0c;是后…

机器学习--循环神经网络(RNN)3

本篇文章结合具体的例子来介绍一下LSTM运算方式以及原理。请结合上篇文章的介绍食用。 一、具体例子 如上图所示&#xff0c;网络里面只有一个 LSTM 的单元&#xff0c;输入都是三维的向量&#xff0c;输出都是一维的输出。 这三维的向量跟输出还有记忆元的关系是这样的。 假设…

【蓝桥杯】k倍区间

一.题目描述 二.问题分析 对于该问题&#xff0c;标签上写的是暴力&#xff0c;但是如果使用暴力的话&#xff0c;会超时。 首先&#xff0c;对于两个数a&#xff0c;b&#xff08;假设a小于b&#xff09;&#xff0c;若a与b对k取余后结果相同&#xff0c;则b-a可以整除k。 …

Edu 18 Colored balls -- 题解

目录 Colored Balls&#xff1a; 题目大意: 思路解析&#xff1a; 代码实现&#xff1a; Colored Balls&#xff1a; 题目大意: 思路解析&#xff1a; 我们对于一个数n&#xff0c;如果分组大小超过了 根号n&#xff0c;那么便不可能将n 分为多个组&#xff0c;并且组间差距…

苍穹外卖学习-----2024/03/09

1.菜品分页查询 代码在这里 分页查询菜品 2.删除菜品 [链接]param 1、概览 本文将带你了解 Spring 中 RequestParam 注解的用法。 简单地说&#xff0c;可以使用 RequestParam 从请求中提取查询参数、表单参数甚至是多个参数。 2、示例端点 假设我们有一个端点 /api/foos&a…

qt一个项目只能有一个QMainWindow,其他小窗口只能继承QWidget

我继承QMainWindow&#xff0c;结果就出现奇奇怪怪的现象&#xff0c;我人都疯了 这些接口全他妈不能用 删了换成QWidget就可以用了

重建大师下图界面上的颜色区域分别代表着什么?

分别代表相对精度、绝对精度。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;可一键完成空三、自动建模和LOD构建。 下载地…

idea连接远程服务器

1. 双击shift&#xff0c;出现如下界面 2. 远程连接 原文来自这个up主的&#xff0c;点击蓝色字体就可以跳转啦&#xff01; 输入主机ip、用户名、密码&#xff0c;点击Test Connection验证&#xff0c;最后点击ok添加成功 有用的话记得给俺点个赞&#xff0c;靴靴~

赶紧来学Python回调函数

在Python中&#xff0c;回调函数是一种非常重要的编程概念&#xff0c;它允许我们将一个函数作为参数传递给另一个函数&#xff0c;并在需要时由另一个函数调用。回调函数的使用可以使代码更加灵活和可重用&#xff0c;尤其在异步编程、事件驱动编程中非常常用。 1.普通函数调…

波动数列 刷题笔记

思路分析 dp 找出状态转移方程 设d为a或者-b 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N1010,MOD100000007; int get_mod(int a,int b){ return (a%bb)%b; …

悲观锁和乐观锁

悲观锁&#xff1a;比较悲观&#xff0c;认为线程安全问题一定会发生&#xff0c;因此在操作数据之前先获取锁&#xff0c;确保线程串行执行。-例如Synchronized、Lock都属于悲观锁。 乐观锁&#xff1a;比较乐观&#xff0c;认为线程安全问题不一定会发生&#xff0c;因此不加…

数论<1>——数论基础

这期博客是一个数论入门介绍&#xff0c;dalao们可以自动忽略。 Part 1:素数(质数) 说到数论&#xff0c;小学奥数里也有。我最先想到的就是质数了。素数就是一个只能被1和它自己整除的数。判断的方法也很简单&#xff0c;可以扫一遍就结束了&#xff0c;但是没必要。由于一个…