使用CUDA支持构建Pyrar
在本文中,我们讨论如何将CUDA支持添加到Python的pyrow包中。
前几天,我在使用Python阅读GPU上的Arrow缓冲区,但据我所知,conda或pip上提供的pyrow包都不是用CUDA支持构建的。像Python编译C包装生态系统中的许多包一样,Apache Arrow有完整的文档记录,但是你可以选择如何使用CUDA支持快速构建pyrow的排列数量变得压倒性的。
在这篇文章中,我’将向您展示如何在Ubuntu上使用Docker和Virtual env在CUDA支持下构建pyrow。这些方向与官方的Apache Arrow文档大致相同,但是在这里,我一步一步地解释它们,并且只展示我使用的单个构建工具链。
步骤1: Docker与GPU支持
尽管我在带有NVIDIA GPU的工作站上使用了Ubuntu 18.04 LTS,但每当我从事这样的项目时,我都喜欢使用Docker容器来保持一切隔离。您最不想做的事情就是调试环境错误,更改一个项目的依赖关系并破坏其他东西。谢天谢地,NVIDIA Docker开发人员镜像可通过Docker Hub获得:
这里,-it标志在bash提示符下将我们放入容器中;--gpus=all允许Docker容器访问我的工作站的GPU,--rm在我们’完成以节省空间之后删除容器。
步骤2:设置Ubuntu Docker容器
当您从Docker Hub中提取Docker容器时,通常,它们在包含的库方面是最基本的。它们通常也可以更新。对于构建pyrow,安装以下内容很有用:
在后面的步骤中,我们’将使用Arrow第三方依赖脚本来确保所有需要的依赖都存在,但这是一个很好的开始。
步骤3:从GitHub克隆Apache Arrow
从GitHub克隆Arrow非常简单。git check out apache-armer-0.15.0行是可选的;我正在探索的项目需要版本0.15.0,但是如果你想从Arrow的主分支构建,你可以省略这一行。
步骤4:安装剩余的Apache Arrow依赖项
如步骤2所述,构建Arrow的一些依赖项是系统级的,可以通过apt安装。为了确保我们拥有所有剩余的第三方依赖项,我们可以使用Arrow存储库中提供的脚本:
该脚本下载所有必要的库,并设置稍后提取的环境变量,这非常有用。
步骤5:构建Apache Arrow C++库
Pyarmo链接到Arrow C++绑定,所以在我们构建pyarmo轮之前,它需要存在:
这是一个非常标准的构建C或C++库的工作流程。我们从该目录中创建一个名为cmake的构建目录来设置我们想要使用的选项。然后,我们分别使用make和make install来编译和安装库。
我选择了上面所有的-DARROW_*选项,就像Arrow文档中的copy/paste一样;Arrow使用这些选项构建’花费很长时间,但可能只有-DARROW_PYTHON=ON和-DARROW_CUDA=ON才真正需要构建pyrow。
步骤6:构建Pyrow轮
随着Apache Arrow C++绑定的构建,我们现在可以构建Python轮:
当cmake和make运行时,您’最终会在构建日志中看到以下内容,这表明我们’正在获得我们想要的行为:
当进程完成时,最后一个轮将在/repos/arrow/python/dist目录中。
步骤7(可选):验证生成
如果你想验证你的pyrow轮是否安装了CUDA,你可以运行以下代码:
当pyrow导入cuda的行运行没有错误时,我们就知道我们使用CUDA构建的pyrow是成功的。
主题:
python,开源, gpu, cuda