
# A系列裸金属服务器节点内如何进行NVLINK带宽性能测试方法？
#### 场景描述
本文指导如何进行节点内NVLINK带宽性能测试，适用的环境为：Ant8或者Ant1裸金属服务器， 且服务器中已经安装相关驱动软件，以及Pytorch2.0。
A系列裸金属服务器，单台服务器间是走NVLINK，可以通过相关命令查询拓扑模式：
```
nvidia-smi topo -m
```
图1查询拓扑模式   
![](https://support.huaweicloud.com/modelarts_faq/figure/zh-cn_image_0000001950326344.png "点击放大")
#### 操作步骤
1. 使用以下脚本测得服务器内NVLINK带宽性能。 
   ```
   import torch
   import numpy as np
   device = torch.device("cuda")
   n_gpus = 8
   data_size = 1024 * 1024 * 1024  # 1 GB
   speed_matrix = np.zeros((n_gpus, n_gpus))
   for i in range(n_gpus):
       for j in range(i + 1, n_gpus):
           print(f"Testing communication between GPU {i} and GPU {j}...")
           with torch.cuda.device(i):
               data = torch.randn(data_size, device=device)
               torch.cuda.synchronize()
           with torch.cuda.device(j):
               result = torch.randn(data_size, device=device)
               torch.cuda.synchronize()
           with torch.cuda.device(i):
               start = torch.cuda.Event(enable_timing=True)
               end = torch.cuda.Event(enable_timing=True)
               start.record()
               result.copy_(data)
               end.record()
               torch.cuda.synchronize()
               elapsed_time_ms = start.elapsed_time(end)
           transfer_rate = data_size / elapsed_time_ms * 1000 * 8 / 1e9
           speed_matrix[i][j] = transfer_rate
           speed_matrix[j][i] = transfer_rate
   print(speed_matrix)
   ```
   
   
2. 以Ant8裸金属服务器为例， 其理论卡间带宽为：NVIDIA\*NVLink\*Bridge for 2GPUS: 400GB/s。使用上述测试脚本测得带宽性能进行如下分析。 
   - 正常模式-NVLINK全互通，带宽约为370GB/s。基本符合预期，且证明Ant裸金属服务器内部卡间确实走NVLINK模式，且完全互联。
     图2正常模式带宽性能   
     ![](https://support.huaweicloud.com/modelarts_faq/figure/zh-cn_image_0000001981445753.jpg "点击放大") 
   
   
   
   - 异常模式-NVLINK部分互通，出现带宽波动较大的情况。如下图中0和4之间带宽远低于理论值， 存在问题。
     图3异常模式带宽性能   
     ![](https://support.huaweicloud.com/modelarts_faq/figure/zh-cn_image_0000001981285905.jpg "点击放大")
     出现这种现象， 可尝试重装nvidia/cuda/nvidia-fabricmanager， 重装后再测试又恢复到了正式模式，0和4之间带宽恢复到370GB/s。
     可能原因如下，仅供参考：
     1. 驱动程序问题：可能是由于驱动程序没有正确安装或配置，导致NVLINK带宽受限。重新安装nvidia驱动、CUDA和nvidia-fabricmanager等软件后，驱动程序可能已经正确配置，从而解决了这个问题。
     
     2. 硬件问题：如果卡之间的NVLINK连接存在硬件故障，那么这可能会导致带宽受限。重新安装软件后，重启系统，可能触发了某种硬件自检或修复机制，从而恢复了正常的带宽。
     
     3. 系统负载问题：最初测试卡间带宽时，可能存在其他系统负载，如进程、服务等，这些负载会占用一部分网络带宽，从而影响NVLINK带宽的表现。重新安装软件后，这些负载可能被清除，从而使NVLINK带宽恢复正常。
      
   
   
   
   
 
