最初发表(日文)于former.workstyle.tech.
构建一个用于3D Avatar 活流的无人系统 我们正在开发一个无人系统, 3D相机自动处理活流。
系统在预定的起动时间将一个云GPU被拖上,渲染器组装并流出视频,然后当片段结束时被被丢弃.
由于没有人类监督,有3个因素直接影响了业务和服务质量的成功:"有多少阿凡达人可以同时运行","系统如何从失败中恢复","如何迅速起步".
这些问题不能单靠估计来回答.
租一个GPU几个小时只花了几百日元.
在这篇文章中,我们将分享我们如何衡量和设计这个系统的三个故事,遵循"倒塌的块-原因-解决方案"的结构.
容量:有多少个相机可以运行在一个单一的GPU上?
答案是4,每月每名阿凡达7 600日元。
然而,瓶颈不是GPU.
可靠性:尽管使用相同的图像,但一些主机每60秒坠毁.
我们实施了一个自动切换到不同宿主的机制.
起跑速度:将起跑时间从起跑起跑起跑从4分减到95秒.
这三个方面似乎是独立的,但实际上是相互关联的。
更快的启动可以实现实际主机切换,理解能力使我们能够确定价格。
让我们潜入每一个。
1.
有多少"神通"可以在单个GPU上运行? - 测量结果:4 我们迫切需要的第一个数字是 "有多少阿凡达人可以运行在单一的GPU上".
没有这个,我们无法确定定价,没有定价,我们就无法评估企业的可行性.
估计是没用的,所以我们测量了 以下为结果: 项被测量值 GPU RTX 4000 Ada( Community type,
- 28/ hour) 相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相并相相并相并相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 价格:每名阿凡达24/7次运行模式月成本 大约7,600美元 8小时的每日日程 大约2,500美元 通过“实际时间段长度”判断成功与否,而不是FPS 衡量同时行刑的一个常见错误是只关注FPS.
就流水而言,这是不够的。
您需要检查录入的片段长度是否符合实际时间 。
原因很简单:当渲染失败时,输油管并不"口吃"而会跳过时间.
我们经历了一个90秒的动画只记录了6秒的情况.
FPS日志看起来很好,但输出被截断了.
因此,我们设定了成功标准: 有了4个相机,所有文件都是89秒/89秒.
这证实了"4相机可以同时运行".
我们还证实,屏幕捕获率是33分。
令人惊讶的是,GPU是未充分利用跑步4个相机,导致GPU使用率达到26%.
这意味着GPU拥有了三倍以上的容量.
瓶颈是CPU (16 vCPU).
分解解释原因: 过程使用 3D 场景渲染 GPU 框架 提取 CPU / 传输 H.264 编码 CPU (如果软件编码) 音频混音和Muxing CPU RTMP 流取 CPU / Network GPU只处理渲染,而流管的其他部分则依赖于CPU.
假设"我们租了个GPU"会导致专注于GPU的规格,但实际的限制因素是vCPU的数量.
这一观察建议了另一个改进:使用硬件编码器(NVENC)可以释放CPU资源,有可能增加活化器的数量.
在选择一个GPU时,"NVENC可提供性"应该是一个标准.
共享主机的执行说明 当将多个相机装入一个主机时,我们做了一个执行变化.
渲染器最初通过一个被命名的管子(fifo)从页面向ffmpeg发送音频.
如果此路径在进程间共享,则主机共享失败.
第二个阿凡达会抓住同样的管子 引起声音