본문 바로가기

Error 해결 및 유용한 방법들

WSL2: nvidia-container-cli mount error, libnvidia-ml.so.1: file exists: unknown

 

리눅스 서버에서 docker container를 쓰다가 WSL2 환경에서 사용할 때 위와 같이  libnvidia-ml.so.1라는 파일이 이미 존재란다는 error가 발생하고 docker container를 사용하지 못하는 경우가 발생을 합니다.

 

해당 error의 문제는 린눅스 서버에서 사용하는 nvidia 그래픽 드라이버의 버전과 WSL2에서 사용하는 nvidia 드라이버 버전이 달라서 생기는 문제입니다.

 

libnvidia-ml.so.1에 걸려있는 링크의 버전이  WSL2에 드라이버 버전과 달라서 생기는 문제

 

발생한 Error:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: mount error: file creation failed: /var/lib/docker/overlay2/dcdc20fe53226d0f10632d1018720c0dfafd7aaae3da71775c1a47084692fb29/merged/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1: file exists: unknown.

 

해결 방법은 의외로 간단합니다.

 

우선 먼저 GPU를 사용하지 않고, 문제가 되는 이미지를 사용해서 docker container를 만들어 줍니다.

sudo docker run -d --name test1 -it -p 7201:22 -v /mnt/:/mnt/ --shm-size=8G [이미지이름]:tag
ex)sudo docker run -d --name test1 -it -p 7201:22 -v /mnt/:/mnt/ --shm-size=8G test:v1.0.0

 

다음 명령어로 container에 접속을 해줍니다.

sudo docker start test1
sudo docker attach test1

 

그런 다음 아래 파일들을 제거해 주면 됩니다.

rm -rf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so.1

 

exit로 docker container를 stop과 동시에 나가 줍니다.

 

그런 다음 방금 위에서 libnvidia-ml.so.1과 libcuda.so.1를 지운 container를 다시 commit으로 image 화시켜줍니다. 

sudo docker commit -a "kwbyun" -m "docker commit" test1 test:v1.0.1

 

다음과 같이 명령어를 실행해서 gpu 옵션을 추가해 docker container를 다시 만들어주면, 정상적으로 container가 만들어 집니다.

sudo docker run -d --name test2 -it --gpus 1 -p 7223:22 -v /mnt/:/mnt/ --shm-size=8G test:v1.0.1

 

다음과 같이 명령어를 실행 후에 docker container에 접속한 후에

sudo docker start test2
sudo docker attach test2

 

nvidia-smi를 확인해보면,  정상적으로 GPU를 인식함을 알 수 있습니다.

 

torch 또한 정상적으로 GPU를 사용할 수 있습니다.