theme: hydrogen

0. 前语

近来,跟着新一代 AI 大型谈天机器人 ChatGPT 火遍科技圈,人工智能生成内容( Artificial Intelligence Generated Content, AIGC )这一范畴开端受到学术界、工业界乃至普通用户的广泛重视。AIGC 凭仗其共同的“发明力”与人类无法企及的发明生成速度掀起了一股人工智能狂潮。可是,运用人工智能模型生成图片、视频等要用到很多数据练习模型,关于算力的要求相较于简略模型也呈指数级的提升,为了快速高效的处理数据集和构建生成模型,在云中练习和布置人工智能模型成为大多数用户和公司的首选。

最近受邀参加了亚马逊云科技的云上探究试验室活动,并依据 Amazon SageMaker 创立、布置了 Stable Diffusion 生成模型,用于生成高质量图片,在整个模型构建流程中充沛体会到 Amazon SageMaker 供给的全面的机器学习东西带来的优势,能够更快速、高效地履行机器学习使命,一同还具有灵敏性、扩展性和易用性等许多优势。接下来,咱们一同回顾生成模型模型构建的全部流程吧!

本文,将首要介绍 AIGC 的基本概念与开展进程,并介绍了当时先进的图画生成模型 Stable Diffusion,然后介绍 Amazon SageMaker 的首要组件及其怎么处理人工智能模型构建进程中的痛点问题,最终经过运用 Amazon SageMaker 构建 Stable Diffusion 模型来展现 Amazon SageMaker 在人工智能模型构建、练习和布置进程中的优势。

1. Amazon SageMaker 与机器学习

1.1 机器学习流程

人工智能 (Artificial Intelligence, AI) 是研讨用于模拟和扩展人类智能的理论、方法及运用的一门系统性科学技能,其令核算机依据可用数据履行相应策略而无需以明确的编程方法履行策略,AI 经过运用核算机程序模拟人类行为然后使机器完结智能。人工智能的方针是发明能与人类思维相似的智能机器,或许经过人工智能技能来扩展人类智能然后处理实践问题。在曩昔几年里,许多人工智能系统取得了突破性发展,现已能够运用于处理各种杂乱问题。

一般来说,一个完好的机器学习流程一般包含以下进程:

  • 数据搜集和预备:在机器学习进程中,数据是至关重要的,需求搜集相关数据,并对其进行预处理和清洗,以保证练习数据质量和一致性
  • 特征工程:对数据进行特征挑选、特征提取和特征转换等操作,以提取有用的信息,并将其转化为可用于练习模型的方法
  • 模型构建和练习:依据实践运用场景,挑选并构建适宜的模型,并运用练习数据对其进行练习,一般需求进行模型挑选、超参数调整、模型构建、模型练习和模型评价等进程
  • 模型验证和优化:对模型进行验证和优化,以保证模型的准确性和稳定性,一般包含模型验证、模型优化和模型调整等进程,以进一步保证模型在实践出产环境中的鲁棒性
  • 模型布置和监控:将模型布置到出产环境中,并对其进行监控和办理,以保证模型的可靠性和高效性,一般包含模型布置、模型监控和模型更新等进程

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

总之,机器学习流程是一个十分杂乱和有挑战性的进程,需求对数据、模型和算法等方面进行深入的研讨和探究,一般机器学习模型从数据搜集到模型布置运用的完好流程需求大约 6-18 个月时刻,而且一般会面对以下问题:

  • 机器学习模型练习需求很多的数据,而且数据必须经过清洗和预处理,以保证数据质量及其一致性,往往需求耗费很多的时刻和精力
  • 在机器学习模型练习进程中,需求挑选适宜的模型,并进行超参数调优等操作,以取得最佳的模型功用,一般需求进行多次试验和测验
  • 机器学习模型练习需求很多的核算资源,包含 CPUGPU、内存和存储空间等,特别是在处理大规划数据集和杂乱模型时,需求很多的前期出资,这关于普通用户和小公司而言并不具备可行性

