300x250

도커의 컨테이너 환경을 로컬 환경처럼 사용할 수 있는 작업 환경을 구축하는 방법을 기록하고자 한다.

 

 

목차

     

     

     

    1. CUDA 버전 찾기

     

    CUDA(Computed Unified Device Architecture)란, 그래픽 용도로만 사용하던 GPU를 병렬 계산에 사용할 수 있도록 해주는 소프트웨어이다. C, C++언어를 기반으로 짜여있고, tensorflow, pytorch 등의 프레임워크를 설치하기 이전에 CUDA를 설치할 필요가 있다. 연구자들이 쉽게 딥러닝에 사용할 수 있도록 오픈하였다.

     

    그리고 cuDNN이란, CUDA Deep Neural Network Library의 약자로, forward/backward convolution 연산, pooling 연산, normalization 연산, activation 등 딥러닝 연산을 진행하기 위한 소프트웨어이다.

     

    따라서 사용자는 nvidia driver, CUDA, CUDNN만 설치하면 GPU를 활용하여 딥러닝을 구현할 수 있다.

     

    먼저, 'nvidia-smi' 명령어를 활용하여 해당 gpu에 맞는 nvidia driver를 설치하고, 사용 가능한 CUDA 버전을 찾아보자. (Ubuntu 기준)

     

    nvidia-smi

     

    nvidia-smi

     

    위 명령어는 대표적으로 다음의 정보를 담고 있다. (훨씬 많은 정보를 담고 있지만, 여기선 CUDA 버전에 집중하자.)

    • Driver Version: GPU에 맞는 nvidia driver의 버전 (설치된 버전)
    • CUDA Version: nvidia driver에 맞는 (추천하는) CUDA 버전
      • 설치된 CUDA 버전이 아니라, '추천하는' CUDA 버전임에 유의하자.

     

    Nvidia driver 별 지원 가능한 CUDA 버전은 다음 링크에서 확인할 수 있다.

    https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

     

    CUDA Version

     

    위 예시처럼 만약 nvidia-smi 명령어에서 driver 버전이 '430.34'라면, CUDA 버전은 10.1 이하 버전만 설치가 가능할 것이다. (그래서 nvidia-smi 명령어 결과에서 추천 CUDA 버전을 10.1로 제안한 것이다!)

     

    또한, CUDA 버전에 따라 사용 가능한 PyTorch 버전이 정해져 있으므로, 다음을 참고하여 버전을 맞춰주어야 한다.

    https://pytorch.org/get-started/previous-versions/

     

    PyTorch

    An open source machine learning framework that accelerates the path from research prototyping to production deployment.

    pytorch.org

     

    그리고 다음 Docker Hub에서 CUDA 버전을 찾는다.

    https://hub.docker.com/r/nvidia/cuda/tags

     

    Docker Hub

     

    hub.docker.com

     

    CUDA 이미지파일명은 다음의 의미를 갖는다. 예를 들어, '11.3.0-cudnn8-devel-ubuntu18.04'라는 이미지 파일이 있다면,

    • 11.3.0 : CUDA의 버전으로, 사용하려는 GPU, nvidia driver, pytorch 버전 등에 따라 다르다. (이전 예시에서와는 다른 GPU를 사용해서 11.3 버전을 예시로 들 것이다.)
    • cudnn8 : cudnn 버전
    • devel : CUDA 설치 level (이미지의 사이즈 → base < runtime < devel)
      • base가 가장 가볍지만, nvcc 명령어가 필요한 고급 기능은 devel에서만 가능하다.
    • ubuntu18.04 : OS 버전

     

     

     

     

     

    2. Dockerfile 만들기

     

    다음으로, 도커 파일을 만들어보자.

    /home/sangjune/dev/mydocker 경로를 예시로 들 것이다.

     

    다음 명령어로 vim을 사용하여 파일을 만든다. (nano를 사용해도 된다.) vim이란, 터미널을 통해 텍스트를 편집할 수 있는 에디터의 개념이다. 맥의 경우 터미널에서 간단히 다음과 같이 파일을 생성할 수 있다.

     

    먼저 vim 관련 명령어를 간단히 알아보자.

     

    i를 눌러 입력모드로 전환할 수 있으며, esc를 누른 후 명령모드로 전환 가능하다.

    명령모드에서 명령어는 다음과 같다.

     

    # 삽입 모드(i)에서
    :w # 저장
    :q # 종료
    :q! # 강제종료
    :wq # 저장 및 종료
    :wq! # 저장 및 종료
    
    # visual 모드(v)에서
    v # 블록 지정
    V # 줄 단위 블록
    d # 블록 지정 된 부분 지우기
    y # 블록 복사
    yy 또는 Y # 커서가 위치한 한 줄 복사
    p # 현재 커서에 붙여넣기
    
    # 명령 모드(esc)에서
    gg 또는 1G # 문서의 맨 처음으로 이동
    G # 문서의 맨 마지막 행으로 이동
    
    h # 왼쪽으로 이동
    l # 오른쪽으로 이동
    j # 아래행으로 이동
    k # 위 행으로 이동
    
    w 또는 W # 다음 단어의 첫 글자로 이동
    b 또는 B # 이전 단어의 첫 글자로 이동
    e 또는 E # 단어의 마지막 글자로 이동
    
    ^ # 그행의 첫 글자로 이동
    $ # 그 행의 마지막 글자로 이동
    
    { # 이전 문단으로 이동
    } # 다음 문단으로 이동
    
    H # 커서를 화면 맨 위로 이동
    M # 커서를 화면 중안으로 이동
    L # 커서를 화면 최하단으로 이동

     

     

    Dockerfile이라는 파일을 만들기 위해, 터미널에 다음과 같이 입력한다.

     

    vim Dockerfile

     

    Dockerfile 생성

     

    이어서 아래의 스크립트를 입력한다.

    다운받은 이미지 파일에 따라 'nvidia/cuda:11.3.0-cudnn8-devel-ubuntu18.04' 부분만 수정해주면 되며, 스크립트를 통해 git, g++, ffmpeg 등의 주요 프로그램과 miniconda, openssh-server를 설치할 것이다.

     

    FROM nvidia/cuda:11.3.0-cudnn8-devel-ubuntu18.04
    
    # software installation
    RUN apt update
    
    # basic
    RUN apt install -y --no-install-recommends \
        nano tmux wget iputils-ping git g++ net-tools curl zip unzip ffmpeg
    
    # miniconda (https://github.com/ContinuumIO/docker-images/blob/master/miniconda3/debian/Dockerfile)
    RUN apt install -y --no-install-recommends \
        bzip2 \
        ca-certificates \
        libglib2.0-0 \
        libsm6 \
        libxext6 \
        libxrender1 \
        mercurial \
        openssh-client \
        procps \
        subversion
    ENV PATH /opt/conda/bin:$PATH
    ARG CONDA_VERSION=py39_4.10.3
    RUN set -x && \
        UNAME_M="$(uname -m)" && \
        if [ "${UNAME_M}" = "x86_64" ]; then \
        MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-x86_64.sh"; \
        SHA256SUM="1ea2f885b4dbc3098662845560bc64271eb17085387a70c2ba3f29fff6f8d52f"; \
        elif [ "${UNAME_M}" = "s390x" ]; then \
        MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-s390x.sh"; \
        SHA256SUM="1faed9abecf4a4ddd4e0d8891fc2cdaa3394c51e877af14ad6b9d4aadb4e90d8"; \
        elif [ "${UNAME_M}" = "aarch64" ]; then \
        MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-aarch64.sh"; \
        SHA256SUM="4879820a10718743f945d88ef142c3a4b30dfc8e448d1ca08e019586374b773f"; \
        elif [ "${UNAME_M}" = "ppc64le" ]; then \
        MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-ppc64le.sh"; \
        SHA256SUM="fa92ee4773611f58ed9333f977d32bbb64769292f605d518732183be1f3321fa"; \
        fi && \
        wget "${MINICONDA_URL}" -O miniconda.sh -q && \
        echo "${SHA256SUM} miniconda.sh" > shasum && \
        if [ "${CONDA_VERSION}" != "latest" ]; then sha256sum --check --status shasum; fi && \
        mkdir -p /opt && \
        sh miniconda.sh -b -p /opt/conda && \
        rm miniconda.sh shasum && \
        ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
        echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
        echo "conda activate base" >> ~/.bashrc && \
        find /opt/conda/ -follow -type f -name '*.a' -delete && \
        find /opt/conda/ -follow -type f -name '*.js.map' -delete && \
        /opt/conda/bin/conda clean -afy
    
    # @option: SSH server
    RUN apt install -y --no-install-recommends openssh-server
    
    # limit password quality
    RUN apt install -y libpam-pwquality
    
    RUN echo 'PASS_MIN_LEN 8' >> /etc/login.defs
    RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
    
    RUN apt clean
    RUN rm -rf /var/lib/apt/lists/*
    
    RUN echo 'alias ca="conda activate"' >> /root/.bashrc
    RUN echo 'conda activate' >> /root/.bashrc
    
    WORKDIR /root/dev
    
    # entry script
    COPY entry.sh /entry.sh
    RUN chmod +x /entry.sh
    ENTRYPOINT [ "/entry.sh" ]

     

    저장한 후 같은 방법으로 mydocker 디렉토리 내에 'entry.sh' 파일을 생성하여 다음과 같이 작성한다.

    아래 스크립트는 컨테이너가 실행될 때 작동하며, sleep infinity 부분은 컨테이너가 자동으로 종료되는 것을 방지해준다.

     

    #!/bin/bash
    
    # service ssh start
    
    # If you have any other scripts to run everytime the conatiner started then you can attach the script here.
    # ...
    
    sleep infinity

     

    SSH를 통해 container에 직접 접속하기 위해서 service ssh start를 입력해준다. 필자는 보안때문에 위와 같이 주석처리하였다.

    자세한 정보는 다음 github을 참조하자.

     

     

     

     

     

    3. Build Docker Image

     

    먼저, 이미지 파일을 pull해야 한다.

     

    docker pull [image_file]

     

    보통 태그로 검색을 하게 되면 친절하게 pull command를 가르쳐준다. 그것을 그대로 복사해서 터미널에서 실행해주면 된다.

    결과는 'docker images'라는 명령어를 통해 pull된 이미지 파일을 확인해볼 수 있다.

     

    도커 이미지를 빌드하기 위해 다음 명령어를 실행한다.

     

    cd /home/user/dev/mydocker
    
    # docker build 명령어 -> docker build [옵션] [Dockerfile 경로]
    docker build -t [이름]/[image 파일명]:[image 파일 버전] .

    점(.)을 빼먹지 않도록 유의하자! 점은 모든 파일을 빌드하겠다는 의미를 갖는다.

     

    예를 들어 다음과 같이 입력하면 된다.

     

    example

     

    docker build 명령어에서 -t 옵션은 저장소 이름, 이미지 이름, 태그를 설정해준다. 따라서 [저장소 이름]/[이미지 이름]:[태그] 형식에 맞추어 작성해준다.

     

     

     

     

     

    4. Docker Image 실행 (Container 생성)

     

    내 경우 연구실의 서버를 사용한다. Container 내부에는 git, g++, python, conda 등의 프로그램만 저장되고, 데이터셋이나 소스코드 등 용량이 큰 파일들은 컨테이너를 가볍게 유지하기 위해 서버 공간에 저장한다.

    서버에 저장된 소스코드와 데이터셋에는 'docker run'의 '-v' 옵션을 통해 접근할 수 있다.

     

     

     

     

    1) Docker Run 명령어

     

    docker run 명령어에 대해 간략히 정리해보자.

    docker run은 이미지 파일로 컨테이너를 생성하는 명령어이며, 다음 형식을 갖는다.

     

    docker run [옵션] [이미지] [명령] [매개 변수]
    
    # 예시
    # docker run -d -it --name containername imagename bash

     

    자주 사용하는 옵션은 다음과 같다.

    • -i : 표준 입력을 활성화하여 컨테이너와 연결되어있지 않아도 표준 입력을 유지한다. 보통 이 옵션을 사용하여 bash에 명령을 입력한다.
    • -t : TTY 모드를 적용한다. Bash를 사용할 수 있게 해준다. 이 옵션이 없으면 명령을 입력할 수는 있지만, 셀이 표시되지 않는다.
    • --name : 컨테이너의 이름을 설정한다. ('docker ps'에서 표시되는 컨테이너명)
    • -d, --detach : detach모드(또는 데몬 모드), 컨테이너가 백그라운드로 실행된다.
    • -p : 호스트(서버)와 컨테이너의 포트를 연결한다.
      • 형식 : -p [호스트 포트]:[컨테이너 포트]
      • 예시 (SSH, Jupyter 등 호스트(서버)에 외부에서 컨테이너 포트를 통해 접근할 수 있도록)
      • -p 11111:8888
    • -v : 데이터 볼륨을 설정한다. 호스트, 컨테이너의 디렉토리를 연결(마운트)하여 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장한다.
      • 형식 : -v [host 폴더]:[container 폴더]
    • -u : 컨테이너가 실행될 리눅스 사용자의 계정 이름 또는 UID를 설정한다.
    • -e : 컨테이너 내에서 사용하는 환경 변수를 설정한다. 보통 설정 값이나 비밀번호를 전달할 때 사용한다.
      • 예시 : time zone 설정
      • -v /etc/localtime:/etc/localtime
      • -e TZ=Asia/Seoul
    • --link : 컨테이너끼리 연결한다.
      • 예시 : --link="container_name:container_nickname"
    • --restart : 컨테이너 종료 시, 재시작 방식을 설정한다.
      • 예시 (호스트(서버) 재부팅 시 자동으로 컨테이너 재실행)
      • --restart unless-stopped
    • --gpus : 컨테이너에서 호스트(서버)의 Nvidia GPU를 사용할 수 있도록 설정한다.
      • 예시 (모든 gpu 사용)
      • --gpus all
    • --ipc : 공유 메모리를 설정한다. (큰 batch size에서 OOM 에러가 나는 것을 방지해준다.)

     

    나는 다음과 같이 진행했다. 역슬래시 '\'는 줄바꿈을 위해 입력했다.

     

    docker run --gpus all -id \
    --name dq_sangjune \
    -v /data/sangjune:/root/dev \
    --ipc host \
    --restart unless-stopped \
    -p 18201:22 \
    -p 28201:8888 \
    sangjune/cuda-miniconda-ssh:11.3.0-ver0

     

    마지막에 'sangjune/cuda-miniconda-ssh'가 image name, '11.3.0-ver0'이 image tag이다.

     

    다음 명령어를 통해 도커 컨테이너가 제대로 생성되었는지 확인할 수 있다.

     

    docker ps -a

     

     

     

     

     

    5. VSCode ssh 보안 옵션 설정

     

    VSCode와 연동하여 ssh 접속을 한다면, -p 옵션으로 포트를 열었다고 해서 SSH 접속을 바로 할 수 있는 것은 아니다. ssh 접속을 할 때마다 비밀번호를 쳐주어야 하는데, docker container를 사용한다면 서버 접속 시 한 번, container 접속 시 한 번씩 매번 쳐주어야 한다.

    vscode의 ssh configure에 public key를 등록해놓고 이 과정을 간소화할 수 있다. 하지만 등록을 위해서는 보안설정을 해주어야 한다.

    SSH public / private key를 생성하여 보안 설정을 하는 과정을 살펴보자.

     

     

     

    1) 키 생성

     

    호스트(서버)가 아닌 로컬 환경(클라이언트, 즉 컴퓨터나 데스크탑)의 터미널에서 키를 생성한다.

     

    ssh-keygen -t rsa

     

    -t 옵션은 어떤 암호화 방식을 사용할 것인지를 설정하는 옵션이다.

    파일 위치를 지정(기본 위치로 사용하는 경우 그냥 enter를 친다.)하고, 비밀번호를 적용한다.

    2차 비밀번호(passphrase)는 더 안전하게 옵션을 걸고싶을 경우 사용한다. 연결할 때마다 비밀번호를 입력하는 게 귀찮아서 이 과정을 진행하는데, 굳이 2차 비밀번호를 걸 필요는 없다. enter로 넘어가자.

     

    키 생성 결과

     

    지정한 위치에 '.ssh'라는 디렉토리가 생기고, 그 하위에 id_rsa, id_rsa.pub, known_hosts 파일이 생성된다.

    id_rsa는 개인(private) 키로, 비밀번호를 담고 있는 파일이며, id_rsa.pub은 공용(public) 키로, 서버나 컨테이너 내부에 등록되어서 id_rsa를 갖고 있는 유저의 접속을 통과시켜주는 역할을 한다.

     

     

     

    2) 서버에 public key 등록

     

    로컬의 터미널에서 다음 명령어를 통해 id_rsa.pub의 내용을 출력한다.

     

    cd ~/.ssh
    cat id_rsa.pub

     

    그 다음, 서버에 접속한다. (새 터미널 창에서 진행한다.)

     

    ssh [계정이름]@[ip주소] -p[포트번호]

     

    서버의 home 경로에서 '~/.ssh/authorized_keys'파일을 생성하여 출력했던 'id_rsa.pub'의 내용물을 복사하여 authorized_keys 파일에 붙여넣고 저장한다.

    참고로 '~'는 home 경로의 예약어이다.

     

    mkdir ~/.ssh
    vim ~/.ssh/authorized_keys
    # vim이 깔려있지 않는 경우 아래 명령어로 받을 수 있음
    apt-get update
    apt-get install vim

    이제 id_rsa 파일을 갖는 클라이언트에서는 해당 서버에 바로 접속할 수 있다.

     

     

     

     

    6. VSCode를 통해 로컬과 서버 및 컨테이너 연결

     

     

     

    1) Remote - SSH 패키지 설치

     

    먼저, Visual Studio Code의 확장 탭에서 'Remote - SSH' 패키지를 설치한다.

     

    remote - SSH 패키지 설치

     

    설치가 완료되면 다음과 같이 왼쪽 하단에 '><' 모양의 remote 버튼이 생긴다.

     

    remote 버튼

     

     

     

     

    2) Remote-access 설정

     

    remote 버튼을 눌러 'SSH 구성 파일 열기 → .../config'파일을 선택하여, 다음과 같은 형식으로 설정해준다.

     

     

    Host [nickname for this remote connection]
    	HostName [Server IP]
        Port [The exposed port when you choosed in 'docker run']
        User [user name]
        IdentityFile [The full path of your 'id_rsa' file. Security configuration]
        PasswordAuthentication no

     

     

    원격 연결이 완료된 후 자동완성 기능 등을 이용하려면 Python 확장 프로그램을 설치해야 한다.

     

     

     

     

     

    7. Conda

     

    예시에서 docker build로 만든 이미지에는 miniconda가 깔려있다.

    기본으로 base environment가 실행되고, 아래 명령어를 통해 새로운 환경을 만들 수 있다.

    가상환경을 생성하는 과정은 다음 글을 참조하자.

    https://jjuke-brain.tistory.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C

     

    아나콘다 가상환경 관련 명령어 모음!

    아나콘다를 사용하면서 가상환경을 생성, 삭제하는 등의 명령어들을 정리해보려 한다. 하나하나 필요할 때마다 검색하기 귀찮아서, 기본적인 것부터 지속적으로 명령어를 쓸 때마다 정리해둘

    jjuke-brain.tistory.com

     

    conda create ...

     

     

     

     

    1) 가상환경에 설치된 패키지 파일 옮기기

     

    정확하게 말하자면, 패키지 파일들을 'requirements.txt'에 옮겨 두었다가, 새로운 가상환경에서 그 파일을 사용하여 패키지를 다운받는 과정이다.

    먼저, 아래 명령어로 requirements.txt 파일을 생성한다. pip 또는 conda 둘 다 가능하다.

    pip freeze > requirements.txt
    conda list --export > requirements.txt

     

    그리고, 다음 명령어로 requirements.txt 파일에 쓰인 패키지들을 받을 수 있다.

    pip install --yes -r requirements.txt
    conda install --yes --file requirements.txt

     

    가장 중요한 pytorch는 requirements.txt에서 지워주고 원하는 버전을 따로 받는 것이 좋다. 버전이 바뀌면 골치아프기 때문이다.

    나는 pip로 다운받은 패키지도 있고, conda로 받은 패키지도 있어서, pip로는 'requirements_pip.txt', conda로 'requirements_conda.txt'를 생성하였다.

    먼저 requirements_pip.txt에서 conda로 받았던 것을 지워주고 pip로 requirements_pip.txt 파일을 통해 패키지를 받고, pip로 받은 패키지를 requirements_conda.txt에서 제외시켜준 후에 패키지를 받았다.

    이는 requirements_pip.txt에서 pip로 받았는지, conda로 받았는지가 명확하게 구분되기 때문이다. requirements_pip.txt의 예시는 아래와 같다.

     

    requirements_pip.txt

     

    또는 다음 명령어를 통해 yaml파일로 현재 아나콘다 갓아환경을 export할 수 있다.

    conda env export > [filename].yaml

    나는 보통 'environment.yaml'이라고 저장하는 편이다. 그 결과는 아래와 같이 나타난다.

     

    environment.yaml

     

     

     

     

     

    8. 작업 환경 이전

     

    기존에 작업하던 환경을 다른 컴퓨터나 서버로 옮길 때 사용한다.

     

     

     

    1) 본인이 수정한 Container를 image로 Commit

     

    본인의 docker container를 이미지 파일로 저장하려면 다음 과정을 거친다.

    1. 실행중이라면 컨테이너를 종료한다.
    2. 종료된 도커 컨테이너의 ID를 'docker ps -a' 명령어를 통해 확인한다.
    3. 아래 commit 명령을 입력하여 컨테이너 이미지를 생성한다. 이때 image_name에 본인 github id 혹은 유저이름이 들어가야 본인 docker hub에 push할 수 있다.
      1. 예를 들어 'docker commit test_container jjuke/image_name'
      2. 혹시 이를 까먹고 그냥 image_name으로 commit했다면, 'docker image tag image_name user_id/image_name'으로 tag를 붙여서 다시 저장해준다.
    4. 'docker images' 명령어를 통해 생성된 이미지를 확인한다.
    docker commit [container_name] [image_name]

     

    참고로, 콜론 뒤에는 태그를 설정할 수 있다.

     

    commit example

     

    자신의 docker hub에 저장하려면 docker에 로그인해준 후, 다음과 같이 이미지를 push해준다. (앞서 언급했듯 image_name은 'user_name/image_name' 형식이다.)

    docker login
    docker push [image_name]

     

     

     

     

    2) docker image를 tar파일로 저장

     

    docker build나 commit으로 만들어진 이미지 파일은 일반적으로 docker hub 등에 push되고, 이를 다시 pull하여 받는 방식으로 사용한다.

     

    하지만, docker 이미지를 이러한 방식을 거치지 않고 이동해야할 때가 있다.

    이를 위해서는 docker image를 '.tar'파일로 저장한다.

    또는 .tar.gz 파일로 저장하면 시간은 좀 더 걸리지만, 용량이 1/3 수준으로 줄어든다.

     

    관련 명령어는 아래와 같다.

     

    [docker save]

    docker save [image_name] -o [file_name]

    -o 옵션으로 저장할 파일명을 지정할 수 있다.

     

    예시

    docker save docker_practice:220713 -o /path/to/the/file.tar

    docker save docker_practice:220713 | gzip > /path/to/the/file.tar.gz

     

    이러한 .tar 또는 .tar.gz 파일을 sftp 명령어나 FileZilla 등의 프로그램을 써서 다른 서버로 옮긴다.

     

     

    [tar 파일 로드]

    # .tar
    docker load -i /path/to/the/file.tar
    
    # .tar.gz
    docker load < /path/to/the/file.tar.gz

     

    load 후에는 'docker run'을 통해 실행시킬 수 있다.

     

     

     

     

     

    Server 사용 시 로컬에서 jupyter lab 켜는 방법

     

    Jupyter lab을 실행하기 전, 처음 jupyter lab을 켜면 token을 입력하라는 창이 나오는데, 다음 명령어를 통해 아예 원하는 비밀번호를 설정해주는 것이 편하다. (마찬가지로 jupyter notebook은 lab을 notebook으로 바꾸면 명령어는 동일하다.)

    jupyter lab --generate-config
    jupyter lab password
    # 이후 password 입력

     

    추가로, 현재 anaconda 가상환경에 대한 kernel 명을 설정해주면 가상환경이 여러 개인경우, jupyter lab 환경 안에서 원하는 가상환경을 사용할 수 있다.

    python -m ipykernel install --user --name [가상환경 이름] --display-name "[주피터 환경에서 보일 이름]"

     

    서버를 사용할 경우, 단순히 'jupyter lab'만 입력할 때 서버 컴퓨터에서 jupyter lab이 시작된다. 이때는 다음과 같은 방법으로 로컬에서 작업할 수 있다.

     

    jupyter lab --port 8888 --ip 0.0.0.0 --allow-root

     

    Jupyter notebook도 마찬가지 명령어를 사용한다.

    외부에서 접속하기 위해 ip를 '0.0.0.0'(현재 ip)으로 설정하고, allow-root라는 옵션을 부여하는 것이다.

    '[서버의_노드_주소]:[서버에서_잡았던_노드]/lab'을 검색창에 치면 바로 실행 가능하다.

    예를 들어, 예시에서 docker run할 때 '-p 28201:8888'로 잡아줬으므로, 노드의 주소가 n12345라 하면 'n12345:28201/lab'을 주소창에 치면 된다.

     

    그리고 처음 컨테이너에 접속했을 경우, 다음을 통해 git 설정을 등록해주어야 한다.

     

    git config --global user.name "[git 유저 이름]"
    git config --global user.email "[git 이메일 주소]"
    git config --global http.postBuffer 52428800 # 최대 업로드 가능 파일 용량 50MB로 설정 (default: 1MB)

     

     

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기