Stable diffusion安装踩坑(winMaciOS)

news2025/7/11 18:27:31

今天Apple官方支持了这个库,所以特意下载下来试试看,效果还不错,M芯片在深度学习领域第一次给人惊喜了。
https://machinelearning.apple.com/research/stable-diffusion-coreml-apple-silicon

1.win使用

安装

分享一下一个有意思的库的安装经历。
最近才发现有大神将这种生成模型给开源了,之前一直关注DELL这种的大型模型,被ai这种天马行空的想象力给惊艳到。但他们大都只是api接口,现在贫民百姓也可以自己拥有。<笑脸>

下载库

去github网址下载 - > https://github.com/CompVis/stable-diffusion

git clone https://github.com/CompVis/stable-diffusion.git

配置环境和文件

简单的操作,在下载后的文件夹下直接输下面两个

conda env create -f environment.yaml
conda activate ldm

就配置好了。
或者就像我一样傻傻的报错一个安装一个。
我本身的环境是pytorch torchvision

pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .
pip install OmegaConf einops taming-transformers pytorch-lighnting clip kornia

问题

第一个问题官网是有说明的,但就是这个下载地址藏得很深不好找。
在这里插入图片描述
我也是找了一会才找到https://huggingface.co/CompVis/stable-diffusion-v-1-4-original,把这个sd-v1-4.ckpt文件下载下来(随便哪个都行),大概四个G。
在这里插入图片描述

下载模型文件放置到这个文件夹下,就是上面官方说明的那个位置,命名成model.ckpt。
在这里插入图片描述
运行下面的代码,不出意外会报错。

python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms

在这里插入图片描述

问题好像是原作者修改了这个库,将你的quantize.py(报错的信息里包含文件所在的绝对路径)文件替换成这个网址的文件
https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py
在这里插入图片描述

再运行一次又报错
在这里插入图片描述
我只是12g的3060,看来这不是一般人能玩得起的-_-
!!!!!!!!!!!!!!!!
现在有一个简单的办法了,感谢数学系之耻的建议,直接降精度就可以释放显存了。
!!!!!!!!!!!!!!!!
如下修改txt2img.py文件第244行
在这里插入图片描述
效果 -->
在这里插入图片描述

或者接下去看比较复杂的方法!
不知道需要多大的内存才可以,网上找到方法是用优化的库。网上还有一种办法说注释掉什么安全检查的我试了没有变化。
https://github.com/basujindal/stable-diffusion
下载完后在新的库上也是需要安装一些环境,在新的文件夹下运行下面的安装代码

pip install -e .

在这里插入图片描述
优化的库代码放在optimizedSD文件夹下,也保留了之前的源代码,不要搞错了。
重新安装一下这个优化库的环境,将ckpt放到对应的位置。

python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style image of a Tesla car reflection in rain" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 5 --ddim_steps 50

运行后报这个错。
在这里插入图片描述

查了一下,好像是最近优化的作者也换了一个库
https://github.com/basujindal/stable-diffusion/issues/175
用下面的办法就能解决了。
在这里插入图片描述

pip install git+https://github.com/crowsonkb/k-diffusion.git

然后打开编辑optimizedSD/ddpm.py文件,将from samplers…改成上面图片的三个from k_diffusion…
然后贫穷的显卡的电脑也就可以跑了,不说了要努力搬砖买24g的显卡了。
实测效果 -->
在这里插入图片描述
在这里插入图片描述

2.mac使用

安装

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

git clone https://github.com/apple/ml-stable-diffusion
pip install -e . #来到下载好的文件夹下面运行

在这里插入图片描述

登陆hugging face

https://huggingface.co
没有的话直接注册,注册好了以后点击token生成https://huggingface.co/settings/tokens,然后复制token
在这里插入图片描述

接下去命令行输入指令,按提示输入

huggingface-cli login

在这里插入图片描述

运行指令

在文件夹下运行,顺便创建一个放置ml模型的文件夹,替换下面的-o

python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o ./output_ml

官方还给了一个api

--model-version runwayml/stable-diffusion-v1-5 #可以指定其他版本的diffusion模型,默认是 CompVis/stable-diffusion-v1-4
--bundle-resources-for-swift-cli  #将ml文件整理成一个swift包,python生成不需要使用
--chunk-unet #ios和ipados部署需要,后面两个之后有机会我想去尝试一下在真机上的部署
--attention-implementation #在Apple芯片上的npu上实现

