새로운 이미지 생성

조재훈·2023년 7월 7일

Dockerfile

FROM nvidia/cuda:11.8.0-base-ubuntu20.04
RUN echo 'export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN echo 'export PATH=/usr/local/cuda/bin:/$PATH' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc

RUN apt update
RUN apt-get install -y python3.8 python3-pip
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

RUN pip3 install -U openmim
RUN mim install mmengine
RUN mim install "mmcv>=2.0.0"
RUN mim install "mmdet>=3.0.0"
RUN apt install -y git
RUN git clone https://github.com/open-mmlab/mmpose.git
RUN pip3 install -r /mmpose/requirements.txt
RUN pip3 install -v -e ./mmpose/
RUN mim install "mmpose>=1.0.0"

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
  • 이미지 빌드
docker build -t mmpose:0.2 .
  • 컨테이너 생성
docker run -it --name mmpose2 --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix mmpose:0.2 /bin/bash

디스플레이 설정에 대한 참고 블로그
https://saint-swithins-day.tistory.com/96
https://jonghunbok.github.io/posts/gui-on-container/
https://lovedh.tistory.com/entry/docker-container%EC%97%90%EC%84%9C-%EB%94%94%EC%8A%A4%ED%94%8C%EB%A0%88%EC%9D%B4%EB%A5%BC-%EB%AA%BB%EC%B0%BE%EB%8A%94%EB%8B%A4

  • 컨테이너 실행
docker start mmpose2
docker attach mmpose2
  • 코드 실행
python3  demo/body3d_pose_lifter_demo.py  \
demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py \
https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth  \
configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w48_8xb32-210e_coco-256x192.py \
https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth  \
configs/body_3d_keypoint/pose_lift/h36m/pose-lift_videopose3d-243frm-supv-cpn-ft_8xb128-200e_h36m.py \
https://download.openmmlab.com/mmpose/body3d/videopose/videopose_h36m_243frames_fullconv_supervised_cpn_ft-88f5abbb_20210527.pth  \
--input https://user-images.githubusercontent.com/87690686/164970135-b14e424c-765a-4180-9bc8-fa8d6abc5510.mp4 \
--output-root  vis_results  \
--rebase-keypoint-height  --save-predictions
python3 demo/inferencer_demo.py tests/data/coco/000000000785.jpg \
    --pose3d human3d --vis-out-dir vis_results/human3d \
    --rebase-keypoint-height

만약 아래 오류 발생시

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

이렇게 대응

apt-get update && apt-get -y install libgl1-mesa-glx
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
apt-get install libglib2.0-0
  • 웹캠 사용
python3 demo/inferencer_demo.py webcam --pose2d 'human'

에러 발생

웹캠에 대해서는 닫혀있는것 같다.
https://github.com/chipgarner/opencv3-webcam-docker
https://curioso365.tistory.com/44

아래의 명령어들을 추가하자
--env DISPLAY=$DISPLAY → 호스트의 디스플레이 아이디 전달

--env="QT_X11_NO_MITSHM=1" → OpenCV에서 디스플레이 사용시 필요(정확한 의미 모름)

-v /dev/video0:/dev/video0 → 호스트의 카메라를 컨터이너에 전달

-v /tmp/.X11-unix:/tmp/.X11-unix:ro → 호스트의 X윈도우와 컨테이너의 X윈도우 연결

-v $(pwd):/workspace → 호스트의 폴더를 컨터이너에 연결

docker run -it \
--name mmpose \
--gpus all \
-e DISPLAY=$DISPLAY \
--env="QT_X11_NO_MITSHM=1" \
-v /dev/video0:/dev/video0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd):/workspace \
mmpose:0.2 /bin/bash
python3 demo/inferencer_demo.py webcam --pose2d 'human'

에러 발생

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

https://velog.io/@neos960518/%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%EB%B2%95-ImportError-libGL.so.1-cannot-open-shared-object-file-No-such-file-or-directory

apt install libgl1-mesa-glx

에러 발생

ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

https://shuka.tistory.com/31

