코딩 기록

윈도우10 아나콘다 주피터 텐서플로

JPaul 2022. 1. 20. 00:50

오늘 날짜 2022-01-20 이다.

보통 리눅스 서버를 많이 사용하는데

윈도우에서 주피터 노트북 서버를 세팅하는 방법이다.

일단 지금 하려는 세팅은

윈도우10에서 nvidia 그래픽 카드를 사용하면서

아나콘다 가상환경에서 주피터 노트북서버를 서비스로 돌리는 것이다.

따라 하다가 이상해져도 책임질 수 없다.

윈도우 서비스로 주피터를 등록해서 자동으로 실행하도록 하겠다.

공유기의 포트포워딩을 해주면 외부에서도 접속할 수 있게 하자.

그냥 대충 그렇고

지금 game streaming 으로 원격 데스크탑을 사용하고 있기 때문에

geforce experience 를 이용해서 그래픽 드라이버를 최신으로 설치했다.

안되면 나도 몰라.

먼저 아나콘다를 설치한다.

[Anaconda | Individual Edition](https://www.anaconda.com/products/individual)

그리고 아나콘다 콘솔을 열어서 가상환경을 하나 만들어 주자.

예를 들어 가상환경 이름을 tf27, 파이썬 버젼을 3.8로 한다면

conda create -n tf27 python=3.8

이렇게 하면 된다. 뭔가 주루룩 설치가 될것이다.

만들어진 가상환경을 활성화 해주자.

conda activate tf27

적당히 필요한 패키지들을 설치해준다.

pip install pymysql pandas numpy itertools glob matplotlib PIL scipy

텐서플로 버젼은 아래 링크를 참고해서 설치하자. 나는 2.7을 설치했다.

Windows의 소스에서 빌드 | TensorFlow

pip install [tensorflow@2.7](mailto:tensorflow@2.7) jupyter notebook

링크를 참고해서 cuda와 cudnn도 적절한 버젼을 설치해 준다.

나는 텐서플로를 2.7을 설치했으므로 cuda toolkit 은 11.2를 설치했다.

이건 그냥 받아서 설치하면 된다.

cudnn 도 설치해야 하는데 이건 nvidia 계정이 있어야 받을 수 있다.

https://developer.nvidia.com/cudnn

나중에 다운 받을 때도 귀찮을 수 있으므로 필요할 거 같은 버젼은 미리 한번에 받아두자

다운 받은 cudnn sdk는 압축파일로 되어있는데 압축을 풀면 안에 cuda라는 폴더가 하나 있다.

cuda\\bin 폴더 안의 모든 파일은 => C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2\\bin  
cuda\\include 폴더 안의 모든 파일은 => C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2\\include  
cuda\\lib 폴더 안의 모든 파일은 => C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2\\lib

이렇게 복사해주자. cuda가 설치된 폴더 이름은 버젼에 따라 다를수 있다.

설치 후에 파워쉘 터미널에서 아래를 입력해서 환경변수가 잘 등록되었는지 확인해준다.

$env:CUDA\_PATH

만약 등록이 정상적으로 되어 있지 않다면 아래 코드를 입력하여 추가하자.

\[Environment\]::SetEnvironmentVariable('CUDA\_PATH', 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2', 'Machine')

콘솔에서 아래 코드를 입력하면 저장된 환경 변수를 바로 읽어와 확인할 수 있다.

\[Environment\]::GetEnvironmentVariable('CUDA\_PATH', 'Machine')

그리고 나서 설치한 가상환경을 주피터 노트북에 연결해 준다.

예를 들어 tf27 이라는 가상환경을 tf27 이라는 이름의 커널로 연결하고 싶다 했을때 이렇게 하면 된다.
anaconda console을 열어서 해당 환경을 activate 한 후에 ipython 을 설치한다.

conda activate tf27
pip install ipython

그 다음에 아래를 입력한다.

ipython kernel install --user --name tf27 --display-name "tf_2.7"

커널 이름에는 따옴표 필요없다. 디스플레이 네임은 따옴표를 해주자. 생략하면 커널 이름이 디스플레이 네임이 된다.

만약에 연결을 해제하고 싶다고 하면 커널을 삭제해 주면 된다. 커널 이름을 써야 한다.

jupyter kernelspec uninstall tf27

커널을 삭제한다고 해서 가상환경이 삭제되는건 아니다. 만약에 가상환경도 지우고 싶으면

conda remove --name tf27--all

이렇게 해주면 tf27이라는 가상환경도 삭제된다.

주피터 노트북의 설정을 하고 싶다면 설정 파일을 생성해야 한다.
현재 커널 상태는 %HOMEPATH%\AppData\Roaming\jupyter\kernels\ 각 커널 명으로된 폴더를 통해서 알 수 있다.
각 폴더 안에서 kernel.json 을 열어보면 연결된 가상환경을 확인할 수 있다.

jupyter notebook --generate-config

설정 파일은 보통 %HOMEPATH%\.jupyter 위치에 jupyter_notebook_config.py 이란 이름으로 생성된다.

그 파일을 열어서

c.NotebookApp.ip = 'xxx.xxx.xxx.xxx'  
c.NotebookApp.password = '~~~'  
c.NotebookApp.password\_required = True  
c.NotebookApp.port = 원하는포트번호
c.NotebookApp.open\_browser = False  
c.NotebookApp.notebook\_dir = 'C:\\notebook'

적당히 이정도를 수정해 주자. 아이피는 ipconfig 로 현재 pc가 사용하는 내부 ip를 확인해서 넣어주면 된다.

비밀번호를 설정하기 위해서 해쉬드 패스워드를 생성해야 한다. 생성하는 방법에는 몇가지가 있는데

콘솔 창에서

jypyter notebook password

이렇게 입력하면 비밀번호를 설정할 수 있고 암호키가 %HOMEPATH%\.jupyter_notebook_config.json 에 저장되었다고 나온다. 이 파일을 열어보면 암호키가 있는데 그걸 저 위의 패스워드 위치에 넣어주면 된다. 따옴표는 'or" 상관 없음.

여기까지만 하면 브라우져의 localhost:설정한포트번호 에서 주피터 노트북이 열린다.

외부에서도 접속하고 싶다면 방화벽에서 포트를 열어주어야 한다. 콘솔을 관리자 권한으로 실행하고 아래를 입력하자.

netsh.exe advfirewall firewall add rule name="주피터 노트북 포트" dir=in action=allow protocol=TCP localport=설정한포트번호

공유기에서 포트 포워딩도 해줘야 한다. 이건 공유기마다 다 다르니 알아서 하자. 설마 내가 이것까지 까먹지는 않겠지.

그리고 주피터 노트북이 자동으로 실행되도록 서비스에 등록하려면 역시 관리자 권한으로 콘솔을 열어서

sc.exe create JupyterNoteBook DisplayName="주피터 노트북" binpath=$env:HOMEPATH"\\anaconda3\\Scripts\\jupyter-notebook.exe" type=share start=auto

만약 서비스를 삭제하려고 한다면

sc.exe delete JupyterNoteBook

이렇게 해주자

만약 오류 1053 으로 서비스가 실행되지 않으면 sc.exe 대신에 NSSM을 사용하자.

먼저 다운을 받는다.

https://nssm.cc/download

운영체제에 맞는(win32/win64) 파일을 압축을 풀어서 사용하기 쉽게 C:\Windows\System32 경로에 넣어줬다.

다음 명령어를 통해서 윈도우 서비스를 등록해 준다.

nssm.exe install JupyterNoteBook $env:HOMEPATH"\\anaconda3\\Scripts\\jupyter-notebook.exe"

주피터는 local system 계정으로는 서비스 실행이 안된다. 터미널에서 아래 명령어를 입력하고

nssm.exe edit JupyterNoteBook

나오는 gui 창의 log on 탭에서 맨아래 this account 를 선택하고 현재 계정과 암호를 입력하고

edit service 버튼을 눌러준다. 아니면 services.msc 앱에서 해당 서비스의 속성에서 설정할 수도 있다.

그 다음 보안을 위해서 ssl 을 설정해 준다. 아래 명령어를 터미널에 입력하면

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out private.pem -config ./anaconda3\\Library\\ssl\\openssl.cnf

이제365일간 유효한 private.key 와 private.pem이 %HOMEPATH% 위치에 생성이 되었을 것이다.

이 파일을 jupyter_notebook_config.py 여기 설정 파일에 등록해 주면 된다.

파일을 열어서 아래 처럼 수정해 주자.

c.NotebookApp.certfile = u'C:\\Users\\계정명\\private.pem'

c.NotebookApp.keyfile = u'C:\\Users\\계정명\\private.key'

ssl 을 적용 했으니 이제 서버 접속시 http:// 대신에 https://로 접속하면 된다.