当前位置: 首页 > news >正文

阿里云容器服务助力万兴科技 AIGC 应用加速

作者:子白(顾静)

2023 年堪称是 AIGC 元年,文生图领域诞生了 Stable Diffusion 项目,文生文领域诞生了 GPT 家族。一时间风起云涌,国内外许多企业投身 AIGC 创新浪潮,各大云厂商紧随其后纷纷推出自己的大语言模型。在文生图领域落地的企业更多,国外的如 Midjourney,国内的如 AIGC 软件公司万兴科技等。

图片

万兴科技今年推出了系列创新 AIGC 应用,相关产品发布后吸引了大量终端用户“尝鲜”,急需大量资源满足日益增长的用户需求。万兴科技将业务进一步部署到云上,利用云的弹性能力平衡资源和成本。同时,万兴科技借力阿里云容器服务 ACK 和镜像服务企业版 ACR EE,进一步提升用户体验。 Kubernetes 是企业云上管理资源的最佳选择,具有很强的应用编排能力,可靠性及弹性。

AIGC 类应用容器化挑战

AIGC 类应用相比于传统的在线应用有比较明显的特征,镜像大、冷启动时间长。

  • 镜像大

    AIGC 应用大多采用 nvidia/cuda 作为基础镜像,并安装 Tensorflow、Pytorch、Transformer 等框架,应用镜像往往有十几 GB。镜像拉取是容器启动必不可少的一环,主要包括下载、解压等步骤,会带来网络带宽开销和磁盘的二次写入。随着镜像大小和节点规模的增加,存储网络下载带宽逐渐成为性能瓶颈,缓慢的镜像拉取速度会严重影响容器部署效率和成功率。

  • 冷启动时间长

    应用冷启动时间由两个部分组成,Pod 启动时间及 Pod 启动后应用初始化时间。AIGC 类应用这两个时间都很长。镜像大导致 Pod 的镜像拉取时间长。应用启动后首先需要将模型加载到内存中然后才可以对外提供服务。以 stable diffusion 的 v1-5-pruned.safetensors 模型为例,模型有 7.7GB,从云盘加载到内存中大概需要 25s。AIGC 应用的冷启动时间从几十秒到几十分钟不等,如采用 HPA 扩容策略会存在明显的滞后性,导致业务受损。

为解决上述问题,阿里云推出了容器镜像服务(ACR)加速方案及容器服务 Kubernetes 版(ACK)智能弹性 AHPA 方案。

阿里云容器服务助力万兴科技 AIGC 应用加速

ACR 企业版为 AIGC 应用镜像加速

镜像加速方案分两部分:

镜像缓存

运行 Pod 前首先需要拉取镜像,镜像拉取耗时已经成为容器启动的主要耗时。ACK Serverless 集群里,首次拉取的镜像会自动制作镜像缓存,第二次创建 Pod 时会基于该快照来创建,避免或者减少镜像层的下载,从而提升 Pod 的创建速度。镜像缓存是根据镜像地址严格匹配的,当镜像有更新时需要更新镜像缓存。

详情请参考文档镜像缓存概述 [ 1]

P2P 镜像加速

当大规模容器集群批量下载镜像时,容器镜像存储的网络带宽会成为性能瓶颈,导致镜像拉取缓慢。P2P 加速功能利用您计算节点的带宽资源,进行节点之间镜像分发,减少对容器镜像存储的压力,可以大幅提升镜像拉取速度,减少应用部署时间。

详情请参考文档使用 P2P 加速概述 [ 2]

图片

万兴科技采用的方案将这两个能力结合在一起,将不常变化的基础镜像做镜像缓存,经常更新的镜像层采用 P2P 加速拉取,效果非常明显:一般 20G 的镜像拉取速度从 20min 左右加速到 30s 以内, 而且同时扩容的 Pod 数量越多,加速效果越明显。

ACK AHPA 轻松解决弹性滞后问题

