일반적으로, 윈도우는 개발 환경을 갖추기 까다로운 운영체제로 알려져 있다. 그래서 대부분의 개발자들은 리눅스 환경을 더 선호하고 나 또한 그렇다. 한 1년인가 2년쯤전에 마이크로소프트에서 WSL이라는 아주 이상한 기술을 배포하기 시작했다. 이 기술은 윈도우에서 리눅스 커널을 사용할 수 있게 해주는 기술이다. 이걸 사용하게 되면 따로 리눅스 환경을 설정할 필요없이 이 기술을 활성화시켜서 리눅스 커널에 접근하면 리눅스 환경을 사용하는 것과 동일해진다. 나는 이 기술이 나온 직후에 사용해보았다. 기술의 초기 단계에는 그렇게 편하지도 않고 제대로 되는 것도 없어서 괜히 삽질만 했구나라고 느끼고 사용을 안하고 있던 기술이었다.
윈도우에서 개발 환경을 갖추기 까다로운 것을 대체하기 위한 방법으로 도커를 사용하는 방법이 있다. 도커는 가상 컴퓨터보다 가벼운 형태로 개발 환경을 독립시켜주는 도구의 일종이다. 그런데 문제는 도커를 사용할 때, 컴퓨터에 설치되어있는 GPU를 활용할 수 없었다. (출처) 꽤나 개발하려고 하는 사람이 상당히 하기 싫다는 어투로 말을 해서 윈도우로 GPU 어플리케이션 개발은 더이상 할 수 없겠구나 싶었다.
그런데, 위에서 말한 두 기술, 즉 WSL과 도커를 섞으면 도커에서 GPU를 사용할 수 있게되었다. 즉, 윈도우에서 GPU 어플리케이션 개발을 원할하게 할 수 있게 된다는 의미이다. 몇몇 사람들은 이미 이를 이용하고 있는 것 같았는데 나는 이번에 처음들어서 이번 주말동안 이리저리 삽질한 결과 해낼 수 있었다.
준비물
먼저, NVIDIA GPU가 설치된 컴퓨터와 윈도우 운영체제가 깔려있으면 설치를 시작하면 된다.
설명하기에 앞서..
나는 아래 두 링크를 기반으로 도커와 WSL2를 설치하였다. 해당 기술이 최신 기술이고 언제든지 설치법이 바뀔 수 있다는 점을 명심하고 읽기를 바란다. (심지어 두 링크 간에도 일관된 사항이 없는 부분이 있었다.)
CUDA on WSL :: CUDA Toolkit Documentation
Windows Subsystem for Linux (WSL) is a Windows 10 feature that enables users to run native Linux command-line tools directly on Windows. WSL is a containerized environment within which users can run Linux native applications from the command line of the Wi
docs.nvidia.com
Docker Desktop WSL 2 backend
docs.docker.com
Microsoft Windows Insider Program 가입 및 Windows 버전 충족
WSL이라는 건 마이크로소프트에서 제공하는 윈도우에서 리눅스 커널을 사용할 수 있게 해주는 기술이다. 이 기술을 사용하기 위해서는 먼저 Microsoft Windows Insider Program에 등록해야 한다. 나는 예전에 등록해두긴 했어서 등록된 계정이여서 바로 넘어갈 수 있었다. 이 링크로 들어가서 가입을 진행한다.
이 프로그램에서 개발자 채널을 수신받고 있어야하는데 확인하기 위해서는 Windows 설정에 들어간다. 그리고 업데이트 및 보안에 들어간다.
Windows 참가자 프로그램에 들어간다.
저기서 참가자 설정 선택에 "개발자 채널"로 되어있어야 한다. 그렇지 않다면 저기를 클릭해서 변경하면 된다.
다음으로 현재 운영체제의 빌드 버전이 20145보다 높아야 되는데 이는 Windows 업데이트의 빌드 정보를 통해 알 수 있다.
만약 버전이 낮으면 업데이트 확인을 통해 업데이트를 진행하면 된다. 물론 해당 프로그램에 가입한 뒤에만 버전 업데이트를 진행할 수 있다.
NVIDIA 드라이버 설치
여기서 설치할 엔비디아 드라이버는 일반 드라이버와는 다르다. WSL과 호환이 되는 드라이버이기 때문에 일반 드라이버를 설치하는 방법과는 다르게 깔아야하는 것으로 보여진다. 해당 링크로 들어가서 드라이버를 설치하자. (그 과정에서 엔비디아 사이트에 계정이 필요하다.)
까는 과정에서 있어서 나는 듀얼 부팅을 설치해놓았고 엔비디아 드라이버를 리눅스 운영체제에 설치해놔서 뭔가 문제가 있는게 아닐까란 생각을 했는데 결론적으로 되긴 했다.
WSL2 설치
WSL2를 설치할 때는 이 링크를 참고했었다. 한글화가 잘 되어있고 꼼꼼히 읽어보고 따라하면 wsl만 쳐도 바로 우분투를 만날 수 있게 되었다. 6단계까지 따라서 진행하면 WSL2의 설치가 끝난다.
여기까지 하면 윈도우 운영체제 내에 리눅스 커널을 사용할 수 있는 기술을 모두 설치한 게 된다.
도커 설치
두번째 링크를 보고 쭉 따라서 설치하면 된다. WSL2는 설치를 완료했기 때문에 그냥 Docker Desktop을 받아서 설치를 하면 되고 그 과정에서 버전이 3.1.0 이상이어야 한다는 사실만 인지하고 있으면 된다. 도커 설치를 완료하면 도커를 통해 GPU에 접근할 수 있게 되는데 이는 아래 코드로 확인할 수 있다.
docker run --rm -it --gpus=all wzj751127122/cuda-sample:nbody nbody -gpu -benchmark
뭔가 엔비디아 드라이버 버전과 도커의 컨테이너 내부의 쿠다 버전이 호환이 되지 않아 나같은 경우 공식 문서에서 제공하는 테스트 방법은 동작하지 않았고 다른 분이 아카이빙해둔 컨테이너에서는 잘 동작하는 것을 확인할 수 있었다.
'Engineering' 카테고리의 다른 글
GPT로 날짜 생성하기 (Prefix-Tuning 으로 학습) (0) | 2023.02.04 |
---|---|
GPT로 날짜 만들어보기 (0) | 2023.02.04 |
RegEx +와 +?의 차이 (0) | 2020.11.12 |
Visual studio code에서 windows anaconda 사용하기 (0) | 2020.11.10 |
텐서 코어 파이토치에서 사용하는 방법 (0) | 2020.10.07 |