머신러닝과 딥러닝 연구를 위해서는 안정적이고 일관된 개발 환경이 필수적입니다. 특히 TensorFlow와 PyTorch와 같은 주요 딥러닝 프레임워크를 한 번에 사용할 수 있는 JupyterLab 환경을 구축하면 생산성을 크게 향상시킬 수 있습니다. 이 블로그에서는 Docker-Compose를 활용하여 TensorFlow와 PyTorch가 사전 설치된 JupyterLab을 실행하는 방법을 단계별로 안내합니다. 이를 통해 복잡한 환경 설정 없이도 손쉽게 머신러닝 실험을 시작할 수 있습니다.
사전 준비 사항:
- Docker 및 Docker-Compose가 설치된 환경
전체 내용:
- NVIDIA 드라이버 설치:
- apt를 이용해서 자신의 GPU에 맞는 driver 설치.
- Docker Compose로 설치:
- Localhost에 Docker를 이용하여 설치.
* NVIDIA 드라이버 설치
* 드라이버 리스트 확인후 필요한 버젼에 드라이버 설치하면 됩니다. 만약 GPU가 없다면 이 과정은 생략해도 됩니다. GPU가 없으면 jupyterlab에 설치된 tensorflow와 pytorch가 CPU로 실행이 됩니다.
# check driver list
user:~$ ubuntu-drivers devices
# install driver
user:~$ sudo apt install -y nvidia-driver-550-server
* 추가로 Ubuntu의 최신 버전에 맞는 새로운 NVIDIA 드라이버를 유지 관리하는 매우 인기 있는 “Graphics Drivers” 팀 PPA가 있습니다. 이것은 비공식적이며(Ubuntu 팀이나 NVIDIA에서 유지 관리하지 않음) 잘 알려져 있습니다. 아래 명령으로 PPA를 추가하면 좀더 최신에 드라이버들을 설치 할 수 있습니다. 하지만 이 PPA는 Ubuntu에서 공식적으로 지원하지 않습니다. 프로덕션 머신에서는 사용하지 않는 것이 좋습니다.
# Add ppa
user:~$ sudo add-apt-repository ppa:graphics-drivers/ppa
# Update list
user:~$ sudo apt update
* Tensorflow Warning 해결 - NUMA 오류 발생시
* 추가적으로 필요한 라이브러리 설치. 이미 설치되어 있는 경우는 설치할 필요가 없습니다.
# Check if lspci is installed.
user:~$ which lspci
# Install pciutils (optional)
user:~$ sudo apt install pciutils
* “NUMA node read from SysFS had negative value(-1)” 오류 발생할 경우 아래와 같이 NVIDIA GPU의 NUMA 노드 파일 경로 설정을 위한 PCI Device 번호 확인.
# Check nvidia device
user:~$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation Device 2684 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 22ba (rev a1)
* 위 예제에서 NVIDIA GPU의 NUMA 노드 파일 경로가 “01:00.0″인것을 확인 했습니다. 오류에 내용은 “-1″로 누마노드가 특정되지 않아서 생기는 것이므로 0으로 설정 합니다. 재부팅시 다시 설정해 주어야 합니다.
# Set NUMA (/sys/bus/pci/devices/0000:{PCI Device}/numa_node)
user:~$ echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node
* 제부팅 후에도 설정이 지속될 수 있도록 crontab에 booting시에만 한번 실행하도록 등록 합니다.
# Add this command to the end of the crontab
user:~$ suco crontab -e
@reboot (echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node)
* Local에 Docker Compose 이용
* 예제에서 jupyter notebook 파일을 저장할 로컬경로로 “/data/notebook”, 학습용 대용량 데이터 저장 경로로 “/data/notebook_data”로 지정 했습니다.
user:~$ sudo mkdir -p /data/notebook
user:~$ sudo mkdir -p /data/notebook_data
docker-compose.yml
services:
# define jupyterlab for machine learning
gupyterlab-tf-torch:
image: nockchun/gupyterlab-tf-torch:2.17-2.5
restart: unless-stopped
container_name: gupyterlab
volumes:
- /data/notebook:/notebook
- /data/notebook_data:/data
ports:
- "8888:8888" # jupyterlab port
- "6006:6006" # tensorboard port
command:
jupyter lab --notebook-dir=/notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token="rsnet"
실행 & 제거
# start container
user:~$ docker compose up gupyterlab-tf-torch -d
# stop container
user:~$ docker container stop
# remove container
user:~$ docker container rm