在macOS下,利用AIGC:从0搭一个图文生成网站

3,174 阅读19分钟

我们之所以有很多痛苦,其实不是因为,你真实生活当中的痛苦,而是因为你觉得自己不好,你在怪自己。

大家好,我是柒八九

许久未更文了,不知道是否有些许的想念啊。最近,在忙公司的事情。然后,很多更文都属于头脑风暴阶段。但是呢,这篇文章本来打算上周发布的,但是思来想去,还是做了一些内容的变更。

然后,还有一件事需要告知大家,我 {又双叒叕|yòu,shuāng,ruò,zhuó}打算新开辟一个系列文章 -- AI模型。 但是,大家不要担心,不是啥高大上的东西,不会做一些AI模型训练的(后期如果有机会,也不是不可以尝试一下,本事我也是在自我进化中...)都是一些大家都能上手实践的。

同时,最近也会在规划,自己搭建一个国内版本的ChatGPT问答网站和小程序和AI集合。这也是近期的一个规划。

但是,大家放心,咱们的主业还是偏向前端/Rust。毕竟,只有解决了温饱问题,才可以考虑更高级的享受。

碎碎念

但凡,混迹于互联网的Coder,在最近的1-2个月内,都主动或者被动的听过ChatGPT/AutoGPT/Midjourney/Stable-Diffusion等五花八门的AI产品和模型。 本着,对技术的敏感度,同时公司业务也有AI相关的业务和场景。所以,在工作和业余时间也在逐步的使用相关的AI产品。

同时就在上周,很有幸,被腾讯云开发者开了白名单。

然后在文章列表中,一眼就相中利用AIGC:从0搭一个图文视频生成网站,准备转载。本着,这么好的东西,不自己亲手搭建一个,那不是很 {暴殄天物|bào tiǎn tiān wù}。所以,就按照上文的步骤进行搭建。但是,在搭建的时候,愈发感觉不对劲。后来才发现stable-diffusion的安装分系统环境。上文中提到的是Windows的安装步骤,而我本地环境的是Mac(非M1版本)。所以,这本就是南辕北辙的,它无论如何都无法达到自己想要的效果。

同时,在原文中,他过多的省略了很多安装步骤和必要的解释。(这里不是说原文写的不好,可能自己的水平没有达到那个水平),所以在安装步骤搭建起来,感觉很生硬。同时,由于涉及到其他的语言概念(python等)和安装方式。也会让平时不咋接触这些语言的开发者,望而却步

所以,本着好东西要分享的态度,今天这篇文章。我们来仔细讲讲 如何在Mac环境下,stable-diffusion搭建一个图文网站

这里先放几张,利用SD在本地生成的图片。是不是很哇噻。(放心,只要跟着这个教程走,你也可以生成属于你的好看的图片)

你能所学到的知识点

  1. 啥是AIGC 推荐阅读指数 ⭐️⭐️⭐️⭐️
  2. 何为StableDiffusion 推荐阅读指数 ⭐️⭐️⭐️⭐️
  3. 项目启动(很重要) 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️
  4. 下载插件(也很重要)推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️
  5. 生成图片(最后但非常重要)推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️

好了,天不早了,干点正事哇。


啥是AIGC

AIGC 指的是“Artificial Intelligence Generated Content”,也就是“人工智能生成内容”。

“人工智能生成内容”是指利用人工智能技术生成文本、图像、音频等各种形式的内容。这些内容通常是基于大规模数据训练的深度学习模型生成的,比如自然语言处理模型、图像生成模型和语音合成模型等。人工智能生成内容在许多领域都有广泛的应用,比如语言翻译、音乐生成、虚拟现实和广告营销等。

常见的AIGC应用方向

现在市面上常见的AIGC应用有很多,以下是一些常见的应用以及使用的模型或技术:

文本生成

自然语言处理技术被广泛应用于文本生成任务中,常见的模型包括:

  1. {语言模型|Language Model}:用于生成符合语言规则的句子或段落。
  2. {翻译模型|Translation Model}:用于翻译不同语言的文本。
  3. {对话模型|Dialog Model}:用于生成符合上下文语境的对话。
  4. {摘要模型|Summarization Model}:用于生成文本的概括或摘要。
  5. {生成式模型|Generative Model}:用于生成新的文本,例如GPT系列模型。

