Stable Diffusion Windows本地部署超具体教程(手动+自动+整合包三种方式) ...

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

一、 Stable Diffusion简介

        2022年作为AIGC(Artificial Intelligence Generated Content)期间的元年,各个领域的AIGC技术都有一个迅猛的发展,给工业界、学术界、投资界乃至竞赛界都注入了新的“AI活力”与“AI势能”。
       其中在AI绘画领域,Stable Diffusion当仁不让地成为了开源社区中一连繁荣的AI绘画核心模子,而且快速破圈,让AIGC的ToC大概性比肩移动互联网期间的产品,每个人都能感受到AI带来的气力与影响。Stable Diffusion由CompVis研究职员创建的重要用于文本天生图像的深度学习模子,与初创公司StabilityAI、Runway合作开辟,并得到EleutherAI和LAION的支持,它重要用于根据文本的形貌产生具体图像,也就是常说的txt2img的应用场景中:通过给定文本提示词(text prompt),该模子会输出一张匹配提示词的图片。例如输入文本提示词:A cute cat,Stable Diffusion会输出一张带有可爱猫咪的图片(如下图)。

        Stable Diffusion(简称SD)是AI绘画领域的一个核心模子,与Midjourney不同的是,Stable Diffusion是一个完全开源的项目(模子、代码、练习数据、论文、生态等全部开源),可拓展性强、 出图服从高、 数据安全保障,这使得其能快速构建强大繁荣的上下游生态,而且吸引了越来越多的AI绘画爱好者参加其中,与AI行业从业者一起推动AIGC领域的发展与普惠。可以说,AI绘画的ToC普惠在AIGC期间的早期就已经显现,这是之前的传统深度学习期间从未有过的。
        Stable Diffusion模子基于一个扩散过程,逐步从噪声中规复出图像信息。在练习阶段,模子会学习怎样逐步将噪声转化为真实的图像数据;而在天生阶段,模子则可以从随机噪声出发,通过反向的扩散过程,天生出与练习数据分布相似的图像。Stable Diffusion重要由变分自编码器(VAE)、U-Net和一个文本编码器三个部分组成。在前向扩散过程中,高斯噪声被迭代地应用于压缩的潜在表征。每个去噪步骤都由一个包含残差神经网络(ResNet)的U-Net架构完成,通过从前向扩散往反方向去噪而得到潜在表征。最后,VAE解码器通过将表征转换回像素空间来天生输出图像。

   
       我们可以通过官方网站 Stability AI,以及Dream Studio、Replicate、Playground AI、Baseten等网站在线体验Stable Diffusion的巨大威力。但是,一方面国外的网站访问究竟还是不方便(经常必要科学上网,你懂的),另一方面也不想让自己的一些“幼稚”想法被他们“窃取”。相比于集成在网络平台的SD或者其他AI绘画平台来说,自部署平台没有天生数量的限定,不用花钱,不用被NSFW束缚,天生时间快,不用排队,自由度高,而且功能完备,插件丰富,可以调试和个性化的地方也更多;更稳固,也更容易让SD变成生产力或者贸易化利用。既然这样,那就白手起家,在本机上自己部署一个,可以为所欲为地玩图、玩图...。

二、Stable Diffusion v2安装

1.  安装前的准备

       现有深度学习练习和部署情况在硬件上一样寻常基于Nvidia GPU,在底层必要显卡驱动和CUDA工具包(必要包含配套版本的cuDNN),在应用软件层面必要Python编译和解释器,以及基于Python的深度学习框架(如Pytorch、TensorFlow等)。同时,为了方便代码自动下载和程序模块化管理,通常还必要安装git和conda软件。笔者(Sheex2012)主机配备了RTX 4070Ti 12G显卡,并事先安装了CUDA 12.1,Python 3.11.6,git 2.44,Pytorch 2.1.2,可以或许满意Stable Diffusion情况要求。本文重点聚焦Stable Diffusion推理程序的部署,硬件需求确认和底子软件的安装这里不再赘述。
2. 下载和部署Stable Diffusion

         我们从Stability.AI的github官方开源Stability.AI Stablediffusion下载源码:
  1. git clone https://github.com/Stability-AI/stablediffusion.git
复制代码
固然,也可以从网页上以下载源码ZIP包,解压缩到本地。

         源码下载完成后,接下来必要安装项目标依赖项:
  1. pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  
