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

本文分享自华为云社区《内网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=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:这里证书问题不知道怎么解,有思路的同学,给点建议。

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 不能访问,怎么可能~ 搜到一个类似的问题: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。

7. 打开Stable-diffusion的WEB界面

浏览器输入开发机的地址,即可打开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遇到的几个坑的更多相关文章

  1. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  2. 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法

    一开始进入系统显示reboot and select proper boot device or insert boot media in selected boot device and press ...

  3. 内网穿透—使用 frp 实现内外网互通

    前言 什么是内网穿透? 内网穿透,又叫 NET 穿透,是计算机用语.用通俗的说法就是你家里的个人电脑,可以直接被外网的人访问.例如你在公司,不通过远程工具,直接也可以访问到家里的电脑(本文章特指 we ...

  4. 使用内网的Docker Image启动AcmeAir应用

    1.修改docker启动选项,添加信赖私有仓库 为了拉取docker.oneapm.me仓库里的镜像,我们需要将它添加为信赖仓库,方式是在启动选项中添加 --insecure-registry doc ...

  5. Docker源码安装附内网镜像安装演示

    Docker源码安装附内网镜像安装演示 系统版本要求 当前系统版本:CentOS Linux release 7.9.2009 (Core) 内核版本:3.10.0-1160.el7.x86_64 注 ...

  6. Docker 18.03 Centos7.6 安装 内网

    首先访问https://download.docker.com/linux/centos/7/x86_64/stable/Packages/获取对应版本的rpm包docker包docker-ce-18 ...

  7. 在centos下部署docker内网私服

    Docker内网私服:docker-registry with nginx & ssl on centos docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已 ...

  8. 内网环境上部署k8s+docker集群:集群ftp的yum源配置

    接触docker已经有一年了,想把做的时候的一些知识分享给大家. 因为公司机房是内网环境无法连接外网,所以这里所有的部署都是基于内网环境进行的. 首先,需要通过ftp服务制作本地的yum源,可以从ht ...

  9. Centos下内网DNS主从环境部署记录

    一.DNS是什么?DNS(Domain Name System),即域名系统.它使用层次结构的命名系统,将域名和IP地址相互映射,形成一个分布式数据库系统. DNS采用C-S架构,服务器端工作在UDP ...

  10. 非节点主机通过内网远程管理docker swarm集群

    这是今天使用 docker swarm 遇到的一个问题,终于在睡觉前解决了,在这篇随笔中记录一下. 在 docker swarm 集群的 manager 节点上用 docker cli 命令可以正常管 ...

随机推荐

  1. SpringBoot笔记--配置->profile的配置

    profile--动态配置切换 profile配置方式: 使用spring.profile.active=进行激活.properties文件 直接使用一个.yml文件代替多文件配置 使用---分隔符分 ...

  2. 在CentOS中搭建NFS

    概述 NFS是一款经典的网络文件系统,在Linux上我们可以通过创建一个NFS服务在不同的服务器之间共享磁盘文件,而不用在多个服务器之间进行不断的拷贝复制,麻烦且浪费存储空间.在k8s中我们也可以使用 ...

  3. ArchLinux 作业系统安装教程

    如果你能看到此文,想必你一定玩过不少的发行商发行的 Linux 作业系统或者听说过很多发行商发行的 Linux 作业系统.如果你玩过不少的 Linux 作业系统,对于安装系统可谓是轻车熟路,就是闭着眼 ...

  4. 穷人版生产力工具,好用得飞起 「GitHub 热点速览」

    被 GPT 和 OpenAI 刷屏了一个多月,现在 GitHub Trending 已经没有什么和 gpt 无关的项目了,但是好在总有优秀的开源项目拯救我的项目疲惫.像是贴心好用的反向代理 pgrok ...

  5. Spring 依赖注入有哪几种方式

    1. 构造器注入 /*带参数,方便利用构造器进行注入*/   public CatDaoImpl(String message){               this. message = mess ...

  6. Windows无线连接路由器成功但无法网

    Windows10连接Wifi成功,任务栏无线图标没有感叹号,但是无法连接到网络,重启电脑才能连接上,手机连接这个网络却可以一直联通.本人使用的是intel 9260无线网卡,经过测试,我通过这个方法 ...

  7. 如何使用Photino创建Blazor项目进行跨平台

    Photino是什么 Photino是一组使用Web (HTML/CSS/JavaScript)UI创建桌面应用程序的技术.TryPhotino.io 维护 .NET 构建,并鼓励社区开发 Photi ...

  8. OPP前三次作业总结

    OPP前三次作业总结 目录 前言: 第一次OOP训练: 7-7 有重复的数据 设计与分析: 具体代码 踩坑心得 改进建议 7-8 从一个字符串中移除包含在另一个字符串中的字符 设计与分析: 具体代码 ...

  9. Golang 挑战:编写函数 walk(x interface{}, fn func(string)),参数为结构体 x,并对 x 中的所有字符串字段调用 fn 函数。难度级别:递归。

    golang 挑战:编写函数 walk(x interface{}, fn func(string)),参数为结构体 x,并对 x 中的所有字符串字段调用 fn 函数.难度级别:递归. 为此,我们需要 ...

  10. AIArena Frontend 初步练习

    尝试对starter项目的页面进行改变 修改侧边栏,只留下最上面的「仪表盘」和「列表页」两个大模块 in SideNav.vue the code for the sidebar menu is: & ...