【发布时间】:2016-11-04 09:06:29
【问题描述】:
为了分析 10^6 个遗传因素及其 GeneXGene 相互作用 (~5x10^11),我有许多独立的线性回归问题,这些问题可能适合在 GPU 上进行分析。
目标是使用包含交互项的线性回归详尽地搜索 GeneXGene 在调节结果变量(大脑表型)中的交互作用。
据我所知,Householder QR 分解可能是拟合回归模型的解决方案,但是,考虑到这项特定工作中的每个回归矩阵都可以轻松接近 10'000x10 的大小,即使每个单个回归矩阵都可以似乎不适合 GPU 片上内存(共享、寄存器等)。
我应该接受这是一个固有带宽受限的问题,并在回归分析期间将矩阵保留在 GPU 全局内存中,还是其他策略可行?
编辑 以下是有关该问题的更多详细信息:
将有大约 10,000 名受试者,每名受试者具有约 1M 的遗传参数(遗传矩阵:10'000x10^6)。每次迭代中的算法应选择此遗传矩阵的两列 (10'000x2) 以及大约 6 个与遗传数据无关的其他变量(年龄、性别等),因此最终的回归模型将处理大小为 10 的矩阵'000x[2(遗传因素)+6(协变量)+2(截距和交互项)] 和结果变量向量(10'000x1)。对于给定的一对遗传因素,每次将重复此相同的过程约 5e11 次。那些通过预定义统计阈值的模型应保存为输出。
具体的问题是,虽然有大约 5e11 个单独的回归模型,但即使是单个模型似乎也不适合片上内存。
我还猜想,坚持使用 CUDA 库可能不是这里的解决方案,因为这要求大部分数据操作都在 CPU 端进行,并且只将每个 QR 分解发送到 GPU?
【问题讨论】:
-
先上高层。尝试将您的问题简化为常见的线性代数例程并使用CUDA libraries(其中有很多:例如 cuBLAS 和 cuSolver 可能已经拥有您需要的东西)。推迟发明自己的东西并担心带宽,直到你真正需要它。
-
为什么你的问题大小突然从 10^12 变成了 10000*10?
-
@Drop 谢谢。但是考虑到会有 10^12 个独立的回归模型,这样会有效吗?
-
“结果变量向量”的大小?你的意思是解决
A(10000x10) X(10x1) = B(10000x1)? -
@kangshiyin 你是对的。 Ouctcome 变量将等于受试者数量(大脑测量):10'000x1。
标签: cuda linear-regression matrix-factorization