复制代码
然后从huggingface下载预练习模子v2-1_768-ema-pruned.ckpt,并存放到checkpoints文件夹中。
3. 运行Stable Diffusion

         部署完成后,运行下述脚本,天生图片:
  1. python ./scripts/txt2img.py --prompt "a professional photograph of an astronaut riding a horse" --ckpt ./checkpoints/v2-1_768-ema-pruned.ckpt --config ./configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768
复制代码
        可是,报错了:
  1. No module named 'ldm'
复制代码
        这个应该是目次布局的题目,将ldm拷贝/移动到script文件夹,再来一次,不出意外,还是有点小意外,内存不敷了:
  1. torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 9.49 GiB. GPU 0 has a total capacty of 11.99 GiB of which 0 bytes is free. Of the allocated memory 14.77 GiB is allocated by PyTorch, and 9.52 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
复制代码
        那就把图像的尺寸调解成512x512,题目办理了。

        这是天生的图片(存放在outputs\txt2img-samples文件夹中):

三、 Stable Diffusion WebUI 安装

       Stable Diffusion只是提供一个模子,提供底子的文本分析、特征提取、图片天生这些核心功能,但自身是没有可视化UI的,用起来就是各种文件加命令行。原始的Stable Diffusion程序(脚本)只能以命令行的方式进行,参数设置很不方便,而且每次调用时,必要事先加载预练习模子,图像天生完成后会释放内存中的模子并竣事历程,运行服从低,交互操作极其贫苦。
       开源的 Stable Diffusion 社区受到了广泛民间开辟者大力支持,众多为爱发电的程序员自告奋勇的为其制作方便操控的 GUI 图形化界面。其中传播最广、功能最强也是被公认最为方便的,就是由越南超人 AUTOMATIC1111 开辟的 WebUI,即大名鼎鼎的Stable Diffusion WebUI。可以看到github上的start已经超过130k了,真是神一样的存在。

           PS,大神的头像直接利用了越南盾中胡志明头像。

        Stable Diffusion WebUI集成了大量代码层面的繁琐应用,将 Stable Diffusion 的各项画图参数转化成可视化的选项数值和操控按钮,用户可以直接通过 Web 页面利用 Stable Diffusion。如今各类开源社区里 90%以上的拓展应用都是基于它而研发的。
        Stable Diffusion WebUI是一个最流行的开源 Stable Diffusion 整合程序,其核心功能是 文生图 和 图生图,这也是 Stable Diffusion 的核心能力。Stable Diffusion WebUI 的别的功能,比如ControlNet、高清放大、模子练习等等都是别的第三方开辟的,有的已经内置到 WebUI 中,随着 WebUI 的发布而发布,有的还必要用户手动安装。
        固然,除了 WebUI 还有一些其他的 GUI 应用,比如 ComfyUI 和 Vlad Diffusion 等,不过它们的应用场景更为专业和小众,感兴趣的可以点击下面的 GitHub 链接相识,这里就不再赘述了。
1. 手动安装

       我们先手动方式一步一步安装,从中体验一下其中的繁琐(其实,这对于从事深度学习的相关技术职员来说是通例操作)。
       起首,从github上下载源码:
  1. git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
复制代码
       其次,下载安装Stable Diffusion WebUI的依赖项:
  1. cd stable-diffusion-webui
  2. pip install -r requirements_versions.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  
  3. pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  
复制代码

       依赖项乐成安装后,还是从huggingface下载v1-5-pruned-emaonly.safetensors预练习模子,放置到models\Stable-diffusion文件夹。
       好了,开始魔法吧。
  1. python webui.py
复制代码
       命令行窗口表现了模子加载运行过程,这里一共花了49.2秒。

       进入 http://127.0.0.1:7860网站,输入提示词:
  1. portrait of beautiful girl, brown hair, freckles, tshirt, professional lighting, indoor, artistic photography
复制代码
         反向提示词:
  1. lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name
复制代码
        点击,Generate按钮,3.9秒后,天生一幅女孩肖像画。GPU占用3.8G左右。


       如果觉得满是英文的界面操作起来不敷方便,可以:
