终身学习支持非结构化场景 | KubeEdge-Ianvs v0.2 发布
在边缘计算的浪潮中,AI 是边缘云乃至分布式云中最重要的应用。随着边缘设备的广泛使用和性能提升,将人工智能相关的部分任务部署到边缘设备已经成为必然趋势。KubeEdge-Ianvs 子项目,作为业界首个分布式协同 AI 基准测试平台,基于 KubeEdge-Sedna 为算法及服务开发者提供全场景可扩展的分布式协同 AI 基准测试,以研发、衡量和优化分布式协同 AI 系统。
然而在边缘设备中部署静态的 AI 模型往往不足以应对复杂多变的真实世界环境,因此终身学习能力对于边缘 AI 模型来说变得越来越重要。为了方便边缘 AI 算法研究者开发及测试终身学习算法在真实世界环境中的效果,KubeEdge-Ianvs 在新版本的更新中发布了支持终身学习范式的相关算法的研发与测试功能。
本篇文章为大家阐释相关背景和 Ianvs 终身学习架构,并以 Ianvs 云机器人终身学习测试为例对 Ianvs 终身学习的特性进行介绍。欢迎关注 Ianvs 项目,持续获得第一手独家公开数据集与完善基准测试配套。
开源项目 GitHub 地址:https://github.com/kubeedge/ianvs
一、背景
▍1.1 终身学习能力对边缘模型越来越重要
边缘设备所处的环境通常是不稳定的,环境变化会导致数据分布的大幅变化,即数据漂移。数据漂移会显著降低模型准确性。为了解决数据漂移问题,边缘设备需要具备动态更新模型的能力,以适应环境变化。下图展示了一个典型的终身学习算法流程框架。在该框架中,终身学习任务被定义为:已处理 N 个任务,将陆续处理 M 个任务。如何维护知识库并利用其中的模型处理这些任务是关键。
终身学习的流程分为四步,首先根据之前已处理的 N 个任务初始化云端的知识库中的已知任务处理模型;然后在遇到新的任务时,从云端知识库中选取合适的模型部署到边缘端处理任务,如果新任务是已知的任务则更新原来的模型,如果遇到了未知任务则重新训练新的模型用于处理该任务;在边缘端处理好该任务后,对云端知识库进行更新;最后遇到新任务时重复前两步操作。通过以上流程可以确保边缘部署的模型具备终身学习的能力,从而可以应对数据漂移等问题带来的影响。
▍1.2 业界缺少合适的终身学习测试工具
目前终身学习算法相关测试工具发展较慢,目前比较成熟的测试工具只有 ContinualAI 推出的 Avalanche。Avalanche 支持的特性如下:
Avalanche 支持的特性非常丰富,但是对于终身学习算法开发者来说 Avalanche 还存在一些局限性:
未能覆盖终身学习全生命周期算法:支持的场景主要局限于增量学习等场景,而终身学习中任务定义、分配以及未知任务识别等流程无法体现在该 benchmark 中。
缺乏配套真实世界数据集:配套的数据集主要包括 Split-MNIST、Cifar10 等学术界常用的玩具测试集,缺乏适用的真实世界数据集及配套算法。
研发算法难以落地:Avalanche 更多面向终身学习算法的测试实验,并没有考虑未来将算法落地部署的需求。
因此目前业界亟需一个更好的终身学习测试 benchmarking 工具,Ianvs 发布的非结构化终身学习新特性可以很好的解决上述问题。
二、lanvs 终身学习架构
▍2.1 Ianvs 终身学习优势
终身学习近年来得到了越来越多的关注,越来越多的边缘智能从业者认识到了终身学习的重要性。但是终身学习相比其他 AI 算法来说有着更高的研究门槛,经过我们的调研发现终身学习研发存在模型训练流程复杂、算法效果难以衡量和算法落地应用困难三大挑战。
第一个挑战是终身学习模型训练流程较为复杂,比如对于一个刚入门终身学习的同学来说,可能对终身学习算法流程中的未知任务识别模块比较感兴趣,但是要想完整实现终身学习还需要填补任务定义、任务分配等模块,而这对于刚入门的同学不太友好,想复现别人的工作还需要去额外完成其他终身学习模块。
针对这一挑战,KubeEdge-Ianvs 中对终身学习全生命周期的各个模块都进行了设计,包括并不限于任务定义、任务分配、未知任务识别和未知任务处理等多个终身学习核心算法模块,各个模块之间是解耦合的,用户可以只研究自己感兴趣的模块,其他模块采用默认配置即可跑通终身学习实验。
第二个挑战是终身学习算法效果衡量困难,不同论文中的终身学习算法由于其测试流程不一样难以比较其工作的优劣。同时大部分论文的工作都是在 MNIST、CIFAR10 这些非真实数据集上进行的实验,由于缺乏在真实世界数据集上的测试,算法在现实世界中的实际应用效果往往要大打折扣。
针对这一挑战,KubeEdge-Ianvs 中对终身学习的测试流程进行了统一,提供 BWT、FWT 等公认的终身学习系统指标,方便衡量算法效果。同时 KubeEdge-Ianvs 开源了 Cloud-Robotics 等真实世界终身学习数据集,并配套了对应的运行样例,用户可以直接开箱使用该真实世界数据集测试自己提出的算法的效果。
第三个挑战是终身学习算法落地较为困难,算法研发与实际部署之间存在一定鸿沟。用户训练好的模型需要进一步封装才能实际在生产环境上使用。
针对这一挑战,KubeEdge-Ianvs 在开发时就考虑到了和其姊妹项目 KubeEdge-Sedna 开源服务平台是配套兼容关系,因此在 KubeEdge-Ianvs 上研发的终身学习算法可以直接迁移到 KubeEdge-Sedna 平台上实现落地部署,解决了从研发到落地最后一公里的问题。
总而言之,Ianvs 终身学习优势包括:
覆盖终身学习全生命周期,包括任务定义、任务分配、未知任务识别和未知任务处理等多个模块,各个模块是解耦合的;
统一化的测试流程,系统内置权威的终身学习测试指标,并且支持测试结果的可视化;并提供真实世界数据集用于终身学习测试,能更好测试终身学习算法在真实环境的效果;
和 KubeEdge-Sedna 终身学习相兼容,研发算法可以快捷迁移到 Sedna 上实现落地部署。
▍ 2.2 Ianvs 终身学习新特性
Ianvs 在去年发布的 0.1.0 版本中已具备支持单任务学习范式和增量学习范式的算法研发与测试,在新版的 Ianvs 中增加了支持对终身学习范式的相关算法的研发与测试的功能,同时也为终身学习算法测试提供了新的开源数据集。主要新特性如下:
特性一:覆盖终身学习全生命周期
Ianvs 终身学习具体架构如下图所示,主要包括任务定义、任务分配、未知任务识别和未知任务处理等模块,覆盖终身学习全生命周期。
对于已处理任务,Ianvs 通过任务定义模块,将已知任务抽象成若干个模型存储进云端知识库中。在遇到新任务时,Ianvs 首先通过未知任务识别模块判断推理样本属于未知任务还是已知任务。若是已知任务,则从云端知识库中调度对应模型部署在边侧处理该任务,同时基于已知任务样本对模型进行增量更新。若是未知任务,则 Ianvs 通过未知任务处理模块处理该任务,利用外部系统标注并重新训练新的模型用于处理该任务。处理完成后,新的任务模型或是更新后的已知任务模型再重新整合至云端知识库中。
为了方便初学者使用 Ianvs,在 Ianvs 仓库中的 examples/robot/ 文件夹下提供了一个可以直接运行的样例https://github.com/kubeedge/ianvs/examples/robot/ , 详细的教程在第三节。
特性二:统一化的测试流程和真实世界数据集
Ianvs 对终身学习测试流程进行了统一,主要参考了 NIPS2017 的论文 “Gradient Episodic Memory for Continual Learning”,复现了其中提出的 BWT 和 FWT 指标,用于评价终身学习算法的抗遗忘能力和未知任务泛化能力。
Ianvs 还开源了 Cloud-Robotics 等真实世界数据集,并提供了配套的可以开箱即用的实验代码,帮助用户快速上手 Ianvs 终身学习。
数据集官网链接:https://kubeedge-ianvs.github.io/
特性三:支持快捷落地部署
如下图所示,Ianvs 中终身学习算法实现的组件与 Sedna 上终身学习算法实现的组件是相兼容的,因此在 Ianvs 上研发测试的算法可以无障碍迁移部署到 Sedna 上,方便相关从业人员实地部署算法。
三、lanvs 终身学习快速教程
在这章中我们通过运行 Ianvs 终身学习的 cloud-robotics 样例向大家讲解 Ianvs 终身学习的基本流程。Ianvs 安装流程以及终身学习更详细的介绍可以参考:Ianvs-lifelong-learning-tutorial
相关链接:https://ianvs.readthedocs.io/en/latest/
1)首先我们需要配置好 Cloud-Robotics 的数据集,先创建数据集的文件夹,注意如果你把数据集放到别的位置,本教程中的部分路径配置也要一并修改。mkdir /datacd /datamkdir datasetscd datasetsCloud-Robotics 数据集可以根据该数据集专属网站的指示操作获得,
链接:https://kubeedge-ianvs.github.io/download.html
2)下载完成后解压数据集:unzip cloud-robotics.zip
3)配置好数据集后,我们可以准备运行示例代码了。Cloud-Robotics 示例运行的代码放在 /ianvs/project/ianvs/examples/robot/lifelong_learning_bench/ 下,我们首先要配置 python 路径(这里如果 Ianvs 安装位置不一样的话需要更改路径):
export PYTHONPATH=$PYTHONPATH:/ianvs/project/ianvs/examples/robot/lifelong_learning_bench/testalgorithms/rfnet/RFNet4)
然后我们检查一下 yaml 文件的信息:
5)上图 benchmarkjob.yaml 中 workplace 是存放模型训练输出的路径,可以改成你需要的路径。
6)上图 testenv-robot.yaml 中 train_url 和 test_url 是数据集索引的路径,如果你的数据集存放位置和教程不一样,则需要修改 train_url 和 test_url 的路径。
7)在上图 rfnet_algorithm.yaml 中可以根据你的需求添加测试的终身学习算法,比如任务定义、任务分配等算法。本样例中提供了一个简单的示例。
8)其他的配置文件暂时没有需要调整的。接下来我们就可以运行示例代码了:
在模型终身学习任务结束后你可以看到以下内容,包括 BWT、FWT 等终身学习系统衡量指标:
9)出现以上显示结果,则成功跑通了一个 Ianvs 终身学习样例!
如果读者对于本次版本发布的更多细节感兴趣,欢迎查阅 Ianvs v0.2 Release Note:https://github.com/kubeedge/ianvs/releases/tag/v0.2.0
后续 KubeEdge SIG AI 将发布系列文章,陆续具体介绍终身学习全面升级的特性,欢迎各位读者继续关注社区动态。
▍相关链接
[1] 开源项目 GitHub 地址:https://github.com/kubeedge/ianvs
[2] 数据集官网链接:https://kubeedge-ianvs.github.io/
[3] Ianvs 安装流程以及终身学习更详细的介绍链接:https://ianvs.readthedocs.io/en/latest/
[4] Cloud-Robotics 数据集:https://kubeedge-ianvs.github.io/download.html
[5] Ianvs v0.2 Release Note:https://github.com/kubeedge/ianvs/releases/tag/v0.2.0
评论