换模型更简单如何用 Serverless 一键部署 Stable Diffusion?

Posted 阿里系统软件技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了换模型更简单如何用 Serverless 一键部署 Stable Diffusion?相关的知识,希望对你有一定的参考价值。

本篇则将以更大众的方式实现本地电脑的平替,使得人人皆可拥有一套实用的 Stable Diffusion 服务,不管你是普通用户,或者是技术同学,皆可适用。

作者:寒斜

本篇章是阿里云函数计算部署 Stable Diffusion 系列的第三篇,如果说第一篇是尝试使用云服务来解决用户本地部署 Stable Diffusion 的问题(显卡成本,部署技术复杂),第二篇是面向技术同学解决云服务 Stable Diffusion 的实用性问题(自定义模型,扩展),那么本篇则是以更大众的方式实现本地电脑的平替,使得人人皆可拥有一套实用的 Stable Diffusion 服务,不管你是普通用户,或者是技术同学,皆可适用。

前置条件

1. 注册并登录阿里云账号 [ 1]

2. 开通函数计算 [ 2]

3. 开通文件存储 NAS 服务 [ 3]

函数计算和文件存储 NAS 都是使用的时候才去计费,目前,函数计算和文件存储 NAS 都有新用户免费额度,可以去阿里云官网领取。

快速开始

首先进入应用中心:https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Ffcnext.console.aliyun.com%2Fapplications&lang=zh

通过模版创建应用-> 人工智能选项卡-> AI 数字绘画 Stable-Diffusion 自定义模板->立即创建。

填写表单项

选择直接部署-> 杭州地域 -> 复制开发者准备好的容器镜像点击创建并部署默认环境。

应用部署

接下来什么都不需要操作,等待应用部署即可,约花费 5-10 分钟, 如果你是技术同学,可以展开看看我们提供的部署日志,观察部署过程。

配置管理后台

部署成功后得到两个域名。

其中 Stable Diffusion 开头的是主服务,目前因为没镜像还不能访问,admin 开头的是我们的管理后台,接下来我们需要先配置一下管理后台,然后把我们的模型上传上去。

管理后台使用的是可道云提供的 kod-box,对于你而言一路点点点,就可以。

等初始化好之后,设置自己的登录账号和密码:

之后进行登录:

登录后在路径输入 /mnt/auto/sd。

如果你熟悉 sd-webui 的目录的话,你可以看到对应的目录:

接下来我们打开 /mnt/auto/sd/models/Stable-diffusion/,然后点击上传->离线下载。

在这里我们输入 sd1.5 的模型地址:https://huggingface.co/runwayml/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.ckpt

当然,你也可以输入任意自己的地址,除了下载,你也可以把本地的模型直接拖拽上传。

因为模型较大,下载时间预计花费 5-15 分钟,可以休息等待一下(如果提示出错可以忽略)。

另外需要格外注意,如果是从 huggingface 源站下载下来的文件,需要把文件后缀改一下。

模型下载完,我们可以打开 Stable Diffusion 的服务了。

源码定制

在这里也贴上构建镜像的源码,如果您是一名开发同学,可以构建自己的镜像。

基于↓

https://github.com/AbdBarho/stable-diffusion-webui-docker/tree/master/services/AUTOMATIC1111

这个项目,替换其中的 entrypoint.sh

#!/bin/bash

set -Eeuo pipefail

# TODO: move all mkdir -p ?
mkdir -p /mnt/auto/sd/config/auto/scripts/
# mount scripts individually
find "$ROOT/scripts/" -maxdepth 1 -type l -delete
cp -vrfTs /mnt/auto/sd/config/auto/scripts/ "$ROOT/scripts/"

cp -n /docker/config.json /mnt/auto/sd/config/auto/config.json
jq \'. * input\' /mnt/auto/sd/config/auto/config.json /docker/config.json | sponge /mnt/auto/sd/config/auto/config.json

if [ ! -f /mnt/auto/sd/config/auto/ui-config.json ]; then
  echo \'\' >/mnt/auto/sd/config/auto/ui-config.json
fi

declare -A MOUNTS

