作为想要了解Stable-Diffusion的小白或者初学者, 如果手里的电脑没有配置英伟达显卡的话, 或者电脑配置不是那么高,那么, 我向你推荐Stable-Diffusion.cpp 项目, 这个开源的项目,用C和C++语言封装了Stable-Diffusion, 可以让你在不额外花钱的情况下, 体验一下Stable-Diffusion的文生图、图生图功能。
看, 这就是我在安卓手机上运行Stable-Diffusion.cpp项目得到的图片,是不是也能接受呢?有兴趣的话, 就继续读下去吧。
一、Stable-Diffusion 介绍目前, 生成式人工智能(简称GenAI)比较成功的领域, 主要集中在创建文本、创建摘要、创建图片等, 而这里所说的Stable-Diffusion, 就是属于创建和修改图片领域的重要项目。
提起Stable-Diffusion,现在大部分都应该听说过, 这是一个开源的、强大的从文字产生图片的人工智能项目, 是Stability.ai公司在2022年8月份发布的项目, 主要功能就是从用户提供的文字描述关键词, 来产生图像。
现在很多AI 公司也提供这种AI 创作工具,例如百度就提供了下面的工具,其中“输入关键字, AI替你画”, 其实就是最基本的文生图功能, 从文字产生图像, 这是当前基本的生成式人工智能的能力:
但是, Stable-Diffusion项目的优秀之处在于, 这个项目是开源的,开发人员可以根据需要在本地部署, 而且还有众多优秀的开源模型供你选择,这是其他公司的产品所不具备的。
看看这么优秀的模型:
Stable-Diffusion 项目主要是基于CUDA或者Tensor Flow开发的,使用Python 语言, 如果想要在本地部署, 对于电脑的配置有一定的要求。
最基本的是显卡内存, 目前主流观点是, 最好有12G以上的英伟达显卡, 而且显卡容量越大效果越好。
攻略是这么写的:
需要使用 N 卡(NVIDIA 显卡),显卡的显存至少需要 4GB 以上显存才能在本地运行。最低配置需要 4GB 显存,基本配置 6GB 显存,推荐配置 12GB 显存或者以上。
下面是三个推荐的电脑配置:
可见, 最低配置,也得要花6000多买一个带RTX 2060显卡的电脑。
但是, 如果你只是想了解这个Stable-Diffusion, 还是小白阶段, 还不想投入这么多钱(土豪请略过。。。), 那怎么办呢?
现在网络上的攻略, 大部分就是推荐你购买带GPU的云服务器, 就连知乎上的推荐文章, 也在极力打公告:
难道就没有别的省钱的办法了吗?
当然是有的, 正所谓世上本无路,不过是走的人多了罢了! 省钱的道路也是一样的!
二、Stable-Diffusion.cpp 的由来: llama.cpp 简介现在的英伟达公司,以及老板黄仁勋, 靠着显卡发家致富, 从显卡之王到AI 之王, 当众多AI 初创公司 还在为寻找AI落地方案而苦苦寻觅的时候, 黄仁勋已然成为新的华人首富!
估计登顶世界首富,也只是时间的问题吧~~~
然后, 在AI 产业严重依赖英伟达显卡的同时, 很多AI 产业从业者也在不断改进AI 的框架和产品,以期减少对于N卡的依赖, 这里面既有很多大的互联网公司的基础框架, 如Apple 的Metal API、Vulkan API等, 也有更具体的项目如Llama.cpp, 就是由一个名叫Georgi Gerganov的大神,贡献出来的。
Georgi Gerganov
Llama.cpp
Llama.cpp这个项目的特点是, 使用纯C++语言实现了Llama, 没有任何依赖项。 这种方法不再依赖于某种特定的硬件的闭源库(没错,说的就是你, N卡和CUDA)的推理库, 可以在更多的硬件上运行大语言模型。 因为这个特点, Llama.cpp受到了很多没有专门硬件(昂贵的显卡)用户的青睐, 截止到2024年6月, Llama.cpp的项目在Githug 上收到了59000多颗星星, 可以说是广受好评。
看看稍微正式一点的解释:
llama.cpp 是一个 C++ 库,它允许你在自己的硬件上高效运行大型语言模型,如 LLaMA、GPT-4All 甚至最新的 Mistral。它由 Georgi Gerganov 开发。它是 Meta的 LLaMA 模型的一个移植,可供更广泛的用户使用。
想象一下,它是一个浓缩成 C++ 库的有效语言代理——这就是 llama.cpp 的精髓。
它采用了 Facebook 的 LLaMA,一个强大的 LLM,并通过 C++ 代码使其功能可用。这意味着你可以直接在个人电脑上利用 LLaMA 的技能——生成文本、翻译、创意写作、聊天机器人!
为什么说llama.cpp是Meta的LLaMA 模型的移植呢?这是因为, 在最开始的2023年7月, Meta 突然宣布把他们家的大模型Llama 2,给开源了!
翻译过来就是:
我们正在与微软合作,推出Llama 2,这是我们开源大语言模型的下一代产品。Llama 2将免费提供给研究者和商业使用者。
Meta一直投身于开源事业,从领先的机器学习框架PyTorch,到像Segment Anything,ImageBind和Dino这样的模型,再到作为Open Compute Project部分的AI基础设施。我们一直在推进整个行业的进步,构建更好的产品。
开源推动了创新,因为它让更多的开发者能够使用新技术。同时,软件开源,意味着更多的人可以审查它,识别并修复可能的问题,从而提高了安全性。我相信如果生态系统更加开放,将会释放更多的进步,这就是我们为什么要开源Llama 2。
今天,我们发布了预训练和微调的模型Llama 2,参数分别为70亿,130亿和700亿。Llama 2比Llama 1预训练的数据多40%,并对其架构进行了改进。对于微调模型,我们收集了超百万的人类注释样本,并应用了有监督的微调和RLHF,在安全性和质量方面是领先的。
你可以直接下载这些模型,或者通过Azure以及微软的安全和内容工具访问这些模型。我们还提供一个优化版本,支持Windows本地运行。
我非常期待看到你们的创新成果!
之前AI 公司的大语言模型, OpenAI 或者Google, 他们的AI 产品都是商业闭源的, 而Meta 直接“掀了桌子”, 搞起了开源LLM, 开始搭建开源大模型生态系统的道路。
但是Meta的Llama2的开发, 还是依赖或者使用Python语言,而 Llama.cpp 则是借鉴和采用了LlaMa的核心算法和逻辑, 并用C++语言实现了这些功能;这就使得大模型的执行更加高效, 并且能让大模型在更加广泛的硬件上运行,让一些具有强大显卡的个人计算机也有机会运行这些模型。
因此, llama.cpp利用Meta 公司的LlaMa 大模型的功能,并通过更加灵活、更加广泛高效的C++语言重新实现, 使得更多AI的研究人员和, 像我们一样的AI 爱好者们, 能有机会运行和学习Llama模型, 用更正式的话来说,就是“有了更多的受众”, 这允许更多人使用LlaMa 模型来完成文本生成、翻译、创意写作等AI 任务。
为什么Llama.cpp要使用 C++ 语言呢?
我们都知道, C++ 语言一向以执行效率高而闻名, C++ 语言为本地部署大语言模型提供了高性能的基础设施, 和GPT等基于Python的大模型相比, llama.cpp 在消费级硬件上更加精简, 更加高效, 无论是在台式机,还是在笔记本电脑上都可以运行。
我们的Stable-Diffusion.cpp, 也是参考和基于Llama.cpp做出来的。
所以说, 我们的省钱之路,是Georgi Gerganov 率先闯出来的,毫不客气的说, 在AI 技术平民化的道路上, Georgi Gerganov 让我们贫民以及平民们,能提早体会到AI 技术,这就是AI王国中的一个里程碑, Georgi Gerganov 居功甚伟,享配太庙啊~~~!
Georgi Gerganov 享配太庙
三、 Stable-Diffusion.cpp 的简单介绍如果我们充分了解了Llama.cpp, 那么对于Stable-Deffusion.cpp, 那也是非常好理解的, 下面是stable-diffusion.cpp在github上的简介:
基于 ggml 的纯 C/C++ 实现,工作方式与 llama.cpp 相同
超轻量级且无需外部依赖
SD1.x、SD2.x 和 SDXL 支持
16 位、32 位浮点支持,4 位、5 位和 8 位整数量化支持
加速内存高效的 CPU 推理
按照官方的介绍, stable-diffusion.cpp在执行推理任务时候, 内存使用也是比较小的:
使用具有 fp16 精度的 txt2img 生成 512x512 图像时仅需要约 2.3GB,启用 Flash Attention 仅需要约 1.8GB。
这里我做了一个验证, 从开始执行任务之前, 内存使用大约在8.24G, 而正式开始产生图片时内存使用了大约10.4G, 跟官方的介绍基本一致:
这也是为什么stable-diffusion.cpp能在安卓手机上运行的原因: 现在哪个安卓手机缺内存? 现在没有超过8G运存的安卓手机,已经很古老了!
四、stable-diffusion.cpp的构建或许有些读者已经不耐烦了, 说了这么多, 那Stable- Diffusion.cpp怎么才能在我的手机上运行起来呢?
首先来看架构图:
可以看到, 我们的Stable-Diffusion.cpp,是构建在T**X(原谅这里不能使用这个名字, 平台似乎歧视它,过不了shen啊)提供的Linux 环境之上的。
然后, 从Github 下载这个项目的源代码:
git clone --recursive https://github.com/leejet/stable-diffusion.cppcd stable-diffusion.cpp然后,再执行下面的语句:
cd stable-diffusion.cppgit pull origin mastergit submodule initgit submodule update这只是为了保证使用最新的代码, 下面, 要按照CMake:
pkg install cmake我在我的环境上很顺利的完成了这个cmake的安装。
然后就是构建:
mkdir buildcd buildcmake ..cmake --build . --config Release当cmake build 完成之后,会在build/bin 目录下生成一个sd 文件, 赋予执行权限之后, 放到~/../user/bin/目录下,即可全局执行sd 命令了。
四、stable-diffusion.cpp的运行在安卓手机上执行stable-diffusion.cpp, 也很简单,最基本的文生图命令就是 sd :
./bin/sd -m ../models/sd-v1-4.ckpt -p "a lovely cat"我使用的是这个:
sd \--threads 8 \--model "./models/v1-5-pruned-emaonly.safetensors" \--output "./output/output_dog.png" \--prompt "a lovely ox" \--negative-prompt "" \--cfg-scale 7.0 \--sampling-method euler_a \--steps 20 \--seed 0 \--clip-skip 2 \-W 512 \-H 512 \--type f16 \-v你也来试一下吧!