AI 容器镜像部署 Stable Diffusion

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器(按量付费),48vCPU 186GiB
简介: 本文将基于阿里云 AMD 服务器和龙蜥 AI 容器服务,快速搭建出个人版文生图服务

背景介绍

Stable Diffusion 是于 2022 年发布的文本到图像的潜在扩散模型,它可以根据文本提示词产生对应的图像。Stable Diffusion 模型是扩散模型的变种,可以通过逐步对随机高斯噪声进行去噪以获得感兴趣的样本。与传统生成模型相比,Stable Diffusion 可以在不需要复杂训练过程或大量数据集的情况下生成出真实感强、细节丰富的图像。目前该项目已经应用于多种场景,包括计算机视觉、数字艺术、视频游戏等领域。

本文将基于阿里云 AMD 服务器和龙蜥 AI 容器服务,快速搭建出个人版文生图服务。

创建 ECS 实例

创建 ECS 实例时需要根据模型的大小对实例规格进行选择。由于整个模型的推理过程需要耗费大量的计算资源,运行时内存占用大量内存,为了保证模型运行的稳定,实例规格选择 ecs.g8a.16xlarge。同时,Stable Diffusion 的运行需要下载多个模型文件,会占用大量存储空间,在创建实例时,存储盘至少分配 100 GB。最后,为了保证环境安装以及模型下载的速度,实例带宽分配 100 Mbps。

实例操作系统选择 Alibaba Cloud Linux 3.2104 LTS 64 位。

创建 Docker 运行环境

安装 Docker

在 Alibaba Cloud Linux 3 上安装 Docker 可以参考 安装Docker并使用(Linux)。安装完成后请确保 Docker 守护进程已经启用。

systemctl status docker

创建并运行 PyTorch AI 容器

龙蜥社区提供了丰富的基于 Anolis OS 的容器镜像,其中就包括针对 AMD 优化的 PyTorch 镜像,可以使用该镜像直接创建一个 PyTorch 运行环境。

docker pull registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1
docker run -d -it --name pytorch-amd --net host -v $HOME:/root registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1

以上命令首先拉取容器镜像,随后使用该镜像创建一个以分离模式运行的,名为pytorch-amd的容器,并将用户的家目录映射到容器中,以保留开发内容。

手动部署流程

进入容器环境

PyTorch 容器创建运行后,使用以下命令进入容器环境。

docker exec -it -w /root pytorch-amd /bin/bash

后续命令需在容器环境中执行,如意外退出,请使用以上命令重新进入容器环境。如需查看当前环境是否为容器,可以使用以下命令查询。

cat /proc/1/cgroup | grep docker
# 有回显信息则为容器环境

软件安装配置

在部署 Stable Diffusion 之前,需要安装一些必备软件。

yum install -y git git-lfs wget mesa-libGL gperftools-libs

后续下载预训练模型需要启用 Git LFS 的支持。

git lfs install

下载源码与预训练模型

下载 Stable Diffusion web UI 的源码。

git clone -b v1.5.2 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

Stable Diffusion web UI 在部署过程中需要克隆多个代码仓库,由于克隆过程受到网络波动,可能会出现失败。

mkdir stable-diffusion-webui/repositories && cd $_
git clone https://github.com/Stability-AI/stablediffusion.git stable-diffusion-stability-ai
git clone https://github.com/Stability-AI/generative-models.git generative-models
git clone https://github.com/crowsonkb/k-diffusion.git k-diffusion
git clone https://github.com/sczhou/CodeFormer.git CodeFormer
git clone https://github.com/salesforce/BLIP.git BLIP

所有代码仓库克隆成功后,需要将各代码仓库切换到指定分支,以保证生成结果的稳定。

git -C stable-diffusion-stability-ai checkout cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf
git -C generative-models checkout 5c10deee76adad0032b412294130090932317a87
git -C k-diffusion checkout c9fe758757e022f05ca5a53fa8fac28889e4f1cf
git -C CodeFormer checkout c5b4593074ba6214284d6acd5f1719b6c5d739af
git -C BLIP checkout 48211a1594f1321b00f14c9f7a5b4813144b2fb9

