Cuda 如何使用NVIDIA K80?
机器设置了4个NVIDIA K80,NVIDIA smi的输出是4个卡的信息。他们的GPU ID是Cuda 如何使用NVIDIA K80?,cuda,Cuda,机器设置了4个NVIDIA K80,NVIDIA smi的输出是4个卡的信息。他们的GPU ID是0,1,2,3。每个K80都有两种类型的GPU内存:FB和BAR1,都有12GB。但是CUDA程序总是使用FB内存,而BAR1内存是空闲的。当CUDA程序在每个卡中分配超过12 Gb的GPU内存时,将发生内存不足的错误,但BAR1内存仍不能使用 如何在此设置中正确使用BAR1内存 已更新 英伟达smi的部分输出为 Compute Mode: < Default (
0,1,2,3
。每个K80都有两种类型的GPU内存:FB
和BAR1
,都有12GB。但是CUDA程序总是使用FB
内存,而BAR1
内存是空闲的。当CUDA程序在每个卡中分配超过12 Gb的GPU内存时,将发生内存不足
的错误,但BAR1
内存仍不能使用
如何在此设置中正确使用BAR1
内存
已更新
英伟达smi的部分输出为
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
> Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU1) : Yes
> Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU2) : No
> Peer access from Tesla K80 (GPU0) -> Tesla K80 (GPU3) : No
> Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU0) : Yes
> Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU2) : No
> Peer access from Tesla K80 (GPU1) -> Tesla K80 (GPU3) : No
> Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU0) : No
> Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU1) : No
> Peer access from Tesla K80 (GPU2) -> Tesla K80 (GPU3) : Yes
> Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU0) : No
> Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU1) : No
> Peer access from Tesla K80 (GPU3) -> Tesla K80 (GPU2) : Yes
计算模式:
>来自特斯拉K80(GPU0)->特斯拉K80(GPU1)的对等访问:是
>来自特斯拉K80(GPU0)->特斯拉K80(GPU2)的对等访问:否
>来自特斯拉K80(GPU0)->特斯拉K80(GPU3)的对等访问:否
>来自特斯拉K80(GPU1)->特斯拉K80(GPU0)的对等访问:是
>来自特斯拉K80(GPU1)->特斯拉K80(GPU2)的对等访问:否
>来自特斯拉K80(GPU1)->特斯拉K80(GPU3)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU0)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU1)的对等访问:否
>来自特斯拉K80(GPU2)->特斯拉K80(GPU3)的对等访问:是
>来自特斯拉K80(GPU3)->特斯拉K80(GPU0)的对等访问:否
>来自特斯拉K80(GPU3)->特斯拉K80(GPU1)的对等访问:否
>来自特斯拉K80(GPU3)->特斯拉K80(GPU2)的对等访问:是
来自nvidia smi手册页:
BAR1 Memory Usage
BAR1 is used to map the FB (device memory) so that it can be directly
accessed by the CPU or by 3rd party devices (peer-to-peer on the PCIe
bus).
BAR1是一个虚拟地址空间,映射用于从主机和/或其他启用DMA的设备进行DMA访问的设备内存。
这意味着BAR1不是物理内存,您的K80(如规范中所述)每个GK210B GPU只有12 GB VRAM。当内存耗尽时,您的内存确实不足。来自nvidia smi的手册页:
BAR1 Memory Usage
BAR1 is used to map the FB (device memory) so that it can be directly
accessed by the CPU or by 3rd party devices (peer-to-peer on the PCIe
bus).
BAR1是一个虚拟地址空间,映射用于从主机和/或其他启用DMA的设备进行DMA访问的设备内存。
这意味着BAR1不是物理内存,您的K80(如规范中所述)每个GK210B GPU只有12 GB VRAM。当这些内存耗尽时,您的内存确实不足。您好,谢谢您的回复!我已经用nvidia smi的输出更新了帖子,请检查一下。从这些输出,如果我理解正确的话,似乎只有两个物理K80。GPU0和GPU1属于第一个K80;GPU2和GPU3属于另一个K80。是吗?我试着在多GPU程序中使用这四种设备。在这个程序中,它在这些卡之间进行一些数据传输。如CUDA示例所示,数据传输有两种类型:使用P2P和不使用P2P。在程序中,我们应该检查卡是否相互具有P2P和UVA。如果是,我们可以使用
cudaMemcpyDefault
;如果没有,我们应该首先将数据从源GPU复制到CPU内存,然后复制到目标GPU。我已将P2P
设置为启用,但BAR1
内存似乎仍然没有使用。它总是显示“BAR1内存使用总量:16384 MiB已使用:6 MiB空闲:16378 MiB计算模式:默认值”。事实上,我从未见过物理K80卡。机器是小型集群中的一个计算节点。我不知道机器中设置了多少个卡。输出肯定看起来像两个物理卡,每个卡有两个设备。从您的后续评论中不清楚您是否提出了任何特定问题。您好,谢谢您的回复!我已经用nvidia smi的输出更新了帖子,请检查一下。从这些输出,如果我理解正确的话,似乎只有两个物理K80。GPU0和GPU1属于第一个K80;GPU2和GPU3属于另一个K80。是吗?我试着在多GPU程序中使用这四种设备。在这个程序中,它在这些卡之间进行一些数据传输。如CUDA示例所示,数据传输有两种类型:使用P2P和不使用P2P。在程序中,我们应该检查卡是否相互具有P2P和UVA。如果是,我们可以使用cudaMemcpyDefault
;如果没有,我们应该首先将数据从源GPU复制到CPU内存,然后复制到目标GPU。我已将P2P
设置为启用,但BAR1
内存似乎仍然没有使用。它总是显示“BAR1内存使用总量:16384 MiB已使用:6 MiB空闲:16378 MiB计算模式:默认值”。事实上,我从未见过物理K80卡。机器是小型集群中的一个计算节点。我不知道机器中设置了多少个卡。输出肯定看起来像两个物理卡,每个卡有两个设备。从您的后续评论中不清楚您是否提出了任何特定问题。