Skip to content
TopQuant极宽量化

TopQuant极宽量化

中国·智能量化·开拓者&启蒙人

  • Home
  • TQ极宽培训课程
    • TQ极宽量化·课程简介
    • TQ极宽·免费Python入门课
    • TQ极宽·免费Pandas数据分析课
    • TQ极宽量化·入门班
    • TQ极宽量化·中级班
    • TQ极宽量化·高级班
    • TQ极宽量化·VIP面授班
    • FastAI深度学习课程
    • Qlib微软智能量化课程
  • 量化文库
    • TQ极宽量化·课程简介
    • 量化基础
    • 量化案例
    • 经典策略
    • BackTrader专栏
    • TQ极宽量化开源组
  • IT技术文档
    • TQ极宽量化·课程简介
    • ZWPython
    • ZWMAP架构图
    • Python基础
    • Python实用技巧
    • Python数据分析
    • Python可视化分析
    • AI人工智能
  • 关联项目
    • TQ极宽量化·课程简介
    • AI影像基因组
    • AI智能医学
    • CBF中华大字库
    • MetaFont元字库
    • Meta元宇宙&区块链
    • Halcon工业智能
    • TBF足球大数据
    • ZWPython字王派森
    • ZWMAP模块库架构图
  • 资源中心
 
  • Home
  • MTrd并行编程与py量化性能优化
  • AI人工智能
  • Python实用技巧
  • TQ极宽量化开源组
  • ZWPython字王派森
  • 量化基础
  • 量化案例

MTrd并行编程与py量化性能优化

On 2月 Ago
zw

MTrd并行编程与py量化性能优化


zw-ps:几年前d老文章了,现在依然有参考价值,特别是对于初学者。

参见:
zw公开课与哈佛、斯坦福MBA案例教学
TQ极宽量化·课程简介


这几天,在做py量化的性能优化,
GPU并行开发,因为cuda8SDK的正式版本,迟迟未能推出,其中的关键python模块库在测试版,又是空缺,所以只能押后。
多cpu并行,numexpr,numba是首选,而且numba对于GPU加速,也有部分支持,专业的numbaPro版本,可能更加方便。
为了优化,除了这些模块库外,也参考了pycuda、pyopencl、firearray等模块库,甚至连冷门的parakeet模块库,都专门看过文档。

幸运的是,在所有的编程语言里面,python的多cpu并发开发,是最简单的,基本上:numexpr,就可以完成。
简单的代价就是限制,目前numexpr内部的字符串是8位的,对于双字节的utf内码字符串,支持度基本为零,据说,numexpr3.0,会解决这个问题。

在处理tick数据时,numexpr,numba,虽然能够进行局部优化。
不过,绝大部分环节,还是力有未逮、

MTrd是zw前些年,处理字库数据,设计的一种简单、高效的并发编程框架,而且还曾经设计过一个logo图标。
MTrd是Mul-Tread,多线程的缩写,看起来:高大上,其实是一种非常“土鳖”的设计
原理是:利用windows、linux等操作系统的均衡负载,内部调度,把大任务,分拆成n个小任务,用bat等批命令脚本及参数完成。

以字库为例,每套字库6千多个汉字,图像数据,非一般多,一种字体,同样的流程,就要运行6千多遍。
如果采用MTrd架构,拆分成60组,每组100个汉字,而且可以放到多台电脑同时运行,理论上,速度可以快60倍。

py量化,其实与字库数据处理非常类似。
股票量化,如果全盘测试,差不多3000支股票,和国标一级字库的汉字数差不多。
按每组100只股票,分拆30组,分分钟速度可以提高30倍。

mtrd的一个好处就是,基本上,无需修改任何源码,自动加速。

以py量化为例,以下py代码,文件名:pysub010.py:

    xv1=sys.argv[1];xd1=int(xv1)
    xv2=sys.argv[2];xd2=int(xv2)
    print('xd,',xd1,xd2)
    #
    xtick2tim_allcode(qx,xd1,xd2)

其中,函数:xtick2tim_allcode
是把所有的tick数据,按设定的时间,转为5分钟、10分钟的分钟合成数据。
函数当中的参数变量:xd1,xd2,分别是起始股票编号、结束股票编号
如:xd1=100,xd2=200
表示,针对序号:100-200的股票,进行tick数据转换。
股票代码文件,可以参看zwdat里面inx目录下的:stk_code.csv文件

如果,采用传统的py模式,单独2015年一年的tick数据,双e5平台,都要运行一个晚上。
虽然时间长,看系统的cpu负载,只有15%左右,说明,绝大部分cpu的计算能力,处于空载状态。