在 Stable Diffusion 运行时,需要使用到预训练模型,由于模型文件较大(约 11G),这里将手动下载预训练模型。

cd ~ && mkdir -p stable-diffusion-webui/models/Stable-diffusion
wget "https://www.modelscope.cn/api/v1/models/AI-ModelScope/stable-diffusion-v1-5/repo?Revision=master&FilePath=v1-5-pruned-emaonly.safetensors" -O stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
mkdir -p ~/stable-diffusion-webui/models/clip
git clone --depth=1 https://gitee.com/modelee/clip-vit-large-patch14.git ~/stable-diffusion-webui/models/clip/clip-vit-large-patch14

由于 Stable Diffusion 运行时需要从 HuggingFace 下载 ViT 多模态模型,由于该模型已经使用国内镜像下载,需要修改脚本文件直接从本地调用该模型。

sed -i "s?openai/clip-vit-large-patch14?${HOME}/stable-diffusion-webui/models/clip/clip-vit-large-patch14?g" ~/stable-diffusion-webui/repositories/stable-diffusion-stability-ai/ldm/modules/encoders/modules.py

部署运行环境

在部署 Python 环境之前,可以更换 pip 下载源,加快依赖包的下载速度。

mkdir -p ~/.config/pip && cat > ~/.config/pip/pip.conf <<EOF
[global]
index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
[install]
trusted-host=mirrors.cloud.aliyuncs.com
EOF

安装 Python 运行依赖。

pip install cython gfpgan open-clip-torch==2.8.0 httpx==0.24.1
pip install git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1

为了保证 ZenDNN 可以完全释放 CPU 算力,需要设置两个环境变量:OMP_NUM_THREADSGOMP_CPU_AFFINITY

cat > /etc/profile.d/env.sh <<EOF
export OMP_NUM_THREADS=\$(nproc --all)
export GOMP_CPU_AFFINITY=0-\$(( \$(nproc --all) - 1 ))
EOF
source /etc/profile

最后运行脚本自动化部署 Stable Diffusion 的运行环境。

cd ~/stable-diffusion-webui
venv_dir="-" ./webui.sh -f --skip-torch-cuda-test --exit

运行网页版 Demo

在项目源码中提供了网页版 Demo,可以用来和 Stable Diffusion 进行实时交互。

export LD_PRELOAD=/usr/lib64/libtcmalloc.so.4
export venv_dir="-" 
python3 launch.py -f --skip-torch-cuda-test --skip-version-check --no-half --precision full --use-cpu all --listen

部署完成后可以通过 http://<ECS 公网 IP>:7860 来访问服务。

