老电脑焕发第二春,玩转 Stable Diffusion 3

几年前,我头脑一热,配置了一台顶配级消费 PC(RTX 2080 Ti GPU + i9 CPU),打算用来学习 AI。然而,起初我并没有找到合适的切入点。深度学习早期阶段,消费级显卡根本无法承担训练大模型、微调大模型,甚至连运行大模型都很吃力。结果,这台电脑主要用来学习 TensorFlow、Python 编程等基础知识,但最后从入门到放弃。不过,当时配置的 CPU 和内存还不错,用来编译 Chromium 浏览器和 Android 系统也算是物尽其用,唯独显卡几乎闲置。随着 Nvidia 不断推出新显卡,RTX 2080 Ti 显得越来越落伍了。

近年来,AIGC(人工智能生成内容)技术不断进步,大模型的规模越来越大,参数动辄以十亿(Billion)为单位,但对 GPU 的要求却逐渐降低。比如最近发布的 Stable Diffusion 3,仅需 6G 显存就能很好地运行。此外,语音识别、GPT、ChatTTS、Text to Audio、Text to Video 等大模型也能在消费级 GPU 上运行。

目前,以我的资源和实力,进入 AI 行业进行大模型研发不太现实,只能围绕 AI 技术做一些应用,或者体验一下 AIGC。因此,我最近在研究如何在本地部署大模型。

前几天,Stable Diffusion 3 的大模型开源了,我第一时间在电脑上进行了本地部署。下面是我在 Windows 上部署 Stable Diffusion 3 的总结。

ComfyUI

Stability AI 开源了 Stable Diffusion 3 Medium 模型,拥有 20 亿参数。要让模型运行,还需要外围框架和 UI 构建应用。在图像生成领域,常用的有 Stable Diffusion WebUI 和 ComfyUI,以及后起之秀 Fooocus。目前只有 ComfyUI 支持 SD3。

第一眼看到 ComfyUI 的界面,我就被它吸引了。

519d5953932dc32c162313ddf852677d.png

这是一个非常适合程序员使用的交互界面,通过浏览器访问。整个过程以工作流形式组织,非常适合根据需求定制工作流,对于重复性工作,可以反复执行工作流,减少重复劳动。工作流可以以 JSON 文件形式保存和加载,方便交流工作流程。

插件支持是现代软件的标配,ComfyUI 在这方面做得很好,已经建立了良好的生态,社区参与度很高,有专门分享插件和交流工作流的。

安装 ComfyUI

ComfyUI 支持 Windows、Linux 和 Mac OS 系统。我之前主要在 Linux 系统下开发,写的文章也是在 Linux 下部署。但自去年转向开发应用后,发现绝大多数用户使用的是 Windows 系统。虽然也开发过一些信创系统的应用,但推不动。广大网友虽然口头上支持国产系统,但实际行动上还是更倾向于 Windows。这篇文章就讲述如何在 Windows 下部署 Stable Diffusion 3,准确地说是 ComfyUI 在 Windows 系统下的部署,系统版本为 Windows 11 64 位。

ComfyUI 是开源的,可以在 GitHub 上访问:

https://github.com/comfyanonymous/ComfyUI

针对 Windows 系统,ComfyUI 有 Release 包,下载即可使用:

67f8f71bd231026a7aa7dc7b165895b1.png

作为程序员,我更喜欢使用第二种方式,直接 clone 代码库:

git clone https://github.com/comfyanonymous/ComfyUI

安装依赖:

pip install -r requirements.txt

运行:

python main.py

打开浏览器,地址栏输入 http://127.0.0.1:8188/ 就可以看到 ComfyUI 的界面了。

共享 SD-WebUI 资源

由于我之前安装过 SD-WebUI,里面有 Python 虚拟环境、Pip 包以及一些 SD 模型,正好 ComfyUI 也支持与 SD-WebUI 共用一些设施,于是我写了一个 run.bat 脚本:

set VENV_DIR=C:\ai\stable-diffusion-webui\venv
set PYTHON="%VENV_DIR%\Scripts\Python.exe"
echo venv %PYTHON%
%PYTHON% main.py
pause

双击 run.bat 脚本即可启动 ComfyUI。

如果要共用 SD-WebUI 中的模型,将代码中的 extra_model_paths.yaml.example 复制一份,重命名为 extra_model_paths.yaml,然后用文本编辑器编辑。

677ae96ce256d139ba283da9c08c8170.png

替换其中 path/to/stable-diffusion-webui/ 的路径。

如果你希望将 ComfyUI 的模型放在别处,不想放在程序内,还可以去掉下面 comfyui 的注释行,指定一个路径。

如果运行出现错误:

AssertionError: Torch not compiled with CUDA enabled

可能是 PyTorch 的版本问题,解决方法是:

C:\ai\stable-diffusion-webui\venv\Scripts\pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121

注意 :因为我使用的是 WebUI 的 python 虚拟环境,所以 pip 前面需要带上路径,如果你是使用的系统 python:

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121

下载模型

模型下载的官方地址是:

https://huggingface.co/stabilityai/stable-diffusion-3-medium

