常规的应用都是一台电脑安装一套Smart3D,性能不够就组集群。
昨天有一个群友咨询我关于一台电脑通过Sandboxie系统安全工具来实现一台电脑跑空三,加快数据处理速度的问题。
这个问题说白了就是如何在数据生产过程中高效利用CPU、GPU、内存、磁盘的问题。
这里阐述一下个人的理解作为参考,有错误不当之处敬请指出:
一、解释一下Sandboxie一机多开的原理:
Sandboxie类似一个虚拟机,是一个封闭的沙箱,相当于把一台电脑的硬件资源虚拟成多个独立的电脑,关于sandboxie资源(内存、cpu、gpu、磁盘)硬件分配不做过多说明,本身了解的也不多。
二、Smart3D官方文档里对加快速度的介绍
提出的方案是集群,多台机器一起计算。sandboxie也是利用了这个特性。
三、Smart3D整个环节对硬件资源的消耗
空三过程第一阶段selecting pairs:读取照片,解析同名点,此处主要是磁盘读写,cpu。
空三过程第二阶段initializing orentation:姿态标定,通过同名点反向推算每个照片拍摄时的空间位置:主要是内存、cpu
空三过程第三阶段:performating adjustment空间框架构建,主要消耗资源:cpu、内存也会占不少
生产Production:cpu、内存、GPU交互占用,时而cpu跑满、时而内存跑满、时而GPU跑满、时而磁盘极大IO
注:想详细了解,可以在计算的同时,打开任务管理器,观察一下资源占有情况。也许不同版本优化后占有情况不一致,上述基于3.2版本观察
另外,新版本的smart3d支持集群跑空三,相较3.2版本是一大突破。
老了不知是记忆不好,还是版本更新导致,感觉空三分的阶段变了。
测试的时候顺手新做了一次资源占用观察记录。600多张2000万像素的片子,版本V4.4.9.516
磁盘占用一致比较高,cpu和内存占用是高低交替
cpu居多,但不是稳定高占用
cpu几乎一直跑满,内存和磁盘占用都很低(51-73%),而且会卡在73%很长时间。
快速调到83%,进入下一个环节
另一个结论:master上面显示的进度条并非是实际比例。
四、资源配置
单机器配置不变的情况下:磁盘io受限于磁盘访问速度、空三过程无法优化,数据生成环节production,分块的模式会影响到内存的占用,可以适当调整分块的规则和大小。
集群情况下:尤其注意磁盘访问速度因为多了交换机和网线因素、集群中的短板机器。
这种情况下如果用了千兆的网线,百兆的交换机,影响不言而明。
五、几个建议:
1.单机环境建议cpu频率尽可能高(帮助文档里官方说明)、磁盘可以考虑固态、集显就差点意思了。
2.集群环境下:交换机和网线要配套,那么多机器都配置了,卡在这里得不偿失。
对于磁盘io瓶颈,可以考虑磁盘阵列,或者把照片放到不同的磁盘上,输出文件放到不同的磁盘上。
对于reconstruction的分块:原则上建议内存大就分块越大越好,分块过多影像成果的展示效果和数据体积,因为分块处块和块的边缘都是有重叠的,而且快过多,加载速度会受影响,可以对比3000以上块的加载速度和100一下。
对于资源占有的不均衡问题:虚拟机或者沙箱回有所优化:
这是单机多开测试结果。
存在的隐患:如果不同的Engine同时需要高内存占用可能导致出错。上图也明显得出结果,如果开的过多,反而会影响速度,不明原理的情况下:慎用。
3.如果要做大型项目,还是别扣这点资源了,稳定才是第一位的。
说了这么多,本人没有做过对比测试,有兴趣的朋友可以自己动手试试。
4.如果一台机器多开,或者一个机器有多个GPU、CPU等硬件资源,可以有选择性的设置engine的处理任务类型
比如cpu、内存好的机器尽可能的用来跑空三,gpu、内存好的,尽可能用来生成模型。
只做空三运算的启动方式
CCEngine --typeAT
只处理Production任务和影像地形生成任务
CCEngine --type "TileProduction RasterProduction"
设置还可以具体控制Engine所能使用的线程数。
详情参考:三十、你造Smart3D特殊的Engine启动方式么?高配负责空三,普通负责生产
如果感觉整理的还不错,欢迎点赞、分享