2023年金工深度研究:高频因子计算的GPU加速

  • 来源:华泰证券
  • 发布时间:2023/10/18
  • 浏览次数:1139
  • 举报
相关深度报告REPORTS

金工深度研究: 高频因子计算的GPU加速.pdf

金工深度研究:高频因子计算的GPU加速。本文使用NVIDIARAPIDS对高频因子计算进行GPU加速。量化因子计算场景下,RAPIDS的直接助力是用CuPy、cuDF的GPU运算替代NumPy、Pandas的CPU运算。在RTX3090和i9-10980XE测试环境下计算分钟线因子,CuPy和cuDF替换库函数的提速效果约为6倍,若同时将for循环替换为矩阵运算,最终提速超100倍。预计RTX4090和A800提速更显著。最大化ICIR法合成高频因子,并与华泰金工神经网络多频率因子静态加权,构建中证1000指数增强组合,以2016年末至2023年9月为回测区间,信息比率从3.70提升至3.87...

NVIDIA RAPIDS 实践

操作系统和 WSL 安装

WSL 安装可能遇到较多问题,以下讲解要点: 1. 推荐使用 Window 11 系统。 2. 任务管理器—性能—CPU,确认 CPU 虚拟化已启用。 3. 启用或关闭 Windows 功能,勾选“适用于 Linux 的 Windows 系统”和“虚拟机平台”。 4. 管理员身份启动 Power Shell,运行 bcdedit /set hypervisorlaunchtype auto。 5. 网络和 Internet 设置—高级网络设置—属性,DNS 服务器分配设为“手动”;Ipv4 DNS 服务器,首选 DNS 设为 114.114.114.114,备用 DNS 设为 8.8.8.8。若此步不执行,安 装 WSL 可能报错“无法解析服务器的名称或地址”。6. 管理员身份启动 CMD,运行 wsl –update。如此步不执行,启动 Ubuntu 可能报错。 7. 继续运行 wsl --install -d Ubuntu,安装 Ubuntu 子系统。 8. 启动“适用于 Linux 的 Window 子系统”(WSL),设置账户和密码,完成 WSL 安装。

高频因子代码优化

本文测试环境为:CPU——Intel Core i9-10980XE,GPU——NVIDIA GeForce RTX 3090 (以下分别简称 i9-10980XE 和 3090)。以 2023 年 4 月 24 日单日全 A 股分钟线数据为例 测试时间开销。 CPU 因子计算代码改造为 GPU 版本过程中,采用两种优化方式: 1. 使用 CuPy 和 cuDF 替换 NumPy 和 Pandas 函数(针对全部 50 个因子); 2. 使用矩阵运算替换 for 循环(针对 50 个因子中的 22 个因子)。 结果表明: 1. 单独使用(1)反而增加了时间开销。 2. 同时使用(1)(2)时间开销总体缩短约 117 倍,其中(1)贡献约 18.4 倍,(2)贡献约 6.4 倍。 3. GPU性能表现主要取决于数据量,单次运算涉及的数据量越大,GPU加速效果越显著。 若数据量过小,反而不如 CPU 计算效率。

简单替换库函数

RAPIDS 的 CuPy、cuDF 对原始 CPU 代码的 NumPy、Pandas 具有同名接口性质,因此 可以简单替换库名称简化工作量。如下图,以计算下行收益率方差 return_downward_var 代码为例,简单替换 numpy.var 为 cupy.var 即可。

然而实证发现,CPU 版代码单日高频因子计算时间开销为 12.34 秒,简单替换后,GPU 版 代码时间开销超过 100 秒。问题在于原因子计算中代码大量使用 for 循环。具体而言: (1)RAPIDS 的接口仅实现了接口内部的并行计算,对 for 循环本身没有优化作用;(2)由于 数据在 CPU 和 GPU 间拷贝传递,带来耗时影响。GPU 更适合进行批量运算,如果仅简单 替换库函数,for 循环逐轮小数据量地调用 GPU,反而造成拖累。

