본문 바로가기

반응형

컴퓨터공학

Volatile GPU-Util이 낮게 나오는 이유 체크해야할 부분 1. 배치 사이즈 문제 2. Num_worker 늘리기. Num_worker는 data loader가 데이터를 읽어들일때 사용할 쓰레드의 갯수입니다. 보통 (사용하는 gpu 개수)*4로 해놓고 +- 조절해서 쓴다고 한다. 3. Pin_memory=True Dataset을 CPU 텐서로 loading 하고 있다면 pin_memory = True를 사용해서 device transfer을 빠르게 해줄 수 있다. 4. 데이터가 SSD에 있는지? lsblk -d -o name,rota df -h 를 사용해서 데이터가 있는 위치가 SDD인지 확인한다. 5. Data normalizing 0~255 이미지보다 (0,1) normalize 하는게 더 빠르다 한다. + 해당 변수가 어디서 처리되고 있는지.. 더보기
Pytorch loss nan 문제 학습도중 loss가 nan이라고 뜨는 일이 발생했다. Epoch은 50이상 돌아간 상태였다. 바로 nan loss가 발생하는 이유에 대해서 검색해보았다. 대충 서치했을 때 내가 얻을 수 있는 답변들은 다음과 같았다. Numerical Exception 수학적으로 계산이 안되는 것. 0으로 나눈다거나 log(0)과 같은 +-무한대로 발산할 수 있는 것이 생기는 경우 Learning rate의 문제 Learning rate이 너무 클 경우, loss가 커지기 시작하면서 결국 발산한다. Input data의 문제, gt 데이터의 문제 모두 유효한 값이어야 한다. Normalize도 해두기 이 외에도 오류가 발생하는 원인은 수도 없이 많겠지만.. ㅎ 일단 가장 먼저 내가 해볼 수 있는 것은 nan이 발생하였을 .. 더보기
Pytorch 시드 고정하는 법 실험의 재현 가능성을 확보하기 위해 시드를 고정해야 한다. 파이토치 시드 고정 import torch import random import torch.backends.cudnn as cudnn #파이토치의 랜덤시드 고정 torch.manual_seed(0) torch.cuda.manual_seed(0) torch.cuda.manual_seed_all(0) # gpu 1개 이상일 때 # 넘파이 랜덤시드 고정 np.random.seed(0) #CuDNN 랜덤시드 고정 cudnn.benchmark = False cudnn.deterministic = True # 연산 처리 속도가 줄어들어서 연구 후반기에 사용하자 # 파이썬 랜덤시드 고정 random.seed(0) 더보기
쌩판 노베이스 비전공자를 위한 딥러닝 공부 순서 저는 컴공아닌 공대생이었구요, 공대 필수로 듣는 C와 python, 그리고 선형대수학을 비롯한 수학과목들을 수강했었습니다. 지금은 대학원에서 딥러닝 관련 공부중에 있습니다. 저도 아직 계속해서 공부중이긴 하지만, 아예 쌩판 노베이스인 비전공자 분들을 위해서 조그만 로드맵? 정도를 제공해드리면 더 쉽게 시작하시지 않을까 하고 이 글을 적게 되었습니다. 물론 저보다 더 경험이 많으신 분들이라면 댓글로 좋은 공부 자료들 추가해주시면 너무너무 감사하겠습니다. 그럼 시작! 일단 인공지능을 시작해보고 싶은 비전공자분들께 준비물은 딱 하나라고 생각됩니다. 파이썬 하나만 하실 줄 아신다면 바로 시작하셔도 무방합니다. 고등학교까지 배웠던 수학에, 파이썬으로 자신이 원하는 코드를 구글링 해서 구현할 수 있다면 충분합니다... 더보기
원격 서버 도커에서 텐서보드 사용하는 법 큰 그림부터 보면 다음과 같다. 1. Docker run 할때 포트 열어주기 2. 서버에서 텐서보드 열기 3. 로컬 컴퓨터에서 ssh로 서버와 포트 연결 4. 로컬 컴퓨터에서 url로 접속 1. 서버에서 Docker run 할 때 포트 열어주기 docker run -it\ -p 6008:6008 \ # 사용할 포트번호. 이전 것과 겹치지 않아야 한다. --runtime=nvidia \ --shm-size 32G \ -e NVIDIA_VISIBLE_DEVICES=0 \ # 사용할 gpu 인덱스 --name=name\ # 컨테이너 이름 -v /data/codes:/mycodes \ # 서버 디렉토리:컨테이너 디렉토리 연결 pytorch:latest\ # 이미지 /bin/bash 2. 서버에서 tensorbo.. 더보기
pdb 기본 사용법 import pdb; pdb.set_trace()를 하면 그다음 줄에서 멈춰서 추적할 수 있다. 즉, pdb.set_trace() 를 집어넣은 곳 까지만 실행이 된 것! 기본적으로 5가지 기능: l, s, n, b, r l: 현재 줄 주위 11개 표시, 서드파티 패키지 디버깅시에 유용 s: 현재 줄 실행 후 다음 줄에서 멈추기 (1줄 실행, 함수 안으로 들어감) n: 현재 함수의 다음 줄에 도달할 때까지 실행 계속하거나 반환 b: 중단점 설정 r: 현재 함수의 리턴 전까지 실행 계속함 -> 프로그램 안의 변수명이랑 겹친다면 pdb 명령어가 우선시된다. -> len() -> for문 처리할 때, 계속 n으로 다음줄로 넘어가지 말고 중단점 설정하여 continue 호출이 더 좋다. pdb.pm(): 마지막 .. 더보기
서버 gpu에서 프로세스 실행 후 남아있는 메모리 정리하기. 서버 gpu에서 프로세스 실행 후 남아있는 메모리 정리하기. 딥러닝을 돌리다보면 서버에 불필요한 메모리들이 남아있을 수 있다. 이로 인해 cuda out of memory가 뜨기도 하며 청소해주는 것이 좋다. 일단 ps aux | grep ( 프로세스 이름) 를 통해 깨끗이 끝내지 못한 프로세스를 찾는다 예를들어 파이썬 파일을 실행시켰었다면 ps aux | grep python을 입력해준다. 그 후 앞에 써져있는 숫자를 sudo kill -9 ( 여기에 ) 넣어서 없애주면된다. 다시 nvidia-smi를 통해 확인하면 메모리가 정상적으로 돌아온 것을 확인할 수 있다. 더보기
pip/apt/conda 차이점 1. Pip는 파이썬 기반 패키지 소프트웨어 다운로드/설치/관리 하는 시스템 2. Apt (advanced packaging tool)의 약자. 둘다 패키지 설치를 도와주나 패키지 저장소의 위치가 다르다. Pip 또는 pip3는 pypi에서 패키지를 다운로드 하고, apt의 경우 우분투 저장소에서 가져오게 된다고 한다. 3. Conda는 아나콘다 기반 패키지만을 관리한다. Sudo(super user do)의 약자로 관리자 권한으로 설치와 비슷한 느낌이라고 생각하자. Root 계정에서는 sudo 권한을 사용할 필요가 없다고 한다. 더보기

반응형