본문 바로가기

A. Development15

Ubuntu 20.04 고정 IP 할당하기 NetPlan 아마도 Ubuntu 18.04 부터는 기존에 /etc/network/interfaces로 ip를 설정하던 방식에서, netplan과 yaml파일로 ip주소를 관리하는 방식으로 변경이 되었다. 따라서 기존에 방식 말고, 아래의 새로운 방식으로 설정해주어야 한다. 설정 방법 ip link cd /etc/netplan sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.backup sudo vim 01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager ethern.. 2021. 7. 1.
Python Function Result Caching by Joblib.Memory Joblib.MemoryMemory를 이용하면 어떤 함수의 return 되는 output을 지정된 디렉토리에 저장해둔다. 그리고 해당 함수를 다시 호출할 경우, 미리 계산해둔 output을 가져와서 로딩을 하게 된다. 그리고 해당 cache는 사용자가 임의로 삭제하지 않으면 계속 유지되며, 다른 프로세스에서도 접근 가능하다고 한다.(확인 필요) 즉 이는 함수의 연산 결과를 하드디스크에 캐싱해두는 방식으로 볼 수 있다. 사용법은 매우 간단하여 아래와 같다. 내가 정의한 함수를 cache()에 전달하여 다시 사용하는 것이다. 이 방식은 output이 pkl로 저장된다. if cache: extract_feature = Memory("./cache", verbose=0).cache(extract_feature.. 2020. 7. 24.
SSH로 서버 설정 및 Putty 접속 Server 세팅sudo apt-get updatesudo apt install openssh-server sudo systemctl enable ssh : 시스템 시작시 ssh 서버 자동 실행하기sudo systemctl status ssh : ssh 서버 상태확인sudo systemctl start ssh : ssh 서버 열기sudo systemctl stop ssh : ssh 서버 닫기 sudo vim /etc/ssh/sshd_config : ssh 서버 설정sudo service ssh --full-restart : 옛날 방식 서버 열기 https://linuxize.com/post/how-to-enable-ssh-on-ubuntu-18-04/https://askubuntu.com/question.. 2020. 6. 21.
Git LFS (Large File Storage) 사용하기 Git의 용량제한과 LFS기본적으로 git은 여러개의 작은 소스코드 파일들을 위한 버전 컨트롤 시스템(VCS)이다. 따라서 Github의 경우 50Mb부터 Warning이 표시되고, 100Mb부터는 push시 Error가 발생한다. 그럼에도 불구하고 경우에 따라서 반드시 대용량 파일을 git repo에 포함시켜야하는 상황이 존재할 수 있다(예를 들면 학습된 모델파라미터를 올려야할 때). 이러한 경우에 사용할 수 있는 해결책인 Git LFS(Large File Storage)을 소개한다. git lfs가 정상적으로 적용된 경우, 아주 큰 파일에 대해서도 git push와 pull이 가능해진다. 기본적인 사용방법은 다음 블로그에서 가져왔다.https://leimao.github.io/blog/Git-Larg.. 2020. 3. 30.
효율적인 ML 프로젝트 개발 환경: Sublime과 Pycharm 필수 규칙 1. 무조건 editor가 아닌 IDE를 사용해야한다. pycharm을 쓸 때랑 sublimetext를 사용할 때의 생산성 차이는 압도적이다.(특히 refactor) 1. 무조건 local에서 바로 실행할 수 있어야한다. 즉시 응답하는 빠른 run이 가능해야만 손쉽게 디버깅을 할 수 있다. local run은 단순히 pytorch cpu에서 실행해도 전혀 상관이 없다. 서버에서 실행해야하는 경우도 가능하면 toy환경을 local로 가져오는 것이 좋고, 그마저도 힘들다면 sftp를 이용해서 remote의 코드를 pycharm으로 수정하도록 한다. 기계학습의 경우 데이터의 아주 일부분이라도 프로젝트에 내장시켜서 local run이 가능하게 해야한다. 1. 내가 사용하는 환경을 docker로 한번 .. 2020. 1. 17.
Numpy Optimization and Parallelization 1. 문제상황 [100000, 1000] 크기의 matrix를 10만차원 축으로 cumsum을 했더니 약 2.3초가 걸려서 이를 더 빠르게 하고싶음. 기본 실험: 해당 matrix에 대해서 np.sum과 np.cumsum 을 수행해봄. 3번과 4번 cell에서는 cumsum을 한번에 모든 dim에대해 한것과 하나씩 바꿔가면서 한 실험 결과임 cumsum의 경우 메모리에 writing하는 연산이 많아 sum보다 많이 느림. 그런데 3번과 4번에서 속도차이가 나는 것이 이상해서, inplace cumsum으로 바꾸니 속도가 동일해짐. 2. C로 최적화?여기서 더 빠르게 하기 위해, Numpy를 C로바꾸면 더 빨라질까? 결론은 Numpy가 C보다 더 빠르다,. Python VS C https://medium... 2020. 1. 17.
Pytorch 개발 팁 Pytorch 설치하기 Pytorch를 설치하는 가장 간편한 방법은 conda를 이용하는 것이다. conda의 설치 및 사용 방법은 다음을 참조하길 바란다. conda가 이미 있다면 아래의 명령을 실행하면 최신 버전의 pytorch가 설치된다. 이때 -c 옵션을 주는 것이 중요하다. 이는 pytorch채널에서 해당 라이브러리를 탐색하여 설치한다는 의미이다. 다른 pytorch 버전을 설치하고자하면, 공식 홈페이지를 참조하자. conda install pytorch -c pytorch Multi-GPU 환경에서 특정 GPU만 default로 사용하기 bash에서 다음을 실행 export CUDA_VISIBLE_DEVICES=4 혹은 python에서 다음을 실행 os.environ["CUDA_VISIBLE_.. 2020. 1. 16.
Matplotlib 사용 팁 Jupyter에서 Matplotlib를 이용한 Dynamic plotting거의 몇시간의 검색 끝에 working하는 예제를 찾을 수 있었다.핵심은 %matplotlib notebook 을 쓴다는 것과, fig1.canvas.draw()를 호출해주는 것이었다.그러나 이 방법의 한계는 매번 새로 drawing을 해서 속도가 느리다는 것이다.https://stackoverflow.com/a/55771526/7573626 그래서 아래의 방법으로 set_xdata를 사용하도록 수정해보았다. %matplotlib notebook import matplotlib.pyplot as plt fig1 = plt.figure(figsize=(15,5)) ax1 = fig1.add_subplot(111) ax1.set_xl.. 2018. 11. 27.
Pandas Pandas 팁 데이터 분석을 하다보면 numpy보다 pandas가 더 편한 경우가 종종있다. 물론 연산 속도는 numpy가 훨씬 빠르다. 1. SettingWithCopyWarning 해결하기 Pandas 에서 특정 row의 특정 column에 value를 집어 넣을 때 흔히 발생하는 에러이다. 이는 문법적으로 iloc함수에 대한 python에서 해석이 불분명하기 때문에 발생한다. Indexing and selecting data - pandas 0.25.0 documentation 해결 방법은 매우 간단하다. 아래와 같이 iloc대신 loc를 사용하면 된다. How to deal with SettingWithCopyWarning in Pandas? # Groupby 특정 column을 지정하고, 해당.. 2018. 6. 29.
연구용 파이썬 에디터 찾기 : IPython, Notepad++, PyCharm, Atom, Sublime Text 3 서버에 있는 python 코딩을 IPython으로만하다가 한계를 느끼고 PyCharm을 도입하기로 했다. 우선 IPython을 사용해서 웹으로만 하면, 스크립트 코딩시 찾기 기능이 잘 안되고, 한번에 이름을 못바꾸고, 탭키 사용이 제한적인 등 많은 불편함이 있다. Notepad++의 경우 직관적이고 쉬운 사용법이 강점이지만 체계적인 프로젝트 관리와 ssh를 직접실행할 수 없는 단점이 있다. 이에 PyCharm의 경우 제대로 설정만 한 번 해놓으면 거의 모든 작업을 다 할수가 있다. 1) PyCharm 유료/무료 : 유료버젼의 경우 가격이 1년에 90달러로 상당히 비싸다. 그리고 유료(Professional)버전을 사용해야만 원격 서버에 있는 파이썬 코딩을 할 수 있기 때문에 반드시 필요하다. https:.. 2016. 11. 29.
Numpy 문법, API, 환경설정 / HDF5를 위한 H5PY API Numpy 기본 레퍼런스 http://docs.scipy.org/doc/numpy/reference/ # Numpy object 인지 type check하기 type(a).__module__ == np.__name__ True https://stackoverflow.com/questions/12569452/how-to-identify-numpy-types-in-python # 잘 모르는 유용한 method - np.triu: upper triangle matrix를 만든다.( == lower triangle을 0으로 만든다) - np.tril: lower triangle matrix를 만든다.( == lower triangle을 0으로 만든다) - np.cumprod: 주어진 axis로 cumulativ.. 2015. 12. 1.
Ubuntu - Screen , zip, tar 사용법 Screen vs tmux 새로 개발된 tmux가 좋을까? 오래 동안 사용된 screen이 좋을까? 처음엔 새로 나온 tmux가 무조건 더 좋을 거라고 생각했으나, 오히려 반대로 생각하는 사람들도 많이 있었다. 아주 오랜시간 서버 백엔드에서 검증되고 사용된 screen이 더 안정적이라는 것이다. 그래서 나도 tmux보단 원래부터 익숙하게 쓰던 screen을 계속 쓰고 있다. Screen 사용법 - screen: screen은 세션을 만드는 역할이고, session이란 기존의 bash에서 한 layer 더 깊게 들어가는 구조이다. 하나의 screen을 만들면 독립된 process로 돌아간다. 따라서 이를 이용해서 screen을 만들고 거기에 서버를 돌려놓고 다른 작업을 하는 것이 가능하다. 또한 scree.. 2014. 7. 7.
Python 프로그래밍 # Python의 변수 호출/참조: Call by Objective Reference 대충, call by reference(포인터)랑 비슷한데, 다만 함수안에 전달될 때에는 지역변수 tag가 붙기 때문에 레퍼런스가 사라진다. 또한 List와 같이 mutable한 정보를 담는 자료구조는 indexing을 할 경우 call by reference처럼 행동한다. http://devdoggo.netlify.com/post/python/python_objective_reference/ ## Python에서는 + 와 += 가 다르다. a += b 는 inplace이지만, a = a+b 는 새로운 메모리를 할당한다. https://docs.python.org/3.2/library/operator.html#inpla.. 2014. 6. 17.
정규표현식, 정규식, 엑셀 고급기능 정규표현식(Regular Expression, Regex, 정규식) # 정규식 문법 - https://github.com/google/re2/wiki/Syntax - https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D # 복잡한 정규식의 사용에 대해 - 너무 심각하게 복잡한 기능이 필요한 정규식은 쓰지 말고, 그냥 python 프로그래밍으로 해결 하는 것이 훨씬 나은 방법이다. 그러나 정말 어쩔 수 없이 해야만한다면 정규식에 대한 매우 높은 이해도가 필요하다. - Python을 쓴다면, 정규식보다 훨씬 더 구현이 빠르고 정확하며, 디버깅, 유지보수, 협업이 용이해진다. 특히 너무 복잡한 문제에는 가능한 정규식은 사용하지.. 2014. 6. 17.
Git 사용방법 # git을 공부하기에 좋은 최적의 입문 자료 https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F# Git의 기본 매커니즘. 아래의 그림이 전체 아키텍처를 전부 설명해준다. git은 svn과 달리 local repo와 remote repo가 구분되어 있어서 매우 편리한 분산 버전 관리 시스템이다.# 일단 git commit으로 로컬에 저장해놓은 데이터는 완벽히 보존된다! 내가 겪은 버그는 ipython의 자동저장기능 때문에, git checkout으로 이동 중 과거에 켜둔 웹이 최신버전에 자동저장되면서 마치 데이터가 사라진것 처럼 보이는 현상이었음.. 2014. 5. 7.