我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Stable diffusion安装踩坑(win&Mac&iOS)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Stable diffusion安装踩坑(win&Mac&iOS)

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

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

下载库

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

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

配置环境和文件

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

conda env create -f environment.yamlconda activate ldm

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

pip install transformers==4.19.2 diffusers invisible-watermarkpip 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的显卡了。
实测效果 -->
在这里插入图片描述
在这里插入图片描述

安装

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

git clone https://github.com/apple/ml-stable-diffusionpip 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的效率更高吧。
在这里插入图片描述

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

import SwiftUIimport StableDiffusionimport CoreMLstruct 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还是蛮酷的。
在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_45569617/article/details/126873709

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Stable diffusion安装踩坑(win&Mac&iOS)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mac安装Stable Diffusion教程【超详细教程】附带安装包

Mac安装Stable Diffusion教程 本机配置Mac安装Stable Diffusion教程 配带官方说明重要注意事项安装所需文件已整理安装地址自动安装新安装: 自动安装现有安装: 下载稳定扩散模型故障排除We
2023-08-19

【Mac M1】安装stable diffusion webui教程及问题集锦

这里写自定义目录标题 我的配置MacBookPro 14 M1安装视频教程可参考如下链接:主播讲的挺清楚安装步骤:第一步:安装homebrew第二步:安装pytorch第三步:安装stable diffusion webui第四步
2023-08-21

M2芯片的Mac上安装Linux虚拟机——提前帮你踩坑 ➕ 安装ubuntu虚拟机图形化 ➕ 解决MacOs主机和WmwareFusion/UTM 之间不能复制粘贴问题

M2芯片的Mac上安装Linux虚拟机——提前帮你踩坑 ➕ 安装ubuntu虚拟机图形化 ➕ 解决MacOs主机和WmwareFusion/UTM 之间不能复制粘贴问题 1. 前言1.1 系统说明1.2 Linux系统选择——提前避
M2芯片的Mac上安装Linux虚拟机——提前帮你踩坑 ➕ 安装ubuntu虚拟机图形化 ➕ 解决MacOs主机和WmwareFusion/UTM 之间不能复制粘贴问题
2023-12-23

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录