2019년 1월 30일 수요일

python 3.6 설치 및 default 버전 바꾸기

v.190131
Ubuntu 16.04에서 python 3.6설치 및 기본 버전 바꾸는 방법


우선 python 3.6 을 설치한다.

sudo add-apt-repository ppa:jonathonf/python-3.6

sudo apt-get update

sudo apt-get install python3.6



python3의 기본 버전을 바꾸기 전 python3 버전 선택 리스트에 넣는 명령어라고 생각하면 된다. (버전 하나만 넣으면 하나만 선택하게 된다)

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2

(3.5, 3.6 두개 버전을 넣도록 되어 있는데 나중에 버전만 바꿔입력하면 된다.)

sudo update-alternatives --config python3
이 명령어를 이용해 입력해놓은 python버전을 언제든지 바꿀 수 있다. 아래와 같은 이미지가 뜬다.


0 번을 입력하면 python3.6이 python3의 기본 버전으로 선택된다.

python3 -V 을 입력하면 3.6이 선택된 걸 확인할 수 있다.



python3가 아닌, python 으로 입력했을 때의 기본 버전을 바꾸기 위해서는 아래와 같이 입력하면 된다.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

sudo update-alternatives --config python



출처:
http://ubuntuhandbook.org/index.php/2017/07/install-python-3-6-1-in-ubuntu-16-04-lts/

2019년 1월 28일 월요일

pytorch로 multi task learning 학습 할 때 주의해야 할 점

v2019.01.28

pytorch를 사용하면서 구글링으로 해결하기 어려웠던 내용들을 정리해본다.

우선,
multi task learning으로 학습을 해야 할 때가 있다.
(혹은 RL에서 Auxiliary task)

이 때 optimizer를 선언하는 방법은 아래와 같이 하면 된다.

optimizer = torch.optim.Adam(list(model1.parameters())+list(model2.parameters())+...)


두번째로
loss를 각각 정의 해준 뒤 하나로 합쳐준다.

optimizer.zero_grad()      # clear gradient
total_loss = model1_loss + model2_loss + ...     #calculate and summation loss
total_loss.backward(retain_graph=True)  # backpropagation, compute gradient
optimizer.step()        #update

loss마다 각각 backward()를 했을 때는 에러로 retain_graph=True를 넣으라고 뜨지만 넣어줘도 같은 에러가 뜨고 죽는다. loss를 합쳐서 한번에 backward 하면 죽지 않는다.

retain_graph를 True로 설정하면 backward를 해도 gradient를 남겨놓음으로써 이후에 backward를 할 수 있게 되며, 나의 경우 retrain graph=True로 설정하면 약 60mb정도의 메모리를 더 소요하는 것 외에 큰 차이를 보지 못했다. (pytorch docs에는 효율적인 사용을 위해 retain_graph 파라미터에 대해 따로 건들 일이 거의 없다고 되어있다)

2019년 1월 24일 목요일

SSH로 Ipython jupyter notebook 설치 및 설정



우분투 서버에 jupyter를 설치하고 수정하는 과정이 여기저기 분산되어 있어서 설치하는 과정을 한 군데 모아보았다.

우선 ipython 및 jupyter 설치
pip install --upgrade pip
pip install ipython
python -m pip install jupyter
jupyter notebook
까지 입력하면 로컬에서 사용가능한 jupyter가 설치 완료된다.



이제 원격에서 접근 가능한 jupyter로 만들어보자

cntl + c 로 위 프로세스를 종료하고,
패스워드를 입력하는 방식으로 하기 위해 아래 명령어를 통해 프로파일을 생성한다.
jupyter notebook --generate-config
입력하면 ./jupyter 디렉토리와 jupyter_notebook_config.py 가 생성된다.
ipython 을 실행시킨 후 아래 명령어를 순서대로 입력하고 원하는 패스워드를 입력. 생성된 해시는 따로 복사해둬야 함 (종료 시 cntl+d)

v2022.10.19

아래 작성한 과거 버전의 jupyter notebook 사용법을 따라가다 보면 아래와 같은 에러가 나온다.

ImportError: cannot import name 'passwd' from 'IPython.lib'

이는 Ipython 버전이 8.x로 업데이트 되면서 password 입력방식이 달라졌기 때문이다.


새로운 설치방법은 더욱 간결해졌다.

우선 기본 커맨드 창에서 아래 명령을 입력하고, 원하는 패스워드를 입력한다.

jupyter notebook password
올바르게 입력하면 아래와 같은 문구가 뜬다.
[NotebookPasswordApp] Wrote hashed password to /home/USER/.jupyter/jupyter_notebook_config.json

해당 파일에 생성된 해시태그 비밀번호를 복사한다.


vim ~/.jupyter/jupyter_notebook_config.json  <- 여기에서 "password" : "argon2:~~" 복사
vim ~/.jupyter/jupyter_notebook_config.py <- 여기에서 붙여넣기

vi/vim 으로 jupyter_notebook_config.py 파일을 수정한다.
해당 파일에 아래 5줄의 내용을 붙여넣고 password 부분에 방금 생성된 해시 값을 붙여넣는다. 해당 파일이 모두 주석처리 되어 있기 때문에 아무데나 복붙.

c = get_config()
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 32123                #원하는 포트를 넣으세요
c.NotebookApp.password = 'sha~~~~'   #<-여기에 복사한 값 복붙



v2019.01.25 (과거 버전)

from IPython.lib import passwd
passwd()
Enter password:
Verify password:
Out[2]: 'sha~~~~'


vi/vim 으로 jupyter_notebook_config.py 파일을 수정한다.
해당 파일에 아래 5줄의 내용을 붙여넣고 password 부분에 방금 생성된 해시 값을 붙여넣는다. 해당 파일이 모두 주석처리 되어 있기 때문에 아무데나 복붙.

c = get_config()
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 32123                #원하는 포트를 넣으세요
c.NotebookApp.password = 'sha~~~~'   #out[2] 값 복붙

저장 후
jupyter notebook 으로 실행하면 된다.
위에서 포트와 아이피 등을 설정해주었기 때문에 옵션을 따로 넣어주지 않아도 된다.



참조:
https://jupyter.org/install.html
https://financedata.github.io/posts/jupyter-notebook-authentication.html
https://cyan91.tistory.com/49