FLOPS vs FLOPs

  • FLOPS Be careful All capitals yes floating point of per second Abbreviation , Floating point operations per second . It can be understood as computing speed , Used to measure the performance of hardware . (=하드웨어성능측정)
  • FLOPs yes floating point of operations Abbreviation , Is the number of floating point operations , It means the amount of calculation , It can be used to measure the algorithm / Model complexity .(=모델 연산량측정, floating point operations )

 

FLOPS vs MAC(Multiply–ACcumulate)

  • FLOPs 는 덧셈과 곱셈을 하나의 연산으로 본다
  • 1 MAC = 2 FLOPs(덧셈1,곱셈1)
  • 그래서 MAC → FLOPs으로 변환시에 2를 곱해주고, 반대일떈 2를 나눠주면됨

 

FLOPs랑 걸리는시간도 비례?

비례하긴한데 모델별로 그래프모양은 다른듯

 

Calculate FLOPs

y = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] … w[n-1]*x[n-1]

  • 길이가 n인 두벡터의 내적 → 곱하기 n, 더하기 n-1 총 2n-1 FLOPS

FLOPs = 2x Input Size x Output Size = 2x Number of Kernel x Kernel Shape x Output Shape

 

딥러닝 모델에서 고려해야할사항

  • 모델의 크기 (FLOPs)
  • 메인 메모리 얼마나 잡아먹는지(사용메모리)
  • 동작시간 (Latency)
  • 전력소모

 

Parameter and FLOPs?

Parameter ??

In a CNN, each layer has two kinds of parameters : weights and biases.

The total number of parameters is just the sum of all weights and biases.

Let's define, = Number of weights of the Conv Layer. = Number of biases of the Conv Layer.

 

 

 

DCGM 피처정리 | Notion

총 371개 피처중에서 실제로 사용가능한 피처는 25개

yoonseohhhh.notion.site

 

ㄴ T4, V100,A10G GPU에서 실행했을때 찐으로 사용가능한 피처만 골라정리

DCGMI 설치하는건 아래참조하기

[Ubuntu] DCGM 설치하고 실행해보기

Nvidia-smi 말고 GPU 하드웨어 피처들을 수집할수 있는 방법. 전자에는 없는 피처들을 포함하고 있다. aws에서 사용한 AMI : Deep Learning AMI GPU CUDA 11.4.1 (Ubuntu 18.04) 20211204 ubuntu 18.04 cuda 11.4..

peanut159357.tistory.com



# 그룹 확인 (GPU가 여러개일경우 여러개 gpu를 묶어서 그룹으로 지정해주어야한다)

dcgmi group -l


# 그렇다면 현재 gpu가 몇개인지 확인

dcgmi discovery -l


# 그룹0의 config 보여주기 (현재 구성상태를 나열)

dcgmi config -g 0 --get

dcgmi profile -l -i 0



# 전체 filed id 출력해줌 (첨부 링크에서도 확인가능)

DCGM Library API Reference Manual :: Data Center GPU Manager Documentation

Profiling Fields. These all start with DCGM_FI_PROF_* Ratio of time the graphics engine is active. The graphics engine is active if a graphics/compute context is bound and the graphics pipe or compute pipe is busy.

docs.nvidia.com

dcgmi dmon -l


# 해당 field_id 를 선택해서 1초마다 출력해줌 (필드아이디는 피처값의 id)

dcgmi dmon -e 1001,1004,1005


# 0.1초마다 수집 (기본세팅이 1000ms(1초))

dcgmi dmon -e 1001,1004,1005 -d 100


# output을 파일로 저장

dcgmi dmon -e 1001,1004,1005 > dcgmi-log.txt
dcgmi dmon -d 100 -e 1001,1004,1005 > dcgmi-log.csv


# field group 만들어주기

dcgmi fieldgroup -l   # 필드그룹 확인

dcgmi fieldgroup -c [그룹이름] -f 50,51,52   # 해당 필드 아이디를 묶어서 필드그룹을 만듬

dcgmi fieldgroup -d -g 5 
# 5번그룹을 삭제함, 디폴트 그룹은 삭제못함


Usage:
dcgmi dmon -i <gpuId> -g <groupId> -f <fieldGroupId> -e <fieldId> -d <delay> -c <count> -l
-f : 뽑고 싶은 필드아이디가 너무많을떄는 만들어준 필드그룹 하나만 적어주면된다.
-g : gpu가 여러개일때 gpu 몇개만 선택가능
-l : 몇줄만 출력해줄건지
-e : 뽑고 싶은 피처만 뽑아줌 ( 피처 이름이랑 숫자는 아래 링크 참조해서 보기)
-d : 몇초마다 볼건지 ( 1000 1초 , 100 0.1초)
-l : 단독으로 쓰면 전체 피처값 보여줌

중요) 하지만 수집할 피처갯수가 많으면 에러가 발생