市面上比较常用的产品如下。其实还有很多,记住搞定最头部的几个产品。

然后,针对AI编程,其中Tabnine强烈推荐。最近在用这个,感觉太好用了。

图像生成

深度学习技术在图像生成领域也得到了广泛的应用,常见的模型包括:

  1. {对抗生成网络|Generative Adversarial Networks},:(GANs)利用两个神经网络进行博弈的方式生成逼真的图像。
  2. {变分自编码器|Variational Autoencoder}VAE):用于将图像编码为潜在向量并通过解码器生成逼真的图像。
  3. {流模型|Flow-based Model}:用于对图像的像素进行建模,然后从建模分布中采样生成图像。

音频生成

在音频生成领域,常见的模型包括:

  1. {自回归模型|Autoregressive Model}:用于预测下一个音频样本。
  2. {流模型|Flow-based Model}:用于对音频信号建模,然后从建模分布中采样生成音频。
  3. WaveNet:一种基于深度卷积神经网络的语音合成模型,可以生成逼真的语音。

何为Stable Diffusion

Stable Diffusion,通常是指一种用于文本到图像合成的深度学习模型,它可以在给定文本描述的情况下生成高质量、多样化的图像。

具体来说,Stable Diffusion 是一个基于流程的生成模型,它在潜在空间中使用扩散过程来生成图像。在训练过程中,模型通过随机抽样生成中间图像序列,然后根据这些中间图像生成最终的输出图像。这个生成过程是由一个潜在向量和一个标准正态分布组成的,这两个分布相加后经过一个可逆的非线性变换得到最终的图像。

Stable Diffusion 的优势在于它能够生成高质量、多样化的图像,并且可以在给定的文本描述下生成与之相关的图像。这使得它在计算机视觉、虚拟现实、游戏开发等领域具有广泛的应用。同时,它也为图像编辑和处理任务提供了新的可能性,例如物体移除和图像修补等任务。

总的来说,Stable Diffusion 是一种有前途的文本到图像合成方法,有潜力在计算机视觉、虚拟现实和创意艺术等广泛领域中发挥作用。

后期,我们会有两篇专门针对Stable Diffusion的介绍文章。已经在规划中....

项目启动

这里我们参考Stable Diffusion官网的配置流程。

但是,别看就这么点东西,但是里面的坑还是不少,所以,我就带着大家一起搭建网站。

这里有几点需要说明,因为这也算是一个科普文章,为了让大部分人,甚至是非科班的人,也可以搭建成功,有些大家可能感觉到很习以为常的概念也会有简单的介绍和讲解。

1.安装Homebrew

何为Homebrew

Homebrew 是一款 macOS 平台上的包管理器,可以帮助用户方便地安装和管理各种开源软件和工具。它的作用类似于 Linux 系统上的 apt-get 或者 yum 包管理器。如果熟悉前端开发的同学,你可以将它比做npm/yarn/PNPM

使用 Homebrew,用户可以通过命令行界面快速地安装、更新和卸载各种软件,也可以管理软件包的版本,同时还可以解决各种依赖关系。例如,用户可以使用 Homebrew 安装 GitNode.jsPython 等常用的开发工具和软件。

安装Homebrew

以下是在 macOS 上安装和使用 Homebrew 的步骤:

  1. 打开 macOS 终端应用程序,可以通过按下 Command+Space,然后输入 Terminal 来搜索并打开终端。

  2. 在终端中运行以下命令,安装 Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

但是,在国内安装Homebrew的时候,因为网络原因,所以这个官方命令很大可能是失败的。很快就能看到下面的提示信息

curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

我们可以切换为国内源

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

  1. 在安装过程中,Homebrew 会要求用户输入管理员密码,以便进行必要的系统权限操作。安装完成后,Homebrew 会自动添加一些必要的路径到系统的环境变量中。

  2. 安装完成后,可以通过运行 brew doctor 命令来检查安装是否正确。如果有任何警告或错误信息,可以根据提示进行修改。

如果上述步骤还是不成功,请私聊博主。我是你值得信赖的后盾。


2.下载对应的包

对应官网的第二步。

在第一步配置成功的基础上,将如下命令复制到终端,然后进行下载。

