- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
摘要: 最近看到K8s启动stable-diffusion的文章,想着在自己开发环境复现一下。没想到在内网环境还遇到这么多问题,记录一下。
本文分享自华为云社区《 内网Docker启动Stable-Diffusion(AI作画) 》,作者:tsjsdbd .
最近看到K8s启动stable-diffusion的文章,想着在自己开发环境复现一下。没想到在内网环境还遇到这么多问题,记录一下.
“AI作画”就是你给一段文字,AI自动生成图像;或者你给一张图像,AI自动生成另一种风格(比如自拍照=>漫画风)。这个方向的AI框架以开源的stable-diffusion为代表,著名的Midjourney则是商业版的“AI作画”.
由于“AI作画”一般是GPU为主,虽然CPU也可以,但是速度相较GPU会慢很多(见下图)。所以这里我们准备一个带GPU的Docker环境.
根据文章里面提到的gpu版镜像地址(注:它这个镜像其实来自于开源社区: stable-diffusion-webui ),直接:
docker pull zibai-registry.cn-hangzhou.cr.aliyuncs.com/gpt/stable-diffusion:v1.gpu
这里要连外网+非官方仓库,所以有2个配置需要为docker设置 。
vi /etc/systemd/system/docker.service.d/http- proxy.conf [Service] Environment = " HTTPS_PROXY=http://ip:3128 "
类似这样,然后重启docker 。
vi /etc/docker/ daemon.json " insecure-registries " : [ " zibai-registry.cn-hangzhou.cr.aliyuncs.com " ],
类似这样.
由于需要打开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
在Docker容器中,按照启动命令执行:
python3 launch.py --listen
但是会报错:
这是因为这个镜像会联网下载“模型”。而我的容器无法联网。所以这里在容器里面设置代理:
export proxy=http: // 10.155.96.xx:3128 export http_proxy= $proxy export https_proxy =${http_proxy}
类似这样。但是还是下载失败,报“证书不合法” 。
关于这个 “huggingface.co”证书不合法的问题。找了一圈解决方案,都无效.
比如,导出证书, 。
然后拷贝到容器中,更新证书列表(2个证书都拷贝了,1个huggingface.co, 1个Huawei Web Secure):
update-ca-certificates
依然报证书不合法.
即使,我直接访问 huggingface.co 是OK的 。
也搜了类似的问题: https://github.com/huggingface/hub-docs/issues/54 ,但是仍然不行.
Ps:这里证书问题不知道怎么解,有思路的同学,给点建议.
实在没办法,搜到的资料说可以在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 不能访问,怎么可能~ 搜到一个类似的问题: https://github.com/microsoft/TaskMatrix/issues/250 。
说是代理原因,导致访问本地失败.
于是加上:
export no_proxy= " localhost, 127.0.0.1, ::1 "
报错,看来 ipv6 这个格式不认识.
最终改为:
export no_proxy= " localhost, 127.0.0.1 "
一切OK.
浏览器输入开发机的地址,即可打开Web界面(因为我们设置了 80 端口映射).
试了下效果,一般般,可能是我魔法咒语(Prompt)念的不太行.
(ps:有个“咒语”参考网站: https://civitai.com 从这里面下载的模型,生成效果不错).
下载后,拷贝至对应目录:
docker cp ./majicmixRealistic_v4.safetensors 容器id:/stable-diffusion-webui/models/Stable-diffusion/
然后Web界面选择新下载的模型就行:
仅供参考~ 。
《 基于容器平台 ACK 快速搭建 Stable Diffusion 》 。
其中Docker镜像对应dockerfile(万一镜像无法下载):
FROM nvidia/cuda: 11.3 . 0 -cudnn8-runtime-ubuntu20. 04 ENV DEBIAN_FRONTEND noninteractive RUN apt - get update && apt- get install -y --no-install- recommends \ libgl1 libglib2. 0 - 0 git wget python3 python3-venv && \ apt - get clean && \ rm -rf / var /lib/apt/lists /* ADD . /stable-diffusion-webui WORKDIR /stable-diffusion-webui/ RUN ./webui.sh -f can_run_as_root --exit --skip-torch-cuda-test ENV VIRTUAL_ENV=/stable-diffusion-webui/venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" VOLUME /stable-diffusion-webui/models VOLUME /root/.cache CMD ["python3", "launch.py", "--listen"]
。
点击关注,第一时间了解华为云新鲜技术~ 。
最后此篇关于记录内网Docker启动Stable-Diffusion遇到的几个坑的文章就讲到这里了,如果你想了解更多关于记录内网Docker启动Stable-Diffusion遇到的几个坑的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在寻找的服务器是: 轻量级, 非 buggy , 支持.NET, 在客户端上运行以进行测试, 在Windows上运行 Cassinni太过马车,IIS太昂贵,Apache很难安装,XSP仅是lin
所以我有大约10个短的css文件,可以与mvc应用程序一起使用。 有像 error.css login.css 等等... 仅有一些非常短的CSS文件,这些文件使更新和编辑变得容易(至少对我而言)。我
我正在编写程序来自动化 win32 表单。我正在使用 Microsoft UI 自动化库。我不知道如何获取和调用该表单上的预定义快捷键。现在我只需获取 MenuItem 的 AutomationEle
我有一个在后台线程上运行的及时操作。运行时,我当前将光标置于等待状态: Mouse.OverrideCursor = Cursors.Wait 我刚刚实现了一项功能,允许用户在厌倦等待时单击“取消”按
如何找到所有可能直接或间接调用给定方法的单元测试?当我更改方法时,我希望知道要运行的最佳测试;必须有一个工具! 因为我们有很多接口(interface),所以我对所有调用接口(interface)方法
我想知道,一个类会被装箱吗?我一直假设每个类都有一个虚拟表,可以用来标识类,所以它需要装箱吗? 最佳答案 只有值类型(结构)被装箱。类实例不会被装箱。 关于.net - 类是盒装的吗? 。网,我们在S
所以接下来有一个按钮调用(页面)。它的 href 链接是 site/blah/#。所以我知道它真正运行的 javascript 代码。在我解析完第一页后,我想解析下一页。我如何模拟鼠标点击,以便我可以
我想知道是否有人对解决以下设计问题有好的建议/模式。我有一个命令类的层次结构。在最抽象的层面上,我有一个 ICommand 接口(interface)。执行 ICommand 的 RunCommand
我在资源(xsd 文件)中有几个文件可用于验证收到的 xml 消息。我使用的资源文件名为 AppResources.resx,它包含一个名为 clientModels.xsd 的文件。当我尝试使用这样
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
(最后的简短版本) 我目前正在开发的软件需要跟踪任意数量的 MS Office 文件,现在需要提供将所有这些文件一起打印的功能,以及一些应用程序数据(可能会发送到打印机作为 .xps、.html 或
我想在不指定命名空间或程序集的情况下按名称(字符串)实例化一个类。像这样(Unity 语法): var processor = container.Resolve("SpecialProcessor"
我有一些代码可以对 64 位整数进行大量比较,但是它必须考虑数字的长度,就好像它被格式化为字符串一样。我无法更改调用代码,只能更改函数。 最简单的方法(除了 .ToString().Length 之外
使用遗留代码,我发现我有很多这样的语句(超过 500 个) bool isAEqualsB = (a == b) ? true : false; 这样重写有意义吗? bool isAEqualsB =
我有这个: AudioPlayer player = new AudioPlayer(); player.Directory = vc.Directory; player.StartTime = vc
我已经阅读了很多关于双重检查锁定的危险的文章,我会努力远离它,但话虽如此,我认为他们的阅读非常有趣。 我正在阅读 Joe Duffy 的这篇关于使用双重检查锁定实现单例的文章: http://www.
对于可变类型,值类型和引用类型之间的行为差异很明显: // Mutable value type PointMutStruct pms1 = new PointMutStruct(1, 2); P
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this q
我有一个 Cordova pp 我在 Controller 中调用post方法 它可以在浏览器中工作,但是在构建和调试apk时出现错误 ionic.bundle.js:23826 POST http:
我们正在尝试将时间戳附加到某些 URL 以让内容缓存但在它们发生更改时更新它们。我们有代码可以归结为: DateTime ts = File.GetLastWriteTime(absPath); 其中
我是一名优秀的程序员,十分优秀!