1)从Stable-diffusion-webui 的汉化扩展下载汉化语言包,把"localizations"文件夹内的"Chinese-All.json"和"Chinese-English.json"复制到"stable-diffusion-webui\localizations"目次中;
2)点击"Settings",左侧点击"User interface"界面,在界面里最下方的"Localization (requires restart)",选择"Chinese-All"或者"Chinese-English";
3)点击界面最上方的黄色按钮"Apply settings",再点击右侧的"Reload UI"即可完成汉化。

       不过,个人觉得汉化后的文字有点拥挤。
2. 自动安装

        事实上,Stable Diffusion WebUI官方网站中不再有手动安装的步骤,我的明白是作者鼓励各人采用自动安装方式,而自动安装简直非常方便的。当我们下载完成Stable Diffusion WebUI源码后,在确保已经安装了Python 3.10.6和git后,双击批处理文件webui-user.bat即可。

        从命令行窗口输出,我们看到,批处理命令自动下载安装了Pytorch等依赖项:

       从github clone 并安装Clip Open_Clip等依赖程序,而且,由于众所周知的缘故原由,从github clone 源码会经常报错:

      没关系,接着多运行几遍即可。然后,再从 从huggingface下载预练习模子v1-5-pruned-emaonly.safetensors(固然,还是会报错):

       当所有的题目都办理之后,批处理文件webui-user.bat,将和前述的一样,将开放http://127.0.0.1:7860网站,后续处理过程不再赘述。

3. 自动安装过程分析 


1)   webui-user.bat 分析  
自动安装和手动安装在结果上是没有区别的,都是下载源码、下载安装依赖项(包罗二进制和github源码)、下载预练习模子,然后按照配置参数运行程序。自动安装过程把上述过程全部放到批处理文件中webui-user.bat,让我们来看看它到底做了啥。
  1. @echo off
  2. set PYTHON=
  3. set GIT=
  4. set VENV_DIR=
  5. set COMMANDLINE_ARGS=
  6. call webui.bat
复制代码
       webui-user.bat只有短短几行,起首将四个情况变量置空,然后调用webui.bat,所以webui.bat默默负担了所有。
2)   webui.bat 简要分析
  
  1. 7. if not defined PYTHON (set PYTHON=python)
  2. 8. if defined GIT (set "GIT_PYTHON_GIT_EXECUTABLE=%GIT%")
  3. 9. if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
复制代码
       起首,webui.bat在7-9行设置了PYTHON、GIT、VENV_DIR 三个情况变量,其中VENV_DIR 在当前目次中新建venv文件夹;其次,在16行测试调用Python程序;然后在第22行测试pip命令可用性。
  
  1. 16. %PYTHON% -c "" >tmp/stdout.txt 2>tmp/stderr.txt
  2. 17. if %ERRORLEVEL% == 0 goto :check_pip
  3. 18. echo Couldn't launch python
  4. 19. goto :show_stdout_stderr
  5. 21. :check_pip
  6. 22. %PYTHON% -mpip --help >tmp/stdout.txt 2>tmp/stderr.txt
  7. 23. if %ERRORLEVEL% == 0 goto :start_venv
复制代码
       接下来的37-40行是创建虚拟情况的关键,37行得到当前体系的缺省Python路径,39行利用 -m venv参数,运行此命令将创建目标目次venv,并利用home键将pyvenv.cfg文件放置在其中,该文件指向运行该命令的 Python 安装(目标目次的通用名称为.venv)。
  
  1. 37. for /f "delims=" %%i in ('CALL %PYTHON% -c "import sys; print(sys.executable)"') do set PYTHON_FULLNAME="%%i"
  2. 38. echo Creating venv in directory %VENV_DIR% using python %PYTHON_FULLNAME%
  3. 39. %PYTHON_FULLNAME% -m venv "%VENV_DIR%" >tmp/stdout.txt 2>tmp/stderr.txt
  4. 40. if %ERRORLEVEL% == 0 goto :activate_venv
复制代码
       基于venv的虚拟情况创建完成后,先激活该虚拟情况,再调用launch.py。至此,批处理文件的任务基本完成,并将控制权交给launch.py脚本。
  
  1. 44. :activate_venv
  2. 45. set PYTHON="%VENV_DIR%\Scripts\Python.exe"
  3. 46. echo venv %PYTHON%
  4. 57. :launch
  5. 58. %PYTHON% launch.py %*
