캐글 노트북(Kaggle Notebook) 도커에 한글 자연어처리 패키지를 추가한 딥러닝 도커 배포, 설치 및 실행
Jun 7, 2021

캐글 노트북(Kaggle Notebook) 커널로도 유명한 도커인 Kaggle/docker-pythonGPU Docker(gpu.Dockerfile)를 기반으로 구성하였습니다. Kaggle에서 공개한 도커 이미지는 한글 폰트, 자연어처리 패키지, 형태소 분석기 등이 누락되어 있습니다.

docker-kaggle-ko를 만들게 된 계기는 안정적으로 업데이트 되고 있는 캐글 GPU 도커에 기반하여 한글 폰트, 한글 자연어처리 패키지(konlpy), 형태소 분석기(mecab), Timezone 등의 설정을 추가하여 별도의 한글 관련 패키지와 설정을 해줘야 하는 번거로움을 줄이기 위함입니다.

도커 환경

  • OS: Ubuntu18.04
  • GPU: RTX3090 x 2way
  • CUDA11
  • Python (anaconda): 3.7.10

추가 설치된 항목과 Python 패키지

  • apt 패키지 인스톨러 카카오 mirror 서버 추가
  • 나눔고딕 폰트 설치
  • matplotlib 에 나눔고딕 폰트 추가
  • mecab 형태소 분석기 설치 및 파이썬 패키지 설치
  • konlpy: 한국어 정보처리를 위한 파이썬 패키지
  • py-hanspell: 네이버 맞춤법 검사기를 이용한 파이썬용 한글 맞춤법 검사 라이브러리
  • soynlp: 한국어 자연어처리를 위한 파이썬 라이브러리
  • soyspacing: 띄어쓰기 오류 교정 라이브러리
  • KR-WordRank비지도학습 방법으로 한국어 텍스트에서 단어/키워드를 자동으로 추출하는 라이브러리
  • jupyter_notebook_config.py : Jupyter Notebook 설정 파일 추가

설치된 주요 라이브러리

catboost                       0.25.1
cudf                           0.16.0
fastai                         2.2.7
fasttext                       0.9.2
fbprophet                      0.7.1
gensim                         4.0.1
huggingface-hub                0.0.9
hyperopt                       0.2.5
kaggle                         1.5.12
Keras                          2.4.3
Keras-Preprocessing            1.1.2
konlpy                         0.5.2
krwordrank                     1.0.3
lightgbm                       3.2.0
matplotlib                     3.4.2
mecab-python                   0.996-ko-0.9.2
missingno                      0.4.2
mlxtend                        0.18.0
nltk                           3.2.4
numpy                          1.19.5
opencv-python                  4.5.2.52
pandas                         1.1.5
plotly                         4.14.3
plotly-express                 0.4.1
py-hanspell                    1.1
scikit-image                   0.18.1
scikit-learn                   0.24.2
scikit-surprise                1.1.1
scipy                          1.6.2
seaborn                        0.11.1
sentencepiece                  0.1.95
soynlp                         0.0.493
soyspacing                     1.0.17
spacy                          2.3.5
SQLAlchemy                     1.4.3
statsmodels                    0.12.2
tensorboard                    2.4.1
tensorflow                     2.4.1
tensorflow-datasets            3.0.0
Theano                         1.0.5
torch                          1.7.0
torchaudio                     0.7.0a0+ac17b64
torchmetrics                   0.3.2
torchtext                      0.8.0a0+cd6902d
torchvision                    0.8.1
wordcloud                      1.8.1
xgboost                        1.4.2

빠른 설치 및 실행

STEP 1: Docker가 사전에 설치되어 있어야 합니다.

도커의 설치 및 사용법에 대하여 궁금하신 분들은 Docker를 활용하여 딥러닝/머신러닝 환경 구성하기 글을 참고해 주세요.

# step 1: apt-get 업데이트
sudo apt-get update

# step 2: 이전 버젼 제거
sudo apt-get remove docker docker-engine docker.io

# step 3: 도커(Docker) 설치 
sudo apt install docker.io

# step 4: 도커 서비스 시작
sudo systemctl start docker
sudo systemctl enable docker

# step 5: 잘 설치 되어있는지 버젼 체크
docker --version

STEP 2: docker-kaggle-ko 이미지 pull 하여 서버 실행

  • --rm: 도커가 종료될 때 컨테이너 삭제
  • -it: 인터랙티브 TTY 모드 (디폴트로 설정)
  • -d: 도커를 백그라운드로 실행
  • -p: 포트 설정. local 포트:도커 포트
  • -v: local 볼륨 마운트. local 볼륨:도커 볼륨
  • --name: 도커의 별칭(name) 설정

DockerHub에서 이미지 다운로드

DockerHub에 미리 빌드된 이미지를 다운로드 받은 후 실행합니다.

(스트레스가 없다는 것이 장점입니다. 다만, 다운로드 시간은 오래 걸립니다.)

[참고]

jupyter_notebook_config.py 을 기본 값으로 사용하셔도 좋지만, 보안을 위해서 비밀번호 설정은 해주시는 것이 좋습니다.