⇒ 한번에 뽑을수 있는 피처갯수는 128개 미만이라고 함. (you will not be able to collect more than 128 fields due to this limitation alone.)
⇒ 만약 수집할 피처갯수가 128개가 넘는다면 명령문을 여러개 돌려야함.
(출처 : https://github.com/NVIDIA/DCGM/issues/44#issuecomment-1174587922 )

 

- nvidia nvprof : kepler,maxwell 등 예전 GPU 지원

- nvidia nsight compute : Pascal, Turing, volta 로 최신 GPU 지원

-> pascal 이전 gpu는 이제 클라우드에서 서비스종료하는 추세라 nvprof 보다는 nsight 를 사용해야한다.

https://developer.nvidia.com/blog/using-nsight-compute-to-inspect-your-kernels/    이글을 참조했다.

 

nsight compute가 가 위치하는곳은 다음과같다.

# nsight comupte가 위치하는곳 : Cuda 안에 숨켜져있었음

/usr/local/cuda-11.2/nsight-compute-2020.3.1/nv-nsight-cu-cli

 

아래는 피처목록을 저장해주는 명령어이다. 

`/usr/local/cuda-11.4/nsight-compute-2021.2.2/nv-nsight-cu-cli --devices 0 --query-metrics >my_metrics.txt`

 

실행 명령어

- 위아래 두개에 별 차이가 없는데 그이유는 아직잘 모르겠다.

- 파이썬파일 실행하면서 gpu 피처들을 프로파일링해준다.

sudo /usr/local/cuda-11.4/nsight-compute-2021.2.2/nv-nsight-cu-cli python3.7 ex.py —import --replay-mode application
sudo /usr/local/cuda-11.4/nsight-compute-2021.2.2/ncu python3.7 ex.py —-replay-mode application

 

 

실행결과

아래처럼 주르륵 리포트 형식으로 나옴. 맨위에 참조 링크 들어가보면 전체 아웃풋 볼수 있음.

 

 

 

그런데.... 어마어마하게 느림.....

from : https://docs.nvidia.com/nsight-compute/ProfilingGuide/#metric-collection

The number and type of metrics specified by a section has significant impact on the overhead during profiling. To allow you to quickly choose between a fast, less detailed profile and a slower, more comprehensive analysis, you can select the respective section set. See Overhead for more information on profiling overhead.

⇒ 모든 매트릭을 볼때 오버헤드가 엄청 커지면서 느려진다고 이해

 

오버헤드에 영향을 주는 요인 (https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html#overhead 참조)

  • Number and type of collected metrics
  • The collected section set
  • Number of collected sections
  • Number of profiled kernels
  • GPU Architecture

⇒ nsight 를 사용하기 위해서는 사용할 피처만 먼저 골라서 정리 → 그 피처만 출력하도록 하는식으로 최대한 오버헤드를 줄여서 사용하는것 권장한다

Nvidia-smi 말고 GPU 하드웨어 피처들을 수집할수 있는 방법. 전자에는 없는 피처들을 포함하고 있다. 

 

aws에서 사용한 AMI : Deep Learning AMI GPU CUDA 11.4.1 (Ubuntu 18.04) 20211204

  • ubuntu 18.04
  • cuda 11.4
  • python3.7

 

< 설치 >

https://developer.nvidia.com/dcgm   여기 그대로 따라서 설치하면됨

 

NVIDIA DCGM

Manage and Monitor GPUs in Cluster Environments NVIDIA Data Center GPU Manager (DCGM) is a suite of tools for managing and monitoring NVIDIA datacenter GPUs in cluster environments. It includes active health monitoring, comprehensive diagnostics, system al

developer.nvidia.com

Ubuntu LTS
Set up the CUDA network repository meta-data, GPG key. The example shown below is for Ubuntu 20.04 on x86_64:
$ 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 add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"

Install DCGM
$ sudo apt-get update \
&& sudo apt-get install -y datacenter-gpu-manager

Set up the DCGM service
$ sudo systemctl --now enable nvidia-dcgm

 

 

 

그런데 본인은 ubuntu 18.04 에서 실행하기 때문에 링크만 조금 바꿔줌

 

https://developer.download.nvidia.com/compute/cuda/repos/  들어가서 ubuntu18.04에 해당하는 파일을 찾아서 링크 바꿔줘서 진행함.

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb

sudo dpkg -i cuda-keyring_1.0-1_all.deb

** 에러발생 (아래 sudo losf~ 이거 실행할떄 아무것도 출력안될때까지 반복)

dpkg: error: dpkg frontend is locked by another process

> sudo lsof /var/lib/dpkg/lock-frontend
> sudo kill -9 <PID>

sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"

**에러발생

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

  1. https → http 바꿔줘보기
  2. 바로앞 명령어 실행 안해주면 발생함
sudo apt-get update && sudo apt-get install -y datacenter-gpu-manager

sudo systemctl --now enable nvidia-dcgm

 

 

< 실행코드 >

 

dcgmi group -l

dcgmi discovery -l

dcgmi group -g 1 -i

dcgmi profile -l -i 0

dcgmi dmon -e 1001,1004,1005

dcgmi dmon -e 1001,1004,1005 > dcgmi-log.csv  # 1초마다 숫자에 해당하는 피처들을 뽑아서 csv파일로 저장

IBM CLOUD 로그인하기

chmod 400 ibm.pem

ssh root@75.126.299.28 -i ibm.pem
uUy2sCK6u (비밀번호)

python 3.7 세팅

sudo apt update
sudo apt install python3.7 # 설치하려는 버전 

update-alternatives --config python3
(에러나오면)
which python3.7  #위치 다시한번 확인

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
-> python을 치면 3.7 을 기본으로 하라는 뜻
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
=> python3을 치면 3.7 을 기본으로 하라는 뜻

CUDA 11.4 설치 ( nvidia driver 도 같이 깔린다 )]

sudo apt-get update # 에러나면 아래두줄 실행
sudo apt-get remove  python3-apt
sudo apt-get install python3-apt

sudo apt-get install python3-pip   # pip3 이 없어서 설치해줘야한다.

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-4-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
# 마지막줄 오래걸림

nvcc -V 작동을 위한 환경설정

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
export PATH=$PATH:$CUDA_HOME/bin

cuDNN 설치 ( Tensorflow 에서 GPU를 사용하기위해 깔아주어야함) - 순서대로 깔아야함

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb

tensorflow 2.7.0 설치

pip3 install --upgrade setuptools
sudo -H pip3 install --upgrade pip
pip3 install tensorflow==2.7.0

tensorflow 에서 gpu 인식가능한지 확인 /  True 라고 나오면 정상설치완

python3.7
import tensorflow
tensorflow.test.is_gpu_available()

 

 

 

 

 

 

< 올인원 버전 >

cuda_setting.sh 생성하고 sudo bash cuda_setting.sh 실행

sudo apt update
sudo apt install python3.7 # 설치하려는 버전 
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
sudo apt-get remove  python3-apt
sudo apt-get install python3-apt
sudo apt-get update 
sudo apt-get install python3-pip   # pip3 이 없어서 설치해줘야한다.
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-4-local_11.4.1-470.57.02-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-4-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
export PATH=$PATH:$CUDA_HOME/bin

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb

pip3 install --upgrade setuptools
sudo -H pip3 install --upgrade pip
pip3 install tensorflow==2.7.0

Original_deviceQuery.cpp
0.01MB
Outputcsv_deviceQuery.cpp
0.02MB

Save devicequery result as csv

  • Original_deviceQuery : origianl deviceQuery.cpp
    (위치는 우분투기준 /usr/local/cuda-11.4/samples/1_Utilities/deviceQuery)
  • Outputcsv_deviceQuery : deviceQuery.cpp file that saves the devicequery result as csv

< Make csv file and permission setting >

sudo touch devicequery.csv // devicequery 값을 저장해줄 csv 파일 생성
sudo chmod ugo+rwx devicequery.csv // read only -> write & read only

< Compile >

  1. deviceQuery.cpp 수정 (위에 outputcsv_deviceQuery.cpp로 바꿔주기)
  2. sudo make ( 에러나면 sudo make clean )
  3. ./deviceQuery

< 추가해준 부분 간단히보기 >

#include <fstream> 
std::ofstream myfile;
myfile.open ("devicequery.csv");
myfile << "Maximum Texture Dimension Size (x,y,z)," << deviceProp.maxTexture1D;
myfile.close();

finally save the devicequery.csv locally

scp -i /Users/hhhhhyyyyy/desktop/aws_pem/ys.pem -r ubuntu@1.11.11.11:/usr/local/cuda-11.4/samples/1_Utilities/deviceQuery/devicequery.csv  .

온칩 : (=레지스터 메모리)

 

  • 온칩메모리는 GPU 칩 안에 있는 메모리로, 레지스터 메모리 / 로컬 메모리 라고 부릅니다.
  • 레지스터는 GPU 커널 안에 선언되는 변수로, GPU 칩안에 있기 때문에 접근 속도가 빠릅니다.
  • 레지스터 변수는 코어에 할당된 스레드가 분배해서 사용하는데, 커널 안에서 사용해야 할 변수가 많아지면 로컬 메모리에 레지스터 변수를 할당할 수 있습니다.
  • 온칩은 속도가 빠른 대신에 비용 등의 이유로 인해 메모리 사이즈가 비교적 작습니다.
  • 직접 연산수행하는 제일빠른 메모리 (싸인,코싸인 함수계산도 레지스터메모리사용함)

 

오프칩 : (=글로벌 메모리)

 

  • 그래픽 카드에 장착한 DRAM으로
  • CUDA에서는 이 off칩을 글로벌 메모리 / 디바이스 메모리라고 합니다.
  • 메모리를 할당 및 해제하는 방법은 GPU 포인터를 선언 -> cudaMalloc 명령으로 메모리 할당해주기 -> 메모리 해제(cudaFree)
  • 계산에 필요한 입력 데이터는 GPU가 아닌 CPU 메모리 영역에 있기 때문에 PCI-e 인터페이스를 통해서 GPU로 메모리를 전송합니다.
  • 속도는 공유메모리랑 레지스터에 비하면 느린편이지만 cpu 메모리에 비교하면 상당히 빠른편

 

Shared Memeroy 

 

  • 글로벌 메모리(오프 칩)는 칩 안에 있지 않기 때문에 접근 시간이 많이 걸립니다. 그래서 GPU에서도 CPU처럼 캐시 기능을 사용할 수 있습니다.다른 점은 개발자가 캐시를 직접 제어할 수 있다는 점입니다.
  • 블록 안의 스레드는 shared 메모리를 모두 공유합니다. (큰 메모리 개념)
  • 블록은 블록마다 자신의 shared 메모리를 가집니다.
  • shared 메모리는 항상 __syncthreads() 함수를 사용해야 합니다. 왜냐면 shared는 global의 데이터를 캐시처럼 shared에 올린 뒤 사용해야 하는데, 각각의 스레드가 shared에 올리는 작업을 수행합니다.이 때 sync를 걸지 않으면, 모두 메모리에 올라오지 않은 상태에서 값을 참조하여 쓰레기값을 가져올수 있기 때문입니다.

 

Texture Memory

 

  • 3d 그래픽에서 사용하는 메모리
  • read only memory

 

로컬 메모리

 

로컬메모리도 온칩메모리.보통은 커널내에 레지스터에 저장되지만 레지스터 공간에 맞지않는 변수는 로컬메모리에 저장된다고함. 아래같은것들은 컴파일러가 로컬메모리에 위치시키는 변수들이라고함.

  • Local arrays referenced with indices whose values cannot be determined at compile-time
  • Large local structures or arrays that would consume too much register space
  • Any variable that does not fit within the kernel register limit

 

Constant memory

 

  • 상수 메모리는 device 메모리에 위치하며 각 SM 의 컨스턴트 캐시에 캐싱된다. (gpu그림에서 c캐시부분)
  • 커널은 상수메모리를 읽을수만 있다.
  • 상수메모리는 워프의 모든 스레드가 동일한 메모리를 읽을때 가장베스트하다고함. 한마디로 각각의 데이터에 대해 동일한 계산을 수행하기위해 동일한 계수를 사용하기 떄문.

 

 

 

 

추가적으로 GPU 구조 관련해서도 간단히 정리

 

**커널 함수 : 병렬 함수 및 데이터 구조를 명시하는 키워드들을 확장한 형태로 작성된 코드로서, 디바이스가 실행하는 부분 (병렬 처리가 가능한 부분)

 

** 스레드 : 최소 명령어 처리단위 , 기본연산(Computation) 하나라를 스레드로 표현한다. (= 멀티프로세서 내에서 작동되는 코어하나에 할당된 명령어를 의미) / 커널함수의 한 인스턴스로써 gpu의 sp에 의해 실행

 

** 블럭 : 스레드 묶음 (=그리드내의 스레드들을 적절한수의 스레드들로 분할한 단위로 하나의 sm에게 할당한다)

 

** 그리드 : 블록이 모이면 그리드가 된다. (하나의 병렬 커널에 의해 실행되는 스레드 전체를 의미함)

+)TPC 는 fermi 이전에 있던것

 