机器学习模型练习流程中需求多种东西配合、很多时刻和精力进行数据处理等,没有集成化的东西用于整个机器学习的作业流,机器学习模型的开发将十分杂乱和贵重。AWS (Amazon Web Services) 认为每一个开发者和数据科学家打造机器学习渠道为使命,为机器学习供给了许多有力的处理方案以进步机器学习模型构建、练习、布置的功率和质量。AWS 是由 Amazon 公司供给的一种云核算服务,是一种灵敏、可扩展的云渠道,供给了很多的基础设施、渠道和软件服务,以协助构建和运转各种运用程序和服务,其服务包含核算、存储、数据库、剖析、网络和安全等许多方面,以供给高可靠性、高可扩展性和低本钱的云核算处理方案。

自从 2018 年起,亚马逊云科技发布了一系列的用于机器学习的产品和服务,例如 Amazon SageMakerAmazon Machine Learing 等,极大的下降了机器学习的门槛,使得用户构建机器学习运用变得越来越简略,推进了机器学习的普及与运用。

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

1.2 Amazon SageMaker 简介

Amazon SageMaker 是一项彻底保管的机器学习服务,为数据科学家、开发人员和企业供给了一种简略的方法来构建、练习和布置机器学习模型,而无需考虑底层基础设施的杂乱性。

Amazon SageMaker 供给了一整套机器学习东西,涵盖了数据标记、数据处理、模型练习、超参数调优、模型布置及持续模型监控等基本流程,也供给了主动打标签、主动机器学习、监控模型练习等高阶功用。其经过全保管的机器学习基础设施和对干流结构的支撑,能够下降客户机器学习的本钱。Amazon SageMaker 能够彻底消除机器学习进程中各个进程中深重的作业,使得开发高质量模型变得愈加轻松。

用户能够挑选运用 Amazon SageMaker 的预置算法来快速构建和练习模型,也能够运用自己的算法和结构,Amazon SageMaker 供给了一整套完好的机器学习东西,协助用户构建、练习和布置高功用的机器学习模型,其包含多个功用组件。接下来,咱们介绍其间一些首要的组件:

  • 模型构建
    • Amazon SageMaker Studio,作为首个适用于机器学习的集成开发环境 (Integrated Development Environment, IDE),Amazon SageMaker Studio 包含齐备的功用,能够在一致的可视化界面中操作 Notebook、创立模型、办理模型试验、调试以及检测模型偏差
    • Amazon SageMaker Notebooks,用于加快模型构建与团队协作,处理了以下两个问题:1) 用户运用单台服务器运转 Jupyter Notebook 时需求办理底层资源;2) 在同享给其他用户时,需求修正一系列系统装备以及网络权限。支撑一键发动 Jupyter Notebook,亚马逊云科技担任底层核算资源的保管,一同还支撑一键同享 Notebook,推进机器学习团队无缝协作
    • Amazon SageMaker Autopilot,完结模型主动构建与优化,一般在构建机器学习模型时,咱们需求花费很多的时刻寻觅有效的算法来处理机器学习问题,Amazon SageMaker Autopilot 能够主动检查原始数据、挑选最佳算法参数调集、练习和调优多个模型、盯梢模型功用,并依据功用对模型进行排序,然后大幅缩短了寻觅最佳模型所需的时刻
    • 支撑多种深度学习结构,包含 TensorFlowPyTorchApache MXNetChainerKerasGluonHorovodScikit-learn 等,除了默许支撑的结构,其他任何结构均能够经过自带容器的方法在 Amazon SageMaker 中练习和布置模型
  • 模型练习
    • Amazon SageMaker Experiments,用于组织、盯梢和评价模型练习进程中的运转状况。一般,为了得到能够布置运用的模型,需求多次迭代和不断调优,包含尝试不同算法、超参数、调整选取的特征等,Amazon SageMaker Experiments 经过主动捕获输入参数、装备和成果并进行存储来办理模型迭代,结合 Amazon SageMaker Studio 的可视化界面来还能够阅读进行中的试验,与先前的试验成果进行直观的比照与评价
    • Amazon SageMaker Debugger,用处剖析、检测和提示与机器学习相关的问题。因为现在大多数机器学习流程并不通明,而且练习模型需求花费较长时刻,因而导致优化进程极端耗时,为了处理此问题,Amazon SageMaker Debbuger 会在练习期间主动捕获实时指标(例如混杂矩阵和学习梯度等),其还会对常见问题宣布正告并供给修正主张,令练习流程愈加通明,能够更好地了解和解说模型作业原理,并最终进步模型精度
    • 大幅下降练习本钱,Amazon SageMaker 支撑依据保管的 Spot 竞价实例进行练习,练习本钱下降最多可达 90%,而且,Amazon SageMaker 支撑周期性主动保存 checkpoint 以避免 Spot 实例中止导致模型重新开端练习
  • 模型布置
    • 支撑一键布置模型,针对实时或批量数据生成猜测,能够跨多个可用区在主动扩展的实例上一键布置模型,在完结高冗余的一同无需进行任何基础设施运维操作。Amazon SageMaker 能够主动办理核算实例和模型布置,并为 API 拜访供给安全的 https 终端节点,运用程序只需求调用这个 API 接口就能够完结低延迟、高吞吐量的推理
    • Amazon SageMaker Model Monitor,用于坚持模型在布置后的精确性,受限于练习数据集,当方针变量跟着时刻推移发生改变时,模型会呈现不再适用的问题,这一般称为概念漂移 (Concept Drift)。例如,经济环境改变可能会导致利率的动摇,然后影响购房模型的猜测成果,Amazon SageMaker Model Monitor 能够检测已布置模型的概念漂移问题,供给详细的警报,一同经过 Amazon SageMaker 练习的模型会主动发送关键指标,以协助确定问题本源,这为一些练习数据有限的场景供给了一个主动化机制,方便经过线上数据不断调优模型,而不用因为没有搜集到满意数据或缺少主动化流程而推迟模型布置
    • Kubernetes 集成以进行编列和办理。现在,许多机器学习团队的作业渠道依据 Kubernetes 渠道,而且一些现有作业流编列和运用不易迁移,为了处理这些问题,Amazon SageMaker 供给了 Kubernetes Operator 来与依据 Kubernetes 的作业流集成
    • Amazon SageMaker Neo,支撑模型一次练习,多处运转。Amazon SageMaker Neo 完结了机器学习模型练习一次即可在云上或许边际核算节点中的不同硬件和系统环境中运转,以便在云实例和边际设备上进行推理,然后以更快的速度运转而不会损失准确性,该功用可优化模型以在特定的硬件上运转,为给定模型和硬件方针供给最佳可用功用,优化后的模型运转速度最多可进步两倍,而且能够耗费更少的资源

