본문 바로가기
A. Development/Free Topic

효율적인 ML 프로젝트 개발 환경: Sublime과 Pycharm

by 곽동현 IMCOMKING 2020. 1. 17.

필수 규칙

1. 무조건 editor가 아닌 IDE를 사용해야한다.

pycharm을 쓸 때랑 sublimetext를 사용할 때의 생산성 차이는 압도적이다.(특히 refactor)


1. 무조건 local에서 바로 실행할 수 있어야한다.

즉시 응답하는 빠른 run이 가능해야만 손쉽게 디버깅을 할 수 있다. local run은 단순히 pytorch cpu에서 실행해도 전혀 상관이 없다.

서버에서 실행해야하는 경우도 가능하면 toy환경을 local로 가져오는 것이 좋고, 그마저도 힘들다면 sftp를 이용해서 remote의 코드를 pycharm으로 수정하도록 한다.

기계학습의 경우 데이터의 아주 일부분이라도 프로젝트에 내장시켜서 local run이 가능하게 해야한다.


1. 내가 사용하는 환경을 docker로 한번 감싼다.

그래야 다른 환경에 쉽게 옮길 수 있다. docker commit을 이용해서 현재 환경을 복사하면 되기 때문이다.





# 개발도구의 기본 개념

IDE(Integrated Development Environment)란

Text editor + compiler + debugger가 합쳐진 코딩 전용 프로그램이다.

TextEditor란

메모장의 매우 고급화된 버젼으로 볼 수 있다.



# Sublime Text 3

Text Editor의 한 종류로, 언어에 상관 없이 가볍게 코딩이 가능하다. 다양한 커스텀 기능이 구현된 패키지를 제공해주고, 설치 및 관리가 매우 용이하지만, 기능의 한계가 명확하다.

그렇지만 Sublime Text3는 여러 상황에서 가볍고 유익하게 많이 쓰인다. 가령 정규식을 테스트해본다거나, 손으로 문서를 파싱해야한다든지 할 때 편리하다.

Sublime Text 3를 IDE처럼 사용해보기

submlimet text 3는 원래 단순 text editor이지만, anaconda 같은 package들을 설치해서, 디버깅을 할 수 있게해서 IDE와 유사한 사용성을 시도해볼 수는 있다. 그러나 결국 아무리 애를 써도 IDE의 파워풀한 기능을 다 따라가는 것은 불가능하다. 

Sublime Text 3 Hot key

  • ctrl + `: 서브라임 텍스트 콘솔창 켜기(특정 명령어를 실행시킬 수도 있고, 어떤 작업을 하는지 그 과정을 모니터링할 수도 있음
  • ctrl + shift + p: general command 창
  • ctrl + p : go to anywhere
  • ctrl+alt+d : documnet 보기
  • ctrl + d : 같은 변수 선택하기
  • ctrl+alt+f : usage 찾기
  • ctrl+shift+space: 선택영역 좌우로 늘리기
  • ctrl + p : go to anywhere
  • ctrl+alt+d : document 보기

Sublime Text 3 에서 커스텀 단축키 만들기

  • ctrl+`을 눌러서 console창을 키고, sublime.log_commands(True)을 입력하여 로깅옵션을 킨다음 특정 행동을 취해서 command_name을 알아내고, 이를 key binding에 등록한다.

Sublime Text3 에서 Github Markdown Preview 사용하기

  • 그대로 따라하면됨. 주의사항은 enable_autoreload=true로 했을 때, ".md" 파일만 markdown으로 인식되어, 저장시 자동 빌드가 된다는 점임.

그래서 다음과 같이 수정할 것 "markdown_filetypes": [".txt", ".md", ".markdown", ".mdown"],

그리고 추가로 LiveReload가 항상 enable되어있게 하려면 다음을 setting에 추가. { "enabled_plugins": [ "SimpleReloadPlugin", "SimpleRefresh" ] }

https://github.com/revolunet/sublimetext-markdown-preview

WSL(Window Subsystem Linux)와 Sublime Text 3연결하기