** 멀티프로세서 : GPU를 구성하는 기본요소로 구성된 최소돤위, GPU 는 멀티프로세서내에 여러개의 GPU 코어를 지니고있다.

**GPU는 1개칩안에 최대 15개의 멀티프로세서를 가지고있음. 이 멀티프로세서안에 각각 192개의 코어 (계산유닛)을 가지고있다 그러므로 총 2880개의 코어를 가지고있는셈

 

** 커널 : GPU에서 병렬실행하는 명령의모음

 

**Wave(=Wavefront = WARP) : 32개 스레드들을 단위로 묶은것 (갯수는다를수있음), 대부분 엔비디아 gpu 는 32스레드를 1개워프로 치고있다고 한다.

Warp는 SM(Streaming Multi-processor)의 기본 실행 단위(unit of execution). 스레드 블록의 그리드를 실행하면, 그리드의 스레드 블록들은 SM들로 분배됩니다. 스레드 블록이 SM에 스케쥴링되면 스레드 블록의 스레드들은 warp로 파티셔닝됩니다. 32개의 연속된 스레드들로 구성된 하나의 warp는 SIMT(Single Instruction Multiple Thread) 방식으로 실행됩니다. 즉, 모든 스레드는 동일한 명령어를 실행하고, 각 스레드는 할당된 private data에 대해 작업을 수행합니다.

 

 

+) GPU DEVICE 에는 4가지 타입의 캐시가 존재

각 SM에는 하나의 L1 캐시가 있고, 모든 SM에서 공유되는 하나의 L2 캐시가 있는데(그림참). L1과 L2 캐시는 모두 local / global 메모리에 데이터를 저장하는데 사용됨. GPU에서는 오직 메모리 load 동작만 캐싱될 수 있고 메모리 store 동작은 캐싱될 수 없다고함. SM 또한 read-only constant 캐시와 read-only texture 캐시가 있는데, 이는 device memory의 각각의 메모리 공간에서 읽기 성능을 향상되는데 사용된다.

  • L1
  • L2
  • Read-only constant
  • Read-only texture

 

 

 

 

 