总之,经过 Amazon SageMaker 供给的一系列功用组件,涵盖了机器学习流程的各个方面,能够大大进步机器学习的功率和质量,并为用户构建、练习和布置模型供给全面的支撑和保证。

1.3 Amazon SageMaker 优势

经过以上介绍,咱们能够总结出 Amazon SageMaker 作为一款全面的机器学习渠道具有以下优势:

  • 高效性:Amazon SageMaker 供给了一系列高效的功用组件,如主动化模型调优、高功用的模型练习和布置、丰富的监控和调试东西等,能够明显进步机器学习的功率和质量
  • 灵敏性:Amazon SageMaker 供给了多种模型布置和办理方法,用户能够依据需求挑选适宜的布置方法
  • 扩展性:Amazon SageMaker 能够轻松地扩展核算和存储资源,以应对不同规划和杂乱度的机器学习使命
  • 安全性:Amazon SageMaker 供给了多种安全性措施,包含数据隐私和维护、拜访操控和加密等,以保证用户数据的安全和保密性
  • 本钱效益:Amazon SageMaker 供给了多种付费方式,用户能够依据需求挑选适宜的付费方法,并经过运用 Amazon SageMaker 主动化优化功用,削减机器学习使命的本钱

总之,Amazon SageMaker 具有高效、灵敏、可扩展、安全和本钱效益等优势,可认为用户供给全面的机器学习支撑和保证,协助用户愈加轻松地构建、练习和布置高质量的机器学习模型。接下来,咱们将依据 Amazon SageMaker 创立、布置 Stable Diffusion 生成模型,用于生成高质量图片。

2. AIGC 与 Stable Diffusion

2.1 步入 AIGC 时代

现在人工智能模型能够分为两大类别,包含判别模型 (Discriminative Model) 与生成模型 (Generative Model)。判别模型依据一组输入数据,例如文本、X 射线图画或许游戏画面,经过一系列核算得到相应方针输出成果,例如单词翻译成果、X 光图画的诊断成果或游戏中下一时刻要履行的动作。判别模型可能是咱们最了解的一类 AI 模型,其目的是在一组输入变量和方针输出之间创立映射。