MOUNTS["/root/.cache"]="/mnt/auto/sd/.cache"

# main
MOUNTS["$ROOT/models"]="/mnt/auto/sd/models"
MOUNTS["$ROOT/embeddings"]="/mnt/auto/sd/embeddings"
MOUNTS["$ROOT/config.json"]="/mnt/auto/sd/config/auto/config.json"
MOUNTS["$ROOT/ui-config.json"]="/mnt/auto/sd/config/auto/ui-config.json"
MOUNTS["$ROOT/extensions"]="/mnt/auto/sd/config/auto/extensions"
MOUNTS["$ROOT/outputs"]="/mnt/auto/sd/config/auto/outputs"
MOUNTS["$ROOT/extensions-builtin"]="/mnt/auto/sd/extensions-builtin"
MOUNTS["$ROOT/configs"]="/mnt/auto/sd/configs"
MOUNTS["$ROOT/localizations"]="/mnt/auto/sd/localizations"

# extra hacks
MOUNTS["$ROOT/repositories/CodeFormer/weights/facelib"]="/mnt/auto/sd/.cache"

for to_path in "$!MOUNTS[@]"; do
  set -Eeuo pipefail
  from_path="$MOUNTS[$to_path]"
  rm -rf "$to_path"
  if [ ! -f "$from_path" ]; then
    mkdir -vp "$from_path"
  fi
  mkdir -vp "$(dirname "$to_path")"
  ln -sT "$from_path" "$to_path"
  echo Mounted $(basename "$from_path")
done

if [ -f "/mnt/auto/sd/config/auto/startup.sh" ]; then
  pushd $ROOT
  . /mnt/auto/sd/config/auto/startup.sh
  popd
fi

exec "$@"

定制好自己的镜像之后替换上面流程中需要填写的镜像部分即可,注意对应好地域。

Q&A

下载模型不可用

需要检查模型的文件命名是否正确。

插件无法在线安装

容器镜像部署有安全限制,可以将插件下载到本地,然后通过管理后台上传到 extensions 目录下,如果想支持通过 url ,需要自行定制 docker 镜像,修改相关的参数。

如何访问到 Stable Diffusion 的api

需要定制镜像,开启 --api 参数,然后访问 /docs 查看可调用 api。

资费部分

本次应用依赖函数计算和 NAS 文件存储,使用前请先领取相应的免费额度或者购买相应的资源包,具体的资费说明,请参考官网说明。

更灵活的定制方案

可以尝试将整个 webui 目录映射至 NAS, 这样修改源码比较方便。

其他注意事项

请关注对应的开源协议,防止您商业化可能的风险。

有奖体验

阿里云将提供免费 Serverless 函数计算产品资源,邀请你,体验一把 AIGC 级的毕加索、达芬奇、梵高等大师作画的快感。下面请尽情发挥你的想象空间!!双重奖品设置,完成体验场景可得社区 1000 积分兑换奖品,还可参加 AI 生成图像比赛赢取 Airpods、500 元猫超卡及社区定制抱枕!

如何用 Gitlab 一键实现 CI 持续集成?

背景

在目前快节奏生活已经成为社会风潮的大背景下,越来越多的互联网公司为了其应用产品能更快的掌控风向脉搏,抢占市场红利,需要更快速的应用产品开发上线,在市场的反馈下,不断的迭代新功能。在此需求下,持续集成,持续部署,持续交付被越来愈多公司所推崇,DevOPS文化的兴起,一方面是实践打破运维与研发的堡垒之墙,另一方面也是敏捷开发过程中的必要产物。

提高软件开发效能,快速迭代、快速试错,以及根据自己开发团队特点,使用怎样的技术手段,才能是软件开发效能最高,更为快速敏捷,以及怎样才能满足产品能在最短周期、高质量的交付业务的诉求?

本专栏在此背景下为大家提供Gitlab CI持续集成方案,通过一些列实战,让各位能够能直观清晰的理解这种模式,本专栏为抛砖引玉,各位结合,读者可以结合自己实际的生产环境来考虑是否引入此中模式,优化交付流程,释放研发最能大潜能,与此同时,读者可以在本专栏体验端到端的 CICD 的如丝般顺滑的CI体验,并且无论运维人员还是开发人员都能够在本专栏更系统宏观的了解和学习Gitlab CI的流程及具体操作方式。

