注意:
1、cuda-sample需要和cuda版本對(duì)應(yīng),否則會(huì)報(bào)錯(cuò)
2、只有進(jìn)行hpcg測(cè)試時(shí)才需要設(shè)置當(dāng)前環(huán)境變量為cuda-10,其它測(cè)試時(shí)設(shè)置cuda-12.0,否則在進(jìn)行浮點(diǎn)性能測(cè)試時(shí)會(huì)報(bào)錯(cuò)
一、準(zhǔn)備測(cè)試程序
1.環(huán)境變量要求cuda11.8
# centos7 ubuntu18.04 ubuntu20.04 ubuntu22.04
# 只需安裝nvcc不需要安裝驅(qū)動(dòng)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
# 安裝完畢后聲明cuda11.8環(huán)境變量
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
2.cuda-samples-11.8測(cè)試包
wget https://mirrors.qiql.net/pkgs/cuda-samples-11.8.tar.gz
tar -zxvf cuda-samples-11.8.tar.gz
3.hpcg測(cè)試環(huán)境
# cuda10.0安裝
wget https://mirrors.qiql.net/pkgs/cuda_10.0.130_410.48_linux.run
sh cuda_10.0.130_410.48_linux.run
# 聲明cuda10環(huán)境變量
export PATH=/usr/local/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
# 安裝OpenMPI3.1.0
wget https://mirrors.qiql.net/pkgs/openmpi-3.1.0.tar.gz
tar -zxvf openmpi-3.1.0.tar.gz
cd openmpi-3.1.0
./configure --prefix=/opt/support/soft/openmpi/3.1.0
make -j
make install
cd /opt/support/soft/openmpi/3.1.0
vim env.sh
“
base_dir=/opt/support/soft/openmpi/3.1.0
export PATH=${base_dir}/bin:$PATH
export LD_LIBRARY_PATH=${base_dir}/lib:$LD_LIBRARY_PATH
export CPATH=${base_dir}/include:$CPATH
export MANPATH=${base_dir}/share:$MANPATH
”
# 保存退出,后續(xù)要加載openmpi3.1.0,執(zhí)行source /opt/support/soft/openmpi/3.1.0/env.sh 命令即可
#############
# 如果無(wú)法編譯安裝 OpenMPI-3.1.0
# 直接下載編譯好的包:
wget https://mirrors.qiql.net/pkgs/openmpi-3.1.0.tgz
# 將其解壓到/opt/support/soft/openmpi目錄,然后source env.sh 即可
# hpcg包下載解壓
cd /opt/support
wget https://mirrors.qiql.net/pkgs/hpcg-3.1_cuda-10_ompi-3.1_gcc485_sm_35_sm_50_sm_60_sm_70_sm75_ver_10_9_18.tgz
tar -zxvf hpcg-3.1_cuda-10_ompi-3.1_gcc485_sm_35_sm_50_sm_60_sm_70_sm75_ver_10_9_18.tgz
4.intel oneAPI安裝
# intel oneAPI Base Toolkit
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18970/l_BaseKit_p_2022.3.1.17310_offline.sh
sh l_BaseKit_p_2022.3.1.17310_offline.sh
進(jìn)入安裝界面 選擇
Accpet & customer
Next
指定路徑 /opt/support/compiler/intel/2022u2/oneapi 后 Next
Install
選擇 Skip 后 Next
選 I do NOT consent to the collection of my information 后 Begin Installation
等待安裝完畢后 Close
# intel oneAPI HPC Toolkit
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18975/l_HPCKit_p_2022.3.1.16997_offline.sh
sh l_HPCKit_p_2022.3.1.16997_offline.sh
進(jìn)入安裝界面 選擇
Accpet & customer
Next
指定路徑 /opt/support/compiler/intel/2022u2/oneapi 后 Next
選擇 Skip 后 Next
選 I do NOT consent to the collection of my information 后 Begin Installation
等待安裝完畢后 Close
# 啟動(dòng)編譯器
兩個(gè)安裝完畢后 source /opt/support/compiler/intel/2022u2/oneapi/setvars.sh intel64
二、測(cè)試流程
1.顯存帶寬
# 進(jìn)入解壓的cuda-samples-11.8目錄里
cd /opt/support/cuda-samples-11.8/Samples/1_Utilities/bandwidthTest
# 修該下面這個(gè)文件中的 32M 為 2048M
vim bandwidthTest.cu # 進(jìn)入該文件
#define DEFAULT_SIZE (32 * (1e6)) // 32 M
將上面這一行修改為
#define DEFAULT_SIZE (2048 * (1e6))
# 修改cuda路徑
vim Makefile
CUDA_PATH ?= /usr/local/cuda
將上面這行代碼修改為
CUDA_PATH ?= /usr/local/cuda-11.8
make
# 測(cè)試命令
./bandwidthTest --device=0 # 測(cè)試命令,--device=0 表示對(duì) 0 號(hào)卡進(jìn)行測(cè)試,依次測(cè)試所有卡
記錄下Host to Device 、Device to Host 、Device to Device
腳本:
#!/bin/bash
for device in {0..7}
do
echo "Testing device$device:" >> band.txt
./bandwidthTest --device=$device >> band.txt
echo "-----------------------------------" >> band.txt
done
2.卡間帶寬
cd /opt/support/cuda-samples-11.8/Samples/5_Domain_Specific/p2pBandwidthLatencyTest
# 修改cuda路徑
vim Makefile
CUDA_PATH ?= /usr/local/cuda
將上面這行代碼修改為
CUDA_PATH ?= /usr/local/cuda-11.8
make
./p2pBandwidthLatencyTest
記錄下
Bidirectional P2P=Enable Bandwidth Matrix(GB/s)
P2P=Enabled Latency(P2P writes)Matrix(us)
3.浮點(diǎn)性能
cd /opt/support/cuda-samples-11.8/Samples/4_CUDA_Libraries/batchCUBLAS
# 修改cuda路徑
vim Makefile
CUDA_PATH ?= /usr/local/cuda
將上面這行代碼修改為
CUDA_PATH ?= /usr/local/cuda-11.8
make
./batchCUBLAS -m8192 -n8192 -k8192 --device=0 # --device=0表示對(duì)0號(hào)卡進(jìn)行測(cè)試,依次測(cè)試所有卡
記錄Running N=10 batched的GFLOPS值
#!/bin/bash
# 迭代測(cè)試device0到device7
for device in {0..7}
do
echo "Testing device$device:" >> float.txt
./batchCUBLAS -m8192 -n8192 -k8192 --device=$device >> float.txt
echo "-----------------------------------" >> float.txt
done
報(bào)錯(cuò):
./batchCUBLAS: error while loading shared libraries: libcublas.so.12: cannot open shared object file: No such file or directory
4.多卡擴(kuò)展性
cd /opt/support/hpcg-3.1_cuda-10_ompi-3.1_gcc485_sm_35_sm_50_sm_60_sm_70_sm75_ver_10_9_18/
vim hpcg.dat
HPCG benchmark input file
Sandia National Laboratories; University of Tennessee, Knoxville
256 256 256 # 無(wú)需修改
60 # 運(yùn)行時(shí)間,無(wú)需修改
# 單卡運(yùn)行HPCG:
mpirun --allow-run-as-root -n 1 ./xhpcg-3.1_gcc_485_cuda-10.0.130_ompi-3.1.0_sm_35_sm_50_sm_60_sm_70_sm_75_ver_10_9_18
# 雙卡運(yùn)行HPCG
mpirun --allow-run-as-root -n 2 ./xhpcg-3.1_gcc_485_cuda-10.0.130_ompi-3.1.0_sm_35_sm_50_sm_60_sm_70_sm_75_ver_10_9_18
# 四卡運(yùn)行HPCG
mpirun --allow-run-as-root -n 4 ./xhpcg-3.1_gcc_485_cuda-10.0.130_ompi-3.1.0_sm_35_sm_50_sm_60_sm_70_sm_75_ver_10_9_18
# 八卡運(yùn)行HPCG
mpirun --allow-run-as-root -n 8 ./xhpcg-3.1_gcc_485_cuda-10.0.130_ompi-3.1.0_sm_35_sm_50_sm_60_sm_70_sm_75_ver_10_9_18
5.內(nèi)存帶寬
cd /opt/support/
# 獲取stream源碼文件
wget https://mirrors.qiql.net/pkgs/stream.c
# 加載oneAPI環(huán)境變量,oneAPI路徑根據(jù)自己調(diào)整
source /opt/support/compiler/intel/2022u2/oneapi/setvars.sh intel64
# 編譯Stream.c,根據(jù)實(shí)際內(nèi)存數(shù)量調(diào)整數(shù)組大小,以下為在256GB內(nèi)存節(jié)點(diǎn)上的編譯命令
icc -o stream.intel stream.c -DSTATIC -DNTIMES=10 -DSTREAM_ARRAY_SIZE=3200000000 -mcmodel=large -shared-intel -Ofast -qopenmp -ffreestanding -qopt-streaming-stores always
# 聲明環(huán)境變量
export OMP_PROC_BIND=true
export OMP_NUM_THREADS=64
# 運(yùn)行Stream
./stream.intel
6.NCCL test
安裝:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get install libnccl2 libnccl-dev
cd /opt/support/
git clone https://github.com/NVIDIA/nccl-tests
cd nccl-tests/
make
make報(bào)錯(cuò):
root@ubuntu:/opt/support/nccl-tests# make
make -C src build BUILDDIR=/opt/support/nccl-tests/build
make[1]: Entering directory '/opt/support/nccl-tests/src'
Compiling timer.cc > /opt/support/nccl-tests/build/timer.o
Compiling /opt/support/nccl-tests/build/verifiable/verifiable.o
In file included from /usr/local/cuda/bin/..//include/cuda_runtime.h:83,
from <command-line>:
/usr/local/cuda/bin/..//include/crt/host_config.h:129:2: error: #error -- unsupported GNU version! gcc versions later than 7 are not supported!
129 | #error -- unsupported GNU version! gcc versions later than 7 are not supported!
| ^~~~~
make[1]: *** [../verifiable/verifiable.mk:11: /opt/support/nccl-tests/build/verifiable/verifiable.o] Error 1
make[1]: Leaving directory '/opt/support/nccl-tests/src'
make: *** [Makefile:20: src.build] Error 2
手動(dòng)make:
make -C src BUILD_DIR=build CUDA_HOME=/usr/local/cuda-12.0
./build/all_reduce_perf -b 8 -e 256M -f 2 -g 4
三、測(cè)試結(jié)論
設(shè)備 | A100 |
---|---|
GPU | NVIDIA A100 40GB PCIE |
顯存 | 40GB HBM2 |
顯存帶寬 | 1555GB/s |
功耗 | 250 W |
FP64 | 9.7 TFLOPS |
FP64 Tensor Core | 19.5 TFLOPS |
FP32 | 19.5 TFLOPS |
TF32 | 156 TFLOPS |
FP16 Tensor Core | 312 TFLOPS |
INT 8 | 624 TFLOPS |
互連技術(shù)* | PCIE,或NVLink 橋接器(僅用于連接兩張卡)互連帶寬為600GB/s |
PCIe卡槽 | PCIE 4.0 X16,理論帶寬為32GB/s |
設(shè)備 | A100 |
---|---|
GPU | NVIDIA A100 80GB PCIE |
顯存 | 80GB HBM2e |
顯存帶寬 | 1935GB/s |
功耗 | 300 W |
FP64 | 9.7 TFLOPS |
FP64 Tensor Core | 19.5 TFLOPS |
FP32 | 19.5 TFLOPS |
TF32 | 156 TFLOPS |
FP16 Tensor Core | 312 TFLOPS |
INT 8 | 624 TFLOPS |
互連技術(shù)* | PCIE,或NVLink橋接器(僅用于連接兩張卡)互連帶寬為600GB/s |
PCIe卡槽 | PCIE 4.0 X16,理論帶寬為32GB/s |
設(shè)備 | V100S |
---|---|
GPU | Tesla V100S-PCIE-32GB |
顯存 | 32 GB HBM2 |
顯存帶寬 | 1134 GB/s |
功耗 | 250 W |
FP64 | 8.2 TFLOPS |
FP32 | 16.4 TFLOPS |
FP16 | 130 TFLOPS |
PCIe卡槽 | PCIE 3.0 X16,理論帶寬為16GB/s |
設(shè)備 | V100 |
---|---|
GPU | NVIDIA V100 16GB PCIE |
顯存 | 16GB HBM2 |
顯存帶寬 | 900GB/s |
功耗 | 250W |
FP64 | 7 TFLOPS |
FP32 | 14 TFLOPS |
FP16 | 112 TFLOPS |
PCIe卡槽 | PCIE 3.0 X16,理論帶寬為16GB/s |
1.顯存帶寬
這是一個(gè)簡(jiǎn)單的測(cè)試程序,測(cè)試為GPU顯存與服務(wù)器內(nèi)存間雙向帶寬測(cè)試,包括Host To Device(服務(wù)器內(nèi)存到顯存)、Device To Host(顯存到服務(wù)器內(nèi)存)、顯存帶寬(GPU芯片到GPU顯存)三項(xiàng)測(cè)試結(jié)果。用于測(cè)量 GPU 的內(nèi)存拷貝帶寬和跨 PCI-e 的內(nèi)存帶寬。此測(cè)試應(yīng)用程序能夠測(cè)量設(shè)備到設(shè)備復(fù)制帶寬、可分頁(yè)和分頁(yè)鎖定內(nèi)存的主機(jī)到設(shè)備復(fù)制帶寬,以及可分頁(yè)和分頁(yè)鎖定內(nèi)存的設(shè)備到主機(jī)復(fù)制帶寬。該
Device to Device測(cè)出來(lái)的值對(duì)應(yīng)是 服務(wù)器設(shè)備的顯存帶寬,host to device以及device to host 對(duì)應(yīng)的是PCIe卡槽的規(guī)格。
結(jié)論:
顯存帶寬的測(cè)試百分比為 測(cè)試值/顯存帶寬理論值 ; 內(nèi)存到顯存,顯存到內(nèi)存的百分比為 測(cè)試值/PCIe帶寬(一般為PCIe 3.0 16GB 或者 PCIe 4.0 32GB)
2.卡間帶寬
此應(yīng)用程序演示了 GPU 對(duì)之間的 CUDA 點(diǎn)對(duì)點(diǎn) (P2P) 數(shù)據(jù)傳輸,并計(jì)算延遲和帶寬。對(duì)使用 P2P 和不使用 P2P 的 GPU 對(duì)進(jìn)行測(cè)試。該測(cè)試為GPU卡之間的實(shí)測(cè)帶寬,即數(shù)據(jù)從其中一張卡通過(guò)PCIE槽傳輸至另一張卡的測(cè)試結(jié)果。
"P2P" 的全稱(chēng)是 "Peer-to-Peer",它通常指的是一種直接從一個(gè)節(jié)點(diǎn)到另一個(gè)節(jié)點(diǎn)進(jìn)行通信或數(shù)據(jù)傳輸?shù)姆绞?,而不需要?jīng)過(guò)中間服務(wù)器或中心化的控制。它表示GPU之間可以直接訪(fǎng)問(wèn)彼此的顯存(內(nèi)存),以便進(jìn)行數(shù)據(jù)傳輸,而不需要將數(shù)據(jù)通過(guò)主機(jī)內(nèi)存進(jìn)行中轉(zhuǎn)。這可以提高數(shù)據(jù)傳輸?shù)男屎托阅堋?P2P Memory Access" 允許GPU之間進(jìn)行雙向數(shù)據(jù)傳輸,從而可以實(shí)現(xiàn)更高的帶寬和更低的延遲。所以,你可以將 "P2P" 視為與雙向數(shù)據(jù)傳輸相關(guān)的功能,但它更廣泛地指代了直接的、點(diǎn)對(duì)點(diǎn)的通信和數(shù)據(jù)訪(fǎng)問(wèn)方式。
PCIe 3.0的每個(gè)通道為1GB/s,PCIe 4.0的每個(gè)通道的理論帶寬是2GB/s,x16插槽有16個(gè)通道,因此理論總帶寬為32GB/s,實(shí)際帶寬通常會(huì)受到各種因素的影響,包括硬件性能、系統(tǒng)負(fù)載和傳輸模式。在PCIe通信中,雙向通信是默認(rèn)開(kāi)啟的,這意味著PCIe設(shè)備可以在發(fā)送和接收之間進(jìn)行雙向數(shù)據(jù)傳輸。因此,在PCIe 4.0 x16插槽上,理論上可以實(shí)現(xiàn)每個(gè)方向的帶寬都為32GB/s,總帶寬為64GB/s。但實(shí)際上,系統(tǒng)的硬件和軟件配置可能會(huì)限制實(shí)際帶寬。
結(jié)論:
卡間帶寬的測(cè)試值與理論值的對(duì)比,理論值根據(jù)PCIe插槽的規(guī)格判斷:一般為PCIe3.0x16,速度為16GB/s;PCIe4.0x16,速度為32GB/s。然后要看p2p點(diǎn)對(duì)點(diǎn)通信功能是否開(kāi)啟,如果能夠啟動(dòng),理論傳輸速率就翻倍。
3.浮點(diǎn)性能
這是一個(gè) CUDA 示例,演示如何使用批處理的 CUBLAS API 調(diào)用來(lái)提高整體性能。主要測(cè)試的是GPU節(jié)點(diǎn)的雙精度浮點(diǎn)運(yùn)算能力
主要指標(biāo)是雙精度浮點(diǎn)數(shù):Float64,就是服務(wù)器或顯卡指標(biāo)中的FP64。
1 TFLOPS = 1,000,000 GFLOPS
結(jié)論:
浮點(diǎn)性能的測(cè)試值要根據(jù)廠(chǎng)家標(biāo)注的理論值進(jìn)行對(duì)比: 測(cè)試紙/理論值
4.多卡擴(kuò)展性
利用 環(huán)境 cuda10.0 和 MPI:OpenMPI 3.1.0 看hpcg測(cè)試最后給出的GFLOPS值,對(duì)比單卡,2卡,4卡,8卡的結(jié)果。
結(jié)論:
看最后測(cè)試給出的hpcg值1卡、2卡、4卡、8卡是不是呈上升的線(xiàn)性增長(zhǎng)(2卡效率比單卡高,4卡比2卡效率高,依次類(lèi)推)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764282.html
5.內(nèi)存帶寬
安裝Intel oneAPI到目標(biāo)主機(jī),默認(rèn)安裝oneAPI2022.2,使用加載的oneAPI編譯Stream.c文件,根據(jù)實(shí)際內(nèi)存數(shù)量調(diào)整數(shù)組大小。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764282.html
主機(jī)名 | Function | Best Rate MB/s | Avg time | Min time | Max time |
---|---|---|---|---|---|
ecs-37632405 | Copy | 174014.1 | 2.914759 | 2.353832 | 3.624191 |
Scale | 167372.9 | 3.101483 | 2.44723 | 3.849923 | |
Add | 148908.6 | 4.17651 | 4.126021 | 4.227916 | |
Triad | 150024.4 | 4.203401 | 4.095333 | 4.317513 |
到了這里,關(guān)于服務(wù)器GPU性能測(cè)試流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!