brew install cmake protobuf rust python@3.10 git wget

当然,如果你电脑中已经配置过上面的某些库,也可以将其从中删除掉。比方说,大家在项目开发中,都用git,那就没有必要在将git写入。同理,其他库也是如此。

然后,这一步是自动的,不需要你做其他的操作。

这里,我们从上帝视角来看看为什么要指定一些包。因为,这是在后期启动项目时,需要用到的工具。

我们直接从代码角度看。(因为,我已经把项目下载下来了,所以我就直接按照代码讲解了)

针对macOS用户来讲,我们后期启动项目的文件就是webui.sh文件。它会先从./webui-macos-env.sh中获取自定义的参数,这个我们后面讲。

然后,在下面有一个bash语法。

if [[ -z "${python_cmd}" ]]
then
    python_cmd="python3"
fi

这段代码是一个 Bash 脚本中的条件语句,主要作用是检查变量 python_cmd 是否为空值,如果是空值则将其赋值为字符串 "python3"

具体来说,[[ -z "${python_cmd}" ]] 是一个条件判断语句,其中 [[]]Bash 的条件测试语法,-z 表示测试一个字符串是否为空。 ${python_cmd} 是一个变量,${} 用来引用变量。

因此,整个语句的意思是:如果 python_cmd 变量的值为空字符串,则执行后续的命令将其赋值为 "python3"。如果 python_cmd 已经有了值,则不会执行条件语句中的命令。


3. 从github上下载对应的项目

找一个合适的文件目录,然后下载对应的项目。

这里就不在过多解释了哈。

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

4. 下载和安装对应的模型

这里不是最重要的点,但是很麻烦,因为无论是官网还是Hugging Face中提供的模型,不仅动辄4-5G,而且你下载的时候,还需要指定的🪜。

为了,让大家能够获得更好的安装体验,我已经把我下载好的比较好玩的模型都存放好了。

这是我从各种地方下载的大模型。然后,大家可以在后台回复 AI模型获取。

如果大家,有靠谱的🪜,也可以自行下载。

这里贴出官网的推荐的模型。

也可以在Hugging Face找自己喜欢的模型

当然,也可以在C站上下载基于大模型下的小模型。(这个先给大家贴出来,如何使用我们后期再讲)

好了,模型下载,咱们就先聊到这里,这里面学问很多,我们会单开一篇文章,详细讲讲。


5. 项目运行(这里很重要,不要分神)

按照官网的说法,我们运行cd stable-diffusion-webui命令切换到stable-diffusion-webui然后,通过./webui.sh运行项目。(为什么要运行这个命令,我们之前介绍过了,这里不再赘述)。

第一步,没啥说明的,就一带而过

第二步

因为,我不是第一次运行该项目,所以执行速度会比第一次快。如果你是首次安装,在执行到第二步的时候,它会从利用git下载对应的依赖。

它的会将指定的大模型的依赖下载到repositoires中。如我们截图中箭头所指方向。

但是呢,在下载指定模型仓库的时候,会报错。

具体错误提示,我这里就不贴图了。然后,如何解决报错,我们可以移步到launch.py文件中的prepare_environment()中。