1. AWS 인스턴스 시작 (쿠다 깔려있는걸로)

Deep Learning AMI GPU CUDA 11.4.1 (Ubuntu 18.04) 20211204 사용함 (CUDA 11.4)

 

2. CUDA TOOLKIT 깔기

https://developer.nvidia.com/cuda-11-4-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=18.04&target_type=deb_local

위에 참조해서 깔기

— nvcc -V 제대로 나오면 설치완 —

 

3. 아래 터미널에 입력

cd /usr/local/cuda-11.4/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

 

4. 결과

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "Tesla T4"
  CUDA Driver Version / Runtime Version          11.4 / 11.4
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 15110 MBytes (15843721216 bytes)
  (040) Multiprocessors, (064) CUDA Cores/MP:    2560 CUDA Cores
  GPU Max Clock rate:                            1590 MHz (1.59 GHz)
  Memory Clock rate:                             5001 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 4194304 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total shared memory per multiprocessor:        65536 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Enabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Managed Memory:                Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 0 / 30
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.4, CUDA Runtime Version = 11.4, NumDevs = 1
Result = PASS

 

AWS(g4ad)  / Azure(NNv4) 의 AMD GPU 인스턴스에서 Tensorflow + GPU 를 사용하고자 하였으나 실패했다.

이유는 클라우드 환경에서는 공식적인 ROCM을 지원하지않기 떄문

** ROCM 이 지원하는 GPU 목록 :  https://github.com/ROCm/ROCm.github.io/blob/master/hardware.md

 

 

aws g4ad 관련 => hhttps://github.com/RadeonOpenCompute/ROCm/issues/1506

azure Nnv4 관련 => https://github.com/RadeonOpenCompute/ROCm/issues/1498

 

 

** ROCM 이란? ROCM 을 설치해야하는 이유는? --------------------------------------------

ROCm은 또한 여러 프로그래밍 언어를 통합하고 다른 언어에 대한 지원을 쉽게 추가할 수 있습니다. ROCm은 공급업체별 CUDA 코드를 공급업체 중립적인 ROCm 형식으로 이식하기 위한 도구도 제공하므로 AMD 하드웨어 및 기타 하드웨어 환경에서 CUDA용으로 작성된 방대한 소스 코드를 사용할 수 있습니다. (https://www.admin-magazine.com/HPC/Articles/Discovering-ROCm)

⇒ 한마디로 기본적으로 Tensorflow에서는 정식적으로 NVDIA GPU만 지원하고 있다. 그래서 AMD사에서는 별도로 GPU 컴퓨팅을 위한 오픈 소스 소프트웨어인 ROCm을 지원한다.

------------------------------------------------------------------------------------

 

 

aws g4ad 는 ROCM 이 지원하지는 않는 AMD GPU 이고 , Azure 는 클라우드 환경에서는 지원하지않는다고 함.

 

설치과정 간단히 말하면

aws g4ad

sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot
sudo apt install wget gnupg2
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/3.5.1/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt update
sudo apt install rocm-dkms
sudo reboot
sudo usermod -a -G video $LOGNAME
// sudo usermod -a -G render $LOGNAME    // ubuntu 20 일때만 사용함.18일때는 없어도됨
sudo reboot
rocminfo // 에러난 부분

반복적으로 나타나는 ERROR

ROCk module is NOT loaded, possibly no GPU devices Unable to open /dev/kfd read-write: No such file or directory ubuntu is member of video group hsa api call failure at: /src/rocminfo/rocminfo.cc:1142 Call returned HSA_STATUS_ERROR_OUT_OF_RESOURCES: The runtime failed to allocate the necessary resources. This error may also occur when the core runtime library needs to spawn threads or create internal OS-specific events.

 

 

azure Nvv4

sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/4.3/ ubuntu main' | sudo tee /etc/apt/sources.list.d/rocm.list
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
sudo apt update
sudo usermod -a -G video $LOGNAME
sudo apt install rocm-dkms && sudo reboot
/opt/rocm/bin/rocminfo   // 에러 발생지점
/opt/rocm/opencl/bin/clinfo

반복적으로 나타나는 ERROR

ROCk module is NOT loaded, possibly no GPU devices

 

 

정말 많이 뒤져서 여러가지 버전과 다른 GPU 에서 시도한방법들도 전부 시도해보았으나, 모두 에러로 끝났다.

만약 클라우드 AMD 환경에서 GPU를 사용해서 tensorflow를 성공적으로 돌린 케이스가 있다면 댓글로 알려주신다면 감사합니다.♥️

 

 

 

nvidia-smi로 GPU 몇개있나 확인해주고

코드안에 다음과같이 적어주면 된다. ( "0" 이 0번 GPU 만 사용하겠다 이말)

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"

 

혹은 실행할떄 다음과같이 실행하면된다. (이것도역시 0번 GPU 사용하겠다 이말)

CUDA_VISIBLE_DEVICES=0 python3.6 aa.py

 

마지막으로 nvidia-smi 로 현재 사용중인 GPU가 한개인지 확인하면 된다.

만약 GPU-Util 너무낮은것같다고생각하면 아래코드 실행해주면된다.

python3
import tensorflow.compat.v1 as tf
session = tf.Session(config=tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True)))

 

 

ㄴ 참조로 삭제예정인 인스턴스를 azure 에서 할당량 요청하면 거부당한다

 

 

2023.7 업데이트

1. 호환성 확인하기

아래 링크에서 호환성 꼭 확인하고 맞는 버전으로 설치하자. 호환성 안맞으면 에러가 눈물나게 많이난다. 

https://www.tensorflow.org/install/source#tested_build_configurations

 

2. CUDA 설치 

https://developer.nvidia.com/cuda-toolkit-archive   (여기서 맞는 cuda 버전확인하고 선택)

sudo apt-get install python3-pip  # pip3 안깔려있길래 설치

wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.168-418.67_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.168-418.67_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-1-local-10.1.168-418.67/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

 ㄴ>  https://developer.nvidia.com/cuda-10.1-download-archive-update1?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal

 

2. 잘 설치됬는지 확인해보면 nvidia-smi 는 되고 nvcc -V 는 안될것 

아래처럼 CUDA 환경설정 세팅해주면 nvcc -V 잘 인식된다.