如果想部署手机和平板可以参考下面这个

python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o ./sd2_ml --chunk-unet --model-version stabilityai/stable-diffusion-2-1-base --bundle-resources-for-swift-cli

在这里插入图片描述
大约20几分钟吧,会生成这些文件
在这里插入图片描述

接着还是在ml-stable-diffusion的文件夹下运行,对了再创建一个放图片的文件夹。

python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" -i ./output_ml -o ./output_image --compute-unit ALL --seed 93

swift用下面这个

swift run StableDiffusionSample "A photo of a little girl walking on the beach with the Jenny Turtle" --resource-path ./sd2_ml/Resources/ --seed 93 --output-path ./output_image

在这里插入图片描述

--model-version #如果前面修改了这个也要修改
--num-inference-steps #默认推理50次,用这个可以自定义次数

我是M2的MacBook Air,我参考了官方的基准指南--compute-unit 选择了CPU_AND_NE,大概21秒一个推理还是蛮快的(python),swift 2秒左右一个step,快了很多。
在这里插入图片描述

在这里插入图片描述

就是从上图中我们可以看到似乎无后缀的M芯片由于GPU数量较少吧我猜--compute-unit 都推荐选CPU_AND_NE,pro系列芯片选ALL,以上选CPU_AND_GPU
--attention-implementation 直接看GPU核心数,小于等于16个使用SPLLIT_EINSUM,就是默认的其实啥也不用加。大于16个使用ORIGINAL。我猜因为M芯片是16核NPU的,GPU核心数比NPU小那肯定用NPU,GPU核心数大大超过NPU,那还是GPU的效率更高吧。
在这里插入图片描述

3.iphone&ipad部署

打开Xcode,导入库和上面生成的ML文件
在这里插入图片描述

import SwiftUI
import StableDiffusion
import CoreML

struct ContentView: View {
    @State var prompt: String = "a photo of an astronaut riding a horse on mars"
    @State var step = 10
    @State var seed = 100
    @State var image: CGImage?
    @State var progress = 0.0
    @State var generating = false
    @State var booting = true
    
    @State var pipeline: StableDiffusionPipeline?
    
