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

11 篇文章 5 订阅
订阅专栏

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 通过使用计算机程序模拟人类行为从而使机器实现智能。人工智能的目标是创造能与人类思维相似的智能机器,或者通过人工智能技术来扩展人类智能从而解决实际问题。在过去几年里,许多人工智能系统取得了突破性进展,已经可以应用于解决各种复杂问题。
一般而言,一个完整的机器学习流程通常包括以下步骤:

  • 数据收集和准备:在机器学习过程中,数据是至关重要的,需要收集相关数据,并对其进行预处理和清洗,以确保训练数据质量和一致性
  • 特征工程:对数据进行特征选择、特征提取和特征转换等操作,以提取有用的信息,并将其转化为可用于训练模型的形式
  • 模型构建和训练:根据实际应用场景,选择并构建合适的模型,并使用训练数据对其进行训练,通常需要进行模型选择、超参数调整、模型构建、模型训练和模型评估等过程
  • 模型验证和优化:对模型进行验证和优化,以确保模型的准确性和稳定性,通常包括模型验证、模型优化和模型调整等过程,以进一步保证模型在实际生产环境中的鲁棒性
  • 模型部署和监控:将模型部署到生产环境中,并对其进行监控和管理,以确保模型的可靠性和高效性,通常包括模型部署、模型监控和模型更新等过程

模型训练过程
总之,机器学习流程是一个非常复杂和有挑战性的过程,需要对数据、模型和算法等方面进行深入的研究和探索,通常机器学习模型从数据收集到模型部署应用的完整流程需要大约 6-18 个月时间,并且通常会面临以下问题:

  • 机器学习模型训练需要大量的数据,并且数据必须经过清洗和预处理,以确保数据质量及其一致性,往往需要耗费大量的时间和精力
  • 在机器学习模型训练过程中,需要选择合适的模型,并进行超参数调优等操作,以获得最佳的模型性能,通常需要进行多次实验和测试
  • 机器学习模型训练需要大量的计算资源,包括 CPUGPU、内存和存储空间等,特别是在处理大规模数据集和复杂模型时,需要大量的前期投资,这对于普通用户和小公司而言并不具备可行性

机器学习模型训练流程中需要多种工具配合、大量时间和精力进行数据处理等,没有集成化的工具用于整个机器学习的工作流,机器学习模型的开发将十分复杂和昂贵。AWS ( Amazon Web Services) 以为每一个开发者和数据科学家打造机器学习平台为使命,为机器学习提供了诸多有力的解决方案以提高机器学习模型构建、训练、部署的效率和质量。AWS 是由 Amazon 公司提供的一种云计算服务,是一种灵活、可扩展的云平台,提供了大量的基础设施、平台和软件服务,以帮助构建和运行各种应用程序和服务,其服务包括计算、存储、数据库、分析、网络和安全等诸多方面,以提供高可靠性、高可扩展性和低成本的云计算解决方案。
自从 2018 年起,亚马逊云科技发布了一系列的用于机器学习的产品和服务,例如 Amazon SageMakerAmazon Machine Learing 等,极大的降低了机器学习的门槛,使得用户构建机器学习应用变得越来越容易,推动了机器学习的普及与应用。

AWS上的机器学习技术堆栈

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 模型生成的图像,可以看出生成的图像不仅具有很高的质量,同时能够很好的契合给定的输入描述。

AIGC
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 模型架构如下图所示:

模型架构
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,则需要提高配额:

提升配额

提高限额,需首先选中 ml.g4dn.xlarge for endpoint usage,点击“请求增加配额”按钮:

请求增加配额

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

提交配额请求
等待配额请求通过后,就可以继续该实验过程。

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 区域:

修改当前区域

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

进入Amazon SageMake服务

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

创建笔记本实例

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

配置笔记本实例

(5) 配置笔记本实例权限,为笔记本实例创建一个 IAM 角色,用于调用包括 Amazon SageMakerS3 在内的服务,例如上传模型,部署模型等。在“权限和加密”下的 IAM 角色中,点击下拉列表,单击“创建新角色”:

创建新角色

在配置页面中,保持默认配置,并点击“创建角色”按钮:

创建角色

成功创建 IAM 角色后,可以得到类似下图的提示信息:

成功创建角色

(6) 检查配置的信息,确认无误后点击“创建笔记本实例”按钮,等待实例创建完成。

创建笔记本实例

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

进入Jupyter Notebook

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 可以得到以下图像:

生成图像