(참조 https://askubuntu.com/questions/885610/nvcc-version-command-says-nvcc-is-not-installed )

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
export PATH=$PATH:$CUDA_HOME/bin


# tensorflow 실행도중 에러나길래 추가해줌
# rm -r 로 파일을 지웠을때 이 세팅을 꼭 다시 실행해줘야 tensorboard 실행할떄 문제가 없었다
export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64

** nvidia-smi 의 쿠다버전과 nvcc -V 쿠다 버전이 다르다 => nvcc -V 는 현재 사용중인 쿠다버전, nvidia-smi 는 사용하고 있는 드라이버의 추천 쿠다버전임

 

3. 여기까지만 설치하면, tensorflow 에서 gpu 인식을 못해서 CPU 만 사용하게됨. GPU도 인식시키고 사용하기위해선 cuDNN 설치해야함

https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/

ㄴ 위 링크에서 1) libcudnn  2) libcudnn7-dev  이렇게 생긴파일을 찾아서 순서대로 다운로드해주고 설치해준다 

(**순서대로, 순서반대로하면 에러남)

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb

 

다 깔았으면 텐서플로우도 깔아준다. 

pip3 install tensorflow==2.3.0

 

 

텐서플로우에서 GPU 잘 사용가능한지 확인해본다

python3
import tensorflow
tensorflow.test.is_gpu_available()

결과가 TRUE 가 나오면 GPU 정상적으로 잘 사용가능하다 이말이고, False 나오면 GPU 인식 못하겠다 이말

 

만약 에러가 났다면 에러난곳을 대충 뜯어보면 다음과같은 에러가 날것.

ERROR : 2022-01-25 04:50:47.215892: E tensorflow/stream_executor/cuda/cuda_dnn.cc:318] Loaded runtime CuDNN library: 7.5.0 but source was compiled with: 7.6.4. CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library. If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.

=> 7.5.0을 깔았는데 7.6.4버전 깔라고 하는소리다. (위에서는 7.6.4를 깔아서 문제없을것) 

그러면 아래코드에서 권장하는 버전으로 바꿔서 다시 깔아주면 잘 작동할거다 끝~

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb

평소처럼 AWS EC2 gpu 인스턴스(g4dn.xlarge)에서 nvidia-smi 로 gpu 변화를 뽑았는데 gpu usage 값이 전부 0으로 나왔다. 

평소에도 동일한 코드로 돌렸는데 왜 갑자기 에러가 났을까....

 

 

사용중인 AMI 는 Deep Learning AMI (Ubuntu 18.04) Version 55.0 - ami-029536273cb04d4d9 (버지니아) 로

아래 명령어로 쿠다버전을 살펴보았다. 버전 11이라고 나온다. 

nvcc --version

현재 사용중인 tensorflow 버전은 tensorflow-gpu-1.14.0

import tensorflow as tf
tf.test.is_gpu_available()

으로 gpu가 사용중인지 확인해봤더니 False 가 나왔다....!!

 

 

 

 

아래 링크에서 호환성을 살펴보았다. 

https://www.tensorflow.org/install/source#linux 

 

소스에서 빌드  |  TensorFlow

Help protect the Great Barrier Reef with TensorFlow on Kaggle Join Challenge 소스에서 빌드 소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 명령어는 다른 시스템에도 적용될 수 있지만, U

www.tensorflow.org

 

tensorflow-gpu-1.14.0 는 CUDA 버전이 10!!!!

 

그렇다면 cuda 버전이 10인 AMI 를 찾아보았다. 

https://docs.aws.amazon.com/ko_kr/dlami/latest/devguide/cuda10.html

 

CUDA 10 옵션을 이용한 Deep Learning - 딥 러닝 AMI

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

- Deep Learning AMI (Ubuntu 18.04) Version 50.0 

- Deep Learning AMI (Ubuntu 18.04) Version 44.0

 

이게 cuda 10 인 ami ...

Deep Learning AMI (Ubuntu 18.04) Version 50.0  로 다시 동일하게 진행해주었더니 해결되었다....

 

만약에 다른상황에서 그냥 진행했더라면.. 끔찍하다. 항상 GPU 가 잘 사용중인지 체크하도록 하자 

 

 

sudo apt install dstat
sudo dstat --output ~/Hardware-Data/dstat-log.csv -cdnpmrt

 

 

dstat options

-top-cpu – process using most CPU

-top-mem – process consuming the most memory

  • cdngyt 옵션은 다음과 같습니다.
  1. c : CPU 통계 =cpu usage
  2. d : 디스크 통계
  3. n : 네트워크 통계
  4. g : 페이지 통계
  5. y : 시스템 통계
  6. t : 타임스탬프

 

 

그외 추가적인 옵션들 (dstat --help 치면 나옴)

 

 

dstat

 

total cpu usage usr 사용자 프로스가 사용중인 CPU
(-c CPU 사용률) sys 시스템 프로스세가 사용중인 CPU
(usr+sys_idl = 100%) idl 유휴 cpu
  wai wating process 수
  stl  
dsk/total read 디스크의 읽기수
(-d 디스크상태) writ 디스크의 쓰기수
net/total recv 입력받은 크기
(-n 네트워크 상태) send 보낸 크기
paging in page in 수
(-g 페이징 확인) out page out 수
system int interrupt
(-y 시스템 통계) csw context switch
procs run 실행중인 prcoess수
(-p 프로세스 상태) blk block된 process수
  new 새로운 자식(spawned) process수
memory-usage used 사용된 메모리
(-m 메모리 상태) free 여유 메모리
  buff 버퍼에 사용된 메모리
  cach 캐쉬에 사용된 메모리
io/total read 블록장치 처리량 (읽은거)
(-r 단위는 카운트임) writ 블록장치 처리량 (쓴거)
     
sudo apt install dstat
# csv파일로 save
sudo dstat --output ~/Hardware-Data/dstat-log.csv -cdnpmrt
# download
scp -i /Users/heoyunseo/desktop/aws_pem/ys.pem -r ubuntu@50.17.89.10:/home/ubuntu/Hardware-Data/ .
  • 저장된 파일을 열어보면 다음과같이 보임.

여기서 에러발생 →일반적인 방법으로 csv파일을 열려고 하면 pandas가 못읽어들임

참조 : https://stackoverflow.com/questions/40560614/how-to-import-the-output-of-dstat-into-pandas

이래 처럼 읽어오면 정상적으로 읽어진다.

 

import pandas as pd
import io
fn = r'./dstat-log.csv'
with open(fn) as f:
data = f.read().replace('|', '  ')
data = data[data.rfind('system"\\n')+8:]
data = data.replace(',', ' ')
data
cols = 'totalcpuusage_usr totalcpuusage_sys totalcpuusage_idl totalcpuusage_wai totalcpuusage_stl ' \\
'dsktotal_read dsktotal_writ ' \\
'nettotal_recv nettotal_send procs_run procs_blk procs_new ' \\
'memoryusage_used memoryusage_free memoryusage_buff memoryusage_cach ' \\
'iototal_read iototal_writ '  \\
'system_time'.split()
df = pd.read_csv(io.StringIO(data), delim_whitespace=True, skiprows=2, header=None, names=cols)
df