    private let disableSafety = false

    
    var body: some View {
        VStack {
            if booting {
                Text("Initializing...")
            } else {
                if let image {
                    Image(uiImage: UIImage(cgImage: image))
                        .resizable()
                        .scaledToFit()
                }
                if generating {
                    ProgressView(value: progress)
                }
                if !generating {
                    TextField("Prompt", text: $prompt)
                    Stepper(value: $step, in: 1...100) {
                        Text("steps: \(step)")
                    }
                    Stepper(value: $seed, in: 0...10000) {
                        Text("Seed: \(seed)")
                    }
                    Button("Generate") {
                        progress = 0.0
                        image = nil
                        generating = true
                        Task.detached(priority: .high) {
                            var images: [CGImage?]?
                            do {
                                print("generate")
                                images = try pipeline?.generateImages(prompt: prompt, stepCount: step,seed: seed, disableSafety: disableSafety, progressHandler: { progress in
                                    print("test")
                                    self.progress = Double(progress.step) / Double(step)
                                    if let image = progress.currentImages.first {
                                        self.image = image
                                    }
                                    return true
                                })
                            } catch let error {
                                print(error.localizedDescription)
                            }
                            print("finish")
                            if let image = images?.first {
                                self.image = image
                            }
                            generating = false
                        }
                    }
                }
            }
        }
        .padding()
        .onAppear{
            Task.detached(priority: .high) {
                do {
                    print(os_proc_available_memory())
                    guard let path = Bundle.main.path(forResource: "CoreMLModels", ofType: nil, inDirectory: nil) else {
                        fatalError("Fatal error: failed to find the CoreML models.")
                    }
                    let resourceURL = URL(fileURLWithPath: path)
                    let config = MLModelConfiguration()
                    config.computeUnits = .cpuAndNeuralEngine
                    pipeline = try StableDiffusionPipeline(resourcesAt: resourceURL, configuration: config,reduceMemory: true)
                    try pipeline?.loadResources()
                    print("initialized pipeline")
                } catch let error {
                    print("error initializing pipeline")
                    print(error.localizedDescription)
                }
                booting = false
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在iPad和Mac上建议config.computeUnits = .cpuAndNeuralEngine。如果要继续在iPhone上部署的话改为这个config.computeUnits = .cpuAndGPU,然后来到Signing界面,点击Capability,选择Increased Memory Limit。这样就可以在iPhone真机上运行了。这个项目在iPhone真机上需要3GB多一点的内存,我是iPhone 14pro,程序默认可用内存也是3GB多一点刚好杀死。所以通过Increased Memory Limit将可用内存提升至4GB左右才可以运行。另外,即使提升了内存使用神经引擎还是会抱内存错误,只有用GPU才可以,iPad air5没有这种报错两个都可。GPU的运行速度是比神经引擎慢一点的,但是一台手机可以本地运行diffusion还是蛮酷的。
在这里插入图片描述

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

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

相关文章

算法的效率——时间复杂度和空间复杂度

文章目录1. 算法效率1.1 什么是算法1.2 算法的好坏2. 时间复杂度2.1 什么是时间复杂度2.2 时间复杂度的计算方法2.3 大O的渐进表示法2.4 常见时间复杂度计算举例3. 空间复杂度4. 常见复杂度对比1. 算法效率 1.1 什么是算法 目前普遍认可对算法的定义是&#xff1a;算法是解决…

通过CSS,H5,JavaScript实现表格表单的随机选择,和简单的随机点名。

目录 一、表格表单的随机选择 效果展示&#xff08;表单内容可以根据自己需要进行修改&#xff09; 1.H5的布局 第一步&#xff1a; 第二步&#xff1a; 2.CSS布局 3.JS的布局 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 二、简单的随机点名 效果展…

软件测试简历项目经验怎么写,没有项目经验?

怎么办&#xff1f;只能接受低薪工作吗&#xff1f;No No No。本文就教大家如何解决这个问题。 为了帮助大家彻底解决“没有项目”这个拦路虎&#xff0c;接下来文章将从以下几个方面进行展开&#xff1a; 1、应该去哪找项目&#xff1f; 2、在众多的项目中&#xff0c;该怎么…

【AI作画】使用stable-diffusion-webui搭建AI作画平台

一、安装配置Anaconda 进入官网下载安装包https://www.anaconda.com/并安装&#xff0c;然后将Anaconda配置到环境变量中。 打开命令行&#xff0c;依次通过如下命令创建Python运行虚拟环境。 conda env create novelai python3.10.6E:\workspace\02_Python\novalai>conda…

基于FPGA 的TDC设计更好的选择——易灵思Quantum架构FPGA

时间数据转换器(TDC)常被用于测量时间间隔&#xff0c;被广泛应用于飞行时间测量领域。分辨率是一个重要的参数&#xff0c;但TDC线性度将直接影响整个系统的精度。尤其是近年来迅猛增长的汽车自动驾驶&#xff08;ADAS&#xff09;领域&#xff0c;利用光测距的激光雷达&#…

GCN-图卷积神经网络算法简单实现(含python代码)

本文是就实现GCN算法模型进行的代码介绍&#xff0c;上一篇文章是GCN算法的原理和模型介绍。 代码中用到的Cora数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1SbqIOtysKqHKZ7C50DM_eA 提取码&#xff1a;pfny 文章目录 目的 一、数据集介绍 二、实现过程讲…

[闪存 2.1] 闪存芯片物理结构与_SLC/MLC/TLC/QLC

固态硬盘(Solid State Drives),简称SSD。它是一种电脑存储设备,由闪存(FLASH)、 闪存控制器、高速缓存(DRAM)组成。这是是固态硬盘的三个基本部件,对性能有关键影响。 闪存芯片简介闪存颗粒是固态

MySQL数据库的基础语法总结(1)

MySql一.数据库,数据表的基本操作1.数据库的基本操作2. 数据表的基本操作2.1 数据库的数据类型2.1.1 整数类型2.1.2 浮点数类型和定点数类型2.1.3 字符串类型2.1.4 日期与时间类型2.2 数据表的基本操作2.2.1 创建一个数据表2.2.2 查看数据表2.2.3 查看表的基本信息的MySQL指令2…

设计模式(上)

目录 1.设计模式概述 1.什么是设计模式 2.学习设计模式的意义 3.23种设计模式 4.七大设计原则 2.创建者模式 1.单例模式 2.工厂模式 3.抽象工厂模式 4.建造者模式 5.原型模式 3.结构型模式 1.适配器模式 2.桥接模式 3.代理模式 4.组合模式 5.装饰模式 6.享元…

[架构之路-24]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 程序控制、函数调用栈、函数调用性能优化

目录 前言&#xff1a; 第1章 结构化程序与分层编程系统 1.1 计算机软硬件模型 1.2 程序的经典框架&#xff1a;算法数据结构 1.3 程序的结构化框架 1.4 程序的层次模型 1.5 程序设计的层次模型 第2章 C语言概述 2.1 C语言本质 2.2 C语言关键字 2.3 C语言在编程语言的…

js算法 字母大小写转换

题目&#xff1a;输入字符串将大写转换成小写&#xff0c;小写转换成大写&#xff1f; js字母大小写转换方法&#xff1a; 1、转换成大写&#xff1a;toUpperCase() 2、转换成小写&#xff1a;toLowerCase()方法一&#xff1a;把输入的字符串转成数组用split&#xff08;&…

chatgpt 无法登录报错Access denied、OpenAl‘s services are not available in yourcountry. (error=unsupported )

一、主要解决有账号无法登录问题&#xff0c;共包含两种情况。 1、Oops! OpenAls services are not available in yourcountry.(errorunsupported country) 2、Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that p…

Linux命令之nano命令

一、nano命令简介 nano是一个小型、免费、友好的编辑器&#xff0c;旨在取代非免费Pine包中的默认编辑器Pico。nano不仅复制了Pico的外观&#xff0c;还实现了Pico中一些缺失&#xff08;或默认禁用&#xff09;的功能&#xff0c;例如“搜索和替换”和“转到行号和列号”。nan…

Element Plus的el-tree-select组件,懒加载 + 数据回显

目录一、背景说明二、使用1. dom2.methods三、回显一、背景说明 技术&#xff1a;Vue3 Element Plus需求&#xff1a;在选择组织机构时以树结构下拉展示。用到组件&#xff1a;TreeSelect 树形选择组件&#xff08;el-tree-select&#xff09; 官网文档地址&#xff1a; ht…

Vue如何启动项目

文章目录 文章目录 前言 一、首先了解vue-cli脚手架 二、安装脚手架 三、启动项目 总结 前言 废话就不多说了&#xff0c;直接进入正题 一、首先了解vue-cli脚手架 vue-cli 是一个基于 Vue.js 进行快速开发的完整系统 vue-cli是 基于 webpack 构建 vue 前端模块工程环境webpa…

Vue.js介绍

目录 一、 Vue.js是什么 二、 Vue.js优点 三、 前提条件 四、 安装Vue 1. 直接用 script 标签 引入 2. 命令行工具 (CLI) 3. 其他方法或细节应用 五、声明式渲染 六、 理解什么是MVVM MVVM模式的组成部分 MVVM优点 一、 Vue.js是什么 Vue.js (vue读音 /vjuː/&am…

【CSS扩展】VUE如何使用或修改element plus中自带的CSS全局变量来定义样式

目录 一、CSS声明全局变量 二、使用el plus 和 el ui的自带样式 1、element plus—— var.scss位置 2、element ui—— var.scss位置 三、修改el plus 和 el ui中的自定义样式变量&#xff08;方法一致&#xff09; 本萌新最近在写网页时使用到了element plus中自带的CSS全…

Vue中如何解决跨域问题

跨域 跨域报错是前端开发中非常经典的一个错误&#xff0c;报错如下 Access to XMLHttpRequest at ...... from origin ...... has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 跨域错误源自于浏览器的同源…

《中秋佳节倍思亲》——2022年这场中秋

中秋佳夜&#xff0c;圆的是月&#xff0c;满的是情&#xff0c;但一人终究扛下离愁 作为一个杭漂者&#xff0c;虽不及北漂般艰难困苦&#xff0c;但也举步维艰啊&#xff01; 或许&#xff0c;这对我而言&#xff0c;正是一个别样的中秋&#xff0c;也正是一个值得我一生纪念…

多端统一开发解决方案---Taro

Taro 一套代码&#xff0c;多端运行&#xff0c;释放双手的摸鱼神器 文章目录Taro 一套代码&#xff0c;多端运行&#xff0c;释放双手的摸鱼神器1. 简介2. 准备工作2.1 安装及使用2.1.1 开发者工具2.1.2 tarojs2.1安装tarojs工具3. Taro 使用4.限制5.路由跳转汇总6.注意事项7.…