开发者学堂课程【模型社区实战课程:Modelscope 工程介绍及实战演示】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1199/detail/18151
Modelscope 工程介绍及实战演习
内容介绍
一、Modelscope架构
二、开发者体验
三、实战演习
今天主要介绍Modelscope的整个工程框架。尤其是社区的同学,还有就是达摩院内部同学后续想要去把这些Modelscope的模型应用到实际业务当中应该怎么去做,尤其是Plan怎么去掉,fintune怎么样去fintune,包括一些本地的环境还有DSW上面怎么样去做,这些都会有覆盖到。首先会第大概讲一下整个的工程框架。
今天主要是三个部分,第一个是把整个Modelscope架构,包括Modelscope SDK library,还有前面的Model还有Data,包括DSW或者说是ES的这些弹幕Service都会给大家简单介绍一下,也会讲到开发者体验。开发者体验包括使用者也包括模型贡献者,最后是把实战做一个演示。
上一节介绍过整个Model平台这样一个模型即服务的框架,我们希望来到的用户包括初级的这种开发者包括学生,还有就是在工作当中去实际使用这些模型的应用开发者,后面希望更多的,不管是来自达摩院内还是来自于合作伙伴做这些模型的贡献,本身后面Modelscope会开源,本身也相当于是做开源的这些贡献,最后希望现在各个平台上这些意见领袖或者这些AI大牛们也能够去给我们做一些这样的使用等等。
一、Modelscope 架构
今天我会主要覆盖在模型推理还有模型fintune的阶段,后面的模型部署应用以及模型管理检索可能只是简单介绍一下这个页面了,底下的这些模型的这些生态大家可能已经了解了。
包括NLP、 CV、 Audio还有多模态等等,包括现在也在持续的去上这些大模型,每一个领域里头有很多细分的一级二级的子任务,用户可以在app的Model里面去慢慢地找,现在还是相对比较慢慢丰满起来了。
希望后面经过简单的介绍之后大家会对不管是fintune还是Pipeline贡献自己的模型,本身任务和任务不同或者说框架不同,可能里面有些模型需要自己加进来,在现有的框架去适配的话其实是需要持续的去了解SDK。
这样一个平台其实是以ModelCentric,其实是以模型为中心也有数据驱动,Date针对不同的任务,做下游的fintune任务是需要这些数据去做,本身也是一个开源开放的社区,同时希望有更多的贡献者进来,希望开源之后有更多的曝光,本身的服务部署、在线的训练其实都是基于阿里云的云原生的生态,基本上是开箱即用不会去再各种申请各样的账号。被某法院共处理。
整个架构是这样子,技术框架层面其实作为这样的一个Model-Hub,Hub型这样一个开源生态最核心的点还是围绕在,不管是Dateset还是Model-Hub的一些管理以及这种底下承载Model还有DatesetLibrary层的一些规划设计。
之前也提到了,在最开始设计的时候就要支持NLP、CV、多模态,还有不同任务、不同领域,还包括不同的这种框架,包括Tensorflow,还有pot等等,所以说整个框架设计其实是包括这种高级API和低级API统一在一起。高级API就是说high level API其实是可以让用户快速的将自己原有的模型,不管是来自第三方的还是自己已有的一些框架可以快速的加入到Modelscope of library里头来。
低层级的一些API是包括一些更细节的,包括Model、前处理、后处理等等这些东西,用户可以在里面去进一步的选用模型。
那上层其实就是dataset 、 model hub做了一些封装管理,用户只需要去考虑上传模型、下载模型数据等等,不需要考虑后面的一些各种健全等等因素,这些API已经是直接跟云原生打通,大家可以直接在DSW上面做fintune,在ES上做直接的demo service部署。
就像刚才说的,本身这些模型的版本管理、访问控制、包括原信息的管理防健全、包括血缘关系等等,其实已经在Model还有Dateset里头已经完整的提供这样服务,根据实际客户使用情况也会更进一步的去完善这方面的使用体验。在Modelscope library层刚才提到了有整套high level的框架,主要是包括Pipeline主要是做推理用,Model主要去实现定义一个Model,譬如说在推理过程当中或者fintune过程当中一个模型的数据的前处理不同,所以也单独抽象出来一个前处理的模块去可以做整个数据到模型入口的转换。包括trainer,trainer其实就是fintune,Metric其实就是用来作Evaluate的时候去评估的一个模型训练的好坏。不管是extract或者说是一些其他的F1之类的值。底层的其实就模型上传下载这些事情其实就是持续的会把这些使用的体验效果会把它给增强做起来。一个新用户进来之后的话,其实它是有不同动线的,就像之前也介绍过。用户其实是包括使用者还有开发者也相当于模型的贡献者,使用者的使用路径其实非常简单,它只需要去快速的去跑一个Pipeline,然后这个Pipeline后面会去拿不管是模型贡献者还是说是企业组织日贡献者提供的这些模型文件以及Model上的这些具体的一些配置,它就可以直接在ES上去跑起来,这样的一个服务去去体验,甚至也可以在本地通过SDK去用本地的这些资源,包括GPU和CPU去跑。
另外一方面就是说模型贡献者,模型贡献者的就是他会去去创建这样的一个模型上传到model card,model card上会去启动一个ES,但是后续这些ES的这种启动目前还是自己在做后续,其实用户也可以自己去启动起来。
启动起来这样的ES的一个demo service以后调用者其实就是一个通过他的Input,然后直接去ES上拉结果就是很简单的一个过程,那开模型开发的这些贡献者,其实除了提供他的这些model buried。如果说现有的框架里头,这些任务或者说领域没办法满足他,他可能也会来做一些SDK层的贡献。整个去使用Modelscope就是这两个角色为主。那么先介绍一下整个的这样的一个开发者体验的部分。
二、开发者体验
刚才提过了在深度学习领域里头有不同的角色,其中有些角色就是他们模型的研发者,就像前期来自达摩院内部的这些算法,这些同学会提供他们的模型过来并接入到SDK当中,或者同时Model或者Dateset也会上传到Model或者data hub里头去。
另外一方面,使用者希望尽快去跑一个模型的Influence,如果结果不好的话,他有自己的数据,希望用fintune去做一些定制化,这些定制化的一些场景也是需要我们去支持起来,定制化场景里头其实就除了模型以外,还需要数据。整体来讲的话就会出现有这种模型跟数据的提供方,有模型的使用方以及模型与数据整体的使用方等等这样的不同的角色。
整个的用户使用流程在这边其实就是这样的一个大图。Model Centric=Date Driven。以模型为中心做驱动,支持用户能够快速把Modelscope上的模型快速应用在业务当中。如果业务没办法快速达到一个很好的效果,用本地的数据在在资源或者在他本地资源上去做fintune,也能快速得到一个不错的结果。之后这些结果也可以作为用户返回回来,放到Hub上进行管理,Hub可以做私人的仓库也可以做公开的仓库,希望用户依赖现有的这些模型,而不是去重新训一个,这样会浪费大量资源。
那这个页面一会儿有专门仔细的讲解,其实这是一个演示了就是很快的给大家看出来,作为一个推理该怎么样去用,推里刚才说过的是用Pipeline,然后定了task ,task其实就是类似于不同的任务,譬如说是这是一个图像生成的任务,或者说是一个图像二维化的任务等等,同时用户还需要提供一个Model的ID,Model ID目前使用的就是在Model-Hub上面的一个界面,其实是一个URL的后缀。
有了这样的一个Pipeline的初始化,初始化之后实例化出来一个破烂的推理机,可以把不管是网页上的图片或者是本地图片就放在Pipeline里头去跑,其实就拿到结果然后但是图片里头基本上都是用OpenCV去做这样的一个最终输出的转化,可以看一下效果其实是这样子的。
整个页面这部分我可以一会儿晚点去讲,页面看起来就是这么简单,用户其实可以把这段拷贝下来在自己本地跑,也可以在我们的这种快速使用里头打开一个DSW的一个已经实例化好的,这样就可以把所有依赖包装好的这样的一个线上环境在里头不管是CPU和GPU去跑,快速能跑起来这样的一个模型。在DSW上效果就是这样子,之前也有一些演示了。
作为一个模型贡献者来讲,其实是把一个Pipelinel里面有preprocesser、model、postprocesser等不同的部分串起来,这里面其实定义了一些Pipelinel的接口。直接是调用call的方式去把processer调用起来的,call里面默认实现了preprocesser、forward、postprocesser串起来,在营业的过程当中其实会初始化一些Processor如果他没有传进来的话,包括Model等等。Forward阶段其实就是把一些数据Send进来的Input到Model里头去,然后postprocess主要作用是标准化去输出结果。目前来讲常用的一些第三方框架如happy face,还有MMCV等等,就是希望能够让这些框架的模型也能够快速进来PostProcess其实是可以在中间做一个桥梁,就是能够对其这些输入输出。底下的这个模型层其实可以看到基本上就是定义了inneed,forward process这个Process主要适用于Forward之后,这个Logic它到底是比如说是embeding,到底需要怎么样的输出,这块儿是需要算法同学需要去考虑,所以在这块儿也会有一个不一样的Process。
大家可以注意到,其实我们在这个上面其实是有一个这个Decker这样的一个装饰器,这个装饰器的作用主要适用用户可以通过Configuration.Jason这样的一个配置文件去能够快速的把这个模型对应的Pipeline任务给串起来,而不用去考虑调那个,这个注册器其实就是把这些Pipeline对应的任务注册起来呢,可以根据Configuration里的信息,到时候可以快速的去找到这样的类,然后用这个类去拼装这样的一个Pipelinel,然后去做完成这样的一件事情,这是一个框架层面的设计。
这个能够让游戏模型贡献者去忽略掉一些底层的模型调用的关系,只需要考虑Model还有Pipelinel如何去开发就好了。
接下来的话其实就是在用户使用之后,他们会发现可能效果并不一定很好,他们需要用自己的数据去做进一步的fintune,其实我们提供的API接口也是很快,可能只需要几行就可以完成这样的一次训练,首先完成训练需要加载数据,跟刚才一样,做fintune的时候是需要modelID去定义跑什么样的模型,比如说是什么类型的任务,或者说这个模型用的棒是什么样的,其实都会在这个model ID对应的背后地址里的Configuration里头,Kwargs主要是定义了一些训练过程当中需要的一些数据,把它整体的传进去然后通过build trainer这样的一个方法直接就把trainer包括里头的model或者pre processor或者说其他的一些数据源data loader都已经构建好,trainer及时调个train就可以开始去训,整个train的流程里头,整个设计采用的是Hawks的方式,类似于靠bug就是其实是在整个训练的不同任务阶段,把譬如说Before run或者说before it达到这种纯Steps里头去,用户只需要在Configuration里头去配置,需要去用这个learn read或者说either hook,这些是必须的,只不过是我们已经预置好了用户直接去调用就好,并且可以改变里头的一些参数,一会儿会去介绍一下子这个Configuration的信息。这几个其实是默认的一些,就是可能大家训练的过程必须要有的,Checkpoint什么时候存,Automatic是什么样的一个优化器,Read是怎么改变,包括Evaluation需要怎么样去哪个Metric等等这些事情其实都是封装在这个trainer流程里头。
核心的点是说用户只需要去考虑更改configuration .json这样的一个文件就可以实现整个背后的不管是fintune也好,或者Pipeline也好,这是定制不需要去考虑其他的任何的额外多以实现,是这样的框架的初衷。其实用户也可以在这个框架基础之上去接入它自己原本的一些第三方依赖,譬如说ofa sofa或者说是比如说e z l PE z CV等等这样的第三方的trainer进来,我们也会把这些东西很快的去加起来串起来一个Pipeline,这个在后面的文档当中会持续的去讲解。
最后其实就是数据集,数据集调用过程当中也非常简单,就是model scope就是简称EsDateset.load,其实就是Dateset名字,hub其实就可能就是只来自于哪里,然后版本等等。
Dateset其实是可以快速的应用到Pipelinel里头,也会有trainer里头,整个的dateset其实是可以去Load起来。Torch的这种dateset,还有就是Tensorflow dateset。现在整个社区里头,现在一个比较流行的就是happy face的SYS用户也可以直接load起来。对用户屏蔽了底下的这种存储,包括oss或者说是里头具体的比如说怎么展示这些东西用户都可以忽略,只需要按照格式去上传就可以把数据放到dateset里头,并且在fintune或者其他场合去引用。
现在已经有非常丰富的模型生态,大家应该也都已经完整的看过。包括demo service,包括非常多的这些任务。包括一级任务,二级任务,基本上包含了在深度学习领域里头大部分模型能够解决的,我们希望更多模型能够进入进来。Dateset是一样的,本身有这么多数据、这么多任务,你需要对他进行训练,训练的时候他们的任务需要的数据各不相同,所以说这些数据集其实也是在这里持续的建设这样的高质量数据集。
数据可能来自于一些,giue还有自己一些自由的数据集。最后就是说其实文档中心也有非常丰富的文档介绍,大家可以仔细阅读,我们也在持续去更新这样的文档,我们后期也希望用户能够在里面能够快速的找到自己想要的信息。整体上就是这样一个情况.
三、实战演示
首先用户进来以后在首页上面可以干各样的事情,这个不过多介绍。今天主要是拿NOP里面的文本相似度举个例子去做fintune包括Pipeline,然后看一下用户应该怎么样去使用,基于这个model hub以及我们的文档去怎么样使用。文本类的模型基本上所有的不管是fintune,Pipeline其实处理速度也很快没有额外的这种预处理之类的。
可以看到这个文本相似度,他的任务其实很简单,就是去对比两个句子,然后判断这两个句子是相似还是不相似这么一个简单的任务。其实用户拿到这样的任务后可以在右上角去点击在Notebook中打开也可以在文档中心尝试使用一个快速安装环境安装做本地安装。其实很简单,因为我们现在深度学习面临的模型的这种种类很多,依赖很多,所以说最好有一定独立的环境管理。
基本上现在主流的就是康达,然后我们可以直接copy paste的,这样的一个康大的环境去跑起来Python3.7,然后把一些标准的深度学习框架,我们主要现在支持的是Torch,还有Tensorflow2个支持起来对。刚才也讲了就是我们的Modelscope其实是分多个领域的,多个领域情况下如果NLP不需要CV就只需要安装app就行了,如果说是想全领域的去体验的话就可以去Install这样子一个命令安装起来。可能语音相关的还有一些额外的这种支持,我们遇到问题可能后续都会去给个答疑,有不少同学是使用Windows环境的,就是我们也在持续的去兼容Windows环境,毕竟有一些依赖他可能在Windows环境下支持不好或者安装很麻烦,所以我们建议用户或者同学们去在Windows环境下安装的时候尽量选用这种WSL这种Linux系统这种环境现在应该已经很成熟了,可以基本上在Windows上跑Linux的这种没有任何的这种这种环境上的这种阻碍了。
在Notebook中打开。之前已经实例化好了一个GPU,所以用户使用的时候就直接查看Notebook,之前没有实例化过的话这块选择CPU跟GPU,根据自己的实际情况选择,如果因为fintune要快只是在GPU上去做了。可以Notebook。
左边是之前跑过的几个任务,是一个CV的任务。简单看一下就不过多的去重新跑了。
直接把所有任务里头copy paste过来。其实任务是允许不管是本地的链接还是在线的一些图片的目录,它会生成一个Result PNG,这是原始图片任务应该是二维画,就是漫画。第一个任务是把它做成一个漫画,这是我昨天跑的结果,一个女售货员。第二个任务,还跑了一个CV的一个抠图的任务,把它串成了Results1,Result1可以看一下子他其实把图抠出来了,最后又串了一个任务,因为Pipeline是支持列表输入的,所以就把这几个模型包括本地地址的、包括线上的一起输入进去,然后做一个标题生成那最后生成的标题,其实可以看到还是蛮有意思的,基本上没有太大区别,生成的过程当中因为有抠图也有一些二维画,所以会有一些区别。基本上结果还是很有意思,有一些可以鼓励同学们自己去玩儿一玩儿这些,这三个CV里头的模型其实很有意思,但是这只是冰山一角,希望大家可以更多的去探索。
新建一个Notebook,把这个copy paste过来。可以看到这个Model其实之前跑过,所以本地就有,他会直接skip downloading,Initialize的这些Model过来,直接就是比较这两句话,比较过程当中可以看到这个结果其实还是这个Label0是负面,这两个不太相关,其实大家自己下去看这两个确实不是很相关,想让这个结果更好的话其实是需要fintune的,其实刚才讲过了。
来到文档中心可以看到我们的train,其实首先第一个例子是需要去攒数据集,这个数据集可以copy paste过来。那我们也看一下这个数据存不存在。这应该是一个标准的文本分类数据集。真正训练其实需要一个标准数据集,标准数据集最好就是AFQMC原始的数据。
这个时候直接可以跑起来,其实不需要Speed,因为Speed相当于是分成Train还是什么,其实可以拿到一个不管是Train还是Evaluate的结果都要看一下子。
基本上可以看到它有ID,有sentence1、sentence2、Label,这个跟用户做一个数据预览是差不多的。这是线上的一个数据预览,可能只预览前100条。这边load下来以后其实已经把data loader以及dateset其实已经已经做好了,所以这个零的话其实已经是shattle过的。
接下来其实就比较简单了。来到文档中心去看接下来这一步。我们需要build一个Trainer。看到dateset定义的不是很好,这个train的dateset包含了不同的东西,改个名字吧。然后Validation这两个数据进来后去做他们的数据管理,就需要把这个模型Build起来。build这么一个Trainer,跑一下。Model ID是哪个地方,model id其实就是刚才定义的这个模型。我们把这个model拿过来。他继续会把这个模型给load起来,底下一些都是load过程当中的一些信息。Trainer本身Bill的过程当中的话其实就已经把这个不管是model pre-processor或者说是Mentric等等,根据Construction信息Build起来了,不需要管里头的一些细节,后续大家可以去理解一下,只需要知道此时此刻Configuration大概包含什么信息就。看到Facebook比较杂乱。
接下来其实就非常简单了,我们只需要一部trainer 就可以去开始他的训练。可以看到Poke已经开始。这个过程当中我们可能需要停下来我们看一下这个sets有多长。
现在比较清晰了。可以看到这个信息里头包含了Framework是pad的,然后这是一个Security的任务,pro-Process其实就是前处理,在train的过程当中跟Evaluate或Influence其实不一样的,所以在Configuration里头会单独列出来,在Model里头包含的信息就是其实Bigbang是Structured,这是达摩院的模型。背后对应的这些参数其实就是常用的这些基础Farmers这些设置。Pipelinel其实也提到了就是需要这些planned types或者说是Model的Type去做这个Decker。就是刚才那个装饰器去找到我们需要的东西能够Build起来,用户可以不用管,Train其实所有的信息都在这里头了,包括刚才说的Hooks就是Checkpoint。Interval=1,这些事情包括就是我们采用什么样的advisor、learning rate都在这里了。所以看到这个max epochs=10,batch size=16,我们刚才看到数据上显示他大概反正、、有3万多条。他可能有2000多个Interval再加十个point会很久,其实也提供了一个功能叫做 config modify这么一个function,只需要把config modify Function定义出来,然后重新去训一下。平时算法同学自己玩儿的时候也是这样子,他可能通过2X去改,这个2X其实就暂时后面会持续起来,我们暂时只有通过这种Configuration的方式去改他的config。
其实可以接入不同的trainer。可能config modify这个Function其实是暂时没办用在这个里头,默认的其实也可以传一个max epoch。继续往下走,看一下子是不是要重新选一个trainer,稍等一下一分钟看一下。但model里头是不是有这样的一些地方可以让我去改。后续大家也可以慢慢去发掘这些东西。可以看到有时候甚至可以传入cide,用户可以去锁住cide去完美复现原有的一些东西,可能这个跟name trainers有关,我看一下是不是我们传入一个trainer就可以去解决这个问题了。
为了以防万一还是改一下背后的Modify Configuration信息。其实configura信息就跟这个一样,这个就是用户,后续去持续的去改去迭代的一些东西。假如说刚才那个跑下来后,只能这块儿跑就是用户也可以直接在改Configuration把epoch或者说是inlery的一些参数,或者说是Schedule的参数改一下。这边已经改完了。其实他train还蛮快的,因为在GPU上面。
再回到上面这块儿看一下是哪里出问题。这块会持续的去改,除了config medify还有ocs可以更多的,比如说后续用户可以在本地做Terminal的时候使用。
这边可以让他跑着,接下来看另外一个Pipeline的例子。我最喜欢拿着NLP去做举例,因为CV里头的一些例子,经常是需要大量的GPU,然后可能会存在这种显存占满的一些情况。跑一个part of speech,这是一个词法分析,是比较一个短小精湛的NLP的功能。我主要是想介绍一下这样的框架里头使用其实是不光有这种职业段Pipeline,还可以通过model from patrol这样的方式去做。也是一样,可能会新建一个。但是不好说可能因为另外一边在fintune,所以说可能会CPU这个out of Memory。新手过来使用的时候会是这样的一个效果。
其实很简单,他会去做一个分词,这个分词最后把每一个词的这种Label,不管是他是代表名词、代表动词,都会标出来,这样一个比较简单的任务。他开始做Evaluate了。第一个做完我们看一下这个效果。Saving check point at one epochs所以其实是max epoke=1的时候是生效了,刚才那个可能打印的时候出了问题,或许我们会看一下。其实回过头来看刚才那个例子。我们的配置里头就是把这个work directory写在这个TMG里头。这个TMP里头包括了一些log,还有训练的一些就是第一个epoch的一个配套文件,还有一个Output,这个Output其实可以用于去做Pipeline。刚才Pipeline可以看到,推理结束之后的精确度是0.954、0.045,现在去重新定义一个,刚才那个output那个地方可以把它固定的拿出来。刚才那个Output其实也有标准化定义这个地方,就是用户可以去contant里头。
比较标准化的一些名词都会定义在里头,叫train-output-dir,这个就相当于刚才定位到output的地址了。重新再跑一遍这个任务看一下效果。可以看到结果经过fintune以后,哪怕只有一轮有2000多个数据支持的,效果提升已经来到0.97。原来是0.95。整个一个fintune,然后Pipeline实例演示大概就是这个样子。用户可以通过这种Configuration的方法,在大马里改也可以直接在后面去做这一个Configuration的调整对。这其实就是一个比较简单的一个完整的一个例子,用户后面可以其实持续的去探索,我们有更多的这种fintune的一下模块。
回到刚才讲的这样的一个事情上来。除了这样子Pipeline调用以外,我们也希望用户在自己的使用过程当中把自己的,比如说怎么样去使用Model,因为最重要的事可以独立去使用Model,哪怕将来可以不用接Pipeline也需要理解Model里头含义,这个Model.Patron其实是根据Configuration可以类似于自动推导出来,我们选用哪个Model,我们也选用了pre-processor去做这样的事,Pipeline也是去Staying出来,Pipeline本身其实如果你不传入这些model或者pre-processor他里头有默认的实现,他也会去做跟刚才那个build train一样的效果。我们看到结果是一样的。当然使用过程当中用户可能知道有 token classification的这么一个Model,那他可以去做这样的一件事情。他可以在专门的这个领域里头,比如说.nop领域里头把token classification加起来,然后在NOP的Pipeline里头把这个token classification Pipeline加起来。一样的例子再稍微改一下。我们把这个Model其实不让它自动推导,直接让他去选用这个标准的token classification,Pipeline其实一样,我们不要用它的方法,我们直接去实例化一个,出来的效果其实也一样。可以看到整个使用底层SDK的时候为了用户做了一步步的封装,用户可以用不同层级的,或者说从的API到API这样的调用方法在自己的业务场景中去使用。
今天我大概就主要介绍这几个流程给到大家,希望后面同学们能够去更多的探索,我们也会逐渐的去把我们的所有的这些文档去做得更好,后面会推出更多的这种视频去介绍不同的NLP领域里头的模型去做具体的任务会有更多的介绍,也会分CV领域的模型,然后专门有一场,包括多模态、Audio等等。
用自己的数据集也可以,自己的数据集其实就很简单,在这个页面上面可以创建模型或者创建数据集,创建数据集需要把这些东西传进来,所有者其实可以作为现在有组织,达摩院的组织可能会申请成为达摩院的同学,所有的dateset都会在达摩院里头或者Scope里头,也可以选择公开或非公开。可以自己玩儿,也可以去线上用别人的这些数据。整体上提供很多使用方式,目前来讲在逐渐完善,我们对大赛的前期可能更多的是Model。如果没有问题,整个的这个框架层面的介绍,先介绍这么多,后续有更多的更新的话,我们也会持续的给大家。后续持续关注我们社区的一些新的视频讲解还有文档。
模型拉到本地后,用自己的数据可以吗?
其实相当于是model dateset去load本地这个是可以这个EMS datasets其实是可以把一些数据封装起来的,你只要能够封装到它这个里头就行,这个我们后续应该也会出一些这个。就是只需要把model datesets load这个东西它其实是有线上的,可以把本地的load起来。
这个后续可能会出一些具体的案例,然后给到大家。因为现在本地没有数据,所以可能没办法演示。