apt-get install libglib2.0-0

에러 발생

흠.... 뭐가 문제일까

찾아보니 WSL2에서는 웹캠 기본 지원을 안한다고 한다
https://ahnbk.dev/?p=333

sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev

아래 블로그 설정 따라서 진행
https://dongle94.github.io/windows/windows-wsl2-use-usbdevice/

winget install usbipd

설치 후 껐다 켜기

PowerShell

usbipd wsl list

에러 발생


wsl을 안켜놓고 하면 위 에러 발생

에러 발생


관리자 권한이 없다고 한다. 터미널을 관리자 권한으로 실행하자


웹캠이 포함되어있는 3-1번을 가져오자

PowerShell

usbipd wsl attach --busid 3-1

WSL

lsusb


3-1번 포트가 인식되는것을 볼 수 있다

  • 커널 패키지 설치
    WSL
sudo apt install -y build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev
uname -a

  • 커널 소스코드 다운로드
    WSL
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz
tar zxf linux-msft-wsl-5.15.90.1.tar.gz
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1
  • 커널 빌드 설정
    WSL
sudo cp /proc/config.gz ./
gunzip config.gz
mv config .config

설정 변경

make menuconfig
Device Driver enter로 진입하여 Multimedia Support <*>로 변경
Multimedia Support enter로 진입
    Filter media drivers [*]로 변경
    Media device types enter로 진입하여 Cameras and video grabbers [*]로 변경
    Video4Linux options enter로 진입하여 V4L2 sub-device userspace API [*]로 변경
    Media drivers enter로 진입하여 Media USB Adapters [*]로 변경
    Media USB Adapters enter로 진입
        USB Video Class (UVC) <*>로 변경
        GSPCA based webcams <*>로 변경
  • 커널 빌드
    WSL
make -j$(nproc)

빌드가 자꾸 오류가 난다.......
뭘까......뭐가 문제일까..........

아래 블로그를 따라 진행한다
http://www.publickrdata.com/blog/54/
브랜치 정보에 맞게 해야한다고 한다.

sudo mkdir /usr/src
cd /usr/src
sudo git clone -b linux-msft-wsl-5.15.y https://github.com/microsoft/WSL2-Linux-Kernel.git $5.15.y-microsoft-standard && cd $5.15.y-microsoft-standard

에러 발생

error: RPC failed; curl 56 GnuTLS recv error (-24): Decryption has failed.

왜그럴까..........
한참 고민하다가 아래와 같이 해보기로 했다.
http://www.publickrdata.com/blog/54/
원래 여기서 /usr/src라는 곳에 linux-msft-wsl-5.15.y를 sudo로 깃으로 당겨오는데 이게 자꾸 오류가 나니까, 그러면 이거에 해당하는 코드를 아래 블로그에서 했던 대로 wget을 이용해서 당겨와보자
https://ahnbk.dev/?p=333
참고로 /usr/src는 관리자 권한이 필요하기 때문에 sudo를 붙여서 명령어를 내려야한다.

cd /usr/src

sudo wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz

sudo tar zxf linux-msft-wsl-5.15.90.1.tar.gz

cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1

sudo cp /proc/config.gz

sudo gunzip config.gz

sudo mv config .config
sudo make -j16

한참 빌드하더니 드디어 됐다 ㅠㅠㅠㅠ

ls

vmlinux 라는 파일이 생겼다

이거를 C드라이브에 복사한다.
그냥 명령어주면 안먹히니 미리 C드라이브에 파일 옮겨놓을 위치를 만들어놓고 이거를 반영한다

sudo cp -rf vmlinux /mnt/c/Users/jaewh/kernels

wsl 종료한다

wsl2 --shutdown

현 위치 : C:\Users\jaewh
PowerShell

code .

  • wsl 다시 실행

에러 발생

wsl ubuntu가 안켜진다

코드 수정

[wsl2]
kernel = C:\\Users\\jaewh\\kernels\\vmlinux

다시 실행

uname -a

ll /dev/video*

**** 에러 발생

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글