开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:金融量化科学计算最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14127
金融量化科学计算最佳实践
内容介绍
一、课程简介
二、量化场景介绍和诉求讲解
三、产品实操展示
一、课程简介
主要分为四部分:第一部分是对量化场景做一个介绍,
第二是对量化策略研究平台的核心诉求,去做拆解。
第三是对诉求拆解和产品架构的分析和讲解,
最后一部分是对产品实操的演示。
二、量化场景介绍和诉求讲解
先从第一部分量化场景简介开始,量化场景是说很多用户做量化,会从交易所把信息拉到交易系统里做一些处理,然后再决定是否下单,然后再决定把订单推送给卷上通道,然后再从交易所做一些撮合,最后再把信息返回给信息交易系统中,都是叫线上的过程,有一个是线下。
主要会讲到的是量化策略研究平台所涉及到的事情,主要是通过交易系统里面拉过来的交易行情的数据,以及返回的订单的记录,去让量化策略研究能去做一些策略的开发模拟,最终来改进整体策略超出平均水平的 offer,量化策略研究平台的核心诉求主要还是在保证策略质量的情况下去提升策略研究效率,更好的策略使得公司更好地去面对市场的变化或者波动,去做研究平台一般会有三个方向去思考:第一个方向是如何提升单个策略研究员的策略研发速度,第二是如何降低难度,支持更多的在平台上做策略研究和开发,提高资源利用率。第三是在团队的规模上扩张上去做工程能力提升,使得团队扩张可以有更好的支柱,而不是线与原来的人工管理物理机的方式。
在构建平台的过程中,可以看到客户遇到各种各样的问题,比如觉得市场上 GPU 型号太多,硬件复杂度往往是让客户第一个关注的事情,第二个就是集群的复杂度,客户会花很多的钱,甚至是成千上万,上亿规格的资金去扩大集群规模,但是性能没有很好的提升,是一个集群复杂度的问题。第三个是系统优化复杂度,听说 GPU 运算性能很快,但是还是不如 CPU,里面都是数据存储或者数据转存的问题。第四是资源管理复杂度,主要体现有物理机,但是常常发生资源抢占导致一个任务把所有机器全占了,没有资源用,找不到一个合理的方式去调配,当资源利用率很低的时候,并没有有用的办法。
第六个问题是软件的复杂度,现在很多策略研究员本地开发本地物理机去做训练的时候,会花很多时间去把两边的环境去打透,面对这样的问题,产品其实做了很多的改进,就是今天要说的诉求拆解和产品架构。
第一个是说在 Scale Up上如何去提升单个策略研究员的策略研发速度,去做了很多功能,但一个策略研究员平时工作或者策略的时候可以有多个模块。
第一个是对数据做一些处理,包括把数据从数仓里读进来,有些显示对象存储,有些类似于 TB 的存储。
第二部分是策略研发和策略开发,会做的事情是把这个数据先拉到本地,去启动一个 ID 去调试。
第三部分是做策略离线计算,相当于是把全量的数据去到小数据集上开发去看,
第四部就是看第三步计算出的结果,比对调整,然后再做一个循环。在过程中,第一个是去做一个交互式开发环境,使得数据研究员可以在开发的环境中去感知自己的策略在某个方面感知的堤坝,或者是变量的变动上有什么改动,是非常方便的。
第二个我们做了开发环境和连线环境的数据化,使得提到的本地开发环境和离线环境不一致的问题得到解决成本。
第三个是我们做个离线任务加速的大规模多机分布式的场景,在开源方案里,比如说像 pAI 里的开源方案打击以上的时候,再加的话性能不会有明显的提升,分布式的耗损造成的,其实做了很多优化,使得卡数在32张整体往上加的时候,资源利用率和资源效果,去以一个线性的趋势去攀升,降低整体的计算性能的损耗。
第四个是说对任务资源可视化,随着时间的变动,策略研究员可以很直观地看到任务怎么样,包括一些日志,GPU 水位,都利用内存的水位等等。
第五部是提供了上下有工作编排的功能,像策略研究里面其实有很多的组件,特征生成的方式,甚至可能有一个数据源,挂在上面的策略一起跑,这个时候我们提供一个上下有编排就非常好的提高工程复用率,不用所有人去开发。
下面这个是在公共上设计的产品,服务。从最顶上数据存储,我们支持 NAS,OSS 还有业务数据库,从产品使用流程上来讲,用户一般使用原生建模的产品理念去启动建模的环境,然后再从这些源码数据里存储进来做一些初始,可以理解为小规模的策略开发,小数据集开发。
开发、调试结束后开始往大数据集上测试了,可以把开发的方式镜像的推荐到 ACR上,然后再将离线任务以一个 SDK 的方式去提升到 AI 技术里面来,这个时候就会去 ACR 里面拉起一个镜像,接受这个任务,再把任务做一个执行,同时去指定任务里的数据存储,比如说 MC,然后也可以把模型以命令行的方式,ES 是一个在线服务的产品,使得应用方去做各种各样的调用,比如说智能图库,风险控制,计算,都可以做。同时整体的离线任务,还可以通过 word 的理想调度。
这样一个工作流程也为用户提供了环境隔离,算法隔离,数据隔离,权限隔离,也就是研究员 A 和 B 不会发生环境污染的问题,都已经做了很好的控制。
第二方面是如何降低整体工程平台的难度,这里面是针对两类人员开发的功能,对于开发人员的功能就像上面说的那样,有开发环境,容器。
对于运维人员来讲,更多的是提供资源监控,告警,系统容错率,左边是用户可以使用的芯片。用户在镜像里面声称他们需要用的性能框架,之后可以底层的调用这些资源,然后也不用过多的关注底层资源是什么情况,有运维人员管控好就可以了。
在运维管控方面,我们第一个提供可视化监控,第二个是故障自动恢复,第三是集群自主化运维,第四是资源率提升,第五是一键智能超频。整体来说还是提供一些可视化的服务来降低运维工作,提升整体集群。第三个方向是我们如何加快人体策略团队的扩张。
首先提到了一些功能,比如说我们的客户自己就可以生成新的环境来供使用,同时我们也支持去做用户的用量管理,来避免人员的抢占,任务是有优先级的,变动比较复杂,或者行情波动比较大,策略优先级也可以做一些改变的,有时候一些推理,策略的优先级也会改变。这个是在软件上三个方向的思考,以及做的提升,下面是做的产品架构的展示,从最底层的硬件层,或者包含计算能力上来讲,同时使 GPU、CPU 和 SDK。
网络上支持 CPI 和 CPFS 这两种,使用架构定制化的组件,使得用户可以使用各种各样的算法使用框架,以及其他的都可以使用。在用户之上,可以通过命令行,可视化界面的方式。还可以通过 SDK 资源和算法框架,做了硬件优化,性能优化。
比如这个就是做的网络上的优化,它是底层的优化,如何通过worker 与 worker 之间的通信的性能来提升任务的资源利用率,可以提升 C 倍左右,网速可以达到100GB 每秒,这种计算在通用计算效率里可以有10倍的提升,然后在数学计算里有三倍提升的效果。
也做了一些优化方案来做一些内存的环境突破,就是对数据频繁的进行,这套方案使得直接对比这个数据,加速比大概是在八倍到十倍。
第三个是硬件里的 EFLOPS 的服务器组合,定制化的提供高性能的CPU,以及强大的数据调取能力以及 IO 优化设计,大容量高速内存的模块,整体支持 CPU 还有一些桌面卡的1080或者8090,第三块在性能做了一些优化,不同场景下网络性能可以提升3-7倍。
在 ResNet50 提升7倍左右,同时整体 AI 集群的弹性扩容能力。随着卡的数量的增加,所带来的资源加速率或者扩容性,做了非常多的优化,在32开以后扩容增加的算率,通信方案使得每消费一张卡,非常大规模的分布式场景,在32k 之内有非常明显的性能提升。
接下里是今天要讲的产品演示,包括了如何使用 PAI-DSW,PAI-DLC,NAS 和 ACR 去掩饰前面的流程,这样一个策略,提交镜像,然后再把接着第二个 PAI 上面的一些产品的实操,第一部分的行业介绍可以看到回放,这里也是可以看到回放的,今天也按照这个链路来讲的。
三、产品实操展示
今天也会有创建一个 DSW 的例子,在里面创建一个笔记,以及 DOC的平台简介,DSW 去提交一个任务过来。一些任务的资源配置,查看一些资源水位,今天的实操聚焦在三部分:
先从 DSW 开始,大家登陆到阿里云的首页,在产品这一侧人工智能右下角的 PAI,点击之后就可以前往控制台,然后在左侧有一个交互式 DSW,点击就可以了。然后在这里就可以看到自己所有的实例,接下来演示一下从零创建实例出来,点击创建实例即可,这里会要求输入实例名称,输入一个demo,实例版本目前是个人版,地区不可选,付费模式选按量付费,规格里面选一个CPU即可,如果有GPU的使用也可以选,然后是存储,存储是为了,如果做的数据要下载永久化存储,下载一个云盘,因为我今天要去存储,丢失的任务也比较多,所以使用NANS作为数据读取的介质。如果没有就点击创建文件系统,在控制台左侧有一个文件系统列表,确定 PAI 在可用区内,点击通用文字系统即可,地区可以不用选,点击成功后刷新一下,这样我们在 DSW 里面就能选到,这里专有网络,还有个镜像,官方预置了非常多的景象,DSW 的镜像去拉起,确定一切都没有问题,检查完之后,这时实例列表就会新增一个常见的实例,可以打开一个创建好的。
刚开始进来的时候,会看到的界面,里面是空的,右侧是主工作区,下边是 DSW 里面也同时包含了 VS,在里面可以写代码也可以进行代码检查。
现在创建一个 Notebook 出来,比如打印10,版本也在右上角建出来了,这里面就是一个标准的写 Python 的环境。
还是先以金融量化的场景来举个例子,举一个均线策略信号捕捉的例子,大家可以在看回放的时候详细的看代码,代码可以下载到,下载链接也会放出来。我们直接按住回车键就可以执行了,可看到结果已经输出了,
与之前的文件重名了,所以后面标了个一,后面的初始化依赖,我们可以按照这个步骤执行,这些代码预先写好的,后面会放出来。
这样就简单的完成了一个 Notebook 的编写,做了一些开发,以及简单的调试,比如我们在不确定参数的时候,可以函式的后面按住 shift键和 CTRL 键,就可以看到这个东西的传入了哪些参数,会写的非常详细,比如说你不知道某个对象有某个功能,比如我在这里看一下执行结果:
再按 tab 键就会出现可支持的其他函数。删除一个的快捷键是 D、D,更多的快捷键可以在左侧的看到。
左侧第一个是文件管理器,第二个是 running 运行中的 notebook,第三个是管理,第四个是一个快捷命名仓,第五个是一个 demo 的列表,里面我们内置了非常多的demo,包括 SOS 的版本,第六个是 NOTEbook 的标记,第七个是打开的 Tab,第八是语法的渲染,第九个是一个例子,第十个是插件的支持,这里面大家可以运行它,但是目前产品不是很稳定,这里面是使用 Notebook 的功能,有些环境 import 失败的话也可以在点击左上角的加号安装一下就可以,这时就会给你装一些你要用的依赖,刚才这个已经创建成功了,一个创建实例大概需要三到四分钟左右,默认打开就是什么都没有,里面可以把刚刚写好的代码传上来,这里面就是刚刚看到的代码。
我们去做一些运行,因为我们的环境没有装其他的依赖,所以会有一些依赖趋势,我们看没有,我们看如何把这个东西作为match 去处理,这个文件把他封装成更像一个 Python 的工程,处理,信号计算,最后 main 函数可以把 Python 文件转化为 notebook 的方式,以命名行的方式拉起 excel。
我们现在来演示一下对这个环境做的一些依赖改动,去给它做一些保存,这样的话就安装完成了,然后我们去 DSW 的列表里面找到我们刚刚创建的实例。
右边有一个保存镜像,点击保存镜像,命名空间可以设为控制台命名空间,这两个都是可以在 ACR 上做控制的,ACR就是融资进服务。在这个命名空间内,我们可以创建各种各样的景象,大家可以看到都是在这个命名之下,版本就是我们这边嵌入的名称。点击保存,这时候在 usez 库的景象下面,我们进入版本就可以看见这个镜像。镜像保存完以后,就是如何在 DSW 环境里开发,如何把环境打包成镜像,同时可以把数据和代码重新解耦。
DOC,里面的这一部分,因为它作为技术平台。
我们将直接演示一下直接在镜像上是什么步骤,这是我们可以先回到 PAI 的控制台,点击左侧的云原生深入学习 DOC,点击控制台,这是我们就会进入,可以查看文档来看产品怎么使用,也可以点击新建任务,这里面有一个文档告诉大家如何创建任务,点击创建任务里的时间然后提交。
这里面也是一步步都写好了,第一个任务名称,然后选择任务类型,执行命令把这个复制过来就好了。其他的暂时不用填,因执行命令里已经包括了数据解压,拉取代码,然后选择一个PAI 平台的1.5.1.,规格可以选 GPU 为100,然后先提交就可以了。这时我们就看到提交成功
然后返回任务列表就可以看到任务正在创建中,任务在创建成功以后,比如是分布式的任务,可以看到它的一些日志,以及它的资源的水位,因为这个人物有四张卡,每张卡的内存使用量,CPU 使用量,GPU的使用量,还有网络 IO 都可以在这里直观地看出来,然后也可以看到任务的事件,任务什么时候成功,什么时候失败。
这里是一个简单的 DOC 任务,来看 DSW 通过 Python SDK 提交任务,我们这张图里的这一个路径通过 SDK 的方式来实现,这个也非常简单,再到这个里面来,DOC,MCD 的示例代码,里面的代码也可以在SDK。
大家可以看怎么创建任务,创建 SDK 的压缩包,我这边就以这样的方式创建这个任务,数据配置是怎么来的,我们要使任务如何引用文件系统,这里面我刚刚引用的是 ID 的任务,我当时是把这个创建完,如果是没有创建新的是怎么样的,0789的这个文件系统其实之前创建的实例的文件的系统,如果用这个文件系统就可以把这个复制过去,在这里面新建数据配置,也是以这个命名,点击提交,我的数据配置就创建好了,然后可以在 DOC 里提交任务时,可以去指定 ID,而不是用刚刚的 ID,这里不做更改了,这是一个文件系统的设置,还有一个是任务资源里的 worker 和它对应的镜像,镜像是刚刚已经保存好的,现在直接复用,也可以看到刚才的也是保存好的。
这里直接使用这个镜像,把名字命名为 mac.007.1024,运行一下,这样的工作就直接创建了,通过查询工作 ID 的方式可以看到任务正在创建中。
可以直接复制,在这里面是可以看到非详细的日志的,包括文件,同时还有资源的视图,由于时间比较短,视图就非常长。任务如果像小时级别的,十五分钟以上都会有非常详细的显示。
这里面有一个点值得注意的是DOC 的文件数据路径和 DSK 的数据路径是不太一样的。像 DSW 里面,数据库是把 NAS 转移到路径里面,然后创建 Demo,前面的是默认的,所以大家在使用的时候要注意路径是不是匹配的,或者在 DSW 里面或者在 NAS 里面放了不一样的东西。
在 DOC 里使用的时候,路径也要注意做一些更改,等待任务创建结束即可,任务创建中从创建任务到运行一般需要3-4分钟,因为公共资源组的资源分配需要很长时间,或者说我们线下部署的时候就不会有这样的问题。
我们的 DOC 里面也会对代码进行配置,去通过下载的方式拉取一些代码下来,这里有一个文档详细的介绍怎么去填写代码配置,还有一些技术改进。
这个就是今天整体的使用实操的简介,就是说如何通过 DSW 做一些代码开发,策略的开发,然后推进到 ACR,在 DOC 里面通过 SDK 的方式,然后让 DOC 去拉取镜像。