采编式AIGC视频生产流程编排实践
作者 | 百度人工智能创作团队
导读
本文从业务出发,系统介绍了采编式 TTV的实现逻辑和实现路径。结合业务拆解,实现了一个轻量级服务编排引擎,有效实现业务诉求、高效支持业务扩展。
全文6451字,预计阅读时间17分钟。
01 背景
近年来,内容视频化趋势仍在持续,短视频的市场规模持续增长,2022年8月CNNIC发布的数据显示,截至2022年6月,我国网民规模为10.51亿,占网民整体的91.5%。随着大量短视频内容充斥网络,提高视频生产效率和效果的半智能化、辅助创作工具如视频剪辑、视频美化等如雨后春笋般涌现,视频生产形态不断升级。百家号作为百度为内容创作者打造的内容生产平台,在内容生产方面深耕多年,如能利用百度强大的 AI 能力,以当前百家号图文内容为脚本,实现视频智能化自动、半自动生产,将会进一步降低视频创作者的创作成本,带来视频创作的进一步发展。
自 AIGC 项目启动之后,我们对视频自动生产方案进行了一系列摸索试验,最终沉淀出一套完整的解决方案——采编式视频自动生产。该方案基于一系列微服务的配合执行,如何高效、稳定地完成整个流程的组织与调度是其中一个重要的课题。另外,在早期,整个项目的迭代非常迅速,业务发展变化比较大,如何较好地支持系统扩展与升级,也是我们关注的重点。本文将系统介绍采编式 AIGC 视频生产流程的实现方案。
02 采编式视频生产
所谓的采编式视频生产,顾名思义,即基于图文,进行相关视频和图片素材的补充和添加。由图文到视频的过程,看似简单,但作为完全不同的两种内容形态,这其中还有许多工作要做,按照一般处理方法,主要有以下内容:
-
文本处理:由于整个视频是用图文做脚本来完成的,所以,视频主体抽取(这个视频讲述的是什么内容)、视频调性确认(阳春白雪还是下里巴人)、视频字幕/旁白生成等,都需要基于充分的内容理解,再进行精准的文章主体识别、文章风格识别、口播逐字稿改写、字幕拆分等工作的进行;
-
素材处理:采编式视频生产的核心,是要将碎片化的素材基于图文脚本进行合理的编排,故而进行视频和图片素材的在线检索、剪裁、清洗等必不可少;
-
语音处理:语音播报作为视频的关键元素,在视频生产中是必不可少的一环,需要基于图文进行合理的语音合成与添加;
-
其他视频元素添加:视频标注、水印、动效、背景音乐、背景视频、前置氛围渲染等元素的添加,能够更好地丰富视频效果;
-
视频合成:将采编好的脚本文件,利用视频合成技术进行视频渲染输出。
△图1 采编式视频生产
如图1,不同于一般的业务流程,采编式视频生产需要基于大量的媒体数据处理,整个处理过程是无人工干预的全自动化过程,如何将这些服务进行有效地编排与调度,是整个视频生产的关键问题。
03 服务编排常见方案
3.1『状态机』流程调度
常见的服务编排,一般都采取利用定时任务、消息队列、持久化存储等工具进行微服务的拼接串联。这个方案需要在流程中定义关键的状态节点,来标记每个微服务的执行状态,并将状态记录到 MySQL 等 持久化存储中,再通过定时任务或者消息队列来驱动整个流程的流转。
△图2 状态机流程调度
可以看到,该方案是一个可控性较高的流程编排与调度的方案,整个系统的复杂度、稳定性与业务复杂度、系统设计合理性息息相关,更适合一些变动较大、相对轻量级的业务。
3.2 服务编排引擎
随着互联网技术的不断发展、微服务的普及,服务编排的解决方案也日益成熟,涌现出一批成熟优秀的服务编排引擎。业内比较成熟的服务编排引擎有 Cadence、Temporal、Conductor等。
服务编排引擎会进行基础的流程、任务、节点等基础元素的定义,提供流程启动、任务调度、状态监控等基础能力,具备对于编排完成的服务或者流程在运行时进行动态、端到端可视化监控的能力。以 Cadence 编程模型为例说明一般编排引擎的编程模型:
△图3. Cadence编程模型
服务编排引擎一般都有一个中央调度系统,同时提供一些外部可调 api,开发人员只需要通过对框架能力的调用来实现业务逻辑而不需要关注系统的调度运行,甚至包括系统的超时处理、失败重试、异常兜底,框架都会代为处理,提升业务研发的效率。相应地,成熟的框架都有一定的接入门槛和运维成本,比较适合大型项目。
04 采编式AIGC 视频生产流程编排实践
由于 AIGC 视频生产业务发展迅速,迭代速度非常快,对成熟流程调度框架的调研中,遇到了系统利用率低、问题追查成本高的问题,为了快速支持业务、保障系统的稳定性与可用性,我们谨慎地选择了基于状态的流程调度方案,并在此基础上参考流程编排框架的思想,建设一套底层中央编排器,驱动上层微服务的执行。整体思想可以概括为:
-
从上而下地,基于功能对整个流程进行模块拆分、基于实现对模块进行组件拆分,对模块进行状态管理、对组件进行位值管理
-
利用消息队列实现流程串联,通过对状态与位值的判断实现流程调度
-
通过对模块与组件的组合配置实现流程组织
4.1 模块与组件的拆分与管理
首先基于对需求的理解,对整个编排流程进行了模块拆分,并对每一个模块进行相关的状态赋值,拆分的模块有:
-
图文接入模块:接入上层业务或者外部业务的文本内容输入,进行基础的数据解析、校验、打平与过滤功能;
-
脚本编排模块:实现从图文到视频脚本的生成功能,该模块的输入为图文,输出为编排好的视频脚本,包含三条时间轴:①素材轴②文本与语音轴③挂件轴,定义了视频任意一个时间点对应的文本、素材与相关挂件。视频脚本不仅可以用于视频渲染,还可输出给用户作为视频编辑的草稿;
-
视频合成模块:实现从视频脚本到视频文件的生成,该模块执行完成之后就已经产生了可播放的视频文件,标志着视频生成完成;
-
视频输出模块:将视频文件按照业务需求输出,包括但不限于发布到百家号、回传业务方等。
在整个生产流程中,完成一个视频的生产,所需要的功能模块是固定的,但是实现的方式与方法可能会持续地扩展与迭代,为了便于后续状态的管理与功能的扩展,采取了大的功能模块包含小的功能组件的方式,这种方式的优点有二:
-
方便数据输出:在脚本编排模块完成之后进行视频脚本的输出并提供给多个业务方使用,无论模块内部如何扩展,脚本输出的时机是固定的,视频文件的输出同理;
-
方便功能扩展:随着业务的发展,功能实现的方案升级甚至替换是不可避免的,模块内部提供原子化功能组件,可以方便地进行单功能的升级迭代或者添加,而不影响整体其他组件
为了方便微服务的调用状态管理,我们又为每个微服务赋予了位值,所谓位值是当前组件在一个64位整数所处的二进制位次,每个组件占据两位,枚举标记成功和失败状态,我们只需要校验对应位次的值,即可判断当前组件的调用状态与返回状态。
△图4 模块与组件拆分
至此,我们通过『状态』实现了对整个生产流程模块的管理,又通过『调用位』、『返回位』实现了对具体组件的管理。其中,状态管理较好理解,主要是通过持久化存储一个状态字段,来标记当前流程所处模块,如图3所示,当某一条视频生成任务状态值为INIT时即可知当前任务处于视频脚本编排模块,但是具体在执行哪个或者哪些微服务呢?如上文所言是通过位值来确认的,对于位值的应用相对较为复杂,下面我们就详细阐述一下位值的应用。
△图5槽位值原理示意图
如图5所示,『调用位』、『返回位』都是一个 UINT64整数,每两位组合可以有4个状态,我们取前三个状态进行调用或返回状态的表示。每一个组件在注册进入系统时,都会先分配一个位次(如图3所示,1即表示占据槽位值的低两位),如此一来,某个组件状态发生变更时通过二进制操作修改对应二进制位的值即可。
该方案的优点是能够通过一个整形值管理32个组件的请求或返回状态,且每个组件的状态修改互不影响。当然这也带来一个问题,即该方案最多只能管理32个组件,更多组件需要管理时就要扩展字段或者采取其他方案,同时虽然变更某个组件槽位值不影响其他组件,但当出现服务并行需要将修改后的槽位值更新存储时,需要确保更新的事务性,这个问题的解决我们会在后面的流程调度中完成。
4.2 流程配置
在完成了组件与模块的拆分与确定之后,即可根据业务逻辑,基于组件之间的相互依赖关系进行流程编排配置。流程搭建采取配置化、插拔式方案,将业务所需组件放进对应模块,编排出所需的视频生产流程,如图5所示为当前采编式 AIGC 视频生产流程的流程图,在当前业务状态下,存在相互依赖关系的组件如图文理解、插件选择、文本处理在整个流程中串行执行,有相同前置依赖但彼此不依赖的组件如素材生成、素材检索、语音合成则应该并行执行:
△图6 采编式 AIGC 视频生产流程
如要实现一个任务流程,按照上述流程图执行,那么首先需要有这样一个流程描述文件,该文件按照一定的规则组织,包含一个流程完成所需的所有组件,并能够准确描述这些组件的执行顺序与相互依赖关系,在此基础上,如能描述当前组件所处模块、状态,那么对于流程理解以及后续流程执行都有很大助益。基于以上考虑,我们采取以组件为最小单位,组合生成配置文件:
{……{ // 脚本编排模块"module_name":"ScriptAssign","status":"init","next_status":"generating","components":[……{ "component_name" : "TextProcessor", // 组件名称,文本处理组件"slot_index":2, // 组件位次,第三位(index从0开始),表示低第五六两个二进制位"slot_num_success": 16, // 2^(2*slot_index) 成功时,要将『低第五位』置为1,同时确保『低第六位』为0,具体在进行位置计算时实现"slot_num_fail":32, // 2^(2*slot_index+1) 失败时,要将『低第六位』置为1,同时确保『低第五位』为0"depends":["TextUnderstanding","WidgetInit"] // 文本处理组件执行,依赖文本理解与插件选择组件执行完成},……{ "component_name" : "FootageGenerator", // 素材生成组件"slot_index":3, "slot_num_success":64,"slot_num_fail":128,"depends":["TextUnderstanding","WidgetInit","TextProcessor"] // 依赖前面三个组件},{ "component_name" : "MaterialSearch", // 素材检索组件"slot_index":4, "slot_num_success":256,"slot_num_fail":512,"depends":["TextUnderstanding","WidgetInit","TextProcessor"] // 也只依赖前面三个组件},……]},{ // 视频生成模块"module_name":"VideoGenerator","status":"generating","next_status":"draft","components":[{ "component_name" : "VideoRender", "slot_index":7,"slot_num_success": "2^14",// 2的14次方"slot_num_fail":"2^15",// 2的15次方"depends":[""] // 在当前模块内,没有前置依赖}]}……
}
流程描述文件的组织逻辑为:
-
基本描述单元为组件,说明组件在流程中所在位次与对应的槽位值、组件执行的前置依赖组件
-
每个组件只关注自身执行所需关键信息,不关注其他组件的执行逻辑
-
在同一个模块内的组件,组合成为模块单元,模块单元关注当前模块状态,以及当前模块执行完毕之后的下一个状态
-
所有模块按照执行顺序(因为模块是绝对串行的)组织成完整流程描述文件
后续的整体流程调度,将以该文件为蓝本执行。同时,可以看到,一个描述文件即规定了一个流程,如果我们有不同的业务场景需要不同的执行流程,那么只需要再编排一个流程调度文件即可,事实上,我们的AIGC 业务也确实存在多条流程,整体编排逻辑同理,不多赘述。
4.3 流程调度
服务编排框架的核心,是流程调度部分,该部分负责维持与推动数据流的运转。如上文所述,每个组件的状态都通过相对应的位值来维护,流程调度的关键就在于对位值的管理。整体流程如图4所示,整个流程调度通过消息队列串联,主要操作步骤如下:
①任务创建:该步骤在一个任务执行全流程中只执行一次,主要在前置的参数检查校验工作完成之后,进行数据的入库操作,并将任务下发流程调度消息队列,触发整体流程。
②查找可执行组件并执行:该步骤在一个任务执行全流程中会执行多次,在正常情况下,与组件个数等同。该步骤主要负责从消息队列中拉取数据,遍历流程描述文件,通过计算当前任务的调用/返回槽位值,推算出各个组件执行状态,若某个组件未执行、且其依赖的前置组件已执行完毕,则将该组件加入执行队列;若未找到可执行组件,则本次不执行。在这一步中,若组件内部存在异步微服务,则仅作微服务触发,若为同步组件,则会在执行完毕之后,将任务再次加入流程调度消息队列。
③异步回调:我们大部分组件都是异步微服务,故而在第二步中触发微服务调用之后,这一环节主要功能是接收微服务回调,并做相关后置业务处理,处理完成之后,再将任务再次加入流程调度消息队列。
△图7 任务调度流程图
在这个流程里我们通过消息队列的调度解耦了组件之间的相互依赖,仅通过槽位值查询与校验来实现流程的流转与执行,这使得系统具备了组件的并发性,只要定义好每个组件执行的前置依赖,那么当一个组件执行完成之后所有依赖这个组件的后置组件都可以开始执行。那么,这时候会出现另外一个问题,我们如何保证并行执行完成之后的槽位值更新不彼此覆盖?如果两个组件同时执行完成,但每个组件只会计算并修改自身槽位值,如何保证后更新的槽位值不覆盖前一个组件的槽位值?这个问题的解决我们是通过利用消息队列的重试做后置更新结合更新锁来完成的:在每个组件执行完成之后只会更新自身涉及的业务字段,而不更新状态及槽位值,状态管理的三个值是在步骤二中前置执行的,每次从消息队列中拉取一个任务后会先进性状态的检查和槽位值的更新,更新前会先加唯一锁,若加锁失败则可能其他组件正在做状态更新,则退出执行,该任务依然在消息队列里未消费,待下一次继续执行。
05 总结
采编式 AIGC 视频生产流程2022年5月上线以来,已经根据不同的业务场景,通过对基础模块和组件的组合配置建设起5条不同的生产流程,很好地支持万级日产的业务发展。随着业务的迭代深入,相关组件的功能及代码量都在日益膨胀,我们成功地在当前框架下进行组件的拆分与扩展,在不触动底层调度框架基础上,安全高效地完成了组件的扩展。虽然当前框架对目前的业务支持良好,但是整个流程的优化和迭代还在继续,对成熟服务编排引擎的调研也在继续,希望后续在借鉴成熟框架的基础上,能够沉淀出更为稳定高效的视频生产流程。
——END——
参考资料:
[1]https://cadenceworkflow.io/docs/get-started/
[2]https://docs.temporal.io/temporal/
[3]https://conductor.netflix.com/architecture/overview.html
[4]https://netflixtechblog.com/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40
推荐阅读:
百度工程师漫谈视频理解
百度工程师带你了解Module Federation
巧用Golang泛型,简化代码编写
Go语言DDD实战初级篇
Diffie-Hellman密钥协商算法探究
贴吧低代码高性能规则引擎设计
相关文章:
采编式AIGC视频生产流程编排实践
作者 | 百度人工智能创作团队 导读 本文从业务出发,系统介绍了采编式 TTV的实现逻辑和实现路径。结合业务拆解,实现了一个轻量级服务编排引擎,有效实现业务诉求、高效支持业务扩展。 全文6451字,预计阅读时间17分钟。 01 背景 近…...
Leetcode23. 合并k个升序链表
一、题目描述: 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释&#…...
从用户出发,互联网产品策划方法论
【一】从用户到需求 产品经理需要具备两个非常重要的技能,一个叫策划,一个叫感知用户。 我们在分析问题的时候往往会说“这么做,我认为用户会怎么怎么样”、“用户会认为这样很不爽”,当我们这样说时,很有可能是把自己当成了用户,用某些特定的情感或记忆代表了用户。 当我…...
STM32 E18-D80NK红外检测
本文代码使用 HAL 库。 文章目录前言一、E18-D80NK 红外传感器:1. E18-D80NK 的介绍2. 电器特性二、红外检测小实验代码讲解三、实验现象总结前言 这篇文章介绍 如何使用 STM32 控制 E18-D80NK 进行红外检测。 一、E18-D80NK 红外传感器: 1. E18-D80N…...
Linux常用命令--进程和计划任务管理
一、程序和进程的关系 1、程序 ①保存在硬盘、光盘等介质中的可执行代码和数据 ②静态保存的代码 2、进程 ①在cpu及内存中运行及进程代码 ②动态执行的代码 ③父(fork)、子进程,每个程序可以创建一个或多个进程 父进程和子进程的区别&am…...
Unity TextMeshPro
Unity TextMeshPro 简介 TextMeshPro(也简称为TMP)号称是Unity的终极文本解决方案,它是Unity 的 UI 文本和旧版文本网格体的完美替代品。 功能强大且易于使用,使用高级文本渲染技术以及一组自定义着色器;提供实质性的视觉质量改进,同时在文本样式和纹理方面为用户提供令人…...
虹科分享| 浅谈HK-Edgility边缘计算平台
上周,我们推出了虹科新品HK-Edgility边缘计算平台以及uCPE解决方案。本篇文章我们再来谈一谈到底什么是边缘计算?为什么需要边缘计算?边缘计算和云计算有什么关系?HK-Edgility边缘计算平台将为您带来什么?一、边缘计算…...
React Router v6详解
旧版本React Router使用方式 BrowserRouter:通过 history 库,传递 history 对象,location 对象Switch:匹配唯一的路由 Route,展示正确的路由组件Route:视图承载容器,控制渲染 UI 组件 新版本R…...
帮助100w人成功入职的软件测试面试常见问题以及答案
测试面试题怎么来设计测试方案根据测试需求(包括功能需求和非功能性需求),识别测试要点,识别测试环境要求,安排测试轮次,根据项目计划和开发计划做整体的测试安排。被测试的特性:通过对需求规格…...
tensorflow2.4--2.回归问题分析
文章目录前言流程案例操作前言 流程 回归问题预测连续值,在某个区间内变动. 常见的线性回归问题模型是yaxb,然而现实世界由于大量的数据偏差以及复杂度,同时还有大量的噪声,往往达不到如此的精确解,实际解决问题时需要考虑噪声的存在 对于噪声,往往我们已经假设了它符合高斯…...
【2023】DevOps、SRE、运维开发面试宝典之Kafka相关面试题
文章目录 1、消息队列的流派2、kafka的优势3、Kafka与Zookeeper的关系4、Kafka消息队列各组件概念5、Kafka消息队列应用场景6、Kafka消息收发的过程7、Kafka消息数据存储概念8、kafka消息的偏移量概念原理9、Kafka消息数据的顺序消费概念原理10、Kafka单播消费消息的原理11、Ka…...
CentOS系统编译安装PHP-5.6.27版本
一、手动安装编译工具: yum install -y gcc gcc-c 二、添加用户和用户组: groupadd web useradd -M -s /sbin/nologin -g web php 三、yum安装依赖: yum -y install libmcrypt libmcrypt-devel mcrypt mhash libxml2-devel libpng-devel l…...
和风SDK查询城市ID(保姆级教程)
android studio版本:2021.2.1例程名:hfserachcityid这几天没什么事做,而且我原来那个“项目”因为免费api不能用了,只能改为和风的免费api,但需要申请,而且还要城市ID,玩天气的基本都知道城市ID这个东西&am…...
暴力递归到动态规划
暴力递归到动态规划 假设有排成一行的n个位置, 记为1~n,n-定大于或等于2。开始时机器人在其中的m位置上(m 一定是1~n中的一个)。如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到n位置, 那么下一步只能…...
Java:Java仍然处于领先地位?
没有多少编程语言能够自吹自擂并持续流行20多年,但Java就是其中之一。Java应用程序不仅局限于web和移动开发,而且给大数据和人工智能留下了深刻的印象。不用多说,让我们讨论一下Java流行的几个原因!!1.实用性根据JamesGosling的说法ÿ…...
虚拟地址空间
本节目录1.如何理解区域划分2.为什么一个变量可以存储两个不同的值?3.深入理解虚拟地址空间为什么要有地址空间?4.理解什么是挂起?1.虚拟地址空间究竟是什么?2.映射关系的维护是谁做的?1.如何理解区域划分 所谓的区域…...
Python基础篇(十五)-- Pygame游戏编程
1 初识Pygame Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实…...
LeetCode 热题 HOT 100 Java 题解 -- Part 2
练习地址 Part 1 : https://blog.csdn.net/qq_41080854/article/details/128829494 LeetCode 热题 HOT 100 Java 题解 -- Part 236. 二叉树的中序遍历 9437. 不同的二叉搜索树 9638. 验证二叉搜索树 9839. 对称二叉树 10140. 二叉树的层序遍历 10241. 二叉树的最大深度 10442.…...
【项目实战】IDEA常用快捷键汇总
一、修改为Eclipse的快捷键 相信很多朋友跟我一样, 都是习惯了eclipse的快捷键,没错,习惯这东西真的很难改!IDEA非常强大,支持我们修改IDEA中的keymap为Eclipse的快捷键!友好又贴心,有没有&…...
更新 TKK 失败,请检查网络连接。谷歌翻译 translation插件不能用解决办法 亲测有效
谷歌翻译无法使用,谷歌回应解释是,谷歌翻译使用率过低,所以选择停止服务。网上也有说法,指出根本原因为,提供API接口的googleapis被墙,这导致js文件和字体资源无法加载。 这里提供两种解决办法 方案一 修…...
SpringBoot整合MybatisPlus多数据源
相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换,因此想了解一下该组件是如何运行的&…...
【教程】如何使用Java生成PDF文档?
在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享。而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行。下面,我们将为您介绍如何使用Java生成PDF文…...
I.MX6ULL内核开发13:pinctrl子系统和gpio子系统-led实验
目录 一、pinctrl子系统 1.1 pinctrl子系统编写格式以及引脚属性介绍 1.1.1 iomux节点介绍 1.1.2 pinctrl子节点编写格式 1.1.3 引脚配置信息介绍 1.2 将RGB灯引脚添加到pinctrl子系统 1.2.1 查找RGB灯使用的引脚 1.2.2找到引脚宏定义 1.2.3 设置引脚属性 1.2.4 在…...
Linux系列 使用vi文本编辑器
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.vi文本编辑器 1.使用vi文本编辑器 2.vi编辑器的工作模式 3.命令模式中的…...
【java基础】接口(interface)
文章目录基础介绍接口的定义关于接口字段和方法的说明使用接口抽象类和接口接口方法冲突的一些说明方法相同名称和参数,返回值相同方法名称相同,参数不同,返回值相同方法返回值不同,名称参数相同方法完全相同,一个有默…...
ChatGPT(GPT3.5) OpenAI官方API正式发布
OpenAI社区今天凌晨4点多发送的邮件,介绍了ChatGPT官方API的发布。官方介绍文档地址为“OpenAI API”和“OpenAI API”。 ChatGPT(GPT3.5)官方API模型名称为“gpt-3.5-turbo”和“gpt-3.5-turbo-0301”。API调用价格比GPT text-davinci-003模型便宜10倍。调用费用为…...
CAD中如何将图形对象转换为三维实体?
有些小伙伴在CAD绘制完图纸后,想要将图纸中的某些图形对象转换成三维实体,但却不知道该如何操作,其实很简单,本节CAD绘图教程就和小编一起来了解一下浩辰CAD软件中将符合条件的对象转换为三维实体的相关操作步骤吧! 将…...
【K8S笔记】Kubernetes 集群架构与组件介绍
K8S 官方文档 https://kubernetes.io/zh/docs/home ##注重关注 概念和任务 板块。 K8S 集群架构 K8S也是运用了分布式集群架构: 管理节点/Master 整个集群的管理,任务协作。工作节点/Node 容器运行、删除。 K8S 组件介绍 管理节点/Master 相关组件 …...
9 怎么登录VNC
1)首先在ssh登录后启动vncserver。登陆后输入下面的指令来创建自己的VNC。 命令vncserver :16 –geometry 1900x1000 其中:16是分配的端口号,1900x1000是分辨率。如果没有响应,建议执行下面操作后再次重复上面操作。 命令…...
MPI ubuntu安装,mpicc,mpicxx,mpif90的区别
介绍 MPI是并行计算的一个支持库,支持对C、C、fortran语言进行并行计算。 安装基础环境 ubuntu进行gcc/g/gfortran的安装: gcc: ubuntu下自带gcc编译器。可以通过gcc -v命令来查看是否安装。 g: sudo apt-get install buil…...
郑州区块链数字钱包网站开发过程/一键制作免费网站的app
面向对象的特征 封装、继承、多态(、抽象) 封装 将某些逻辑或者是代码提取成某种对应的形式,这个提取的过程就是封装 封装包括:方法的封装、类的封装以及访问权限的封装。 访问权限设置主要体现为---将属性设置为私有的࿰…...
wordpress 美术馆/大型网站建设平台
模板介绍 精美PPT模板设计,简约创意个人简历求职竞聘PPT模板。一套岗位晋升幻灯片模板,内含橙色多种配色,精美风格设计,动态播放效果,精美实用。 一份设计精美的PPT模板,可以让你在汇报演讲时脱颖而出。 …...
seo的中文含义/香港seo公司
进入Dos界面后,输入fdisk /mbr 不会损坏数据.转载于:https://www.cnblogs.com/wjonjon/archive/2009/09/15/1566735.html...
浙江网站建设品牌设计/企业品牌推广
腾讯云存储团队正式发布数据加速器 GooseFS 1.4 版本(含 GooseFS 1.4.0 和 GooseFS 1.4.1 版本),该版本针对 AI、大数据场景提供了文件解压缩等便捷易用的工具,同时针对海量文件读写下的集群性能和稳定性问题进行了针对性优化&…...
广州做网站好的公司/网络营销师资格证
CSS布局实例:上中下三行布局,上下定高,中间栏自适应浏览器高度,且内容垂直居中。本文代码在firefox 2.0 / winie 6/ win ie 7 /opera 8.5 cn/win safari测试通过。对于非ie内核浏览器,通过设定display:table、display:table-row和…...
网站建设百科/竞价推广账户竞价托管
ArithmeticException(除数为0的异常), BufferOverflowException(缓冲区上溢异常), BufferUnderflowException(缓冲区下溢异常), IndexOutOfBoundsException(出界异常), NullPointerE…...