可以看到,即使我们只给出关键词也能够生成纹理清晰、质量上乘的图像,我们也可以使用其他文本测试部署完成的图像生成模型。
最后,需要注意的是,在试验结束后清除本次实验开启的资源,在控制台逐一删除 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 技术的应用场景,还可以结识更多志同道合的开发者。云上探索实验室活动地址: https://dev.amazoncloud.cn/experience,快来一起体验吧!

亚马逊云科技【云上探索实验室使用 Amazon SageMaker 构建机器学习应用、构建细粒度情感分析应用、基于Stable Diffusion模型,快速搭建你的第一个AIGC应用
薛定谔的猴子铁链的博客
03-26 6448
亚马逊云科技【云上探索实验室使用 Amazon SageMaker 构建机器学习应用、基于 Amazon SageMaker构建细粒度情感分析应用、使用 Amazon SageMaker基于Stable Diffusion模型,快速搭建你的第一个AIGC应用
使用 Amazon SageMaker 构建高质量 AI 作画模型 Stable Diffusion
亚马逊云科技专栏
04-20 587
前言近来,随着新一代 AI 大型聊天机器人 ChatGPT 火遍科技圈,人工智能生成内容(Artificial Intelligence Generated Content, AIGC)这一领域开始受到学术界、工业界甚至普通用户的广泛关注。AIGC 凭借其独特的“创造力”与人类无法企及的创作生成速度掀起了一股人工智能狂潮。但是,利用人工智能模型生成图片、视频等要用到大量数据训练模型,对于算力的要求...
Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型
白洞,白色的明天在等着我们
03-21 1万+
Amazon SageMaker是一款亚马逊云服务旗下的全面托管机器学习平台。该平台集成了众多高效工具和服务,使得构建、训练和部署机器学习模型变得前所未有的简单。Amazon SageMaker拥有灵活的计算资源及配置选项,无论项目规模大小,它都能以强大的计算能力,助力训练大型模型。此外,它还提供了强大的管理和监控功能,确保机器学习工作流程的顺畅运行。Amazon SageMaker机器学习平台提供了一系列能够快速构建、训练和部署机器学习模型的工具和服务,使机器学习工作流程更加高效、易用和可扩展。
Amazon SageMaker,更好用的机器学习平台!
亚马逊云科技专栏
06-14 646
01前言本文作者:码莎拉蒂最近参与了亚马逊云科技【云上探索实验】活动,通过 Amazon SageMaker 基于 Stable Diffusion 模型,非常简单快速搭建的第一个 AIGC应用。一开始以为非常复杂,不懂动手操作,但实际上操作非常简单,没有想象中的恐怖,整体体验非常愉快。我先对 Amazon SageMaker 简单介绍,然后对基于 Stable Diffusion 模型,搭建 A...
Amazon SageMaker:让机器学习变得更简单、更强大
Jing_Hua
12-14 5580
Amazon SageMaker通过有针对性的改进,成功地克服了当前机器学习应用中的多项挑战,为用户提供了更高效的解决方案。特别是在大规模监督训练方面,采用了全面托管的服务模式,使整个训练过程更为简化,从而在提高效率的同时降低了用户的操作负担。这种设计使得用户可以更专注于模型和业务的开发,而不用过多关注底层的技术细节。在数据标记阶段,Amazon SageMaker提供了多种灵活的方式和算法,显著提升了标记数据的准确性。
亚马逊云科技AI应用 SageMaker 新突破,机器学习优势显著
热门推荐
编码世界
12-15 4万+
Amazon SageMaker是一种机器学习服务,帮助开发人员快速准备、构建、训练和部署高质量的机器学习模型。本文主要讲解了SageMaker的五项新功能,并使用Sagemaker部署模型并进行推理,最后对数据处理。新功能给SageMaker的使用带来极大的便利,期待未来有更多的创新应用。
AI-绘画的工具准备:Stable-Diffusion使用教程.pdf
06-03
AI-绘画的工具准备:Stable-Diffusion使用教程
AI绘图 Stable diffusion checkpoint模型 ckpt模型 vae模型 Counterfeit-V2.5
04-25
超级漂亮的二次元模型 ...把ckpt模型放在models\Stable-diffusion\下 把vae模型放在models\VAE\下 把embedding模型放在\embeddings\下 把lora模型放在 \extensions\sd-webui-additional-networks\models\lora\下
Linux平台上使用Python构建基于Stable Diffusion WebUI的图文生成API
03-25
本项目旨在Linux平台上,利用Python语言构建一个基于Stable Diffusion WebUI的图文生成API。项目主要语言为Python,包含了共计30个文件,其中主要包括: - 21个图片文件(.png) - 5个配置文件(.xml) - 1个Git忽略...
Berrey.vae.pt(stable diffusion使用,用于替换默认VAE)
11-06
Berrey.vae.pt,用于替换stable diffusion默认的VAE。 VAE叫做变分自编码器(Variational Autoencoder,VAE)。 在Stable Diffusion中,VAE的作用是在生成图像的过程中引入潜在变量,从而使得生成的图像更具多样性和可...
stable diffusion webui lora模型
最新发布
04-07
stable diffusion webui lora模型 stable diffusion webui lora模型 stable diffusion webui lora模型 stable diffusion webui lora模型 stable diffusion webui lora模型 stable diffusion webui lora模型 stable ...
Amazon Sagemaker端到端的托管机器学习平台
06-06
Amazon Sagemaker端到端的托管机器学习平台.pdfAmazon Sagemaker端到端的托管机器学习平台.pdf
使用 SageMaker 对 Whisper 模型进行微调及部署
沐霜枫叶
11-14 640
Whisper 作为 OpenAI 最新开源的自动语音识别(ASR)模型,采用了编码器-解码器(encoder- decoder)transformer架构,并使用了 68 万小时的从互联网收集的多语言、多任务的已标注数据进行训练。根据其论文显示,Whisper 模型在无需微调(zero-shot)的情况下,在多个数据集的测试上鲁棒性更高,错误率更低。关于 Whisper 模型的更多细节,参见其官方网站以及。
Sagemaker学习笔记
rasiel_2019的博客
12-25 2198
使用Sagemaker的四种途径: IDE: SageMaker Studio Console: SageMaker Notebook Instances Command line & SDK: AWS CLI, boto3, & SageMaker Python SDK 3rd party integrations: Kubeflow & Kubernetes operators 使用方法详细说明: IDE: SageMaker Studio Sagemaker Stuio
Amazon SageMaker: 拓展机器学习边界,塑造未来创新趋势
陈橘又青的博客
12-14 1万+
作为一个机器学习爱好者,我对SageMaker HyperPod和Inference功能的引入感到非常激动。HyperPod作为一项创新性基础设施,解决了我在大规模分布式训练中所面临的挑战。以前,使用GPU和Trainium计算实例进行训练时,我常常碰到数据量增加、模型大小膨胀以及训练时间延长的问题。HyperPod的出现改变了这一切,通过自动分发训练工作负载到数千个加速器中,显著提高了我的模型性能。同时,它的定期保存检查点功能确保了在硬件故障发生时的平稳继续训练,省去了我繁琐的手动管理过程。
Amazon SageMaker简直就是机器学习平台的天花板
码莎拉蒂
04-06 3万+
最近参与了亚马逊云科技【云上探索实验】活动,通过Amazon SageMaker基于Stable Diffusion模型,非常简单快速搭建的第一个AIGC,一开始以为非常复杂,不懂动手操作,但实际上操作非常简单,没有想象中的恐怖,整体体验非常愉快,我先对Amazon SageMaker简单介绍,然后对基于Stable Diffusion模型,搭建AIGC应用简单总结下。它提供了一整套优秀的机器学习工具和框架,可以帮助用户更轻松地构建、训练和部署机器学习模型,提高模型的精度和效率。
使用AWS SageMaker进行机器学习项目
ZacksTang的博客
04-10 153
使用AWS SageMaker进行机器学习项目 本文主要介绍如何使用AWS SageMaker进行机器学习项目。 1. 题目 使用的题目为阿里天池的“工业蒸汽量预测“,题目地址为: https://tianchi.aliyun.com/competition/entrance/231693/introduction 给定的数据: 脱敏后的锅炉传感器采集的数据(采集频率为分钟级) 预测目标: 根据...
amazon sagemaker 练习
weixin_40988315的博客
06-21 4365
亚马逊的sagemaker 提供了模型训练到部署的全流程支持,下面这个例子是其参考手册的入门例子,记录一下整体流程,具体代码操作可以查看其手册。1 创建Amazon账号,建立IAM 用户(identify and access management)2 建立 S3 bucket (Amazon simple storage service ) 用于存放训练数据和调优后的模型代码/模型工件(mode...
Sagemaker基础操作指南
shaobing32的博客
11-10 346
Amazon SageMaker是亚马逊AWS提供的一项托管式机器学习服务,旨在简化和加速机器学习开发的整个生命周期。它为机器学习工程师和数据科学家提供了一套完整的工具和功能,用于构建、训练、调优和部署机器学习模型。本文将会通过一个简单的例子,来介绍Sagemaker的使用,并且完成一个简单的深度学习任务
如何下载并使用stable diffusion实现AI绘画,比较好的模型有哪些
03-29
要下载并使用stable diffusion实现AI绘画,可以按照以下步骤: 1. 安装Python环境和相关依赖库:stable-baselines, PyTorch, torchvision, Pillow等。 2. 下载stable diffusion的代码库,并解压到本地。 3. 下载预训练模型,并解压到相应的文件夹中。 4. 运行代码,输入要绘制的图片路径和输出路径,即可得到AI绘画的结果。 比较好的模型有:StyleGAN2, DALL-E, GPT-3等。这些模型都是目前比较流行的AI绘画模型,可以实现高质量的图像生成和绘画。不过,这些模型的训练和使用都需要一定的技术门槛和计算资源,对于普通用户来说可能不太容易。对于普通用户来说,可以选择一些已经训练好的模型,或者使用一些在线的AI绘画工具,如DeepArt、Prisma等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • OpenCV-Python实战(1)——OpenCV简介与图像处理基础 207963
  • 遗传算法(Genetic Algorithm)详解与实现 119917
  • Python机器学习、深度学习库总结(内含大量示例,建议收藏) 97128
  • PyTorch强化学习实战(1)——强化学习环境配置与PyTorch基础 96883
  • Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not load the Qt platform plugin “xcb“问题 85657

分类专栏

  • OpenCV从入门到项目实战 付费 35篇
  • Keras深度学习从入门到项目实战 付费 60篇
  • PyTorch深度学习从入门到项目实战 付费 54篇
  • 图神经网络从入门到项目实战 付费 15篇
  • OpenCV从入门到项目实战(基于C++) 付费 48篇
  • AIGC生成式人工智能从入门到实战 付费 24篇
  • PyTorch强化学习实战 付费 1篇
  • Python数据结构与算法 付费 22篇
  • TensorFlow 2 深度学习实战 付费 1篇
  • PyTorch深度学习
  • 人工智能之旅 6篇
  • TensorFlow计算机视觉项目实战
  • TensorFlow GAN实战
  • OpenCV 4 5篇
  • Python 基础 11篇
  • 深度学习 42篇
  • GAN 10篇
  • VAE 2篇
  • tensorflow 24篇
  • 风格迁移 4篇
  • 深度学习-环境搭建 7篇
  • julia 8篇
  • 遗传算法 12篇
  • 数据可视化 17篇
  • 图像处理 7篇
  • 爬虫 7篇
  • python数据分析 23篇

最新评论

  • 图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础

    头铁达人: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,内容和细节都很到位,期待博主持续带来更多好文

  • Keras深度学习实战(29)——长短时记忆网络详解与实现

    头铁达人: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,内容和细节都很到位,期待博主持续带来更多好文

  • Keras深度学习实战(2)——使用Keras构建神经网络

    头铁达人: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,内容和细节都很到位,期待博主持续带来更多好文

  • OpenCV-Python实战(12)——一文详解AR增强现实

    头铁达人: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,内容和细节都很到位,期待博主持续带来更多好文

  • OpenCV-Python实战(1)——OpenCV简介与图像处理基础

    头铁达人: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,内容和细节都很到位,期待博主持续带来更多好文

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 图神经网络实战(14)——基于节点嵌入预测链接
  • OpenCV单词轮廓检测
  • 图神经网络实战(13)——经典链接预测算法
2024
06月 5篇
05月 9篇
04月 9篇
03月 9篇
02月 7篇
01月 10篇
2023年97篇
2022年99篇
2021年92篇
2020年32篇

目录

目录

评论 71
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼小辉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码濮阳建设网站观澜百度seo推荐南阳英文网站建设推荐光明网站建设阜新网站优化推广报价朔州网站推广工具推荐西安网站优化推广横岗网站推广工具多少钱汕尾推广网站推荐西安百度标王公司毕节关键词排名包年推广报价海南网站优化推广报价黑河网站seo优化多少钱阿里网站搜索优化公司安顺百姓网标王推荐潍坊网站seo优化推荐昌都百度竞价包年推广黄南百姓网标王推广报价天水关键词按天计费价格肇庆seo排名哪家好石家庄网站优化按天扣费多少钱梧州英文网站建设报价武汉企业网站建设长春至尊标王多少钱喀什建站哪家好泸州百度网站优化排名报价南宁网站建设设计报价潮州模板网站建设绵阳建网站哪家好大芬网站建设哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化