微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以将物理 GPU 拆分为多个逻辑/虚拟 GPU 并将它们传递给 dask_cuda.LocalCUDACluster 吗?

如何解决我可以将物理 GPU 拆分为多个逻辑/虚拟 GPU 并将它们传递给 dask_cuda.LocalCUDACluster 吗?

我的工作流极大地受益于 GPU 加速,但每个任务的内存要求相对较低(2-4 GB)。我正在使用 dask.dataframedask.distributed.Clientdask_cuda.LocalCUDACluster 的组合。该过程将从更多的 CUDA 工作器中受益,因此我想将物理 GPU(Nvidia RTX A600、V100、A100)拆分为多个虚拟/逻辑 GPU,以增加我的 dask_cuda LocalCUDACluster 中的工作器数量。我最初的想法是尝试将在 TensorFlow 中创建的 logical_gpus 传递到 LocalCUDACluster,但我似乎无法将它们传递到集群中。

我在 docker 环境中工作,我想将这些拆分保留在 python 中。理想情况下,此工作流程可以从本地工作站扩展到多节点 MPI 作业,但我不确定这是否可行,我愿意接受任何建议。

添加一个类似的例子。

from dask.distributed import Client
from dask_cuda import LocalCUDACluster
from dask_cuda.initialize import initialize
import pandas as pd
import dask.dataframe as dd
import time

# fake function
def my_gpu_sim(x):
   """ 
   GPU simulation which is independent of any others (calls a c++ program in real-world,which saves a 
   file.)
   """
   ...
   return None

# fake data creation 
dic = {'random':['apple' for i in range(40)],'main':[i for i in range(40)]}
df = pd.DataFrame.from_dict(dic)
ddf = dd.from_pandas(df,npartitions=4) 

 
# Configurations
protocol = "ucx"
enable_tcp_over_ucx = True
enable_nvlink = True
enable_infiniband = False
initialize(
    create_cuda_context=True,enable_tcp_over_ucx=enable_tcp_over_ucx,enable_infiniband=enable_infiniband,enable_nvlink=enable_nvlink,)
cluster = LocalCUDACluster(local_directory="/tmp/USERNAME",protocol=protocol,rmm_pool_size="35GB"
                    )
client = Client(cluster)

# Simulation
ddf.map_partitions(lambda df: df.apply(lambda x: my_gpu_sim(x.main),axis=1)).compute(scheduler=client)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。