而生成模型,并不会不会对输入变量核算分数或标签,而是经过学习输入和输出之间的联系生成新的数据样本,这类模型能够接受与实践值无关的向量(乃至是随机向量),生成杂乱输出,例如文本、音乐或图画。人工智能生成( Artificial Intelligence Generated Content, AIGC) 内容泛指指运用机器学习和天然语言处理技能,让核算机生成人类可了解的文本、音频、图画等内容,首要由深度学习算法和神经网络构成,能够经过学习很多的数据来模拟人类的思维和发明力,然后产生高质量的内容。下图是运用 stable diffusion 模型生成的图画,能够看出生成的图画不仅具有很高的质量,一同能够很好的符合给定的输入描述。

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion
AIGC 经过机器学习方法从原始数据中学习数据特征,进而生成全新的、原创的数据,这些数据与练习数据坚持相似,而非简略复制原始数据。AIGC 现已取得了重大发展,并在各个范畴得到广泛运用:

  • 内容发明:能够辅佐发明者完结图画、文章、小说、音乐等内容的发明
  • 规划:能够协助规划师进行平面规划、UI 规划等
  • 游戏:能够生成游戏中的人物、道具等元素
  • 视频制作:能够生成特效、动画等内容
  • 智能客服:能够生成天然语言对话,完结智能客服等运用

AIGC 能够视为未来的战略技能,其将极大加速人工智能生成数据的速度,正在深入改变人类社会,推进人类发明活动,包含写作、绘画、编程等,乃至也将推进科学研讨,例如生成科学假定和科学现象等。AIGC 是一个快速开展的范畴,将为各个职业带来革命性的改变。未来,经过学术界和工业界持续探究新的算法和技能,将进一步进步生成内容的质量和多样性。

总的来说,判别模型重视的是输入和输出之间的联系,直接猜测输出成果,而生成模型则重视数据的散布,经过学习数据的统计特征来生成新的样本数据。判别模型推进了人工智能前数十年的开展,而生成模型将成为人工智能未来十年的要点开展方向。

2.2 Stable Diffusion 介绍

最近 AI 作画取得如此巨大发展的原因很大程度上能够归功于开源模型 Stable DiffusionStable diffusion 是一个依据潜在分散模型 (Latent Diffusion Models, LDM) 的文图生成 (text-to-image) 模型,经过练习能够逐步对随机高斯噪声进行去噪以取得感兴趣的数据样本,该模型运用来自 LAION-5B 数据库 (LAION-5B 是现在最大、可自在拜访的多模态数据集)子集的 512x512 图画进行练习,运用这个模型,能够生成包含人脸在内的任何图画。在运用 Stable Diffusion 生成高质量图画之前,咱们首要介绍该模型的原理与架构,Stable Diffusion 模型架构如下图所示:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

Diffusion model 比较生成对抗网络 (Generative Adversarial Network, GAN) 具有更好的图片生成作用,但因为该模型是一种自回归模型,需求反复迭代核算,因而练习和推理价值都很高,首要原因是它们在像素空间中运转,特别是在生成高分辨率图画时,需求耗费很多内存。Latent diffusion 经过在较低维度的潜空间上运用分散进程而不是运用实践的像素空间来削减内存和核算本钱,所以 Stable Diffusion 引入了 Latent diffusion 的方法来处理核算价值贵重的问题,能够极大地削减核算杂乱度,一同能够生成质量较高的图画,Latent Diffusion 的首要包含以下三个组成部分:

  • 变分自编码器 (Variational autoEncoder, VAE) VAE 模型首要包含两个部分:编码器和解码器,其间编码器用于将图画转换为低维的潜在表明,得到的低维潜在表明将作为 U-Net 模型的输入,而解码器用于将潜在表明转换回图画。在 Latent diffusion 练习期间,编码器用于取得正向分散进程的图画的潜在表明,正向分散在每一步中逐步运用越来越多的噪声。在揣度进程中,运用 VAE 解码器将反向分散进程生成的去噪潜在表明转换回图画
  • U-Net U-Net 相同包含编码器和解码器两部分,且都由 ResNet 块组成,编码器将图画表明压缩成较低分辨率的图画表明,解码器将较低分辨率图画表明解码回原始较高分辨率的图画表明。为了防止 U-Net 在下采样时丢失重要信息,一般在编码器的下采样 ResNet 和解码器的上采样 ResNet 之间添加捷径连接 (Short-cut Connections),此外,U-Net 能够经过 cross-attention 层将其输出条件设置在文本嵌入上,cross-attention 层被添加到 U-Net 的编码器和解码器部分,一般用在 ResNet 块之间
  • Text-Encoder Text-Encoder 担任将输入提示转换到 U-Net 能够了解的嵌入空间,它一般是一个简略的依据 Transformer 的编码器,将输入分词序列映射到潜在文本嵌入序列。受 Imagen 的启示,Stable Diffusion 在练习进程中并不会练习 Text-Encoder,只运用 CLIP 预练习过的 Text-Encoder——CLIPTextModel