复制代码
3)   launch.py 脚本简要分析
  
  1. start = launch_utils.start
  2. def main():
  3.     if args.dump_sysinfo:
  4.         filename = launch_utils.dump_sysinfo()
  5.         print(f"Sysinfo saved as {filename}. Exiting...")
  6.         exit(0)
  7.     launch_utils.startup_timer.record("initial startup")
  8.     with launch_utils.startup_timer.subcategory("prepare environment"):
  9.         if not args.skip_prepare_environment:
  10.             prepare_environment()
  11.     if args.test_server:
  12.         configure_for_tests()
  13.     start()
  14. if __name__ == "__main__":
  15.     main()
复制代码
       可以看到,有个prepare_environment函数,显然是它在负责情况初始化工作。
4)   prepare_environment函数
  
  1. def prepare_environment():
  2.     torch_index_url = os.environ.get('TORCH_INDEX_URL', "https://download.pytorch.org/whl/cu121")
  3.     torch_command = os.environ.get('TORCH_COMMAND', f"pip install torch==2.1.2 torchvision==0.16.2 --extra-index-url {torch_index_url}")
  4.     requirements_file = os.environ.get('REQS_FILE', "requirements_versions.txt")
  5.     xformers_package = os.environ.get('XFORMERS_PACKAGE', 'xformers==0.0.23.post1')
  6.     clip_package = os.environ.get('CLIP_PACKAGE', "https://github.com/openai/CLIP/archive/d50d76daa670286dd6cacf3bcd80b5e4823fc8e1.zip")
  7.     openclip_package = os.environ.get('OPENCLIP_PACKAGE', "https://github.com/mlfoundations/open_clip/archive/bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b.zip")
  8.     assets_repo = os.environ.get('ASSETS_REPO', "https://github.com/AUTOMATIC1111/stable-diffusion-webui-assets.git")
  9.     stable_diffusion_repo = os.environ.get('STABLE_DIFFUSION_REPO', "https://github.com/Stability-AI/stablediffusion.git")
  10.     stable_diffusion_xl_repo = os.environ.get('STABLE_DIFFUSION_XL_REPO', "https://github.com/Stability-AI/generative-models.git")
  11.     k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://github.com/crowsonkb/k-diffusion.git')
  12.     blip_repo = os.environ.get('BLIP_REPO', 'https://github.com/salesforce/BLIP.git')
  13.    
  14.     # 安装Pytorch
  15.     if args.reinstall_torch or not is_installed("torch") or not is_installed("torchvision"):
  16.         run(f'"{python}" -m {torch_command}', "Installing torch and torchvision", "Couldn't install torch", live=True)
  17.    
  18.     # 分别利用pip安装clip、open_clip、xformers、ngrok
  19.     if not is_installed("clip"):
  20.         run_pip(f"install {clip_package}", "clip")
  21.    
  22.     if not is_installed("open_clip"):
  23.         run_pip(f"install {openclip_package}", "open_clip")
  24.    
  25.     if (not is_installed("xformers") or args.reinstall_xformers) and args.xformers:
  26.         run_pip(f"install -U -I --no-deps {xformers_package}", "xformers")
  27.     if not is_installed("ngrok") and args.ngrok:
  28.         run_pip("install ngrok", "ngrok")
  29.     os.makedirs(os.path.join(script_path, dir_repos), exist_ok=True)
  30.     # 分别利用git安装assets、Stable Diffusion、Stable Diffusion XL、K-diffusion、BLIP
  31.     git_clone(assets_repo, repo_dir('stable-diffusion-webui-assets'), "assets", assets_commit_hash)
  32.     git_clone(stable_diffusion_repo, repo_dir('stable-diffusion-stability-ai'), "Stable Diffusion", stable_diffusion_commit_hash)
  33.     git_clone(stable_diffusion_xl_repo, repo_dir('generative-models'), "Stable Diffusion XL", stable_diffusion_xl_commit_hash)
  34.     git_clone(k_diffusion_repo, repo_dir('k-diffusion'), "K-diffusion", k_diffusion_commit_hash)
  35.     git_clone(blip_repo, repo_dir('BLIP'), "BLIP", blip_commit_hash)
  36.     startup_timer.record("clone repositores")
  37.    
  38.     # 利用pip安装requirements.txt文件指定的依赖项
  39.     if not requirements_met(requirements_file):
  40.         run_pip(f"install -r "{requirements_file}"", "requirements")
复制代码
       prepare_environment函数(上述代码是简化后的核心代码),基本上就是利用pip和git下载和安装依赖项(作者一直夸大事先必要部署好git的缘故原由就在这儿),和手动安装过程对应了起来。