아래의 여러 링크들을 참조하여 조사해보았으나, 아직까지 매끄럽고 쉽게 연결할 수 있는 방법은 없는 것으로 확인된다. 게다가 pytorch gpu까지 고려하면, anaconda를 설치하는 것이 더 나은 방법으로 보인다.

  1. https://github.com/Microsoft/vscode-python/issues/67
  2. https://github.com/Microsoft/WSL/issues/2760
  3. https://stackoverflow.com/questions/37000166/getting-pycharm-to-recognize-python-on-the-windows-linux-subsystem-bash-on-wind
  4. https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/
  5. https://gist.github.com/Voronoff/059c50f9fd354386c305c55af1f3a61f#install-and-set-up-python-to-work-with-vscode-and-wsl
  6. https://stackoverflow.com/questions/53731023/sublimetext-integration-with-windows-subsystem-for-linux-wsl-bash


# PyCharm

역시 IDE의 압승이다. 서브라임 텍스트가 아무리 날고 기어봤자 IDE의 강력한 기능은 절대 이길 수가 없다.

단축키

setting에가면, sublime text 키맵을 사용하는 옵션이 있음. 매우 편리함

  • 자동부분선택: Ctrl + Shift + A
  • 자동완성 or Hint 보기: Ctrl + Space
        Hint window의 크기 조절이 가능하고, 이미 완성된 함수에도 ctrl + space를 누르면 함수의 인자를 볼 수 있다
  • 코드 접기/펴기 ctrl + > : 접기/펴기
  • 함수 정의 살펴보기: Ctrl + Shift + I
  • Active window tool 열기: Alt + 숫자
  • Active window tool 닫기: Shift + ESC

화면 분할하기

Split vertial을 통해서 좌우로 코드를 나누고, 왼쪽의 active tool window는 기본을 view mode-undock으로 바꾸어 놓는다.



import _ssl 에러 해결하기

해결 방법은 pycharm의 환경설정에 들어가서, 환경 변수에 다음 세가지 경로를 PATH variable에 추가하는 것이다.

C:\Python\Anaconda3; C:\Python\Anaconda3\Scripts; C:\Python\Anaconda3\Library\bin;

Python 3.7 anaconda environment - import _ssl DLL load fail error




특정 디렉토리를 Project file에서 exclude시키기

이렇게 해주면, 해당 디렉토리의 파일들에 대해서는 code inspection이나 refactoring의 범위에 포함되지 않게된다.


Remote SFTP server 환경 설정

Pycharm에서는 기본적으로 local에 있는 project를 remote서버에 그대로 copy해서 deploy하는 방식을 취한다. 그 이유는 pycharm의 여러 advanced 기능을 사용하기 위해서는 빠른 file indexing이 필요하기 때문이라고 한다.

설정 방법은 간단하다. 먼저 SSH접속이 가능하도록 서버환경 설정을 미리 해두고, Settings - Build, Execution, Deployment - Deployment에서 좌상단에 + 버튼을 클릭하여 SFTP 연결을 만든다. SSH configuration에 접속 가능한 authentication을 작성하고 Root path는 Autodetect를 사용하여 입력해준다.

그리고 Mappings에 Deployment path를 입력하여 remote project의 경로를 설정해준다.(해당 경로로 local project가 복사되어 올라간다.)

마지막으로 Deployment-Options에서 upload규칙을 Always로 바꾸어주면 파일을 저장할 때마다 새로 갱신되어 올라가게 된다.

python 실행은 SSH로 접속하여 실행하거나, 혹은 아래의 방법으로 SSH를 이용한 remote interpreter 설정이 가능하다.



버그 해결: Default server '~~~' is not valid: SFTP host is not specified.

분명히 제대로 deployment 서버 설정을 했음에도 계속 이런 에러가 나올 경우, Visible only for this project 옵션을 on으로 바꾸어주면 해결된다고 한다.


Remote SSH interpreter 설정

Settings - Project: ~~ - Python Interpreter에 들어간다음 우측상단에 톱니바퀴를 누르고 Show all을 클릭한다.
+ 버튼을 클릭하고, SSH Interpreter를 누른다. 그다음 적절한 SSH config를 입력하고(이때 move버튼을 클릭해야하는 경우도 있다), next를 눌러서 interpreter의 위치(/opt/conda/bin/python)와 임시 sync folder위치를 설정한다.






# Windows 10의 GPU에서 돌아가는 기계학습 개발 환경 구축하기

일단 python 개발 환경의 입장에서보면 WSL만으로는 역부족이다. 가장 중요한 GPU가 아직 WSL 1에서는 사용이 불가능해서 pytorch cpu만 실행 가능하기 때문이다. 게다가 Sublime text 3나 pycharm을 IDE로써 사용하려면 python binary가 IDE와 연결되어야하는데, WSL에 깔려있는 python은 윈도우에서 접근할 수가 없다. 그래서 WSL 2에서 GPU를 지원해주기 전까진, 현재로썬 무조건 anaconda3가 필요하다. 