原来的MTrd,主控程序,是用delphi编写的,会随时监控子程序运行状态,自动调度参数。
python版本的MTrd,为了简化,直接采用bat批命令,进行调度。
python版本的MTrd的一个优势是,每个python副本,都是一个独立的、完整的python系统,单个子程序崩溃,不会影响其他程序。
这个也是python处理并发,比较啰嗦,而且需要耗费较多的系统资源的主要原因。
不过,现在内存白菜价,非一般便宜,64G属于py量化的标配,这些都不是问题。

下面,先编写一个调用pysub010.py程序的批命令文件:mx001.bat
脚本代码如下:
python pysub010.py %1 %2
@ping -n 10 127.1>nul
exit

其中
@ping -n 10 127.1>nul
表示:运行完成后,等待10秒,再运行exit命令,退出命令窗口

python pysub010.py %1 %2
表示,调用python,运行pysub010.py程序代码,并向程序传递参数:%1 %2
其中:%1 表示第一个参数,对应py程序的变量xd1;%2类推
相关细节,可以参考bat语法

由于python运行,需要设置环境参数,因此调用bat批命令时,需要通过zwpython\py35\目录下的程序:
WinPython Command Prompt.exe
进入dos命令窗口,再切换到py源码和bat所在目录,调用bat脚本。
为简化设计,默认bat、py源码,全部位于同一目录。

此外,通过:WinPython Control Panel.exe程序,把python与系统环境进行绑定,理论上:可以直接调用bat批命令。
如果出现问题,还是采用以上的手工模式,调用bat脚本。

mx001.bat批命令文件,只是调用单个程序,相当于MTrd的一个sub子程序。
因此,需要另外编写主控bat脚本。
MTrd主控脚本,文件名是:mx100.bat
源码如下:

start mx001.bat 0 100
@ping -n 3 127.1>nul

start mx001.bat 100 200
@ping -n 3 127.1>nul

start mx001.bat 200 300
@ping -n 3 127.1>nul

start mx001.bat 300 400
@ping -n 3 127.1>nul

start mx001.bat 400 500
@ping -n 3 127.1>nul

...

注意,以上脚本,采用start命令,调用mx001.bat脚本,是为了并发运行。
@ping -n 3 127.1>nul,每个子程序,调度间隔时间为3秒,这个可以自己修改。

同时运行的子程序数目,一般为系统软内核的80%,这个是经验参数。
剩余的20%内核,保留给操作系统,否则,可能会影响整体运行速度。
以zw-GPU工作站为例,双e5-2670cpu,共32个软内核,80%就是25-26个。
A股的股票数目大约2900多只,勉强开29个,也是可以的。

口说无凭,还是看看贴图吧:
下面是MTrd同时运行18个子程序的调度截图。



由截图可以看出,cpu的负载非常均衡:
整体负载75-85%,单个python子程序3%左右
运行效率比单一的py程序,快了18倍。
如果再增加子程序到25-30个,也是可以的,这个大家自行测试。

关于MTrd的介绍,到此打住,更多细节,大家自己研究。
MTrd与,numexpr,numba,python性能优化,属于比较专业的领域。
zw量化培训班,也是作为高级班的课件进行讲述的。



【8-11补充】
早上,重新优化了bat+python版本的MTrd架构,并且实盘运行30组,全市场2900多只股票的tick数据: 十分钟数据线转换。
以下是运行截图:


由截图可以看到,cpu的运行负荷是100%,稳定速度是2.97-2.99G
e5-2670的默认频率是2.6,睿频是2.97-2.99G,相当于超频10%,cpu的计算能力,已经被充分利用了。

【MTrd的特点】
MTrd虽然简单,但非常实用,无需修改源码,而且可以用于win、linux、OSX等各种平台。
MTrd对于速度的提升也是非常明显的,一般是cpu软内核总数多少,就可以提升多少倍。
无需考虑进程调度、负载均衡,这些,都由操作系统负责。
无需修改,即可支持多cpu,多电脑集群模式

【优化BAT主控脚本】
windows平台的bat脚本,其实也是支持多行for命令的。
其他平台的脚本,相对win强大n倍,自己看看bat,修改一下就可以了。

修改后的主控脚本文件名是:mx100.bat
源码如下

f:
cd\zm100

for /L %%i in (0,100,2900) do (

start mx010.bat %%i 
@ping -n 5 127.1>nul

)

