본문 바로가기
딥러닝 어쩌구/연구일지&디버깅

[삽질] mmaction2 업뎃 왜 안되나 (feat. 그냥 갈아 엎겠습니다)

by 포숑은 맛있어 2022. 4. 11.
반응형

문제 상황: 도커 사이즈가 너무 커서 줄이려고 함

내가 mmsegmentation도 쓰고 여기도 쓰고 저기도 써서 도커 사이즈가 왕왕 커져버렸다.

근데 서빙 하려면 아무래도 작은 게 좋겠지요?

마침 동료도 mmaction2를 쓰고있는데 작은 사이즈이길래, 이걸 가져다 쓰려는데 동료의 코드가 구버전이라 호환이 안된다.

mmcv 버전에서 막혔기 때문...

 

그래서 한다.

mmaction2 버전 업데이트. (라고 쓰고 그냥 다시 깔기)

 

전에 mmsegmentation 업데이트 할때도 개고생 했던 기억이 나는데

이거 완전 데자뷰 아니냐고

 

1. mmcv-full 설치

그냥 pip install mmcv-full=1.4.3 이런 식으로 하면 안된다. 예전 포스팅 참고

https://ambitious-posong.tistory.com/m/139    

그러면 mmcv 버전 안 맞는 에러는 해결 가능하다.

 

 

2. opencv-python-headless 설치

근데 운 없으면 opencv 버전이 안 맞아서 에러가 뜨기도 한다.

이 경우, opencv 먼저 설치한 후 mmcv-full을 다시 깔아야한다.

cuda 버전 자꾸 충돌나는데 내가 만든 이미지가 아니라서 자세한 정보를 알기 어려워 걍 버리기로 했다

 

 

3. 빡쳐서 도커부터 다시 만듦

아 빡침.. 1, 2만으로 해결이 안됨. 그럼 엎는다.

mmaction2에서 제공하는 docker 폴더에 있는거 활용해서 만든다.

 

시도1: 실패
sudo docker build -t [이름] docker/serve
-> 10.8GB임을 확인
그리고 sudo docker run 어쩌구 실행해서 컨테이너 만듦.
-> 에러뜸.

숭발. 이게 아니었나.

서빙용 깔지 맙시다 ㅡㅡ 그거 밖에있는거 써

 

시도2:
sudo docker build -t "이름:버전" .

도커파일 사용법은 여기 참고
https://thenewstack.io/docker-basics-how-to-use-dockerfiles/ 

 

참고로 torch 1.6.0에는 매우 좋지 않은 기억이 있어서 도커 파일을 좀 바꿔줬다.

과거 포스팅 뒤지면 나올 것 같은데... 뭔가를 필수로 설치해야만 업데이트가 가능한데 그게 torch 최소컷이 1.7.0이라서 cuda부터 모조리 엎었던 경험이 있다. opencv까지 몽땅 다시 깔아야하는 것은 덤.

 

 

아래와 같이 파일을 수정하고 썼다.

torch, cuda, cudnn 버전이 서로 호환되는지 잘 확인하고 적어주자.

ARG PYTORCH="1.9.0"
ARG CUDA="10.2"
ARG CUDNN="7"

FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel

ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"

RUN apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 ffmpeg \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install mmcv-full
RUN pip install mmcv-full==1.4.3 -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.9.0/index.html

# Install MMAction2
RUN conda clean --all
RUN git clone https://github.com/open-mmlab/mmaction2.git /mmaction2
WORKDIR /mmaction2
RUN mkdir -p /mmaction2/data
ENV FORCE_CUDA="1"
RUN pip install cython --no-cache-dir
RUN pip install --no-cache-dir -e .

 

저대로 하니까 빌드 성공.

내가 추가로 구현한 모델이 있어서, 해당 폴더로 이동해 pip install -e . 해준다.

그리고 pip install yacs 추가로 필요했다. (내 코드때문인지 원래 그런진 모름)

 

근데 문제점.

A100 GPU로는 또 호환이 안된단다.

숭발숭발.

 

 

....

sudo docker image rm [image name]

일단 만든거 정리 해주고 간다.

 

 

도와줘 스택오버플로

https://stackoverflow.com/questions/66992585/how-does-one-use-pytorch-cuda-with-an-a100-gpu

 

도커 뒤지기

- https://hub.docker.com/r/pytorch/pytorch/tags pytorch/pytorch 참고. 11.1이면 cudnn8인거같아서 그렇게 바꿈

- https://hub.docker.com/r/cddlyf/a100_pytorch1.7.0_cuda11.1/tags  위에거 안되면 쓰려고 가져옴. A100에서 돌아가게 누가 만든듯? (근데 성공해서 쓸 일은 없었다고)

 

 

다시 빌드 가자. 도커파일은 이걸로.

ARG PYTORCH="1.9.0"
ARG CUDA="11.1"
ARG CUDNN="8"

FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel

ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"

RUN apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 ffmpeg \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install mmcv-full
RUN pip install mmcv-full==1.4.3 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html

# Install MMAction2
RUN conda clean --all
RUN git clone https://github.com/open-mmlab/mmaction2.git /mmaction2
WORKDIR /mmaction2
RUN mkdir -p /mmaction2/data
ENV FORCE_CUDA="1"
RUN pip install cython --no-cache-dir
RUN pip install --no-cache-dir -e .

 

 

아 된다 진짜 눈물난다

 

 

엄마가 보고싶습니다.

 

 

결론

나중에 배포할거 생각해서 미리미리 사이즈를 줄여놓자

 

 


+ 추가

1.7.1, 11.0, 8으로 바꿔봤음. torch 다운그레이드 하면 용량 더 줄어드나 싶어서.

mmcv-full은 그냥 cu110 torch1.7.0으로 지정.

그러면 약 14GB로 줄어드는걸 확인했다.

반응형

댓글