将对应github地址的@xxx去掉。这是想下载特定版本(commitxxx的代码。

但是,你如果把这三个的其中一个复制到浏览器中,你会发现资源不存在。所以,我们直接就把对应的@xxx去掉。下载全量的仓库信息。


第三步

见名知意,Create and activate python venv。 该步骤就是创建和激活一个名为 venv的python环境

webui.sh中有这行代码

if [[ ! -d "${venv_dir}" ]]
then
    "${python_cmd}" -m venv "${venv_dir}"
    first_launch=1
fi

它的大致意思就是,安装一个名为venvpython环境。

这里我们讲点小知识

使用conda激活特定版本的Python

打开终端或命令提示符窗口。

输入以下命令并按Enter键,以激活指定版本的Python环境

conda activate <环境名称>

其中,<环境名称>是要激活的Python环境的名称。

例如,如果要激活名为py37Python 3.7环境,可以使用以下命令:

conda activate py37

激活环境后,可以使用以下命令来验证已经激活了正确的Python版本:

python --version

如果一切正常,这个命令应该显示已经激活的Python版本号

请注意,必须已经安装了要激活的Python环境。如果还没有安装该环境,请先使用conda create命令创建一个新的环境,并在创建时指定要安装的Python版本

例如,要创建一个名为py37Python 3.7环境,请使用以下命令:

conda create --name py37 python=3.7

这将创建一个新的Python 3.7环境,并将其命名为py37。完成后,可以使用上述conda activate命令来激活该环境。


第四步,主要是代码运行,这里也不做解释了。


重要参数(很重要)

可以看到,在控制台中,输出了一段代码。

Launching Web UI with arguments: --skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate

就是以某些参数,来启动了项目。

我们就来逐个解释下每个参数的含义:

  1. --skip-torch-cuda-test:这个参数在运行PyTorch库时跳过CUDA兼容性检查。如果你没有兼容的CUDA设备或想加快启动时间,这可能很有用。
  2. --upcast-sampling:这个参数启用了一种称为“upcasting”的采样技术。Upcasting可以用来减少随机梯度下降中梯度估计的方差,这有助于提高收敛性和训练稳定性。
  3. --no-half-vae:这个参数禁用了使用16位精度的VAE(变分自动编码器)模型。VAE模型用于无监督学习和特征提取,使用16位精度可以提高训练速度和内存使用
  4. --use-cpu:这个参数强制使用CPU而不是GPU进行计算。如果没有兼容的GPU或想节省电力,这可能很有用。
  5. interrogate:这可能是一个位置参数,指定正在使用上述命令行参数启动的程序或脚本的名称或路径。

如果你想修改参数的话,可以在webui-user.sh中的COMMANDLINE_ARGS进行修改。

这里附上官网的一些常规参数。

命令行参数解释
--xformers使用xformers库。极大地改善了内存消耗和速度。
Windows 版本安装由C43H66N12O12S2 维护的二进制文件
--force-enable-xformers无论程序是否认为您可以运行它,都启用 xformers
不要报告运行时错误。
--opt-split-attentionCross attention layer optimization 优化显着减少了内存使用,几乎没有成本(一些报告改进了性能)。
黑魔法。
默认情况下torch.cuda,包括 NVIDIAAMD 卡。(新版默认开启)
--disable-opt-split-attention禁用上述优化
--opt-split-attention-v1使用上述优化的旧版本,它不会占用大量内存
(它将使用更少的 VRAM,但会限制您可以制作的最大图片大小)。
--medvram通过将稳定扩散模型分为三部分,使其消耗更少的 VRAM
cond(用于将文本转换为数字表示)、first_stage(用于将图片转换为潜在空间并返回)和 unet(用于潜在空间的实际去噪),
并使其始终只有一个在 VRAM 中,将其他部分发送到 CPU RAM。降低性能,但只会降低一点-除非启用实时预览。
--lowvram对上面更彻底的优化,将 unet 拆分成多个模块,VRAM 中只保留一个模块,破坏性能
*do-not-batch-cond-uncond防止在采样过程中对正面和负面提示进行批处理,这基本上可以让您以 0.5 批量大小运行,从而节省大量内存。
降低性能。
不是命令行选项,而是使用--medvramor 隐式启用的优化--lowvram
--always-batch-cond-uncond禁用上述优化。
只有与--medvram--lowvram一起使用才有意义
--opt-channelslast更改 torch 内存类型,以稳定扩散到最后一个通道,效果没有仔细研究。

无法使用 CUDA 加速

在解释原因之前我们先来讲讲啥是CUDA加速。

何为CUDA加速

CUDA加速是指使用NVIDIA公司的CUDACompute Unified Device Architecture)技术,通过显卡GPU进行计算加速

一般来说,传统的计算机CPU只能处理有限的计算任务,而GPU拥有更多的核心和更高的并行处理能力,能够同时处理大量的计算任务。CUDA技术利用GPU的并行处理能力,将一部分计算任务转移到GPU中进行处理,从而提高计算速度和效率。

通过使用CUDA加速,一些需要大量计算的应用程序(如科学计算、数据分析、深度学习、图形渲染等)能够获得数倍甚至数十倍的计算速度提升。同时,由于显卡GPU的价格相对于传统的CPU较为亲民,因此使用CUDA技术也能降低计算成本。