이렇게 열면 정상적으로 보인다~

 

 

'<하드웨어> > CPU' 카테고리의 다른 글

DSTAT options  (0) 2022.01.09

- 이건 300ms 마다 모든 항목 저장

nvidia-smi -lms 300 -f ./Data.csv --format=csv --query-gpu=timestamp,driver_version,count,name,serial,uuid,pci.bus_id,pci.domain,pci.bus,pci.device,pci.device_id,pci.sub_device_id,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,pcie.link.width.max,index,display_mode,display_active,persistence_mode,accounting.mode,accounting.buffer_size,driver_model.current,driver_model.pending,vbios_version,inforom.img,inforom.oem,inforom.ecc,inforom.pwr,gom.current,gom.pending,fan.speed,pstate,clocks_throttle_reasons.supported,clocks_throttle_reasons.active,clocks_throttle_reasons.gpu_idle,clocks_throttle_reasons.applications_clocks_setting,clocks_throttle_reasons.sw_power_cap,clocks_throttle_reasons.hw_slowdown,memory.total,memory.used,memory.free,compute_mode,utilization.gpu,utilization.memory,ecc.mode.current,ecc.mode.pending,ecc.errors.corrected.volatile.device_memory,ecc.errors.corrected.volatile.register_file,ecc.errors.corrected.volatile.l1_cache,ecc.errors.corrected.volatile.l2_cache,ecc.errors.corrected.volatile.texture_memory,ecc.errors.corrected.volatile.total,ecc.errors.corrected.aggregate.device_memory,ecc.errors.corrected.aggregate.register_file,ecc.errors.corrected.aggregate.l1_cache,ecc.errors.corrected.aggregate.l2_cache,ecc.errors.corrected.aggregate.texture_memory,ecc.errors.corrected.aggregate.total,ecc.errors.uncorrected.volatile.device_memory,ecc.errors.uncorrected.volatile.register_file,ecc.errors.uncorrected.volatile.l1_cache,ecc.errors.uncorrected.volatile.l2_cache,ecc.errors.uncorrected.volatile.texture_memory,ecc.errors.uncorrected.volatile.total,ecc.errors.uncorrected.aggregate.device_memory,ecc.errors.uncorrected.aggregate.register_file,ecc.errors.uncorrected.aggregate.l1_cache,ecc.errors.uncorrected.aggregate.l2_cache,ecc.errors.uncorrected.aggregate.texture_memory,ecc.errors.uncorrected.aggregate.total,retired_pages.single_bit_ecc.count,retired_pages.double_bit.count,retired_pages.pending,temperature.gpu,power.management,power.draw,power.limit,power.default_limit,power.min_limit,power.max_limit,clocks.current.graphics,clocks.current.sm,clocks.current.memory,clocks.applications.graphics,clocks.applications.memory,clocks.default_applications.graphics,clocks.default_applications.memory,clocks.max.graphics,clocks.max.sm,clocks.max.memory
더보기

nvidia-smi -lms 300 -f ./Data.csv --format=csv --query-gpu=timestamp,driver_version,count,name,serial,uuid,pci.bus_id,pci.domain,pci.bus,pci.device,pci.device_id,pci.sub_device_id,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,pcie.link.width.max,index,display_mode,display_active,persistence_mode,accounting.mode,accounting.buffer_size,driver_model.current,driver_model.pending,vbios_version,inforom.img,inforom.oem,inforom.ecc,inforom.pwr,gom.current,gom.pending,fan.speed,pstate,clocks_throttle_reasons.supported,clocks_throttle_reasons.active,clocks_throttle_reasons.gpu_idle,clocks_throttle_reasons.applications_clocks_setting,clocks_throttle_reasons.sw_power_cap,clocks_throttle_reasons.hw_slowdown,memory.total,memory.used,memory.free,compute_mode,utilization.gpu,utilization.memory,ecc.mode.current,ecc.mode.pending,ecc.errors.corrected.volatile.device_memory,ecc.errors.corrected.volatile.register_file,ecc.errors.corrected.volatile.l1_cache,ecc.errors.corrected.volatile.l2_cache,ecc.errors.corrected.volatile.texture_memory,ecc.errors.corrected.volatile.total,ecc.errors.corrected.aggregate.device_memory,ecc.errors.corrected.aggregate.register_file,ecc.errors.corrected.aggregate.l1_cache,ecc.errors.corrected.aggregate.l2_cache,ecc.errors.corrected.aggregate.texture_memory,ecc.errors.corrected.aggregate.total,ecc.errors.uncorrected.volatile.device_memory,ecc.errors.uncorrected.volatile.register_file,ecc.errors.uncorrected.volatile.l1_cache,ecc.errors.uncorrected.volatile.l2_cache,ecc.errors.uncorrected.volatile.texture_memory,ecc.errors.uncorrected.volatile.total,ecc.errors.uncorrected.aggregate.device_memory,ecc.errors.uncorrected.aggregate.register_file,ecc.errors.uncorrected.aggregate.l1_cache,ecc.errors.uncorrected.aggregate.l2_cache,ecc.errors.uncorrected.aggregate.texture_memory,ecc.errors.uncorrected.aggregate.total,retired_pages.single_bit_ecc.count,retired_pages.double_bit.count,retired_pages.pending,temperature.gpu,power.management,power.draw,power.limit,power.default_limit,power.min_limit,power.max_limit,clocks.current.graphics,clocks.current.sm,clocks.current.memory,clocks.applications.graphics,clocks.applications.memory,clocks.default_applications.graphics,clocks.default_applications.memory,clocks.max.graphics,clocks.max.sm,clocks.max.memory

 

 

- 이건 1초마다 모든항목 저장