윈도우 용 Anaconda3 설치

링크에서 다운받아 설치한다. Anaconda에는 기본으로 jupyter도 설치되어 있고, wsl과 다른 ananconda prompt가 있다. 이것을 사용하면 된다. Anaconda를 설치하고 powershell prompt를 사용하면 기본 prompt보다 더 많은 기능이 지원되고, conda가 이미 설치되어 있어 바로 사용 가능하여 매우 편리하다.

Docker 설치

이 또한 장기적으로 WSL 2가 우분투와 완전히 동일한 사용성을 제공하게 되면, WSL 2에서 일반적인 우분투의 docker 설치 방법대로 깔아서 사용 가능하다. 그러나 WSL 1에서는 Docker for Windows를 설치한다음, 이를 WSL 1에서 호출하는 방식으로 사용해야한다.

Sublime text에 3-anaconda 패키지 설치하기

링크에서 다운받아 설치한다. 링크를 참조하여 ananconda가 사용할 python interpreter의 경로를 지정하고, 이를 build system에 등록한다.

그리고 sublime text의 build 옵션을 수정하여 anaconda의 python.exe를 가리키도록 한다. 링크 참조(Build System-New build system-"cmd":["C:\\ProgramData\\Anaconda3\\python.exe", "-u", "$file"] 추가하기. 그러면 해당 build 옵션은 다음 Sublime Text\\Data\\Packages\\User 경로 에 Py37Anaconda.sublime-build 이런 식으로 저장된다.)

설정이 완료되면, ctrl+B를 눌러 빌드를 할 수 있고 IDE에서 사용가능한 여러 기능들이 가능해진다.

Preferences-Package Setting-

{
	"python_interpreter": "C:\\\\\\\\ProgramData\\\\\\\\Anaconda3\\\\\\\\python.exe",
	"auto_python_builder_enabled": true,
}
  • 다양한 anaconda 옵션 설정하기 링크를 참조하면 내 입맞에 맞는 다양한 옵션을 설정할 수 있다.
{
		"python_interpreter": "C:\\\\ProgramData\\\\Anaconda3\\\\python.exe",
    "auto_python_builder_enabled": false,

    "hide_snippets_on_completion":true,

    // document
    "enable_docstrings_tooltip": true,
    "display_signatures": true,
    "enable_signatures_tooltip":true,
    "merge_signatures_and_doc":true,
    /*
        Sets the linting behaviour for anaconda:

        "always" - Linting works always even while you are writing (in the background)
        "load-save" - Linting works in file load and save only
        "save-only" - Linting works in file save only
    */
    "anaconda_linting": true,
    "anaconda_linting_behaviour": "always",
    "anaconda_linter_persistent": true,
    "anaconda_linter_show_errors_on_save":false,
    "anaconda_linter_phantoms":false, // show inline error 

    "pep8": false,
    "pep8_rcfile": false,
    "pep8_error_levels": {"E": "W", "W": "V", "V": "V"},
    "pep8_ignore":
        [
            "E309"
        ],
    "pep257": false,
    "pep257_ignore":
    [
        "D203",
        "D209"
    ],

    /*
        If 'outline' (default), anaconda will outline error lines.
        If 'fill', anaconda will fill the lines.
        If 'solid_underline', anaconda will draw a solid underline below regions.
        If 'stippled_underline', anaconda will draw a stippled underline below regions.
        If 'squiggly_underline', anaconda will draw a squiggly underline below regions.
        If 'none', anaconda will not draw anything on error lines.
    */

    "anaconda_linter_mark_style": "squiggly_underline",
    "anaconda_linter_underlines": false, // redundant with above option

    // If true, anaconda draws gutter marks on line with errors.
    "anaconda_gutter_marks": true,
    "anaconda_gutter_theme": "hard", // 'basic', 'alpha', 'bright', 'dark', 'hard', "retina", 'simple'
}

Pycharm for anaconda 설치하기

만약 sublime이 아니라 pycharm을 원한다면, 링크에서 다운받아 설치한다.

Pytorch for anaconda 설치하기

  1. 설치방법 링크
  2. Pytorch 공식 다운로드 방법

예를 들어 pytorch cpu버전을 설치한다면 Anaconda powershell prompt을 관리자 권한으로 실행한 다음을 입력한다.

conda install pytorch-cpu torchvision-cpu -c pytorch



댓글0