5baac47aa92beec37b1ce08732b6448f.png

模型比较大,如果翻墙不便,可以尝试搜索一下国内的下载站点。

模型下载文件包含三个部分:

  • 模型

  • 文本编码器

  • ComfyUI 工作流

先来看看模型文件,有四个,体积都还不小,到底下哪个呢?还是全部下载?

看看官方对这四个文件的解释:

  • sd3_medium.safetensors 包含 MMDiT 和 VAE 权重,但不包含任何文本编码器。

  • sd3_medium_incl_clips_t5xxlfp16.safetensors 包含所有必要的权重,包括 T5XXL 文本编码器的 fp16 版本。

  • sd3_medium_incl_clips_t5xxlfp8.safetensors 包含所有必要的权重,包括 T5XXL 文本编码器的 fp8 版本,在质量和资源要求之间实现平衡。

  • sd3_medium_incl_clips.safetensors 包含除 T5XXL 文本编码器之外的所有必要权重。它需要的资源很少,但如果没有 T5XXL 文本编码器,模型的性能会有所不同。

如果对 text to image 有所了解的话,就会明白所谓的文本编码器就是指的 CLIP 模型,也就是计算机用来理解文字的模型,这个 CLIP 模型可以包含在 SD 模型内部,也可以作为单独的文件,独立加载。

看看 text_encoders 下的文件,我们可以看到里面有四个 CLIP 模型:

b53eecce47aea28eb761462a0e678cc2.png

目前还没有看到对这四个 CLIP 模型的介绍,不过理解上面对模型的介绍,t5xxl 文本编码器的性能更佳,fp16 版本质量最佳,但对资源的需求更大。

再来看看 comfy_example_workflows 下的文件:

da7955629a37127f145ac77ccd164fe2.png

这下面有三个工作流文件,文件比较小,先下载这三个工作流文件。

在 ComfyUI 中打开 sd3_medium_example_workflow_basic.json 文件:

89a3700885000b7c6527c23bd9fcb240.png

可以看到,这个工作流加载了三个 CLIP 模型(为什么要 3 个?)和一个基础模型。那我们就下载这四个模型吧。

  • sd3_medium.safetensors

  • clip_g.safetensors

  • clip_l.safetensors

  • t5xxl_fp8_e4m3fn.safetensors

这几个模型总共有十几个 G,慢慢下载吧。

下载完毕后,将 clip_g.safetensors、clip_l.safetensors、t5xxl_fp8_e4m3fn.safetensors 丢到 ComfyUI 的 models\clip 下,sd3_medium.safetensors 丢到 ComfyUI 的  models\checkpoints 下。

执行基础的工作流

在 ComfyUI 中打开上一个步骤中下载的 sd3_medium_example_workflow_basic.json 文件。需要注意这个工作流中的 checkpoint 名称是带有路径的,替换成 sd3_medium.safetensors 即可。

Ctrl + 回车 快捷键,即可生成一张漂亮的图。整个过程还是相当快,生成的质量也还不错。

给大家看看我在完全没有修改工作流所生成的图。

0442180da9e3bf96000f01d3d78a1c3c.png

5255b94de7a8c33215d6f6f1abdbc82f.png

这是我初次使用 ComfyUI,还需要继续摸索,希望能用 ComfyUI 和 SD3 生成理想的图片。敬请关注!

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

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

相关文章

ONLYOFFICE 桌面编辑器8.1---一个高效且强大的办公软件

软件介绍 ONLYOFFICE 桌面编辑器经过不断的更新换代现在迎来了,功能更加强大的ONLYOFFICE 桌面编辑器8.1是一个功能强大的办公套件,专为多平台设计,包括Windows、Linux和macOS。它提供了一套全面的办公工具,包括文档处理、电子表…

elementplus el-table(行列互换)转置

Element Plus v2.4.0, repl v3.4.0 <template> <div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label"名字" width"180" /><el-table-column prop"wei…

如何linux 查询进程和杀死进程

在程序开启长链接的时候&#xff0c;有时候会发现端口被占用的情况&#xff0c;但是又没有启动相关的端口&#xff0c;所以我们需要将端口占用结束掉 1.使用指令netstat -ntlp 查看当前有哪些进程&#xff0c;如图&#xff1a; 2.使用指令kill -9 18785 杀死进程&#xff0c…

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知&#xff0c;Charles是一款抓包工具&#xff0c;当然是http协议&#xff0c;不支持tcp。&#xff08;如果你想要抓tcp包&#xff0c;请转而使用wireshark&#xff0c;在讲述websocket的相关技术有梳理过wireshark抓包&#xff09; 话说回来&#xff0c;char…

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时&#xff0c;字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作&#xff0c;包括去除不需要的空格和特殊字符、替换文本中…

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

java溯本求源之基础(二十五)之--ArrayList常用方法介绍

1. 介绍 1.1简介 ArrayList ArrayList 是 Java 集合框架中的一个类&#xff0c;位于 java.util 包中。它实现了 List 接口&#xff0c;提供了一个动态数组的功能。与普通数组不同&#xff0c;ArrayList 可以在需要时自动调整其容量&#xff0c;以容纳更多的元素。这使得它非常…