四、 秋叶整合包安装

       Stable Diffusion秋叶整合包是中国大神秋叶(bilibili@秋葉aaaki)基于Stable Diffusion WebUI内核开辟的整合包,内置了与电脑自己体系隔离的Python情况和Git(包含了第三部分必要下载和安装的依赖项、github依赖包、预练习模子以及相当多的插件)。可以忽略网络需求和Python情况的门槛,让更多人轻松地利用Stable Diffusion WebUI。超简朴一键安装,无任何利用门槛,完全免费利用,支持Nvdia全系列显卡,近期发布了Stable Diffusion整合包v4.8版本(整合包v4.8)。 
1) 确认配置:
体系:Windows 10及以上体系
显卡:建议在本机安装Nvidia独立显卡,而且显存要达到6G以上,6G只能出图,如果要做练习建议12G以上。
2)下载文件
下载到本地,最好不要有中文目次,最新版下载链接: https://pan.quark.cn/s/2c832199b09b
3)点击“A绘世启动器”

4)点击“一键启动”

5)进入网站

       这个界面比原始的炫多了。我们看到了类似的命令行输出:

五、推理程序安装方式讨论

1.  整合包必要做什么       

       Python+深度学习框架是当前基于深度学习的练习和部署的主流模式,要在一台新的主机上部署推理模子,一样寻常而言必须安装整套的软件框架、辅助工具包和相关的底层驱动,这使得这个过程非常繁琐。特别地,不同的(开源)软件通常依赖不同版本的软件包,而不同版本的软件包之间通常存在接口不兼容的题目,给软件运行带来不可估量的隐患。因此,虚拟情况成为Python情况的一个重要手段,这使得不同的软件版本可以相互隔离。

       因此,要完备地安装一套基于深度学习的应用程序,通常来讲有虚拟情况创建、程序及依赖项下载安装、预练习模子等运行数据下载等重要步骤。对于一个从事深度学习的研究者来说,这些步骤不难,缺什么就增补安装什么。但对于平凡的爱好者来说,这个过程就太过于复杂了,因此自动安装要把上述步骤全部在后台一步步下载安装和验证,创建起一个独立的虚拟运行情况;而整合包则更进一步,直接就是一个“绿色版”。
2. 为什么是Python3.10 ?

        WebUI的作者AUTOMATIC1111在页面中,夸大了Python的版本,需采用3.10.6版本,给出的理由是担心新版本的Python不支持Pytorch。

       笔者的主机先前已经乐成安装了Python 3.11.6和Pytorch 2.1.2,觉得作者的担心有点多余,就在主机情况中继续安装部署。

        而且运行时,反正警告我们Python版本不兼容:

       颠末仔细比对,我们发现即便已经乐成安装了xformers包,体系还是提示no module 'xformers',让我们颇感意外。

      经分析,xformers依赖一个'triton'包:

      而'triton'包没有编译好的得当于Windows的wheel,自然也就无法安装。而有人针对Python 3.10编译好好了一个版本,而这个包在Python 3.11版本下安装时失败的。我推测,这大概是作者反复夸大利用Python 3.10的缘故原由。

六、小结

       比年来,随着AIGC技术的飞速发展,深度学习模子的本地化部署和应用技术也得到了充实器重,各种一键式安装程序层出不穷,大大低落了模子的部署复杂性,进一步促进了AIGC的普惠应用。将虚拟情况创建、程序下载部署、数据下载部署等复杂过程一步步地串联起来,并将常用运行环节和数据整合成一体,实现一键直达,方便“小白”利用,成为一种流行而有效的方法。
       本文仅仅安装部署了Stable Diffusion WebUI的重要成分,SDXL,以及其丰富的插件尚未涉及,后续一要将各个插件体系用起来,二要深入Stable Diffusion原理,并与Stable Diffusion利用联合,探索出更加故意思的东东。而对于具备极客精神的 AI 绘画爱好者来说,利用 Stable Diffusion 过程中可以学到许多关于模子技术的知识,明白了 Stable Diffusion 等于就把握了 AI 绘画的精髓,可以更好的向下兼容其他任意一款低门槛的绘画工具。

参考文献
How to install Stable Diffusion on Windows
Install AUTOMATIC1111's Stable Diffusion WebUI on Windows
Stable Diffusion之核心底子知识和网络布局解析

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表