前言
同早段时间对接chatgpt一样,我们使用的是phpbb_ailabs项目。这个项目支持openai的DALL-E,官方的服务我们肯定是用不起的,而且还可能有隐私问题。
这里的作图后端我们是通过部署Localai实现的,其有着和openai相似的api,因此可以方便的集成到这个phpbb插件中。
模型我们使用的是 SDXL Turbo: https://huggingface.co/stabilityai/sdxl-turbo
只需要一个步长(step)即可出图,效果还不错,跑在我们24小时运行的迷你nuc上,intel N100 CPU大概20多秒可以出一张图。
LocalAI的部署细节
我们是通过docker compose
来部署的,避免处理各种依赖的编译问题compose.yaml
代码: 全选
THREADS
设置为你CPU的核数,COMPEL=0
这里的注释要去掉,设置为0
代码: 全选
local-ai-sd
而不是官方文档中的quay.io/go-skynet/local-ai:latest
,因为这是我们特殊处理过的,请接着往下面看。在最开始运行官方镜像后,我们在models目录下创建一个名为
stablediffusion.yaml
的配置文件,内容如下
代码: 全选
代码: 全选
docker compose down && docker compose up -d
)不再浪费时间下载模型,我们需要commit一个下载了作图模型的新image,fd3782b2c44d
换成你的容器id,可以通过docker ps
找到
代码: 全选
local-ai-sd
镜像就是这么来的。
2024-1-4 补充说明: 找到huggingface的缓存在 /root/.cache/huggingface,可以把这个路径挂载一下,就不需要上面的操作了。
这里我为LocalAI项目提交了一个PR,没有这个更改,截至发文时,在LocalAI中使用sdxl turbo模型生成的图片会出现大量的噪点,完全没法看,具体细节你可以点击下面的箭头展开来看。
查看细节
为什么会这样呢?看容器里的日志会发现有类似这样的提醒
stderr Keyword arguments {'guidance_scale': 1.0} are not expected by StableDiffusionXLPipeline and will be ignored.
根据SDXL Turbo官方的文档: https://huggingface.co/docs/diffusers/a ... sdxl_turbo
需要禁用掉
guidance_scale
,将其设置为0.0
,在LocalAI和Stable Diffusion webui中是通过配置cfg_scale=1
实现的。上面的日志说明我们的配置没有起到应有的作用,于是我就开始翻LocalAI的源码,再对比diffusers项目中的例子找到了问题的真正所在,详细更改见PR。修改前
修改后
目前这个PR已被合并,使用最新版即可
到这里LocalAI这个作图后端的部署细节算是介绍完了,下面讲解phpbb_ailabs这个插件的配置。phpbb_ailabs插件配置
虽然前面我们部署好了LocalAI的作图后端,看它的文档,表面上与openai兼容,但实际从v2.0+版本开始,已经不再完全兼容了。有人在matrix_chatgpt_bot项目里开issue我才发现这个问题,这个问题的解决为此插件的正确配置打下了基础。总结一下不兼容的地方就是,不再支持n
,response_format
等参数,请求的json body只能包含prompt
和size
。所以为了成功的在phpbb_allabs插件中对接我们的后端,必须对其代码进行一定的更改。
这里先放上我修改好的插件的repo地址: https://github.com/hibobmaster/phpbb_ailabs
主要修改的内容是去掉那些不兼容的参数以及
variations
功能
代码: 全选
512x512
,此外这里的api_key可以乱填,哪怕你没有在LocalAI中启用访问校验
代码: 全选
你可能会好奇不是说不兼容
response_format
吗,为啥这里还有?如果你看了代码的话,这个参数现在不会添加到json的请求体了,只是用来对响应做相应的判断。配置好后,就可以测试插件了。
Bonus time之如何修改图片附件的前缀名称
你可能会注意到,图片附件的名称大致是这样的ailabs_xxx_xx_x.png
下面介绍修改前缀的方法,找到
includes/AIController.php
下的image_filename
函数将ailabs改成你想要的名称即可
代码: 全选
修改后停止并重新启用插件即可,新生成图片的前缀名称将会是你设置的名称,效果如下
修改前:
修改后:
总结
希望上面的教程能够给那些想为phpbb论坛对接stable diffusion作图功能的朋友提供一些帮助。由于我不是特别熟悉php开发,上面的魔改可能会导致原版Dall-E的功能没法正常使用了。
此外这套作图方案的缺点就是比较占用空间,docker容器的镜像大小,大概有70多G
最后非常感谢下面的开发者,没有他们的开源项目,我们也没法为大家提供这么好玩的东东。
- huggingface的SDXL Turbo模型,没有该模型,我们也没法让作图功能“流畅”的在CPU上跑起来
- LocalAI项目,该项目让我们能够方便的部署自己的大语言模型、AI作图后端等
- phpbb_ailabs插件的作者privet.fun,让我们能够通过原生的方式将AI集成进phpbb论坛中