可是,纵然因为 Latent diffusion 能够在低维潜在空间上进行操作,与像素空间分散模型比较,它极大的下降了内存和核算需求,但假如需求生成高质量照片,模型依然需求在 16GB 以上 GPU 上运转,详细而言,在本地核算机上建立 Stable Diffusion 模型会遇到以下困难:

  • 软件环境:Stable Diffusion 模型的构建需求运用特定的软件和库,在本地核算机上建立软件环境可能会遇到版本不兼容、依靠联系杂乱等问题,需求花费很多时刻和精力进行调试和处理
  • 数据处理:Stable Diffusion 模型练习需求处理很多的高质量图画数据,在本地核算机上处理很多数据可能会导致内存不足、速度慢等问题
  • 核算资源限制:Stable Diffusion 模型练习需求很多的核算资源,包含高显存 GPU 和很多内存,假如本地核算机的核算资源不足,将无法练习模型
  • 超参数:Stable Diffusion 模型需求设置很多参数,如分散系数、边界条件、学习率等,这些超参数的挑选需求经过很多调试,否则可能会导致模型不收敛或许收敛速度过慢
  • 模型验证:Stable Diffusion 模型需求进行很多模型验证和测验,以保证模型的正确性和可靠性

综上所述,建立 Stable Diffusion 模型需求克服核算资源限制、软件兼容问题、数据处理和超参数挑选等困难。因而,挑选云核算渠道来简化这些作业便成为天然的挑选,而 Amazon SageMaker 作为彻底保管的机器学习服务成为构建、练习与布置杂乱模型(例如 Stable Diffusion )的首选。

3. 运用 Amazon SageMaker 创立 Stable Diffusion 模型

在本节中,咱们将介绍依据 Amazon SageMaker 运用 Amazon SageMaker Notebook 实例测验、验证 AIGC 模型并 布置 AIGC 模型至 Amazon SageMaker Inference Endpoint

3.1 预备作业

为了保证能够将 AIGC 模型布置至 Amazon SageMaker Inference Endpoint,需求保证有满意的限额。为此,咱们首要需求经过服务配额页面检查配额,在查找框中输入 ml.g4dn.xlarge for endpoint usage,若此配额的第二列为 0,则需求进步配额:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

进步限额,需首要选中 ml.g4dn.xlarge for endpoint usage,点击“恳求添加配额”按钮

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

在输入框中输入所需的限额,例如 “1”,填写完毕后,点击“恳求”按钮提交恳求:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion
等待配额恳求经过后,就能够继续该试验进程。

3.2 创立 Amazon SageMaker Notebook 实例

Amazon SageMaker Notebook 实例是运转 Jupyter Notebook 运用程序的机器学习核算实例。Amazon SageMaker 用于办理实例和相关资源的创立,咱们能够在 Notetbook 实例中运用 Jupyter Notebook 预备和处理数据、编写代码来练习模型、或将模型布置到 Amazon SageMaker 中,并测验或验证模型。接下来,咱们将创立 Amazon SageMaker Notebook 示例,用于运转相关 Jupyter Notebook 代码。

