개요
업무를 하다가 Retinaface
프로젝트를 다뤄 볼 일이 있어서 해당 프로젝트의 개발 프레임워크인 mxnet
을 셋팅하였다. 다른 여타 딥러닝 프레임워크 처럼 설치는 어렵지 않았다. 목적은 GPU 하드웨어를 사용하는 mxnet
최신버전을 설치하는 것이다.
설치 환경은 다음과 같았다.
- Ubuntu 18.04
- python 3.8.15
- conda 환경 사용
CUDA & cuDNN
- NVIDIA Driver 는 이미 설치되어있다고 가정한다.
- CUDA 11.X 버전 설치: CUDA Archive Link
- 프로덕션 용으로 설치 할 때. 즉, 환경이 특정 버전만 존재하면 될 때는 데비안(deb) 파일로 런타임만 설치하는 것이 빠를 수도 있다. 하지만 본인은 개발 용으로 설치하는 것이기에 범용 리눅스용인
.run
파일을 통해 설치한다. 테스트 버전은 11.6 버전으로 설치하였다.$ wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run $ sudo sh cuda_11.6.2_510.47.03_linux.run
CUDA
설치는 공식 설치문서들이 잘되어 있기에 자세한 설치내용을 언급하진 않는다.
- 프로덕션 용으로 설치 할 때. 즉, 환경이 특정 버전만 존재하면 될 때는 데비안(deb) 파일로 런타임만 설치하는 것이 빠를 수도 있다. 하지만 본인은 개발 용으로 설치하는 것이기에 범용 리눅스용인
- cuDNN 8.x 설치: cuDNN Archive Link
- 테스트 버전은 8.4.1 버전을
Linux x86
아키텍쳐에 맞게tar
파일로 설치하였다. 이 또한 개발용 데비안 파일로 설치하는 것은 지양하였다. 앞서cuDNN
을 위한 사전 설치 패키지가 필요할 수 있다.$ sudo apt install zlib1g
cuDNN
설치 또한 공식 설치 문서를 참고하여 설치하자.
- 테스트 버전은 8.4.1 버전을
NCCL
NCCL
은 NVIDIA Collective Communications Library 의 약자로 멀티 GPU 환경 및 멀티 노드 환경에서 NVIDIA GPU가 최적화된 동작을 할 수 있게해주는 라이브러리. mxnet
프레임워크는 사용 시 해당 라이브러리를 필요로 한다. NCCL 설치링크
- CUDA 11.x를 사용하므로
Download NCCL 2.17.1, for CUDA 11.0, February 28th, 2023
클릭- O/S agnostic local installer 를 통해 압축된 파일을 받음:
nccl_2.17.1-1+cuda11.0_x86_64.txz
- 다운로드 파일을 압축해제한 디렉토리를 적당히
/usr/local
같은 경로에 넣고 nccl의 lib 디렉토리 경로를LD_LIBRARY_PATH
에 추가한다. 아래의 예시는 압축해제한 디렉토리 이름을nccl_2.17.1-1+cuda11.0
로 간결하게 바꿔주었다.# Add LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/nccl_2.17.1-1+cuda11.0/lib:$LD_LIBRARY_PATH
- O/S agnostic local installer 를 통해 압축된 파일을 받음:
MXNET INSTALL
GPU 하드웨어용 mxnet
python 휠 파일은 mxnet-cuXXX
포맷의 이름으로 제공하고 있다. 예를 들면 CUDA 11.4
에 맞게 빌드 된 mxnet
휠 파일은 mxnet-cu114
이다.
- 23년 4월 기준 CUDA 11.0, 11.2 버전에 대해선 1.8.x,1.9.x, 2.0.x` 버전 제공한다.
- 23년 4월 기준 CUDA 11.1, 11.3 ~ 11.7 버전에 대해선 1.0.0, `1.9.1 버전 제공한다.
- 본인의 테스트 환경은 CUDA 11.6 버전을 사용했기에 mxnet-cu116에 대해 1.9.1 버전 설치
# create env
$ conda create --name mxnet python==3.8.15
$ conda activate mxnet
$ pip install -U pip
$ pip install mxnet-cu116=1.9.1
설치확인
mxnet
이 제대로 설치되었는지, GPU를 제대로 인식하는지 다음과 같이 확인할 수 있다. mxnet
을 사용하는 환경에서 python 콘솔을 통해 확인한다.
import mxnet as mx
mx.__version__
>>> 1.9.1
mx.gpu()
>>> gpu(0)
mx.context.num_gpus()
>>> 1
MXNET 네트워크 모델 구조
하나의 네트워크 모델은 심볼(symbol)과 파라미터(params)로 나눠진다. 심볼은 우리가 일반적으로 이야기하는 네트워크 구조를 담고 있는 아키텍쳐, 파라미터는 네트워크의 가중치로 생각하면 된다.
심볼의 파일 포맷은 {네트워크이름}-symbol.json
과 같다. 또한 파라미터의 파일 포맷은 {네트워크이름}-{epoch:%04d}.params.
과 같다. 예를 들어 네트워크 이름이 resnet50
이고 학습 된 에폭이 10
인 모델의 심볼과 파라미터는 resnet50-symbol.json
과 resnet50-0010.params
로 볼 수 있다.
모델 Load
mxnet 상에서 모델을 로드하기 위해 위 내용에서 언급한 네트워크 이름
과 에폭
이 필요하다. 네트워크 모델 로드는 다음 API 를 참고한다. mxnet.model.load_checkpoint
# mxnet model load
# network name - resnet50, epoch = 10
sym, arg_params, aux_params = mx.model.load_checkpoint('resnet50', 10)
댓글남기기