在云原生场景下,资源容量通常难以预估,而使用 K8s 原生的 HPA 需要面对弹性滞后以及配置复杂问题。阿里云容器服务与达摩院决策智能时序团队合作推出了 AHPA 弹性预测,可以根据业务历史指标,自动识别弹性周期并对容量进行预测,提前进行弹性规划,解决弹性滞后的问题。

AHPA 会根据历史 Pod 的 Ready Time 以及历史 Metrics 自动学习规律,在业务量上涨之前的一个 Ready Time 开始扩容。当业务量上涨时 Pod 已提前准备,可以及时供给资源。

详细介绍可参考文档 AHPA 概述 [ 3]

图片

万兴科技在使用 AHPA 后,在成本基本没有变化的情况下, 极大地缩短了用户端的等待时间, 可以从下图看出,接入 AHPA 后基本上没有任务堆积了。

图片

综上,AIGC 类应用与传统应用相比,具有镜像大、冷启动时间长等明显特征。阿里云容器服务推出的镜像缓存、P2P 镜像加速及 ACK AHPA 弹性预测能力可以有效解决这些问题。

镜像缓存可以基于快照创建 Pod,避免或减少镜像层的拉取;P2P 镜像加速技术利用计算节点的内网带宽资源,在节点之间分发镜像,避免从数据源拉取,加速应用部署;AHPA 基于 RobustScaler 算法根据历史 Pod Ready 时间训练模型,提前扩容,减少冷启动时间。

相关链接:

[1] 镜像缓存概述

https://help.aliyun.com/zh/eci/user-guide/overview-of-image-caches-1/

[2] 使用 P2P 加速概述

https://help.aliyun.com/zh/acr/user-guide/use-p2p-acceleration-1?spm=a2c4g.750001.0.i1

[3] AHPA 概述****

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ahpa-overview-1?spm=a2c4g.750001.0.i1

相关文章:

阿里云容器服务助力万兴科技 AIGC 应用加速

作者:子白(顾静) 2023 年堪称是 AIGC 元年,文生图领域诞生了 Stable Diffusion 项目,文生文领域诞生了 GPT 家族。一时间风起云涌,国内外许多企业投身 AIGC 创新浪潮,各大云厂商紧随其后纷纷推…...

STM32F103标准外设库——认识STM32(一)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...

设计模式——1_5 享元(Flyweight)

今人不见古时月,今月曾经照古人 ——李白 文章目录 定义图纸一个例子:可以复用的样式表绘制表格降本增效?第一步,先分析 变化和不变的地方第二步,把变化和不变的地方拆开来第三步:有没有办法共享这些内容完…...

kafka系列(二)

本章承接kafka一内容,文章在本人博客主页都有,可以自行点击浏览。 幂等性 请求执行多次,但执行的结果是一致的。 如果,某个系统是不具备幂等性的,如果用户重复提交了某个表格,就可能会造成不良影响。例如…...

Ubuntu20.04安装配置OpenCV-Python库并首次执行读图

一、选择三方提供的预编译包安装: 可以从官网下载 OpenCV 的安装包,编译后使用;也可以直接使用第三方提供的预编译包 安装。显然后者不需要执行编译步骤,更便捷。选择由 PyPI 提供的 OpenCV 安装包,可以在 https://py…...

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练 我们在之前实现YOLOv1的基础上,加入了先验框机制,快速的实现了YOLOv2的网络架构,并且实现了前向推理过程。 经典目标检测YOLO系列(二)YOLOV2的复现(1)总体…...

半波整流电路原理详解+参数与计算公式

什么是半波整流电路? 半波整流电路的基本操作非常简单,输入信号通过二极管,由于只能通过一个方向的电流,二极管的整流作用,单个二极管只允许通过一半的波形。 下图说明了半波整流电路的基本原理。 半波整流电路工作图…...

