Category: Docker

  • Docker에서 FFmpeg로 인코딩하기

    4k 동영상은 집에서 영상을 볼 때 사용하는 pc로는 재생이 불가능하다. 그래서 FHD 로 해상도를 낮추어야 한다. 샤나인코더를 보통 사용했는데 인코딩하는 시간이 재생 시간보다 더 걸리는 문제가 있다. 그냥 밤새 실행해도 되지만, 직접 인코딩을 해서 이 문제를 해결해 보고자 하였다.

    여기서 안내하고 있는 Docker 컨테이너를 받았다.

    정말 몇 시간 동안 오류 메세지를 해결하기 위하여 노력했다. 정말 우연하게 해결한 방법은 H.264가 아닌 H.265를 이용하는 것이었다. 사실 GPU를 이용하지 않으면 좀 더 변환이 빠르다. 그럼에도 불구하고 GPU를 이용하면 좋은 점은 1개의 쓰레드만 사용하므로 CPU가 여유로워 진다. cuda 보다는 cuvid를 이용하면 조금 더 빠른 결과를 보여주는 것 같다. 다음과 같이 하면 4K 영상을 FHD로 변환할 수 있다. 파일이 여러 개를 변환 시킬 것이므로 쉘 스크립트를 이용해서 작업을 처리했다.

    FILES=`ls *.mkv`
    for FILE in ${FILES}
    do
    	OUTPUT=`echo ${FILE} | sed 's/mkv/mod.mkv/g'`
    	sudo docker run --rm -v $(pwd):$(pwd) -w $(pwd) --runtime=nvidia jrottenberg/ffmpeg:4.1-nvidia -hwaccel cuvid -i ${FILE} -c:v hevc_nvenc -vf scale=1920:1080 -ac 2 -y ${OUTPUT}
    done
  • BOINC@HOME

    도커에서 BOINC@HOME을 실행하는 방법. GPU는 사용하는 것으로 한다.

    sudo docker run --privileged --dns=8.8.8.8 -it --gpus all --name boinc debian

    컨테이너 기본 설정은 평소와 같으나 repo에 contrib을 추가한다. 수작업으로 해줘도 되지만 편하게 하려면 apt-add-repository를 이용하면 된다. 사용하려면 software-properties-common 를 설치해야 한다.

    echo 'Acquire::http::Proxy "http://rcc.work:3142";' > /etc/apt/apt.conf
    rm -rf /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 
    
    echo 192.168.126.37 rcc.work >> /etc/hosts
    
    apt -y update && apt -y upgrade
    
    apt -y install software-properties-common
    apt-add-repository contrib
    
    apt -y update && apt -y upgrade
    apt -y install boinc boinc-client-nvidia-cuda

    컨테이너 시작시에 boinc을 시작하게 하기 위해서 .bashrc 에 다음의 내용을 추가한다. 작업 디렉토리는 원하는 것으로 해도 되지만 다른 도커 이미지 설명을 보면 /var/lib/boinc을 이용하는 것 같다. 그래서 이를 이용하도록 한다. 이것을 지정하기 않으면 실행 디렉토리를 기본으로 하여 다시 작업 파일을 받아오기 때문에 중복이 된다.

    cd /root
    boinc --dir /var/lib/boinc &

    이 다음부터는 컨테이너에서 해도 되고 밖에서 명령어를 실행시켜 줘도 된다.

    우선 Project를 추가하기 위해서는 account key를 알아야 한다.

    $ boinccmd --lookup_account https://einstein.phys.uwm.edu/ ID PASSWORD

    프로젝트를 추가한다.

    $ boinccmd --project_attach https://einstein.phys.uwm.edu/ account_key

    처음에 파일 받아오는데 시간이 걸리므로 느긋하게 기다리면 된다.

    주소를 입력할 때 https로 해줘야 한다. http로 하면 2번 등록되어있다는 메세지가 계속 생성된다.

    이렇게 여러 번 시도해 보았는데 CPU로 계산은 할 수 있어도 GPU는 계산을 하지 못했다. OpenCL과 관련된 문제인 것 같았는데 해결책을 찾을 수 없었다. 그래서 boinc 의 docker 이미지를 이용했다.

     sudo docker run -d \
      --gpus all \
      --name boinc2 \
      --net=host \
      --pid=host \
      --dns=8.8.8.8 \
      -v /opt/appdata/boinc:/var/lib/boinc \
      -e BOINC_GUI_RPC_PASSWORD="123" \
      -e BOINC_CMD_LINE_OPTIONS="--allow_remote_gui_rpc" \
      boinc/client:nvidia
  • Docker 백업

    도커 컨테이너를 백업해서 다른 컴퓨터에서 사용하게 하는 방법은 여러가지가 있는 것 같다. 그 중에서 나에게 가장 맞는 방법은 다음과 같다.

    docker commin [container] [container_backup]
    docker save -o container_backup.tar container_backup
    docker load < container_backup.tar
    docker run --name new_container container_backup
  • [Docker] insufficient shared memory (shm)

    Batch를 좀 늘려보려고 했는데 Docker에서 shared memory가 부족이라는 오류가 발생했다. 처음에는 VRAM 부족인가 싶었는데 다시 봐도 VRAM이 아니었다. 컨테이너를 만들어 줄때 shared memory(shm)를 늘려주면 된다. 기본은 64MB이다.

    # sudo docker run -itd --shm-size=16g --name test debian