nvidia-smi -l 1 -f ./Data.csv --format=csv --query-gpu=timestamp,driver_version,count,name,serial,uuid,pci.bus_id,pci.domain,pci.bus,pci.device,pci.device_id,pci.sub_device_id,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,pcie.link.width.max,index,display_mode,display_active,persistence_mode,accounting.mode,accounting.buffer_size,driver_model.current,driver_model.pending,vbios_version,inforom.img,inforom.oem,inforom.ecc,inforom.pwr,gom.current,gom.pending,fan.speed,pstate,clocks_throttle_reasons.supported,clocks_throttle_reasons.active,clocks_throttle_reasons.gpu_idle,clocks_throttle_reasons.applications_clocks_setting,clocks_throttle_reasons.sw_power_cap,clocks_throttle_reasons.hw_slowdown,memory.total,memory.used,memory.free,compute_mode,utilization.gpu,utilization.memory,ecc.mode.current,ecc.mode.pending,ecc.errors.corrected.volatile.device_memory,ecc.errors.corrected.volatile.register_file,ecc.errors.corrected.volatile.l1_cache,ecc.errors.corrected.volatile.l2_cache,ecc.errors.corrected.volatile.texture_memory,ecc.errors.corrected.volatile.total,ecc.errors.corrected.aggregate.device_memory,ecc.errors.corrected.aggregate.register_file,ecc.errors.corrected.aggregate.l1_cache,ecc.errors.corrected.aggregate.l2_cache,ecc.errors.corrected.aggregate.texture_memory,ecc.errors.corrected.aggregate.total,ecc.errors.uncorrected.volatile.device_memory,ecc.errors.uncorrected.volatile.register_file,ecc.errors.uncorrected.volatile.l1_cache,ecc.errors.uncorrected.volatile.l2_cache,ecc.errors.uncorrected.volatile.texture_memory,ecc.errors.uncorrected.volatile.total,ecc.errors.uncorrected.aggregate.device_memory,ecc.errors.uncorrected.aggregate.register_file,ecc.errors.uncorrected.aggregate.l1_cache,ecc.errors.uncorrected.aggregate.l2_cache,ecc.errors.uncorrected.aggregate.texture_memory,ecc.errors.uncorrected.aggregate.total,retired_pages.single_bit_ecc.count,retired_pages.double_bit.count,retired_pages.pending,temperature.gpu,power.management,power.draw,power.limit,power.default_limit,power.min_limit,power.max_limit,clocks.current.graphics,clocks.current.sm,clocks.current.memory,clocks.applications.graphics,clocks.applications.memory,clocks.default_applications.graphics,clocks.default_applications.memory,clocks.max.graphics,clocks.max.sm,clocks.max.memory
더보기

nvidia-smi -l 1 -f ./Data.csv --format=csv --query-gpu=timestamp,driver_version,count,name,serial,uuid,pci.bus_id,pci.domain,pci.bus,pci.device,pci.device_id,pci.sub_device_id,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,pcie.link.width.max,index,display_mode,display_active,persistence_mode,accounting.mode,accounting.buffer_size,driver_model.current,driver_model.pending,vbios_version,inforom.img,inforom.oem,inforom.ecc,inforom.pwr,gom.current,gom.pending,fan.speed,pstate,clocks_throttle_reasons.supported,clocks_throttle_reasons.active,clocks_throttle_reasons.gpu_idle,clocks_throttle_reasons.applications_clocks_setting,clocks_throttle_reasons.sw_power_cap,clocks_throttle_reasons.hw_slowdown,memory.total,memory.used,memory.free,compute_mode,utilization.gpu,utilization.memory,ecc.mode.current,ecc.mode.pending,ecc.errors.corrected.volatile.device_memory,ecc.errors.corrected.volatile.register_file,ecc.errors.corrected.volatile.l1_cache,ecc.errors.corrected.volatile.l2_cache,ecc.errors.corrected.volatile.texture_memory,ecc.errors.corrected.volatile.total,ecc.errors.corrected.aggregate.device_memory,ecc.errors.corrected.aggregate.register_file,ecc.errors.corrected.aggregate.l1_cache,ecc.errors.corrected.aggregate.l2_cache,ecc.errors.corrected.aggregate.texture_memory,ecc.errors.corrected.aggregate.total,ecc.errors.uncorrected.volatile.device_memory,ecc.errors.uncorrected.volatile.register_file,ecc.errors.uncorrected.volatile.l1_cache,ecc.errors.uncorrected.volatile.l2_cache,ecc.errors.uncorrected.volatile.texture_memory,ecc.errors.uncorrected.volatile.total,ecc.errors.uncorrected.aggregate.device_memory,ecc.errors.uncorrected.aggregate.register_file,ecc.errors.uncorrected.aggregate.l1_cache,ecc.errors.uncorrected.aggregate.l2_cache,ecc.errors.uncorrected.aggregate.texture_memory,ecc.errors.uncorrected.aggregate.total,retired_pages.single_bit_ecc.count,retired_pages.double_bit.count,retired_pages.pending,temperature.gpu,power.management,power.draw,power.limit,power.default_limit,power.min_limit,power.max_limit,clocks.current.graphics,clocks.current.sm,clocks.current.memory,clocks.applications.graphics,clocks.applications.memory,clocks.default_applications.graphics,clocks.default_applications.memory,clocks.max.graphics,clocks.max.sm,clocks.max.memory

 

<ID, 주소, 버전 관련>

 

이름 Description
Driver Version NVIDIA display driver 에 설치된 버전
CUDA Version  추천 버전, 현재 사용되고 있는 버전이 아님
Serial Number 보드의 물리적인 일련번호를 의미하고 고유한값
GPU UUID      Globally unique 하며, 변경불가하다. 보드의 물리적인 라벨과 일치하지 않는다 (uuid는 암호화 알고리즘을 사용해서 만들고 시리얼 타입보다 훨씬 복잡)
Board ID  드라이버가 할당한 고유한 보드 ID (예: 둘이상 gpu 가 동일 보드 id를 가지고 바로위에 멀티지피유=true 라면, 동일 보드위에 gpu들이 있다는걸 의미한다)
GPU Part Number   부품번호
Inforom Version (Image Version,OEM Object,ECC Object) gpu 비휘발성 저장장치 버전(gpu 구성,상태 데이터에 대한 소규모 영구 저장소)
Power Management Object Version for the 전원관리 데이터
Bus PCI bus number (아래 사진첨부) (pci segment = Pci bus = pci)
Device PCI device number
Domain PCI domain number(각 도메인은 256개 PCI 버스를 가질수 있음)
Device Id PCI vendor device id
Bus Id    PCI bus id (멀티 지피유의 경우 여러개가 뜸)
Sub System Id PCI Sub System i
PCIe Generation (max,current) PCLe 3.0 4.0 이런식으로 나뉘는데 4.0이 3.0보다 2배 빠르다.
Link Width((max,current) (×1, ×2, ×4, ×8, ×12, ×16 and ×32)링크는 두 PCI Express 포트 사이의 지점간 통신 채널
Process ID ,Type, Name,Used GPU Memory 프로세스 아이디, 타입은 CPU 이면 C , GPU 이면 G, CPU+GPU 이면 C+G, name python, used gpu memory 는 context 에 의해서 사용된 메모리양
VBIOS Version           VBIOS (컴퓨터를 부팅시에 가장먼저 시작되고,GPU 를 초기화) 버전

 

<리눅스에서만 사용하는 or 특정 인스턴스에서만 적용가능>

 

이름 Descriptoin
MIG Mode 7개 개별 인스턴스로 분할해서 사용가능함, A100( p4 instance )에서만 가능, 리눅스 에서 동작)
Driver Model 윈도우 0, linux x
Clocks Throttle Reasons (Idle,Applications Clocks Setting,SW Power Cap) 클록 빈도를 줄이는 요인에 대한 정보를 검색, Kepler 제품군에서 지원되는 Tesla 장치에서만 가능하다고한다 (전력 상한선 제한)
Power Limit         소프트웨어 전력 제한(와트). nvidia-smi와 같은 소프트웨어로 설정합니다. 전원 관리가 지원되는 경우에만 사용할 수 있습니다. Inforom PWR 개체 버전 3.0 이상 또는 Kepler 장치가 필요/ 특별히 지정한값이 없으면 디폴트 파워 리밋과 동일함.
GPU Operation Mode p3,g3 인스턴스에서만 지원가능 (GOM 을 사용하면 gpu 기능을 비활성화해서 전력 사용량을 줄이고 GPU 처리량을 최적화할수 있다고함)
Persistence Mode GPU 에 대해서 지속성모드가 활성화되어있는지 여부를 나타내는 FLAG. Enabled 되어있으면 Cuda 프로그램같은 종속앱실행과 관련된 드라이버 로드 대기시간이 최소화, (리눅스에서만 지원)
Minor Number              다중 GPU 시스템에서 여러 작업을 병렬로 시작할때 사용 (dev/nvidia [minor number] 형식을 가지게함, only linux)

 