비밀번호 설정 방법, 방화벽 설정 방법은 Docker를 활용하여 딥러닝/머신러닝 환경 구성하기 글의 STEP 5, 7을 참고해 주세요.

jupyter notebook 서버 실행, port는 8888번 포트 사용

docker run --runtime nvidia --rm -it -p 8888:8888 teddylee777/docker-kaggle-ko:latest

jupyter notebook 서버 실행, 로컬 volume 마운트

docker run --runtime nvidia --rm -it -p 8888:8888 -v /data/jupyter_data:/home/jupyter teddylee777/docker-kaggle-ko:latest

도커를 background에서 실행

docker run --runtime nvidia --rm -itd -p 8888:8888 teddylee777/docker-kaggle-ko:latest

bash shell 진입

docker run --runtime nvidia --rm -it -p 8888:8888 teddylee777/docker-kaggle-ko:latest /bin/bash

현재 컨테이너 접속 (container ID 입력)

docker exec -it c456623003b1 /bin/bash

빌드

DockerHub에서 다운로드 받은 도커 이미지로 실행시 빌드 과정은 생략 가능합니다.

DockerHub 다운로드

DockerHub에 미리 만들어 놓은 이미지를 다운로드 받습니다.

스트레스가 없다는 것이 장점입니다. 다운로드 시간은 오래 걸립니다.

docker run --runtime nvidia --rm -it -p 8888:8888 teddylee777/docker-kaggle-ko:latest

Dockerfile을 수정하여 직접 빌드

커스텀이 가능합니다. 필요한 추가 패키지가 있다면 추가 구성이 가능합니다.

추가 패키지 설치를 위해서는 Dockerfile을 수정하시면 됩니다.

참고

  • DockerHub 유저 아이디: teddylee777
  • 도커명: docker-kaggle-ko
  • 태그: latest
git clone https://github.com/teddylee777/docker-kaggle-ko.git
cd docker-kaggle-ko
docker build -t teddylee777/docker-kaggle-ko:latest .

도커 실행

  • --rm: 도커가 종료될 때 컨테이너 삭제
  • -it: 인터랙티브 TTY 모드 (디폴트로 설정)
  • -d: 도커를 백그라운드로 실행
  • -p: 포트 설정. local 포트:도커 포트
  • -v: local 볼륨 마운트. local 볼륨:도커 볼륨
  • --name: 도커의 별칭(name) 설정
docker run --runtime nvidia --rm -itd -p 8888:8888 -v /data/jupyter_data:/home/jupyter --name kaggle-ko teddylee777/docker-kaggle-ko

.bashrc에 단축 커멘드 지정

~/.bashrc의 파일에 아래 커멘드를 추가하여 단축키로 Docker 실행

kjupyter{
    docker run --runtime nvidia --rm -itd -p 8888:8888 -v /data/jupyter_data:/home/jupyter --name kaggle-ko teddylee777/docker-kaggle-ko
}

터미널에 다음과 같이 입력하여 도커 실행

kjupyter

설치 완료 후 테스트

test.ipynb 파일을 실행하여 잘 설치가 되었는지 확인할 수 있습니다.

NVIDIA

!nvidia-smi

TensorFlow

import tensorflow as tf

print(f'tf.__version__: {tf.__version__}')

gpus = tf.config.experimental.list_physical_devices('GPU')
print(gpus)

PyTorch

import torch

print(f'torch.__version__: {torch.__version__}')

print(f'GPU 사용여부: {torch.cuda.is_available()}')
gpu_count = torch.cuda.device_count()
print(f'GPU count: {gpu_count}')
if gpu_count > 0:
    print(f'GPU name: {torch.cuda.get_device_name(0)}')

한글 자연어처리 패키지

from konlpy.tag import Okt, Kkma, Hannanum

sample_sentence = '아버지가방에들어가신다.'

okt = Okt()
print(f'okt: {okt.pos(sample_sentence)}')

kkma = Kkma()
print(f'kkma: {okt.pos(sample_sentence)}')

hannanum = Hannanum()
print(f'hannanum: {hannanum.pos(sample_sentence)}')

Mecab 설치 확인

from konlpy.tag import Mecab

sample_sentence = '아버지가방에들어가신다.'

mecab = Mecab()
print(f'mecab: {mecab.pos(sample_sentence)}')

머신러닝 패키지

import sklearn
import lightgbm
import xgboost

print(f'lightgbm: {lightgbm.__version__}\nxgboost: {xgboost.__version__}\nsklearn: {sklearn.__version__}')


관련 글 더보기

- Kaggle(캐글) API 사용법 - 데이터셋 다운로드와 제출을 손쉽게

- Kaggle(캐글) 타이타닉 생존자 예측 81% 이상 달성하기

- Kaggle에서 활용하는 Notebook을 활용하기 (캐글 제출이 훨씬 쉬워졌습니다!!)

데이터 분석, 머신러닝, 딥러닝의 대중화를 꿈 꿉니다.