image.png

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第30天】随着云计算和微服务架构的兴起,传统的运维模式已难以满足快速迭代和高可用性的需求。本文探讨了如何利用容器技术构建一个高效、可靠的自动化运维体系,重点分析了Docker和Kubernetes在这一过程中的关键作用,并提出了一套基于这些技术的持续集成(CI)与持续部署(CD)解决方案。通过实际案例和操作步骤的详细阐述,文章为读者提供了一种实现自动化运维的有效途径,同时对未来运维技术的发展趋势进行了展望。
|
2天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署(CI/CD)实践
【5月更文挑战第30天】 在当今快速迭代的软件开发周期中,自动化运维成为确保交付速度和质量的关键因素。本文聚焦于如何利用容器技术实现高效自动化运维体系,特别是持续集成(CI)与持续部署(CD)的实践。通过深入分析容器化工具如Docker和Kubernetes在自动化流程中的应用,以及它们如何帮助实现环境的一致性、降低部署风险并提高生产效率,本文旨在为运维专业人员提供一套切实可行的参考方案。
|
4天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】在当今快速迭代的软件发布周期中,传统的运维模式已难以满足敏捷开发和市场的需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点介绍基于Docker和Kubernetes的持续集成(CI)与持续部署(CD)的最佳实践。文章不仅涵盖技术实施细节,还包括如何优化流程、确保系统稳定性以及提高团队协作效率的策略。
|
4天前
|
运维 Kubernetes jenkins
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】 在现代软件工程实践中,持续集成(CI)和持续部署(CD)已成为提升开发效率、确保产品质量的关键环节。本文旨在探讨如何利用容器技术构建一套高效、可靠的自动化运维系统,以支持敏捷开发流程和微服务架构。通过对Docker容器及Kubernetes集群管理工具的深入分析,我们提出了一种结合Jenkins实现自动化测试、构建与部署的完整解决方案,并讨论了其在现实业务中的应用效果和面临的挑战。
|
4天前
|
运维 监控 安全
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】在现代IT基础设施管理中,自动化运维已成为提升效率、确保稳定性的关键手段。本文将探讨如何利用容器技术实现软件的持续集成(CI)与持续部署(CD),从而构建一套高效的自动化运维体系。通过分析容器化的优势和挑战,结合DevOps文化,我们提出一个实用的框架,以帮助企业快速响应市场变化,缩短产品上市时间,同时保障服务的高可用性。
|
5天前
|
运维 监控 Kubernetes
构建高效自动化运维体系:基于容器技术的持续部署策略
【5月更文挑战第27天】 在现代IT基础设施的管理中,自动化运维已成为提升效率、保障稳定性的关键因素。本文将探讨如何利用容器技术实现服务的快速部署和可靠运行,以及构建一个高效的自动化运维体系。通过深入分析容器化的优势与挑战,并提出一个切实可行的持续部署策略,旨在帮助运维团队优化现有流程,应对快速变化的业务需求。
|
7天前
|
存储 弹性计算 人工智能
【阿里云弹性计算】AI 训练与推理在阿里云 ECS 上的高效部署与优化
【5月更文挑战第25天】阿里云ECS为AI训练和推理提供弹性、可扩展的计算资源,确保高性能和稳定性。通过灵活配置实例类型、利用存储服务管理数据,以及优化模型和代码,用户能实现高效部署和优化。自动伸缩、任务调度和成本控制等策略进一步提升效率。随着AI技术发展,阿里云ECS将持续助力科研和企业创新,驱动人工智能新时代。
25 0
|
8天前
|
存储 人工智能 Serverless
“黏土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
使用阿里云函数计算FC,快速部署AI绘画工具ComfyUI,体验高质量图像生成。新用户可享180元试用额度,包括GPU、vCPU、内存和调用次数。开通FC和文件存储NAS,通过应用中心选择ComfyUI模板创建应用。
“黏土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
|
8天前
|
人工智能 弹性计算 监控
【阿里云云原生专栏】阿里云云原生与AI结合:智能应用的快速构建与部署
【5月更文挑战第24天】阿里云融合云原生和AI技术,助力快速构建智能应用。弹性伸缩、CI/CD、微服务和自动化运维带来优势。通过需求分析、环境准备、数据处理、模型开发到服务部署,阿里云提供容器服务、函数计算、服务网格等工具,支持自动化测试和监控,实现一站式智能应用开发。示例代码展示创建ACK集群和部署AI模型服务过程。
295 1
|
9天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第23天】 在现代IT基础设施管理中,自动化运维是提升效率、减少人为错误和加快产品上市速度的关键。本文将探讨如何利用容器技术来构建一个高效的自动化运维体系,特别关注于持续集成(CI)与持续部署(CD)的实施。文章首先概述了容器技术和CI/CD的基本概念及其相互关系,接着详细阐述了如何通过Docker和Kubernetes等工具来实现自动化的构建、测试和部署流程。此外,文章还讨论了监控、日志管理和安全性策略的重要性,以确保自动化运维体系的稳定运行。最后,分享了实际案例分析以及未来发展趋势,为读者提供深入理解并实施自动化运维的参考。

热门文章

最新文章

http://www.vxiaotou.com