如何解决如何指示CuPy在GPU中同时运行多个相同的作业?
下面是一个名为job()
的简单函数,可以在GPU中执行多个CuPy任务。
我如何指示CuPy同时运行job()
一百万次,然后汇总其结果?
我的问题的目的是了解如何通过CuPy将多个并发作业提交到一个GPU。
测试脚本
import numpy as np
import cupy as cp
def job( nsamples ):
# Do some CuPy tasks in GPU
d_a = cp.random.randn( nsamples )
d_b = cp.random.randint( -3,high=3,size=nsamples )
d_result = ( d_a + d_b )
d_hist,_ = cp.histogram( d_result,bins=cp.array([-3,-2,-1,1,2,3,4]) )
std = cp.std( d_hist )
return std
# Perform 1 job in GPU
nsamples = 10 #can be as large as tens to hundreds of thousands
std = job( nsamples,0 )
print( 'std',std,type(std) )
更新:
# Create Cuda streams
d_streams = []
for i in range(0,10):
d_streams.append( cp.cuda.stream.Stream( non_blocking=True ) )
# Perform Concurrent jobs via Cuda Stream.
results = []
for stream in d_streams:
with stream:
results.append( job( nsamples ) )
print( 'results',results,len(results),type(std) )
在阅读了此Nvidia developer blog on Cuda Stream,关于Support CUDA stream with stream memory pool的CuPy问题以及关于CuPy Concurrency的SOF问题之后,我尝试了上面的方法。但是,我不知道如何查看作业是同时运行还是连续运行。
问题:
-
我如何描述Cupy在GPU中执行作业的过程,以评估我的脚本在执行我想要的操作?回答:
nvprof --print-gpu-trace python filename.py
-
我可以发布的流数量是否受到限制(例如,受某些硬件限制)还是“无限”?
解决方法
通常,我的建议是将所有数据连接在一起(跨作业),并寻求以并行数据方式完成工作。这是一个粗略的示例:
$ cat t34.py
import numpy as np
import cupy as cp
def job( nsamples,njobs ):
# Do some CuPy tasks in GPU
d_a = cp.random.randn( nsamples,njobs )
d_b = cp.random.randint( -3,high=3,size=(nsamples,njobs) )
d_result = ( d_a + d_b )
mybins = cp.array([-3,-2,-1,1,2,3,4])
d_hist = cp.zeros((njobs,mybins.shape[0]-1))
for i in range(njobs):
d_hist[i,:],_ = cp.histogram( d_result[i,bins=mybins )
std = cp.std( d_hist,axis=1 )
return std
nsamples = 10 #can be as large as tens to hundreds of thousands
std = job( nsamples,2 )
print( 'std',std,type(std) )
$ python t34.py
std [0.69985421 0.45175395] <class 'cupy.core.core.ndarray'>
$
对于job
中的大多数操作,我们可以执行适当的cupy
操作来处理所有作业的工作。举一个例子,std
函数可以很容易地扩展以在所有作业中执行其工作。 histogram
是个例外,因为我可以看到numpy或cupy中的例程不允许使用分区/分段算法。所以我为此使用了一个循环。如果这是您实际要做的工作,则可能可以将分区的直方图丘比例程编写为cupy kernel。另一种选择是仅在流中发布杯状直方图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。