2020년 9월 12일 토요일

CUDA on WSL2

딥러닝 맛 좀 보겠다고 GPU 달린 랩탑에 Windows / Ubuntu dual boot도 구성해놨건만, 생각보다 안 쓰게 된다.

일단 회사에서 '개발하는 사장' 직책을 맡고 있어 개발만 붙잡고 있을 순 없는지라... 결국 대부분의 시간을 Windows에서 보내게 되고 어지간한 개발일은 WSL에 의존할 수 밖에 없더라. 물론 최근에는 IAR 사용할 일도 많아서 결국 Ubuntu Linux는 가끔 들어가서 업데이트만 해주는 정도...

500GB 정도 되는 하드를 반씩 파티션 나눠 놨는데, 시간이 흘러 흘러 Windows용 파티션이 이제 50GB 밖에 안남게 되었다. 그래서 다시 dual boot를 없애는 걸 진지하게 고민하게 되었고, CUDA만 WSL에서 된다면 실행하지 못할 이유가 없다는 결론에 도달하였다.

몇달 전에 이미 NVIDIA에서 WSL2에서 CUDA를 쓸 수 있다고 발표도 했고 튜토리얼도 공개했기에 검색해보고 따라해봤다.

해보니 잘 되긴 했는데, 글을 쓰고 있는 현재에는 Windows를 초기화했다.ㅠㅠ

몇가지 느낀 점을 정리하자면...

CUDA 기능만 놓고 본다면 잘 된다.

뭐, 딱히 설명이 필요없다. 대부분 잘 된다. nvidia-smi 빼고... (Known Limitations 3번)

근데, 내가 원했던 것은 WSL2와 '완벽'한 호환이었다. 마치 진짜 Linux를 쓰는 것 같은... 여기서 '완벽'한 WSL2와의 호환이라 함은 가히 Docker Desktop WSL2 Backend의 지원이었다.

Docker를 지원하기는 한다. 그러나 아쉽게도 WSL2 backend는 아니다.

아쉬운대로 WSL로 별도 배포판을 돌려 하나는 WSL2 backend 방식의 Docker 컨테이너들을 돌리고, 다른 하나는 CUDA container를 돌려보려 했건만 결론은 잘 안된다.

Docker Desktop이 실행되고 있는 동안 CUDA container를 돌리려 하면 다음과 같은 에러 메시지가 출력되면서 실행이 되지 않는다.

cgroups: cannot find cgroup mount destination

왜 저런 에러가 발생하는지 모르겠지만 한가지 확실한 것은 Docker Desktop이 중단된 상태에서 실행하면 저런 에러가 발생하지 않는다.

어쩔 수 없이 Docker Desktop WSL2 backend를 사용하지 않고 개발을 해보려고 했으나 이번엔 docker-compose가 말썽이다.

The command 'docker-compose' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.

Docker Desktop에서 WSL2 integration을 꺼도, Docker Desktop을 꺼도, docker-compose는 무조건 WSL2 backend만 지원하는 것 같았다.

결국 CUDA container까지 포기하고 그냥 개발을 진행하려 했으나...

Windows Insider Dev Channel의 경고는 무시하면 안됐다.

이상하게 부팅될 때마다 WSL이 제대로 실행되지 않거나, 딜레이가 심해진다거나, 무선랜이 자주 끊기거나, CPU가 쉼없이 돈다거나 등등등 여러가지 부작용이 튀어나왔다. 결국 어느샌가 개발은 못하고 삽질만 하고 있는 내 자신을 발견하고 결국 초기화를 할 수밖에 없었다.

CUDA on WSL2는 Windows 10 stable build에서 지원할 때까지 기다리는걸로...

이제 남은 옵션은 (1) 기존처럼 GPU 사용할 때만 듀얼부트로 Ubuntu Linux 들어가서 하거나, (2) 서버에서 하거나, (3) Windows 10에 native CUDA를 설치해서 하거나... 셋 중 하나일 꺼 같았는데... (AHCI를 RAID로 변경하는 통에) Windows 초기화 중에 듀얼부트는 날라갔다.

뭘로 하지...? 이성적으로는 (2)번을 선택해야 진도를 뺄 수 있을 것 같은데... (3)번은 어떨지 궁금하긴 하네...

2020년 7월 9일 목요일

Ubuntu에서 git-credential-manager로 libsecret 사용하기

SSH로 사용하면 사실 비밀번호도 필요없고 속도도 빠르지만, 가령 서버에서 작업할 때 서버에 내 개인키를 저장해두기 싫을 때 등 상황에 따라서 SSH 대신 HTTPS를 사용해야만 할 때가 있다.

Windows는 Git for Windows를 설치하면 내장 Git Credential Manager를 통해 HTTPS 통신할 때 필요한 ID/PW를 자동으로 기억이 되고, macOS는 자체 keychain 등으로 저장이 된다. 그러나 Linux의 경우에는 default credential manager가 없어 push, pull, fetch 등을 할 때마다 ID/PW를 입력해야 한다.

그럴때마다 사용할 수 있는 옵션이 libsecret 이다. 원래는 Gnome Keyring 이었지만 2014년(꽤 오래됐네...)에 이미 deprecated 이고 이를 대체한게 libsecret.


새로 환경 구성할 때마다 구글링하기 귀찮아서 여기다 저장해둔다.

2020년 6월 20일 토요일

Windows Terminal + X410

https://docs.microsoft.com/ko-kr/windows/terminal/

이거이거이거...
Linux로 못돌아가겠는데...

Linux의 장점은 쉘 기반 개발환경과 Emacs, 각종 커맨드라인 툴들이었는데, WSL로 품기 시작하더니 아예 한번에 다 쓸수 있게 만들어버리다니...

게다가 GPU docker 지원만 제대로 된다면(아직 못해봤음) 듀얼 부트 bye bye 각...

아쉬운게 한가지 있다면... X window가 기본으로 안된다는 점...
물론 비싼 방법도 있음. (지를까 말까 고민 중...)
무료평가판이 가능하길래 설치해보고 Emacs를 실행시켜보니...


4K 모니터 지원은 역시 무리인가...


DPI Scaling도 지원하긴 하네...


그래도 픽셀 뭉그러지는건 어쩔수 없음.

아쉬운대로 No X 버전 쓰는걸로...

2020년 6월 18일 목요일

GPU containers in WSL 이라니...


그저 놀랍다.

Mac에서 답답한 Docker 속도 때문에, 그리고 딥러닝 때문에 Windows와 Linux 듀얼부트를 염두해두고 구매한 Dell XPS 15 7590.

조금 불편하지만 듀얼부트로 왔다갔다 하면서 개발을 해왔는데...

이제 곧 WSL 에서 CUDA를 지원하고, GPU container까지 지원한다고 하니...
이거 뭐 Linux Desktop은 버리라는 건가...