(1) 登录 Amazon 云科技操控台,并将当时区域修正为 Tokyo 区域:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(2) 在查找框中查找 Amazon SageMaker,并点击进入 Amazon SageMaker 服务:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(3) 在左边菜单栏,首要点击“笔记本”按钮,然后点击“笔记本实例”,进入笔记本 (Notebook) 实例操控面板,并点击右上角”创立笔记本实例“按钮:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(4) 装备笔记本实例设置,在创立笔记本实例详情页中,装备笔记本实例的基本信息,包含笔记本实例名称(例如 stable-diffusion)、笔记本实例类型(挑选 ml.g4dn.xlarge 实例类型,该类型实例搭载 NVIDIA T4 Tensor Core GPU 显卡,供给了模型所需履行浮点数核算的能力)、渠道标识符( Amazon Linux 2, Jupyter Lab 3 )和在“其他装备”下的卷大小(引荐至少 75GB 磁盘大小,用于存储机器学习模型):

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(5) 装备笔记本实例权限,为笔记本实例创立一个 IAM 人物,用于调用包含 Amazon SageMakerS3 在内的服务,例如上传模型,布置模型等。在“权限和加密”下的 IAM 人物中,点击下拉列表,单击“创立新人物”:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

在装备页面中,坚持默许装备,并点击“创立人物”按钮:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

成功创立 IAM 人物后,能够得到相似下图的提示信息:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(6) 检查装备的信息,承认无误后点击“创立笔记本实例”按钮,等待实例创立完结。

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

(7) 当笔记本状况变为 InService 后,点击“翻开Jupyter”进入 Jupyter Notebook

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

3.3 端到端体会 AIGC

接下来,咱们能够下载保存 Notebook 代码文件,并将其上传到 Jupyter Notebook,然后直接运转代码,但亲手编写代码的体会是无与伦比,咱们将介绍代码文件的首要内容,从头开端端到端体会 AIGC!需求留意的是,需求保证 Kernelconda_pytorch 最初。

(1) 装置相关库并进行环境装备作业:

# 检查环境版本
!nvcc --version
!pip list | grep torch
# 装置Notebook运转模型所需的库文件
!sudo yum -y install pigz
!pip install -U pip
!pip install -U transformers==4.26.1 diffusers==0.13.1 ftfy accelerate
!pip install -U torch==1.13.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
!pip install -U sagemaker
!pip list | grep torch

(2) 下载模型文件,咱们将运用 Stable Diffusion V2 版本,其包含一个具有鲁棒性的文本生成图画模型,能够极大的进步了图画生成质量,模型相关介绍参见 Github:

# 装置git lfs以克隆模型库房
!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
!sudo yum install git-lfs -y
# 设定模型版本的环境变量,运用 Stable Diffusion V2
SD_SPACE="stabilityai/"
SD_MODEL = "stable-diffusion-2-1"
# 克隆代码库房
# Estimated time to spend 3min(V1), 8min(V2)
%cd ~/SageMaker
!printf "=======Current Path========%s\n"
!rm -rf $SD_MODEL
# !git lfs clone https://huggingface.co/$SD_SPACE$SD_MODEL -X "*.safetensors"
!mkdir $SD_MODEL
%cd $SD_MODEL
!git init
!git config core.sparseCheckout true
!echo "/*" >> .git/info/sparse-checkout
!echo "!**/*.safetensors" >> .git/info/sparse-checkout
!git remote add -f master https://huggingface.co/$SD_SPACE$SD_MODEL
!git pull master main
%cd ~/SageMaker
!printf "=======Folder========%s\n$(ls)\n"

(3)Notebook 中装备并运用模型,首要加载相关库与模型:

import torch
import datetime
from diffusers import StableDiffusionPipeline
# Load stable diffusion
pipe = StableDiffusionPipeline.from_pretrained(SD_MODEL, torch_dtype=torch.float16)

运用 GPU 进行运算并设定超参数,部分超参数如下:

  • prompt (str 或 List[str]):引导图画生成的文本提示或文本列表
  • height (int, *optional, V2 默许模型可支撑到 768 像素):生成图画的高度(以像素为单位)
  • width (int, *optional, V2 默许模型可支撑到 768 像素):生成图画的宽度(以像素为单位)
  • num_inference_steps (int, *optional, 默许降噪步数为 50):降噪步数,更多的降噪步数一般会以较慢的推理为价值取得更高质量的图画
  • guidance_scale (float, *optional, 默许辅导份额为 7.5):较高的辅导份额会导致图画与提示密切相关,但会牺牲图画质量,当 guidance_scale<=1 时会被疏忽
  • negative_prompt (str or List[str], *optional):不引导图画生成的文本或文本列表
  • num_images_per_prompt (int, *optional, 默许每个提示生成 1 张图画):每个提示生成的图画数量
