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

2021년 12월 7일 화요일

[RTX3090, Keras]RTX3090으로 Keras 사용하기

* Tensorflow 2.7 설치 

- RTX3090은 CUDA 11버전 이상만 사용 가능, 따라서 Tensorflow 2.5 버전 이상만 사용 가능

- 현재 출시된 Tensorflow 버전은 

https://www.tensorflow.org/install/source_windows#tested_build_configurations 에서 확인

- 2.7버전이 위 페이지에서는 확인 불가능하지만 실제 릴리즈되었으므로 2.7버전으로 설치

- Tensorflow 2.5버전은 Keras와 호환 문제가 있으며 Tensorflow 2.6버전은 업데이트 시기에 따라 Keras 2.6또는 2.7과 호환됨 (중간에 호환성 관련 오류를 수정하면서 버전이 서로 안 맞게 된 듯...)

- Tensorflow 2.7은 Keras 2.7과 호환되므로 Tensorflow 2.7을 설치

pip install tensorflow-gpu==2.7

- 위와 같이 설치하면 Keras 2.7도 함께 설치됨

- 케라스로 작성된 프로그램 실행 결과 아래와 같이 GPU를 사용하는 것으로 확인됨



참고: 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-2-Anaconda-Tensorflow-keras-%EC%84%A4%EC%B9%98


[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

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