本文分享自华为云社区《内网Docker发动Stable-Diffusion(AI作画)》,作者:tsjsdbd 。

最近看到K8s发动stable-diffusion的文章,想着在自己开发环境复现一下。没想到在内网环境还遇到这么多问题,记录一下。

1. 背景介绍

“AI作画”就是你给一段文字,AI主动生成图画;或许你给一张图画,AI主动生成另一种风格(比方自拍照=>漫画风)。这个方向的AI框架以开源的stable-diffusion为代表,闻名的Midjourney则是商业版的“AI作画”。

2. 环境预备

由于“AI作画”一般是GPU为主,虽然CPU也能够,但是速度相较GPU会慢很多(见下图)。所以这儿咱们预备一个带GPU的Docker环境。

记录内网Docker启动Stable-Diffusion遇到的几个坑

3. 下载镜像

依据文章里边提到的gpu版镜像地址(注:它这个镜像其实来自于开源社区:stable-diffusion-webui),直接:

docker pull zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu

这儿要连外网+非官方库房,所以有2个装备需求为docker设置

  • 为docker设置署理。

vi /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment=”HTTPS_PROXY=http://ip:3128″

相似这样,然后重启docker

  • 将方针库房地址设置为docker的信任库房。

vi /etc/docker/daemon.json

“insecure-registries”: [“zibai-registry.cn-hangzhou.cr.aliyuncs.com”],

相似这样。

4. 发动Docker容器

由于需求翻开Web页面,所以咱们的docker需求设置端口映射,否则无法通过浏览器拜访。

记录内网Docker启动Stable-Diffusion遇到的几个坑

所以docker发动会带2个额定的参数:(1)挂载GPU卡。(2)设置端口映射

docker run -it -p 80:7860 –gpus “device=1” zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu /bin/bash

5. 发动Stable-diffusion程序

在Docker容器中,依照发动指令执行:

python3 launch.py –listen

但是会报错:

记录内网Docker启动Stable-Diffusion遇到的几个坑

这是因为这个镜像会联网下载“模型”。而我的容器无法联网。所以这儿在容器里边设置署理:

export proxy=10.155.96.xx:3128
export http_proxy=proxyexporthttps_proxy=proxy export https\_proxy={http_proxy}

相似这样。但是还是下载失利,报“证书不合法”

记录内网Docker启动Stable-Diffusion遇到的几个坑

关于这个 “huggingface.co”证书不合法的问题。找了一圈解决方案,都无效。

比方,导出证书,

记录内网Docker启动Stable-Diffusion遇到的几个坑

然后复制到容器中,更新证书列表(2个证书都复制了,1个huggingface.co, 1个Huawei Web Secure):

update-ca-certificates

仍然报证书不合法。

记录内网Docker启动Stable-Diffusion遇到的几个坑

即使,我直接拜访 huggingface.co 是OK的

记录内网Docker启动Stable-Diffusion遇到的几个坑

也搜了相似的问题:github.com/huggingface…,但是仍然不行。

Ps:这儿证书问题不知道怎样解,有思路的同学,给点建议。

6. 修改代码,疏忽证书校验

真实没办法,搜到的资料说能够在Python恳求HTTP的函数里边封闭“证书校验”。

所以找到错误调用栈

记录内网Docker启动Stable-Diffusion遇到的几个坑

这个request发送的函数,有个“疏忽证书校验”的参数。

cat /stable-diffusion-webui/venv/lib/python3.8/site-packages/huggingface_hub/utils/_http.py

(ps:容器里边没有vi指令,所以我是在主机上改的。因为恣意容器里边的文件,都能够在主机Host上看到)

所以我将其改为:

response = requests.request(method=method, url=url, **kwargs)

=》

response = requests.request(method=method, url=url, verify=False, **kwargs)

然后总算,能够顺畅下载“模型”了

记录内网Docker启动Stable-Diffusion遇到的几个坑

模型下载完后,仍然报了个错:

记录内网Docker启动Stable-Diffusion遇到的几个坑

什么? localhost 不能拜访,怎样可能~ 搜到一个相似的问题:github.com/microsoft/T…

说是 署理原因,导致拜访本地失利。

所以加上:

export no_proxy=”localhost, 127.0.0.1, ::1″

报错,看来 ipv6 这个格局不认识。

记录内网Docker启动Stable-Diffusion遇到的几个坑

最终改为:

export no_proxy=”localhost, 127.0.0.1″

一切OK。

7. 翻开Stable-diffusion的WEB界面

浏览器输入开发机的地址,即可翻开Web界面(因为咱们设置了 80 端口映射)。

记录内网Docker启动Stable-Diffusion遇到的几个坑

试了下作用,一般般,可能是我魔法咒语(Prompt)念的不太行。

(ps:有个“咒语”参阅网站:civitai.com 从这儿边下载的模型,生成作用不错)。

记录内网Docker启动Stable-Diffusion遇到的几个坑

下载后,复制至对应目录:

docker cp ./majicmixRealistic_v4.safetensors 容器id:/stable-diffusion-webui/models/Stable-diffusion/

然后Web界面选择新下载的模型就行:

记录内网Docker启动Stable-Diffusion遇到的几个坑

仅供参阅~

点击关注,第一时间了解华为云新鲜技能~