本文分享自华为云社区《内网Docker发动Stable-Diffusion(AI作画)》,作者:tsjsdbd 。
最近看到K8s发动stable-diffusion的文章,想着在自己开发环境复现一下。没想到在内网环境还遇到这么多问题,记录一下。
1. 背景介绍
“AI作画”就是你给一段文字,AI主动生成图画;或许你给一张图画,AI主动生成另一种风格(比方自拍照=>漫画风)。这个方向的AI框架以开源的stable-diffusion为代表,闻名的Midjourney则是商业版的“AI作画”。
2. 环境预备
由于“AI作画”一般是GPU为主,虽然CPU也能够,但是速度相较GPU会慢很多(见下图)。所以这儿咱们预备一个带GPU的Docker环境。
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发动会带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
但是会报错:
这是因为这个镜像会联网下载“模型”。而我的容器无法联网。所以这儿在容器里边设置署理:
export proxy=10.155.96.xx:3128
export http_proxy=proxyexporthttps_proxy=proxy
export https\_proxy={http_proxy}
相似这样。但是还是下载失利,报“证书不合法”
关于这个 “huggingface.co”证书不合法的问题。找了一圈解决方案,都无效。
比方,导出证书,
然后复制到容器中,更新证书列表(2个证书都复制了,1个huggingface.co, 1个Huawei Web Secure):
update-ca-certificates
仍然报证书不合法。
即使,我直接拜访 huggingface.co 是OK的
也搜了相似的问题:github.com/huggingface…,但是仍然不行。
Ps:这儿证书问题不知道怎样解,有思路的同学,给点建议。
6. 修改代码,疏忽证书校验
真实没办法,搜到的资料说能够在Python恳求HTTP的函数里边封闭“证书校验”。
所以找到错误调用栈
这个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)
然后总算,能够顺畅下载“模型”了
模型下载完后,仍然报了个错:
什么? localhost 不能拜访,怎样可能~ 搜到一个相似的问题:github.com/microsoft/T…
说是 署理原因,导致拜访本地失利。
所以加上:
export no_proxy=”localhost, 127.0.0.1, ::1″
报错,看来 ipv6 这个格局不认识。
最终改为:
export no_proxy=”localhost, 127.0.0.1″
一切OK。
7. 翻开Stable-diffusion的WEB界面
浏览器输入开发机的地址,即可翻开Web界面(因为咱们设置了 80 端口映射)。
试了下作用,一般般,可能是我魔法咒语(Prompt)念的不太行。
(ps:有个“咒语”参阅网站:civitai.com 从这儿边下载的模型,生成作用不错)。
下载后,复制至对应目录:
docker cp ./majicmixRealistic_v4.safetensors 容器id:/stable-diffusion-webui/models/Stable-diffusion/
然后Web界面选择新下载的模型就行:
仅供参阅~
点击关注,第一时间了解华为云新鲜技能~