但是,理想很丰满,现实很骨感。现代的Mac笔记本电脑(如MacBook AirMacBook Pro等)都是基于英特尔(Intel)或者Apple自研的M系列芯片(如M1芯片)的,这些芯片不支持NVIDIA CUDA技术

所以,在我们启动SD后,无法利用CUDA加速。也就是说,在配置启动参数时,--use-cpu是必须要配置的。不然你的项目不能启动和使用。

但是,如果你非要使用CUDA加速。为了实现这一点,你需要安装一个第三方软件包,如macOS版的CUDA驱动程序CUDA Toolkit,以便将CUDA代码编译为适用于Mac的二进制文件。同时,你需要安装一张支持CUDA技术的NVIDIA显卡,并在Mac笔记本上安装相应的驱动程序。
注意,这种方法可能会对你的电脑造成不稳定,所以请确保在操作前备份你的数据,并严格遵循安装说明。


上述的桎梏是由于本地启动项目,后期我们也会将项目部署到云服务器上,然后就可以利用CUDA加速体验更流畅的开发体验。


下载插件

安装中文插件

由于StableDiffusion是国外开源项目, 有一些专业术语,在英文环境下,很让人抓狂。所以,我们可以利用一个开源库,将项目本地化处理。

这里,我们使用stable-diffusion-webui-localization-zh_CN对项目进行本地化操作。

我们切换到项目的extensions,然后利用git进行资源的获取。

git clone https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN.git

如何使用

确保扩展已经正确加载

  1. 重启webUI以确保扩展已经加载了
  2. Settings 选项卡,点击 页面右上角的 橙色 Reload UI 按钮 刷新扩展列表

  1. Extensions 选项卡,确定已勾选本扩展☑️;如未勾选,勾选后点击橙色按钮启用本扩展。

选择简体中文语言包(zh_CN)

  1. Settings 选项卡中,找到 User interface 子选项

  2. 然后去页面最底部,找到 Localization (requires restart) 小项,找到在下拉选单中选中 zh_CN (如果没有就按一下🔄按钮),如图

  1. 然后按一下 页面顶部左边的 橙色 Apply settings 按钮 保存设置,再按 右边的 橙色 Reload UI 按钮 重启webUI

在重启项目后,相关的文字就变成了中文。如下是我本地的效果图。


安装C站助手

这时候祭出一个大杀招 - C站

在这里你可以选择大模型,也可以选择基于大模型下的各种小模型。

然后,如何使用,我们稍后介绍。

安装步骤

  1. 选择扩展 Tab。
  2. 点击从网址安装。
  3. 填写网址:https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper
  4. 点击安装按钮。

配置插件

  1. 在扩展 Tab 下,点击已安装。
  2. 确保 Civitai Helper 处于勾选状态
  3. 然后点击应用并重启。

这样C站就配置好了。

其实还有很多插件可以辅助我们生成图片。有很多,这里就不展开说明。后期,我们也会单开一篇文章,讲讲比较常见的插件。


生成图片(最后但非常重要)

模型下载

既然,我们已经配置好C站助手,那我们就好好利用这个插件来生成比较唯美的图片。

  1. 点击这个C站助手 Tab。
  2. 将喜欢的 C站模型链接放入 Civitai 网址框中:https://civitai.com/models/8217?modelVersionId=12998
  3. 点击从网址获取模型信息。
  4. 这一步是显示模型名称
  5. 选择 /作为子文件夹。
  6. 在模型版本中选择最新的版本。
  7. 点击下载模型,然后系统会开始下载该模型。

重启一下UI,就可以在 ckpt 下拉框中出现新添加的模型了。


开始炼丹

C站指定模型中,挑选你想生成的图片信息。然后点进去。

从截图中,可以看到右侧有很多参数。

然后,你就对应的参数复制到指定的位置。

然后,你就等待出图就完事了。

由于,我们是使用CPU进行画图,所以所用时间和你电脑配置有关系。然后相比GPU生成肯定慢。只需静静等待就完事了。


后记

分享是一种态度

参考资料:

  1. stable-diffusion-webui
  2. C站
  3. stable-diffusion-webui-localization-zh_CN

全文完,既然看到这里了,如果觉得不错,随手点个赞和“在看”吧。

本文正在参加「金石计划」