# move Model to the GPU
torch.cuda.empty_cache()
pipe = pipe.to("cuda")
print(datetime.datetime.now())
prompts =[
    "Eiffel tower landing on the Mars",
    "a photograph of an astronaut riding a horse,van Gogh style",
]
generated_images = pipe(
    prompt=prompts,
    height=512,
    width=512,
    num_images_per_prompt=1
).images  # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/)
print(f"Prompts: {prompts}\n")
print(datetime.datetime.now())
for image in generated_images:
    display(image)

(4) 将模型布置至 Sagemaker Inference Endpoint,构建和练习模型后,能够将模型布置至终端节点,以获取猜测推理成果:

import sagemaker
import boto3
sess = sagemaker.Session()
# sagemaker session bucket -> used for uploading data, models and logs
# sagemaker will automatically create this bucket if it not exists
sagemaker_session_bucket=None
if sagemaker_session_bucket is None and sess is not None:
    # set to default bucket if a bucket name is not given
    sagemaker_session_bucket = sess.default_bucket()
try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client('iam')
    role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']
sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)
print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")

创立自定义推理脚本 inference.py

!mkdir ./$SD_MODEL/code
# 为模型创立所需依靠声明的文件
%%writefile ./$SD_MODEL/code/requirements.txt
diffusers==0.13.1
transformers==4.26.1
# 编写 inference.py 脚本
%%writefile ./$SD_MODEL/code/inference.py
import base64
import torch
from io import BytesIO
from diffusers import StableDiffusionPipeline
def model_fn(model_dir):
    # Load stable diffusion and move it to the GPU
    pipe = StableDiffusionPipeline.from_pretrained(model_dir, torch_dtype=torch.float16)
    pipe = pipe.to("cuda")
    return pipe
def predict_fn(data, pipe):
    # get prompt & parameters
    prompt = data.pop("prompt", "")
    # set valid HP for stable diffusion
    height = data.pop("height", 512)
    width = data.pop("width", 512)
    num_inference_steps = data.pop("num_inference_steps", 50)
    guidance_scale = data.pop("guidance_scale", 7.5)
    num_images_per_prompt = data.pop("num_images_per_prompt", 1)
    # run generation with parameters
    generated_images = pipe(
        prompt=prompt,
        height=height,
        width=width,
        num_inference_steps=num_inference_steps,
        guidance_scale=guidance_scale,
        num_images_per_prompt=num_images_per_prompt,
    )["images"]
    # create response
    encoded_images = []
    for image in generated_images:
        buffered = BytesIO()
        image.save(buffered, format="JPEG")
        encoded_images.append(base64.b64encode(buffered.getvalue()).decode())
    # create response
    return {"generated_images": encoded_images}

打包模型并上传至 S3 桶:

#Package model, Estimated time to spend 2min(V1),5min(V2)
!echo $(date)
!tar --exclude .git --use-compress-program=pigz -pcvf ./$SD_MODEL'.tar.gz' -C ./$SD_MODEL/ .
!echo $(date)
from sagemaker.s3 import S3Uploader
print(datetime.datetime.now())
# upload model.tar.gz to s3, Estimated time to spend 30s(V1), 1min(V2)
sd_model_uri=S3Uploader.upload(local_path=f"{SD_MODEL}.tar.gz", desired_s3_uri=f"s3://{sess.default_bucket()}/stable-diffusion")
print(f"=======S3 File Location========\nmodel uploaded to:\n{sd_model_uri}")
print(datetime.datetime.now())

运用 HuggingFace 将模型布置至 Amazon SageMaker