矩阵运算代替 for 循环,同时替换库函数

我们重新梳理 for 循环逻辑,改为矩阵运算,以 CuPy 接口进行批量处理。以下图计算下行 收益率方差 return_downward_var 代码为例。

因子计算时间开销明细和汇总结果如下表所示: 1. 对于 50 个替换库函数的因子,GPU 相比 CPU 总时间开销从 0.91 秒缩短至 0.16 秒, 性能提升约 5.9 倍。 2. 对于 22 个使用矩阵运算代替 for 循环的因子,CPU 总时间开销从 12.34 秒缩短至 0.67 秒,性能提升约 18 倍。GPU 相比 CPU 总时间开销从 0.67 秒缩短至 0.11 秒,性能提 升约 6.4 倍。两项改进总时间开销从 12.34 秒缩短至 0.11 秒,性能提升约 117 倍。 总的看,GPU(3090)相比 CPU(i9-10980XE)计算因子带来的性能提升在 5.9~6.4 倍。 当然约 6 倍的加速并不是 GPU 的上限,加速效果受到显卡性能和数据量影响,4090、A100 的加速效果应更强,同时单次运算的数据量越大,加速效果也越显著。据 NVIDIA 官网, RAPIDS 的提速可达 50 倍(https://www.nvidia.cn/deep-learning-ai/software/rapids/)。 同时我们观察没有 GPU 加速效果的因子: 1. 以 return_intraday、return_improved、return_last_30min 为例,仅使用日内两个时间 点数据,使用数据量过少。 2. 以 intraday_maxdrawdown 为例,CuPy 还未实现 numpy.minimum.accumulate 接口, 调用 GPU 反而耗时增加。

除了因子计算环节,我们还使用 cudf 库对 pandas 库进行替换,对数据读取、预处理环节 也进行了优化,如下表。cudf 库仅有数据导出环节的 to_csv 函数性能更优(约 5 倍加速)。 不过测试发现,数据读取和预处理部分性能不佳的主要原因是数据量不足。单日分钟 K 线 数据的维度约为 5000×242×11(全 A 股*分钟*字段)。我们尝试构建虚拟数据集,发现当 数据量扩大 4 倍后,GPU 性能超过 CPU。

分钟线因子

本文测试 50 个分钟线构建的选股因子,按构建逻辑分为如下 5 类: 1. 价格全局特征(9 个因子); 2. 价格局部特征(10 个因子); 3. 成交量/额(12 个因子); 4. 成交关联价格(7 个因子); 5. 价量相关性(12 个因子)。

价格全局特征

价格全局特征类包括收益率/价格的分布特征,如方差、偏度、峰度等,以及最高价、最大 回撤等。

价格局部特征

价格局部特征类包括收益率/价格分布的局部特征,如收盘前半小时、价格上行或下行阶段 收益率/价格方差、偏度、峰度等因子。

成交量/额

成交量/额类包括成交额、成交量、成交笔数所构建的因子,如成交量的方差比率、开盘前 30 分钟成交量占比、平均每单流出、大单净流入占比等。

成交关联价格

成交关联价格类包括收益率/价格关联对应范围的成交量所构建的因子,如大成交量对应的 收益率方差、偏度、峰度,以及放量时收益率、大单涨幅等。

价量相关性

价量相关性类包括成交量/额和收益率/价格的相关系数所构建的因子,如量价相关性、收益 率与量相关性、领先/滞后收益率与量相关性等。

单因子测试方法与结果

单因子测试方法如下: 1. 回测区间:2013/01/31~2023/09/28; 2. 回测样本:中证全指成分股; 3. 因子频率(采样频率):日频; 4. 预测收益率区间(调仓频率):5 日(周频)/10 日(双周频)/20 日(月频); 5. 因子处理:过去 5/10/20 日取均值或累计值,5 倍中位数去极值,行业市值中性化, Z-score 标准化,缺失值填充;反向因子则乘以-1; 6. 交易费率:均不考虑。

价格全局特征

预 测 周 频 收 益 的 单 因 子 测 试 指 标 如 下 表 。 return_intraday 、 return_var 、 tp_diff 、 return_improved 因子表现出色。其中 return_intraday、tp_diff、return_improved 的本质是 不同形式的日内反转因子,return_var 的本质是日内低波动因子。

价格局部特征

价 格 局 部 特 征 因子预测周频收益的单因子测试指标如下表 。 return_last_30min 、 return_skewness_last_30min、return_upward_var、return_downward_var 因子表现出色。 其 中 return_last_30min 和 return_skewness_last_30min 的 本 质 是 尾 盘 反 转 因 子 , return_upward_var 和 return_downward_var 的本质是日内低波动因子的精细化刻画。

成交量/额

成交量/额因子预测周频收益的单因子测试指标如下表。volume_open_30min_ratio、 amount_out_order_avg_ratio 因子表现出色。前者给予开盘成交不活跃的股票风险溢价, 由于市场情绪一般在开盘释放,该因子可能反映理性交易者占比。后者给予单笔流出金额 较大的股票风险溢价,可能对应快速下跌后的反转或者主力的操纵行为。

成交关联价格

成交关联价格因子预测周频收益的单因子测试指标如下表。cum_return_top30_order 因子 表现出色。该因子的本质是反转因子的精细化刻画,大单推动的涨幅更具信息量。

价量相关性

价量相关性因子预测周频收益的单因子测试指标如下表。VP、VP_top33_volume、 VR_1min_lag 因子表现出色。这些因子的本质都是捕捉量价背离,即缩量上涨或放量下跌。

基于高频因子的指增策略

最大化 ICIR 法合成因子

基于前述 50 个高频因子,采用最大化 ICIR 法进行因子合成。每个交易日选取 T-260 至 T-20 日因子未来 20 日 RankIC 值,并结合 Ledoit-Wolf 压缩估计求解因子权重,最终得到分钟 线合成因子。 分钟线合成因子 IC 测试、回归测试、分层测试指标及分层相对净值如下图表所示。以未来 5 日收益为预测目标,因子 RankICIR(未年化)1.50,对冲组合夏普比率 3.59,Top 层信 息比率 3.81。最大化 ICIR 法合成后,因子单调性提升,但仍然表现出空头端筛选效果明显 优于多头端的特点,这也是大多数高频因子的典型特征。

指数增强组合

华泰金工研报《神经网络多频率因子挖掘模型》(2023-05-11)使用 GRU 网络学习日 K 线 和 15 分钟 K 线数据,得到神经网络多频率因子。原始因子和上述分钟线合成因子相关系数 为 0.248。将两者截面标准化后,采用 9:1 静态比例线性结合,分别构建中证 500 和中证 1000 指数增强策略。

中证 500 指数增强回测绩效和超额净值如下所示。结合分钟线合成因子后,各项指标均有 提升,2023 年上半年回撤大幅降低。信息比率从 2.78 提升至 3.01,超额收益 Calmar 比率 从 1.37 提升至 2.07。

中证 1000 指数增强回测绩效和超额净值如下所示。结合分钟线合成因子后,各项指标同样 均有提升,并且 2023 年上半年回撤大幅降低。信息比率从 3.70 提升至 3.87,超额收益 Calmar 比率从 2.41 提升至 3.96。

总结和讨论

本文使用 NVIDIA RAPIDS 对高频因子计算进行 GPU 加速。量化因子计算场景下,RAPIDS 的直接助力是用 CuPy、cuDF 的 GPU 运算替代 NumPy、Pandas 的 CPU 运算。在 NVIDIA GeForce RTX 3090 和 Intel Core i9-10980XE 测试环境下计算分钟线因子,CuPy 和 cuDF 替换库函数的提速效果约为 6 倍,若同时将 for 循环替换为矩阵运算,最终提速超 100 倍。 预计 RTX 4090 和 A800 提速更显著。最大化 ICIR 法合成因子,并与华泰金工神经网络多 频率因子静态加权,构建中证 1000 指数增强组合,以 2016 年末至 2023 年 9 月末为回测 区间,信息比率从 3.70 提升至 3.87,超额收益 Calmar 比率从 2.41 提升至 3.96。

RAPIDS 的重要特性之一是将基于 CUDA 底层代码的优化以 Python 高级语言的形式体现。 常用 API 如 CuPy(对标 NumPy)、cuDF(对标 Pandas)、cuML(对标 scikit-learn)等。 由于 API 语法几乎相同,仅需要轻量级代码修改,即可实现 CPU 运算到 GPU 运算的迁移。 针对全部因子使用 CuPy 和 cuDF 替换原函数;针对部分因子使用矩阵运算替换 for 循环。 结果表明:若不引入矩阵运算,单独替换库函数反而增加时间开销。若两步同时进行,替 换库函数带来的性能提升约在 6 倍(RTX 3090),矩阵运算带来的性能提升约在 18 倍。 GPU 性能同型号和数据量相关,单次运算数据量越大,加速效果越显著。

本文测试 5 类共计 50 个分钟线选股因子。以下展示测试效果较好的因子及投资逻辑。 1. 价格全局特征类:return_intraday、tp_diff、return_improved 的本质是不同形式的日内 反转因子,return_var 的本质是日内低波动因子。 2. 价格局部特征类:return_last_30min 和 return_skewness_last_30min 的本质是尾盘反 转因子,return_upward_var 和 return_downward_var 的本质是日内低波动因子的精细 化刻画。 3. 成交量/额类:volume_open_30min_ratio 给予开盘成交不活跃的股票风险溢价,市场 情绪一般在开盘释放,该因子或反映理性交易者占比。amount_out_order_avg_ratio 给予单笔流出金额较大的股票风险溢价,或对应快速下跌后的反转或者主力的操纵行为。 4. 成交关联价格类:cum_return_top30_order 的本质是反转因子的精细化刻画,大单推 动的涨幅更具信息量。 5. 价量相关性类:VP、VP_top33_volume、VR_1min_lag 的本质都是捕捉量价背离,即 缩量上涨或放量下跌。

进一步围绕分钟线因子构建选股策略。采用最大化 ICIR 法对前述 50 个因子进行合成,以 未来 5 日收益为预测目标,合成因子 RankICIR(未年化)1.50,对冲组合夏普比率 3.59, Top 层信息比率 3.81。该合成因子和神经网络多频率因子相关系数为 0.25,两者截面标准 化后静态融合,构建指数增强策略。结果显示,结合分钟线合成因子后,策略各项指标均 有提升,尤其体现在回撤控制。中证 500 增强信息比率从 2.78 提升至 3.01,超额收益 Calmar 比率从 1.37 提升至 2.07,中证 1000 增强信息比率从 3.70 提升至 3.87,超额收益 Calmar 比率从 2.41 提升至 3.96。

本文有如下未尽之处: 1. 本文采集的数据均基于 RTX 3090 显卡,对目前行业里主流的 A800、RTX 4090 等显 卡未进行测试。 2. RAPIDS 除 CuPy 和 cuDF 外,cuML(对标 scikit-learn)在量化投资行业可能也有实 用意义,如使用 cuML 进行遗传规划因子挖掘,值得后续探索。3 3. 测试的分钟线因子具有非线性特征,部分因子 Top 层不如第 2、3 层,进行非线性变换 后或能提升因子表现; 4. 从分钟线因子和神经网络因子结合的方式上看,本文先对分钟线因子进行最大化 ICIR 加权,再与神经网络因子进行静态合成,若采用动态或 AI 方法或有进一步提升空间。


(本文仅供参考,不代表我们的任何投资建议。如需使用相关信息,请参阅报告原文。)

相关报告
评论
  • 相关文档
  • 相关文章
  • 全部热门
  • 本年热门
  • 本季热门
  • 全部热门
  • 本年热门
  • 本季热门
  • 最新文档
  • 最新精读
分享至