GZ036 区块链技术应用赛项赛题第3套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(3卷) 任 务 书 参赛队编号: 背景描述 新能源作为新兴领域,产业呈现碎片化与复杂化的特性,逐渐出现管理困难、供应链金融、可信监管与数…...

LeetCode142.环形链表II

力扣题目链接 思路:判断链表是否有环?可以使用快慢指针法,快指针每次走两步,慢指针每次走一步,如果链表有环一定会在环中相遇。 如何找环的入口?当快慢指针在环中第一次相遇时,让快指针从头结…...

触摸按键控制LED灯

目录 1.理论 2.代码 2.1 touch_ctrl_led.v 2.2 tb_touch_ctrl_led 1.理论 以上的波形图的touch_flag是采用组合逻辑的方式产生的。 以上的touch_flag是采用时序逻辑产生的,时序逻辑会延迟一拍。 以上是上升沿和下降沿的组合逻辑和时序逻辑实现,逻辑或…...

QT自定义控件0-360°刻度尺

支持0到360,360到0的过度。 直接上代码,可以直接用,使用的paintevent事件实现的,没啥好讲的。 .cpp void Widget::drawCourse(QPainter& p,QPen pen,QFont font) {double currentNumber m_ang;p.setBrush(Qt::black);p.dra…...

c语言0基础笔记

目录 前言 第01章_C语言入门 1.1初识计算机语言 1.2初识C语言 1.3第一个c程序 1.4IDE使用 1.5注释 1.6第一个c程序剖析 1.7printf()输出格式 第02章_变量与进制 2.1关键字 2.2标识符 2.3变量 2.4基本数据类型的使用 2.5变量间的运算规则 2.6常量 2.7输入/输出函…...

Vue 中 Element UI 的 el-table 组件实现动态表头和内容

在 Vue 中使用 Element UI 的 el-table 组件时,为了实现动态表头(包括第一层表头及其下的嵌套表头或子表头)。需要后端返回的数据结构能够体现表头层级关系以及对应的数据结构相匹配。这样的数据通常是一个嵌套数组,每个表头单元可…...

安装sqlserver后—无法连接到 127.0.0.1,1433\sqlexpress

报错问题如下: 标题: 连接到服务器 ------------------------------ 无法连接到 127.0.0.1,1433\sqlexpress。 ------------------------------ 其他信息: 登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。 (Microsoft SQL Serve…...

Python JSON解析校验格式,输出错误信息的工具

引言: 在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端数据传输和存储。然而,由于JSON的灵活性和复杂性,解析JSON时常常会遇到格式错误的问…...

物联网网关与plc怎么连接?

物联网网关与plc怎么连接? 物联网是当今社会中最热门的技术之一,而物联网网关则是连接物联网设备与云平台的核心设备之一。物联网网关在连接各种传感器和设备时起着至关重要的作用。而另一种广泛应用于工业控制和自动化领域的设备是可编程逻辑控制器&…...

HANA:存储过程(Procedures) DEBUG

作者 idan lian 如需转载备注出处 如果对你有帮助,请点赞收藏~~~ 1.场景 最近不是写了蛮多hana的存储过程吗,如果是简单的增删改查,如果结果错了,还是比较容易找到错误在哪的,但是逐渐假如循环啊,变量判…...

Oracle行转列函数,列转行函数

Oracle行转列函数,列转行函数 Oracle 可以通过PIVOT,UNPIVOT,分解一行里面的值为多个列,及来合并多个列为一行。 PIVOT PIVOT是用于将行数据转换为列数据的查询操作(类似数据透视表)。通过使用PIVOT,您可以按照特定的列值将数据进行汇总,并将…...

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…...

React hook+AntD pro实现Form表单的二次封装

React hookAntD pro实现Form表单的二次封装 封装Form表单1、在src/types下新建 antd/form/index.ts,进行Form表的配置、数据等类型的限制2、在 根目录/components 下新建 BaseForm/index.tsx文件3、在BaseForm/createFormIpt.tsx中,抽取对不同类型的表单…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...