레이블이 Machine_learning인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Machine_learning인 게시물을 표시합니다. 모든 게시물 표시

2023년 1월 5일 목요일

[pytorch]CUDA11.2, CuDNN8.1.1, Ubuntu 20.04LTS에 pytorch 설치

 * CUDA11.2 버전에 적합한 pytorch를 설치해야 GPU 사용 가능

    - https://pytorch.org/get-started/locally/

    - 접속해서 아래와 같이 선택

    - 현재 서버의 CUDA 버전은 (nvcc -V 로 확인) 11.2 이지만 11.2에 적합한 pytorch는 몇몇 블로그를 확인해보니 아래와 같이 설치하라고 되어있음

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/torch_stable.html

    - 하지만 위와 같이 해보니 pytorch를 불러오지 못함

    - 따라서 아래와 같이 CUDA 11.6 버전용 pytorch를 설치하고 기도메타 수행

1
 conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia
     - python 실행 후 cuda가 연결되었는지 확인, True 로 나옴




또는

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/torch_stable.html
와 같이 11.0에 맞는 pytorch 버전을 설치해도 됨 (현재 상태)
 - PIL 설치, numpy 버전 업을 추가로 수행해야 할 수도 있음


2021년 12월 7일 화요일

[RTX3090, Ubuntu]Nvidia 드라이버, cuda-toolkit, cuDNN 설치

 * Nvidia driver 설치
ubuntu-drivers devices
로 설치 가능한 driver 버전 확인
 
sudo apt install nvidia-driver-460
460버전 설치


* cuda-toolkit 설치

- RTX 3090은 CUDA 11 이상에서만 동작

- 12/8 현재 11.5 까지 출시되었지만 안정성을 고려하여 11.2.1을 설치함

