Machine Learning 개발환경 – Jupyter Lab

머신러닝과 딥러닝 연구를 위해서는 안정적이고 일관된 개발 환경이 필수적입니다. 특히 TensorFlowPyTorch와 같은 주요 딥러닝 프레임워크를 한 번에 사용할 수 있는 JupyterLab 환경을 구축하면 생산성을 크게 향상시킬 수 있습니다. 이 블로그에서는 Docker-Compose를 활용하여 TensorFlow와 PyTorch가 사전 설치된 JupyterLab을 실행하는 방법을 단계별로 안내합니다. 이를 통해 복잡한 환경 설정 없이도 손쉽게 머신러닝 실험을 시작할 수 있습니다.

사전 준비 사항:

  • DockerDocker-Compose가 설치된 환경

전체 내용:

  1. NVIDIA 드라이버 설치:
    • apt를 이용해서 자신의 GPU에 맞는 driver 설치.
  2. 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 <container hash value>

# remove container
user:~$ docker container rm <container hash value>

				
			

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다