鸣潮基于虚幻引擎4的多平台效果和性能优化实践

《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏 文章目录 《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏Why Deferred Shading移动端高质量的TAAU渲染流程Ghost和Flicker优化&#xff0c;一些图像空间算法的融入动静态像素的差异处…

第三代全智能AI无人直播系统:销售变现的革新利器

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经(keJ0277)逐渐渗透到我们生活的方方面面。特别是在直播销售领域&#xff0c;第三代全智能AI无人直播系统的出现&#xff0c;正成为销售变现的革新利器&#xff0c;引领着行业的新一轮变革。一、全智能AI无…

mysql数据库的管理

MySQL数据库管理 mysql数据文件 存放在初始化时定义的datadir 该目录下放置三种后缀文件 .frm 与表相关的元数据&#xff08;meta&#xff09;&#xff0c;表结构的定义信息等。 .MYD mylSAM存储引擎专用 .MYI mylSAM存储引擎专用 MySQL语言类型 DDL&#xff08;数据定义语言…

App推广新突破!Xinstall无注册码方案,一键解决您的获客难题

在互联网的浪潮中&#xff0c;App推广与运营面临着前所未有的挑战。随着流量红利的衰退&#xff0c;如何高效、精准地触达用户&#xff0c;提升用户留存和转化率&#xff0c;成为每个企业都必须面对的问题。在这个关键时刻&#xff0c;Xinstall以其无注册码的解决方案&#xff…

使用vant4+vue3制作电商购物网站

一、前言 1.本项目基于vant4vue3构建&#xff0c;默认友友们已具备相关知识&#xff0c;如不具备&#xff0c;请友友们先去了解相关该概念 2.项目数据来源于开源框架 新峰商城 在此指出 3.此项目目的在于帮助友友们了解基本的用法&#xff0c;没有涉及太多的逻辑操作。 二、…

针对AIGC检测的鲁棒性测试——常见攻击手段汇总

前言&#xff1a;这篇文章来总结一下针对AIGC检测的常见攻击手段&#xff0c;选取的研究工作均出自近5年AIGC检测相关文章。&#xff08;论文被拒了需要补实验&#xff0c;先来看看别人怎么做的……&#xff09; 2019 WIFS Detecting and Simulating Artifacts in GAN Fake Ima…

JavaScript的学习之事件的简介

目录 一、事件是什么 二、如何处理事件 一、事件是什么 定义&#xff1a;事件就是浏览器和用户之间的交互行为。 例如&#xff1a;点击按钮、鼠标移动、关闭窗口等。 二、如何处理事件 我们可以在对应的事件属性中设置一些JS行为&#xff0c;当事件触发的时候会将这些代码执行…

35岁,是终点?还是拐点?

35岁&#xff0c;是终点还是拐点&#xff0c;取决于我们对生活和事业的态度、目标以及行动。这个年龄可以看作是一个重要的转折点&#xff0c;具有多重意义和可能性。 很多人在35岁时&#xff0c;已经在自己的职业生涯中建立了一定的基础&#xff0c;可能达到了管理层或专家级别…

Charles抓包工具系列文章(二)-- Repeat 回放http请求

一、什么是http请求回放 当我们对客户端进行抓包&#xff0c;经常会想要重试http请求&#xff0c;或者改写原有部分进行重新请求&#xff0c;都需要用到回放http请求。 还有一种场景是压力测试&#xff0c;对一个请求进行重复请求多少次&#xff0c;并加上适当的并发度。 这里…

WebStorm 配置 PlantUML

1. 安装 PlantUML 插件 在 WebStorm 插件市场搜索 PlantUML Integration 并安装&#xff0c;重启 WebStorm 使插件生效。 2. 安装 Graphviz PlantUML 需要 Graphviz 来生成图形。使用 Homebrew 安装 Graphviz&#xff1a; 打开终端&#xff08;Terminal&#xff09;。确保你…

C语言小例程28/100

题目&#xff1a;利用递归方法求5!。 程序分析&#xff1a;递归公式&#xff1a;fnfn_1*4! #include <stdio.h>int main() {int i;int fact(int);for(i0;i<6;i){printf("%d!%d\n",i,fact(i));} } int fact(int j) {int sum;if(j0){sum1;} else {sumj*fac…

闪迪sd卡视频格式化数据恢复方法,你了解吗

咨询&#xff1a;“我不小心将闪迪SD卡格式化了&#xff0c;里面的重要视频文件全都不见了。我感到非常焦虑&#xff0c;因为这些视频对我来说意义非凡。现在急需找到方法来恢复&#xff01;&#xff01;” 在数字时代&#xff0c;SD卡已成为我们日常生活中不可或缺的数据存储设…

python中数据的作用域

一、命名空间 在 Python 中&#xff0c;命名空间是一个系统&#xff0c;它用于确保名字的唯一性&#xff0c;并防止命名冲突。命名空间是一个存储变量名称&#xff08;或者更广泛地说&#xff0c;标识符&#xff09;与对象之间映射的抽象概念。每个变量名你在程序中创建&#x…