2020 Techo Park开发者大会召开,作业帮分享拍搜系统架构演变历程
12月19日至20日,由腾讯主办的2020 Techo Park开发者大会于北京召开。据悉,本次大会邀请了全球超200位顶级技术专家来到现场,与数千位参会者就云计算、大数据和人工智能等前沿技术话题展开深度交流,为中国及全球云计算爱好者、从业者、开发者提供最具参考价值的创新分享。
作业帮视觉智能实验室架构负责人程童受邀参加大会,并发表了题为《作业帮拍照搜题系统架构的演变》的主题演讲,系统地介绍了作业帮拍搜系统概况、不同阶段面临的问题和应对方法,以及GPU服务虚拟化的实践经历和取得的迁移效果。
底层技术加持,作业帮拍搜助力用户精准获取全面信息
作为中国最大的K12在线教育公司,作业帮致力于用科技助力教育普惠,解决教育领域痛点,旗下拥有作业帮、作业帮直播课、作业帮口算、鸭鸭AI课、智能硬件喵喵机等多款教育产品,总日活用户超5000万,月活用户超1.7亿,累计激活用户设备超8亿。其中,作业帮APP是进入中国应用市场Top30的唯一一款教育类APP,作业帮直播课是中国在线教育领军品牌,累计服务学员已超6500万。
在作业帮的整套产品链条中,拍搜系统提供了底层的技术支持。据程童介绍,作业帮拍搜系统拥有多项OCR、检索、系统专利,率先在业界实现“随手一拍,秒出答案”。与此同时,随着拍搜功能的不断拓展,作业帮完成了从单题到整页再到猜你想拍,从搜索到批改再到打分的全方位搜题场景设定,充分帮助学生提高学习效率。
据了解,作业帮拍搜算法架构主要分为OCR和检索两部分。其中,OCR系统主要任务是将所拍内容识别成文本,由多个策略&预处理模块,以及大量使用GPU作为运算设备的深度学习在线推理服务组成;而检索系统的主要任务是通过识别出的文本检索答案,包含策略层、正排系统、倒排系统和离线建库四个主要部分,针对拍照搜题这个垂直领域进行了大量的策略优化。
程童表示:“针对用户在不同使用场景下可能出现的模糊、倾斜、低像素、干扰等各类拍照问题,作业帮在持续5年以上的自主研发和数据积累中,不断进行算法迭代和架构完善。”
在一次完整的文字识别流水线中,作业帮拍搜系统拥有超30种不同的神经网络各司其职,平均一次识别可运行260次以上的神经网络预测。此外,通过构建大规模的并行GPU集群,平均只需要200毫秒,便可完成一次完整的识别流程,且作业帮系统在一分钟可完成百万次这样的搜题请求。对于识别出的题目内容,系统可以在索引量超过3亿的题库搜索引擎中进行匹配,确保用户获取更全面和准确的信息。
从更快更准到快速应变,有限算力下的极限探索
程童在演讲中提到,在过去的六年里,作业帮拍搜系统以两年为进化周期,大致可分为三个发展阶段,每个阶段因业务场景和系统规模不同,面临的问题也有所不同。2015年至2016年属于第一阶段,作业帮拍搜系统业务刚起步,需要解决的核心问题是更快和更准。更快是为了提供更好的用户体验,更准则容易形成口碑传播,吸引更多用户。
为了实现“随手一拍,秒出答案”的效果,作业帮视觉智能实验室工程架构团队从并行计算、调度策略、工程实现三方面做出了努力。团队率先将GPU用于在线推理服务:使用CPU做预处理,利用GPU强大的并行运算能力运行深度神经网络,上线后取得了10倍的加速效果,平均耗时从3秒以上缩短至300多毫秒,后续持续优化到平均200毫秒。团队还自研轻量级RPC框架,设计适合多GPU协同的线程池和调度策略,高峰期GPU利用率达到90%以上。
伴随业务流量的持续上涨,作业帮拍搜系统在2017年至2018年进入发展的第二阶段,不断扩张的业务引入了更多的算法模型,需要不断开发交付新的服务;算力需求的快速上涨又带来了成本上的压力。这两年,团队在开发和运维双线面临挑战。
团队迅速调整策略,制定应对方案。首先,优先满足业务发展需求,尽快交付服务,确保算法模型的快速上线;同时,尽力优化系统环境,减少技术债务。例如,针对环境异构的问题,团队通过升级接入层,优化自研RPC客户端,满足多机房、多机型负载均衡以及实验分流需求;通过迁移服务器的机会收敛异构机型和环境;不断根据业务情况调整优化系统部署,将日常操作自动化,提高管理效率。
经过技术团队不懈努力,在业务不断扩展、流量持续增加的情况下,系统有力支撑了作业帮拍照搜题类业务的发展,自身也成长到了一定规模。
虚拟化突破两大矛盾,显著迁移效果激发更多可能性
2019-2020年系统进入到第三阶段,针对前期发展过程中的各种问题,程童和团队没有停留于表面,而是不断回顾、总结和深挖,认为之前出现的很多问题,表现出的形式是性能和稳定性相关,但实际上是因为系统灵活性不足。在人力有限的前提下,以物理机(bare metal,裸金属服务器)作为资源分配和系统管理的最小单位,无法突破两个矛盾,即日益频繁的变动与系统管理之间的矛盾,和日益增长的需求与资源管理之间的矛盾。为了突破这一瓶颈,团队选择了虚拟化,具体实现形式是K8s和容器。
对于为什么选择K8s,程童解释道:“在最关键的资源分配环节,K8s突破了机器的边界,将资源抽象整合为资源池,应用按需申请,由调度器分配,解决了资源管理的矛盾;而通过抽象出pod、deployment、service等概念,可低成本实现应用整个生命周期的自动化,解决了系统管理的矛盾。”
为了减小系统迁移的风险,团队制定了渐进式的迁移步骤,首先对环境进行标准化,对一些不适合容器环境使用的组件或功能进行改造;之后将整个系统容器化运行,了解和掌握相关数据;最后实现灰度环境验证和线上系统迁移。针对K8s原生不支持按显存调度的问题,团队也通过研发调度插件给出了解决方案。
从目前的迁移效果来看,通过更细颗粒度的资源分配和服务混部,部分集群迁移后节省了50%的机器资源,资源利用率也大大提升;而通过迁移获得的弹性伸缩能力,可以让系统在应对流量高峰时更游刃有余;相比于集群调整平均需要2小时的物理机时代,如今平均只需要10分钟即可完成;而在故障处理方面,也从原来的平均20分钟缩短至平均5分钟,对于简单故障,系统可以实现无人工介入。
在程童看来,迁移效果远不止如此,虚构化改造所带来的灵活性,让之前许多不方便的事情变得更加便捷,创造了许多可能性。未来,作业帮技术团队将持续搭建先进技术系统,不断突破在线教育发展所遇到的技术难题,真正实现以科技赋能在线教育创新发展。