#init variables
huggingface_model = {}
predictor = {}
from sagemaker.huggingface.model import HuggingFaceModel
# create Hugging Face Model Class
huggingface_model[SD_MODEL] = HuggingFaceModel(
    model_data=sd_model_uri, # path to your model and script
    role=role, # iam role with permissions to create an Endpoint
    transformers_version="4.17", # transformers version used
    pytorch_version="1.10", # pytorch version used
    py_version='py38', # python version used
)
# deploy the endpoint endpoint, Estimated time to spend 8min(V2)
print(datetime.datetime.now())
predictor[SD_MODEL] = huggingface_model[SD_MODEL].deploy(
    initial_instance_count=1,
    instance_type="ml.g4dn.xlarge",
    endpoint_name=f"{SD_MODEL}-endpoint"
)
print(f"\n{datetime.datetime.now()}")

依据推理终端节点生成自定义图片:

from PIL import Image
from io import BytesIO
import base64
# helper decoder
def decode_base64_image(image_string):
    base64_image = base64.b64decode(image_string)
    buffer = BytesIO(base64_image)
    return Image.open(buffer)
response = predictor[SD_MODEL].predict(data={
    "prompt": [
        "A bird is flying in space",
        "a photograph of an astronaut riding a horse",
    ],
    "height" : 512,
    "width" : 512,
    "num_images_per_prompt":1
  }
)
#decode images
decoded_images = [decode_base64_image(image) for image in response["generated_images"]]
#visualize generation
for image in decoded_images:
    display(image)

3.4 模型生成作用

接下来,咱们运用布置完结的模型,检查图画生成作用,例如咱们运用 A bird is flying in spacePhotos of horseback riding under the sea 能够得到以下图画:

使用Amazon SageMaker构建高质量AI作画模型Stable Diffusion

能够看到,即使咱们只给出关键词也能够生成纹路清晰、质量上乘的图画,咱们也能够运用其他文本测验布置完结的图画生成模型。

最终,需求留意的是,在试验结束后清除本次试验开启的资源,在操控台逐个删除 S3 存储桶,以及 SageMaker 里创立的 Notebook、Endpoint 以及 Model 等资源

5. Amazon SageMaker 运用体会

在运用 Amazon SageMaker 建立和布置机器学习模型进程中,充沛体会了 Amazon SageMaker 供给的机器学习功用和东西,能够更快速、高效地进行机器学习使命,一同还具有灵敏性、扩展性和易用性等许多优势,总体而言,运用体会如下:

  • Amazon SageMaker 供给了齐备的机器学习东西,能够更快速地开发、练习和布置模型,Amazon SageMaker 的主动化功用也能够协助用户快速优化模型和参数,削减了机器学习的杂乱度和作业量
  • Amazon SageMaker 供给了一个易于运用的交互式笔记本,能够更快速地探究和处理数据,也更简略地同享代码和笔记本,然后更简略地进行协作和沟通
  • Amazon SageMaker 供给了多种不同的模型布置和办理方法,能够满意运用进程中在不同场景下的需求
  • Amazon SageMaker 渠道供给了完善的监控和调试东西,能够更好地盯梢和剖析模型功用,保证模型的稳定性和可靠性

小结

人工智能生成内容( Artificial Intelligence Generated Content, AIGC )凭仗其共同的“发明力”与人类无法企及的发明生成速度掀起了一股人工智能狂潮。可是,因为生成模型构建的杂乱性,在云中练习和布置人工智能模型成了大多 AIGC 用户和公司的首选。Amazon SageMaker 作为一款十分优异的云端机器学习渠道,供给了丰富的功用和东西,能够协助咱们愈加高效地构建、练习和布置机器学习模型,处理了生成模型关于算力要求昂扬的问题。本文首要回顾在参加亚马逊云科技的云上探究试验室活动进程中,依据 Amazon SageMaker 创立、布置 Stable Diffusion 模型的相关要点,充沛展现了 Amazon SageMaker 在人工智能模型构建、练习和布置进程中的优势。

云上探究试验室活动

云上探究试验室旨在用技能试验、产品体会、案例运用等方法,让用户亲身感受最新、最热门的亚马逊云科技开发者东西与服务。云上探究试验室活动现在正在火热进行,经过群内辅导和着手体会的方法开展,官方供给多套体会教程和快速上手资料,参加者可依据本身状况自行挑选不同难度的试验进行实操,并经过提交不同方法的体会作品,经过这次活动,不仅能够探究更多机器学习和 AI 技能的运用场景,还能够结识更多情投意合的开发者。云上探究试验室活动地址:dev.amazoncloud.cn/experience,快来一同体会吧!