一、 Gitlab

提到Gitlab CI,大家可能都会想到Gitlab,其作为目前最火的开业git托管服务端,相较于Github,各企业可以进行私有化部署,服务器自己维护,项目数据更加安全更可控,网络也更快及更安全。

Gitlab 为用户提供友好的web界面,可以在线代码查看提交,多人协作在线code review,另外提供webhook及自建应用介入,强大的功能已经为大多数互联网公司作为首选的代码仓库,其自带的Gitlab CI,不依托于其他发布软件,天然快速集成项目CI功能,更好的切合业务敏捷开发快速持续集成及部署的需求。

二、 持续集成

在谈论Gitlab CI前,我们都知道持续集成,它是一种软件开发实践,其为了保证让开发的产品可以保持高质量的情况下快速迭代,频繁的将测试通过的代码合并到主分支中,不断的去尽早的试错,更为敏捷的开发。

三 Gitlab CI

通过上面的内容,我们已经能够清楚的知道在快速发展的当下,敏捷是一种高效的开发模式,持续集成是我们在其过程中的必要措施,那么如何实现这个持续集成呢,这时候就需要我们通过DevOPS的解决方案来实现,在此我们知道了大多数企业利用Gitlab,那们我们使用Gitlab CI来同一套系统来实现持续集成给为快捷统一。

四 Gitlab CI的优势

作为Gitlab自带的持续集成解决方案,代码使用 GitLab 进行托管,Gitlab CI天然集无需额外配置,不需要运维人员去单独维护其他CI系统,避免多点故障引入,只用做好Gitlab的维护即可。

Gitlab CI的触发为Git提交检索.gitlab-ci.yaml文件触发,其免去了第三方CI服务器对利用webhook定时请求Gitlab的压力,如果配置的项目流水线很多,这个压力不容小觑。

Gitlab CI本身设计为Config as Code将CI/CD配置托管在项目中,避免每个人手工配置的CI或还有不一致带来的问题。

Gitlab CI真正的架构为C/S架构模式,可方面的进行横向扩展,运行job性能上不会有影响,
其构建包含构建日志,容易溯源追踪。

其CI过程利用gitlab 自带的邮件通知,不用额外配置通知。

了解了Gitlab CI的优势,是不是有了一定的兴趣跃跃欲试,让我们来一块走进Gitlab CI得实战,一块领略如丝般顺滑的持续集成体验,通过专栏通过四个实战,可以根据自己公司特点来改进流水线,适用于发布物理服务器,虚拟机,公有云/私有云,已经K8s等。打破研发与运维的壁垒,提高团队及协作/快速反馈/响应变化。

五 注意事项

本专栏内容由浅入深,从理论到实践,虽然为微专栏,但是能从CI原理流程分析及前后端项目多环境混合部署,全方位多层次的深入了解及实战Gitlab CI,相信无论您目前使用的是那种CI/CD方案,通过本专栏一定能让您从不同角度来重新认识CI。

本专栏前两个实战门槛较低,使用于物理服务器/虚拟机/云服务器等,第三篇需要读者具备一定的K8s知识,相信在不久的将来,微服务大行其道,第三篇定能祝你一臂之力。

【3元微专栏 】
?打破运维开发壁垒
?教你用Gitlab一键实现CI持续集成
一起学习>>>https://blog.51cto.com/cloumn/detail/94

技术图片

以上是关于换模型更简单如何用 Serverless 一键部署 Stable Diffusion?的主要内容,如果未能解决你的问题,请参考以下文章

AI 作画火了,如何用 Serverless 函数计算部署 Stable Diffusion?

如何用Serverless让SaaS获得更灵活的租户隔离和更优的资源开销

如何用Serverless让SaaS获得更灵活的租户隔离和更优的资源开销

如何用 Gitlab 一键实现 CI 持续集成?

如何用阿里云函数计算结合API网关构建自己的serverless服务

如何用容器实现生产级Redis sharding集群一键交付