f:\zm100 是笔者的源码工作目录。
经测试,可以直接运行mx100.bat命令,运行整个程序,无需手工进入dos命令窗口。
这其中的关键就是,最前面的两条命令:

f:
cd\zm100
首先,切换到源码所在的工作目录。

另外,sub子程序调用,也增加了python的路径。
sub子程序调用文件名是:mx010.bat
源码如下

F:\zwPython\py35\python-3.5.2.amd64\python m3x1.py %1
@ping -n 10 127.1>nul
rem exit

其中,F:\zwPython\py35\python-3.5.2.amd64\
是笔者zwpython的运行目录。

另外,bat修改变量,相对python啰嗦不少,因此,默认只使用一个参数变量。
py脚本当中的xd2变量,改为:xd2=xd1+100
源码就不再重复了。

最后,看看鲁大师的监控截图
cpu的内核温度在65度左右
硬盘虽然30个线程,并发频繁读写,温度也控制在46度,SSD还是不错的
cpu整体温度,主板温度,都控制在38度

要知道,这几天,刚刚立秋,北京部分热点地区,局部室外温度都超过50度
由此可见,zw-GPU工作站的整体设计,还是靠谱的

机箱内的散热风道、辅助风扇,设计合理
4U加长版超大机箱,四铜管大风扇散热器,非常给力

【MTrd-demo源码】
MTrd文章发布后,不少学员、网友咨询相关细节,
特意做了个MTrd-demo,发布在zwpy量化群文件和zw网盘。
运行前,注意根据自己的zwpy安装路径 修改相关参数


请大家关注TOP极宽量化公众号:TOP极宽量化,浏览,TopQuant.vip极宽网站,大量原创量化资料和课件、案例源码。关注公众号,即可获得最新网盘下载地址。TQ极宽·相关网络QQ社群如下:

  • QQ群号:124134140,TOP极宽金融量化总群,面向专业金融实盘用户,三千人大群。
  • QQ群号:1057170501,zwPython.com学习群,面向py初学者和大众小白用户,两千人大群。
  • QQ群号:699266891,TFB极宽足球大数据,TFB=TopFootBall 
  • QQ群号:790548107,FASTAI智能量化
  • QQ群号:663952322,PytorchLightning智能框架
  • QQ群号:655402626,CBF中华大字库,ziwang.com字王网站,已升级为元字库: metafont.vip

相关文档

In AI人工智能 Python实用技巧 TQ极宽量化开源组 ZWPython字王派森 量化基础 量化案例

文章导航

GPU的战争才正式开始:算力爆炸&AI量化
Netron神经网络模型查看神器

分类

  • AI人工智能
  • AI影像基因组
  • AI智能医学
  • AI智能量化
  • BackTrader专栏
  • CBF中华大字库
  • IT技术文档
  • MetaFont元字库
  • Meta元宇宙&区块链
  • Python可视化分析
  • Python基础
  • Python实用技巧
  • Python数据分析
  • TBF足球大数据
  • TQ极宽培训课程
  • TQ极宽量化开源组
  • ZWMAP模块库架构图
  • ZWPython字王派森
  • 关联项目
  • 未分类
  • 经典策略
  • 量化基础
  • 量化文库
  • 量化案例

You May Like

  • AI人工智能
  • AI智能量化
  • BackTrader专栏
  • 经典策略
  • 量化基础
  • 量化案例
zw
On 2月 Ago

AI智能海龟策略0.1版本idea

  • AI人工智能
  • AI智能量化
  • TQ极宽量化开源组
zw
On 2月 Ago

深度学习框架小结

  • TQ极宽量化开源组
  • 量化基础
  • 量化文库
zw
On 2月 Ago

zw点评;日剧《秃鹫》中美联手围剿欧美汽车产业

  • AI人工智能
  • AI智能医学
  • Python基础
  • TQ极宽量化开源组
  • ZWMAP模块库架构图
  • ZWPython字王派森
zw
On 2月 Ago

全球首发:zwMAP全系列Python模块库架构彩图

  • AI人工智能
  • CBF中华大字库
  • MetaFont元字库
  • Meta元宇宙&区块链
zw
On 2月 Ago

[转]语言实际才是中国这波技术爆炸的真正基础

  • Python基础
  • Python数据分析
  • ZWMAP模块库架构图
  • ZWPython字王派森
zw
On 2月 Ago

zw量化原创课件_pandas函数清单

  • Home
  • TQ极宽培训课程
  • 量化文库
  • IT技术文档
  • 关联项目
  • 资源中心
Copyright All right reserved | Theme: Telegram by Themeinwp