(https://developer.nvidia.com/cuda-toolkit-archive)













- 11.2.1을 찾아 들어가서 환경에 맞게 선택하면 wget으로 다운 받는 방법과 설치 방법이 나와있음


wget https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux.run

sudo sh cuda_11.2.1_460.32.03_linux.run

- Driver 설치 할거냐고 나오면 x 제거해주면 됨 (위에서 이미 설치함)


* cuDNN 설치

https://developer.nvidia.com/rdp/cudnn-archive#a-collapse811-111

에 들어가서 다운 가능한 cuDNN 버전 확인 (11.2에 맞는 8.1.1으로 다운받음)


- 다운 받은 tar 파일을 압축 해제하고 
tar -xvf cudnn-11.2-linux-x64-v8.1.1.33.tgz

cuda 디렉토리로 파일 이동 후 사용 권한 변경하기
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

cudnn 버전 확인 (CUDNN_MAJOR 8 MINOR 1 출력 되어야 함)
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2


* 환경변수 설정

.bashrc에 아래 환경변수 추가

export PATH=/usr/local/cuda-11.1/bin
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH

참고: https://velog.io/@skyfishbae/RTX3090-2%EB%8C%80-Ubuntu-18.04-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-1-Nvidia-driver-Cuda-cuDNN-%EC%84%A4%EC%B9%98

2020년 10월 7일 수요일

[Machine learning] model.zero_grad() 와 optimizer.zero_grad()

 pytorch를 사용할 때 매 mini-batch 학습마다 model.zero_grad()를 해야한다.

pytorch는 한 mini-batch로 모델을 업데이트 한 후 모델 업데이트에 사용한 gradient를 버리는 것이 아니라 다음 mini-batch 계산에 누적해서 사용한다. 

학습 시 이전 mini-batch를 이용하여 계산한 gradient를 다음 mini-batch에서 계산한 gradient에 누적하면 안되기 때문에 다음 mini-batch를 이용하여 학습을 수행하기 전 이전 mini-batch를 이용하여 계산된 gradient를 초기화시켜주는 단계를 거쳐야한다. 따라서 매 mini-batch 학습마다 model.zero_grad()를 불러와야한다. 

하지만 pytorch 예제들을 보면 어떤 경우에는 model.zero_grad()를 사용하고 어떤 경우에는 optimizer.zero_grad()를 사용한다. 

검색해보니 비슷한 질문에

"model.zero_grad() and optimizer.zero_grad() are the same IF all your model parameters are in that optimizer. I found it is safer to call model.zero_grad() to make sure all grads are zero, e.g. if you have two or more optimizers for one model.”


라는 댓글이 있었다.

model.zero_grad()와 optimizer.zero_grad() 는 같으므로 쓰는 사람에 따라 선호하는 방식을 사용하는 듯 하다. 


출처: https://discuss.pytorch.org/t/model-zero-grad-or-optimizer-zero-grad/28426/5

2020년 10월 6일 화요일

[Machine learning] GAN 종류

 GAN을 이용하여 연구를 수행하기 위해 주목할만한 GAN 종류에 대해 정리 함.

    4. CycleGAN: 
     특정 스타일로 이미지를 변환시킴 


    5. 기타

2019년 7월 22일 월요일

[Keras]OOM (Overflow Of Memory) 문제, Keras model 메모리 사용량 계산

* Keras 및 GPU 를 활용하여 머신러닝을 할 때 GPU의 메모리 크기 한계로 인해 학습을 제대로 할 수 없는 문제가 발생함

* Resource exhausted: OOM when allocating tensor with shape[ ]
과 같은 에러메시지가 나오면서 프로그램이 돌지 않음

* 우선은 Batch size를 줄여서 학습을 시키면 메모리 문제가 어느정도 해결 됨

* 하지만 Resnet50, 101 등과 같이 인공지능 신경망이 깊어지면 model의 크기가 커지게 되어 batch size를 극단적으로 줄여야 하는 문제가 발생함

* Keras의 model 생성을 위한 메모리 필요량 계산 방법

한 layer에 필요한 메모리 양: (image_width x image_height x feature_maps) * batch_size
이므로 모든 layer에 대해 위와 같이 계산해주고 더해주면 됨

*example (모델의 일부분만 가져옴)


input_1: 384*200*1 = 76800
batch_normalization_1: 384*200*1 = 76800
activation_1: 384*200*1 = 76800 (activation도 계산을 해줘야하는지는 확실하지 않음)
conv2d_1: 384*200*16 = 1228800

다 합치면 76800 + 76800 + 76800 + 1228800 = 1459200
한 파라미터당 4 byte 이므로
1459200 * 4 (byte) = 5836800 (byte)

batch_size가 64일 때: 5836800 (byte) * 64 (batch_size) = 373555200 (byte) ≒ 356.25 MB
forward 및 backward 계산을 해주므로 총 메모리 양: 356.25 MB * 2 = 712.5 MB

참조: http://cs231n.github.io/convolutional-networks/#case


2018년 12월 17일 월요일

[Keras] model.save 에서 class로 만들어진 모델 load 오류

model 이 다른 class에서 만들어졌을 경우

model.save("modelname.h5")로 저장하면 로드가 안됨 (class 이름을 찾을 수 없다고 나옴)

model.save_weights("modelname.h5")로 저장

불러올 때는

model.load_weights("modelname.h5")로 불러옴

이 때 model은 기존에 저장할 때 사용했던 weight의 구조와 동일한 구조를 가지고 있어야 함

(save 할때 model이 layer 3층이었다면 동일한 크기의 weight를 가진 3층짜리 model을 만들어놓고 load_weights 해야 함)

 (저장 할 model 구조)

(load_weights 하는 예시)

참조: https://stackoverflow.com/questions/51806852/cant-save-custom-subclassed-model

2018년 12월 13일 목요일

[Keras] 학습 모델 저장하고 불러오기

참조: https://tykimos.github.io/2017/06/10/Model_Save_Load/

[Machine_learning] Input 자료를 정규화 (normalize) 해줘야 하는 이유


"학습을 수행하기 전에 값의 범위를 normalization 하는 것은 중요하다. 그 이유는 아래와 같다.

입력 변수가 MLP에서와 같이 선형 적으로 결합된다면 적어도 이론 상으로는 입력을 표준화하는 것이 거의 필요하지 않습니다.
그 이유는 해당 weightbais를 변경하여 입력 벡터를 재조정하면 이전과 완전히 똑같은 결과를 남길 수 있기 때문입니다.
그러나 입력을 Standardization하면 학습을 더 빨리하고 지역 최적의 상태에 빠지게 될 가능성을 줄이는 다양한 실용적인 이유가 있습니다.
또한, 표준화 된 입력을 통해 Gradient Descent Bayesian estimation을 보다 편리하게 수행 할 수 있습니다.


Unnormalized된 상태에서는 Learning Rate을 매우 작게 설정해야 정상적을 학습이 된다.
이유는 cost 그래프가 elongated하기 때문이다. 따라서 elongated contour의 모습을 가진다.
아래와 같이 InputRange가 서로 다르다면 Gradient Descent Algorithm을 적용하는것이 매우 까다로워지는 상황이 발생 한다.

하지만 normalization을 적용하면 좀 더 spherical contour를 가지게 된다.
이렇게 하면 좀 더 Gradient Descent Algorithm으로 쉽게 그리고 빠르게 최적화 지점을 찾게 된다."

참조: http://goodtogreate.tistory.com/entry/Neural-Network-%EC%A0%81%EC%9A%A9-%EC%A0%84%EC%97%90-Input-data%EB%A5%BC-Normalize-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

2018년 12월 11일 화요일

[Ubuntu] Nvidia GPU 드라이버 설치

bios 설정에서 secure boot를 disable로 바꿔주고 설치를 진행해야 한다

* nouveau kernel driver 차단: https://eee2.tistory.com/10

sudo vi /etc/modprobe.d/blacklist.conf

마지막줄에 아래 값 추가

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

*NVIDIA 드라이버 설치: https://hiseon.me/2018/02/17/install_nvidia_driver/

*CUDA 설치: https://hiseon.me/2018/03/11/cuda-install/


* 설치 후 테스트:

/usr/local/cuda-10.0/samples 로 이동해서

sudo make 실행

cd 1_Utilities/deviceQuery
./deviceQuery 실행

result=PASS 결과 출력되면 테스트 끝.


[Python] Anaconda 가상 환경 만들기

Anaconda의 장점 중 하나는 가상 환경을 만들어 사용할 수 있다는 점임

conda create -n py36 python=3.6 anaconda

- py36 이라는 이름의 가상 환경 생성
- python3.6 버전을 사용
- 제일 마지막 anaconda는 anaconda의 패키지들을 모두 포함시켜서 py36 가상 환경을 생성하겠다는 의미 (anaconda를 생략하고 나중에 필요한 패키지들만 직접 설치해줘도 됨)


가상 환경 실행: conda activate py36 또는 source activate py36
가상 환경 종료: conda deactivate
가상 환경 리스트 확인: conda info --envs

가상 환경 삭제conda remove --name py36 --all

[Ubuntu] Anaconda 설치

아나콘다 다운로드:
https://www.anaconda.com/download/

sh Anaconda3-5.3.1-Linux-x86_64.sh

실행 후 yes 또는 no를 적절히 입력.

설치 위치를 물어보면 원하는 위치를 입력
(Z8의 경우 /home/jhg1026/lib 에 설치)

.bahsrc에 아나콘다 설정을 자동으로 입력할지 선택해야 함 (yes)

VSCode를 설치 여부 물어봄 (yes)