<전력, 온도관련>

 

이름 Description
Applications Clocks Setting GPU 클럭은 애플리케이션 클럭 설정에 의해 제한. 예를 들어 nvidia-smi --applications-clocks=를 사용하여 변경가능 (gpu clock 제한유무)
SW Power Cap        SW Power Scaling 알고리즘은 GPU가 너무 많은 전력을 소비하기 때문에 요청된 클럭 아래로 클럭을 줄이고 있습니다. 예를 들어 SW 전력 상한선은 nvidia-smi --power-limit=로 변경가능
FB Memory Usage (total,used,free) frame buffer memory : 레스터주사방식(화면의 다수를 화소로 분할, 화면의 위에서부터 수평주사선을 옆으로 끌듯이 한줄씩 아래로 내려가면서 주사하여 화면을 형성하는 주사방식) 에서 화면에 나타날 영상정보를 일시적으로 저장하는 기억장치
BAR1 Memory Usage (total,used,free) BAR1은 FB(장치 메모리)를 매핑하는 데 사용되어 CPU 또는 타사 장치(PCIe 버스의 피어 투 피어)에서 직접 액세스할 수 있습니다.VRAM ? GPU RAM, 해상도가 커지면 한화면에 출력해야할 오브젝트들이 많아지기 떄문에 VRAM 의존도가 기하급수적으로 커진다.
Utilization (Gpu,Memory,Encoder,Decoder) 활용률은 각 GPU가 시간이 지남(1/6초~1초)에 따라 얼마나 사용하는지 보고하며 시스템에서 응용 프로그램이 GPU를 얼마나 사용하고 있는지 확인하는 데 사용할 수 있습니다.
ECC Errors NVIDIA GPU는 다양한 유형의 ECC 오류에 대한 오류 수를 제공
Temperature(GPU Current Temp,GPU Shutdown Temp,GPU Slowdown Temp,GPU Max Operating Temp,Memory Current Temp,Memory Max Operating Temp) 보드에 있는 온도 센서의 판독값.
Power Readings (Power Management,Power Draw,Default Power Limit,Enforced Power Limit,Min Power Limit,Max Power Limit) 전체 보드에 대해 측정된 전력 소비량(와트) (power Limit 설정은 Kepler 장치만 가능)
Clocks (Graphics,SM,Memory,Video) GPU의 일부가 실행되는 현재 주파수. 모든 판독값은 MHz 단위
Applications Clocks (Graphics,Memory,Default Applications Clocks,Max Clocks) 애플리케이션이 실행될 기본 빈도.(코어클럭 : 그래픽 프로세서의 코어 속도를 나타냄, 메모리클럭 : GPU의 VRAM 주파수 , VRAM 은 GPU에서 사용하는 램. DRAM 과 달리 VRAM 은 GPU가 렌더링해야하는 자산에 대한 메모리를 유지하는데 사용됨)

<사용자 설정가능>

 

이름 Description
Applications Clocks Setting [전력,온도 관련 중복] GPU 클럭은 애플리케이션 클럭 설정에 의해 제한. 예를 들어 nvidia-smi --applications-clocks=를 사용하여 변경가능
SW Power Cap      SW Power Scaling 알고리즘은 GPU가 너무 많은 전력을 소비하기 때문에 요청된 클럭 아래로 클럭을 줄인다. 예를 들어 SW 전력 상한선은 nvidia-smi --power-limit=로 변경가능
Max Customer Boost Clocks 사용자가 지정한 최대 boost 클럭속도
Applications Clocks (Graphics,Memory) 애플리케이션이 실행될 기본 빈도.(사용자지정 그래픽 주파수,사용자지정 메모리 주파수)
Clock Policy 자동클럭 변경에 대한 사용자지정 설정
MIG Mode 7개 개별 인스턴스로 분할해서 사용가능함. nvidia-smi -mig 1 이 명령어로 mig mode를 disable,enable 바꿔줄수 있다./ $ sudo nvidia-smi mig -cgi 9,3g.20gb 이런식으로 인스턴스를 나눠줄수 있음.

 

<그외 중요하다고 생각한 것들>

 

이름 Description
Attached GPUs 시스템에 있는 NVIDIA GPU 개수
Product Name        Ex: Tesla T4 (GPU product name)
MultiGPU Board      멀티 지피유 보드인지 아닌지
Tx Throughput (Transmit Data) 바로전 20ms 동안 PCIe 버스를 통한 GPU 중심 전송 처리량(MB/s). Maxwell 아키텍처 이상에서만 지원
Rx Throughpu (Receive Data의) GPU 중심은 바로전 20ms 동안 MB/s 단위의 PCIe 버스를 통한 수신 처리량. Maxwell 아키텍처 이상에서만 지원
Performance State GPU 현재성능상태로 P0-P12까지 있꼬, P0이 최대성능

 

 

PDF

T_nvidia-smi_-q_비슷한_유형별로_모아보기.pdf
0.39MB

 

HTML

Export-63ff0091-088a-4e31-acdb-5dcb09293db3.zip
0.13MB

+ Recent posts