본문 바로가기

Programming

[WIL] CS & Dev convention

회사에서 머신러닝 엔지니어로 인턴을 시작하면서, 새로 알게되는 개발/CS 관련 내용을 정리합니다. TIL 하려다, today로 끝나지 않으니 What I learned, WIL로 태그를 달아봤습니다😊. 통계학도와 개발자 사이에서 부화뇌동 하지 않길 바라며, 글을 시작합니다.

Dev.

파이썬 런타임 환경 구성 pyenv

파이썬 가상환경 구성 vitualenv(venv) -> conda low level 느낌

가상환경은 항상 프로젝트 단위로 따로 만든다! -> 프로젝트간 디펜던시가 겹치는 문제를 방지

프로젝트를 깃헙으로 관리한다면, 레포를 clone 한 뒤, 해당 폴더 안에서 venv로 가상환경 구성

# 설치된 pyenv 환경 중 원하는 파이썬 버전을 활성화.
pyenv shell <PYTHON_VERSION>


# 원하는 파이썬 원하는 가상환경을 설치.
# python3 -m venv "원하는 가상 환경 이름"
python3 -m venv .venv

# 가상 환경 활성화
source .venv/bin/activate

디펜던시(패키지) 관리 poetry  설치

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

레포에 setup.py가 있는 경우 clone 후 해당 폴더로 들어가서

python setup.py build
python setup.py install

필요한 디펜던시가 설치된다.

 

Git 협업 프로토콜

1. 프로젝트 repo clone

2. 가상환경 구축

# 설치된 pyenv 환경 중 원하는 파이썬 버전을 활성화.
pyenv shell <PYTHON_VERSION>


# 원하는 파이썬 원하는 가상환경을 설치.
# python3 -m venv "원하는 가상 환경 이름"
python3 -m venv .venv

# 가상 환경 활성화
source .venv/bin/activate

3. 디펜던시 설치 (pip, poetry, ...)

repo에 poetry.lock으로 디펜던시 관리하고 있다면,

pip install poetry
poetry install

4. pre-commit 활성화

pre-commit은 commit 전에 정해진 양식에 맞게 코드를 자동 수정해준다(flake8, black, isort).

pre-commit install

5. 브랜치 생성 및 작업

브랜치는 항상 main 위에서, 기능 구현 단위로 생성한다. 브랜치 이름은 해당 기능을 반영해서 짓는다.

ex) data-preprecess 

git checkout -b <branch_name>

6. 브랜치에서 작업 도중에 main이 수정(merge)되었다면, rebase로 브랜치를 업데이트 해준다.

git checkout main
git pull origin main
git checkout <branch_name>
git rebase main

7. 작업이 완료되면 push 후 PR을 날린다. 이후 PR이 merge 되면 해당 branch를 삭제한다.

git branch -D <branch_name>

8. git remote를 main으로 전환 후 pull

git checkout main
git pull origin main

새로운 기능을 추가하고 싶을 때, 다시 5번부터 해서 branch 생성 후 작업

 

- 함수의 return 값이 3개 이상인 경우, No 튜플, Yes 딕셔너리

return X_train, X_val, X_test, y_train, y_val, y_test

splits = {"input_train": x_train, "input_val": x_val, "input_test": x_test,
        "target_train": y_train, "target_val": y_val, "target_test": y_test}

return splits

 

- Git commit 단위 복원

브랜치에서 작업하다 main이 바뀌면 rebase 해줘야 한다고 배워서 했는데, 작업한 commit이 싹 다 날라가고 main으로 fetch 되버렸다. 이럴 땐, git reflog를 이용해 복원하려는 commit 번호를 가져온 뒤 git cherrypick <commit 번호> 하면 복원된다. 이때 main과 commit 내용이 충돌하면 해당 부분을 수정 한 뒤, 복원해야 한다. 

 

CS

- Multi-processing

수백만개의 데이터를 처리해야하는 반복이 많은 함수에 multi processing을 적용할 수 있다. 딥러닝 모델에서 weight를 gpu에 올리는 연산을 제외하고 대부분의 파이썬 연산은 cpu에서 진행하게 된다. cpu는 여러개의 core를 갖는데 multi processing은 여러 core에 동일한 작업을 병렬 처리하게 해서 연산 속도를 향상시킨다. 

우선 컴퓨터(서버)에 cpu core가 몇 개인지 확인해야한다.

import multiprocessing

NUM_CORES = multiprocessing.cpu_count()

다음과 같이 입력에 a를 더하고 b를 빼서 return 하는 함수를 병렬처리 해보자.

def ex_func(input, a, b):
	for i in input:
		return i + a - b
        

입력을 core 갯수(20개)만큼 나눠준다.

input = [range(1,100)]

split_input = np.array_split(np.array(input), NUM_CORES)
split_input = [x.tolist() for x in split_midi]

split_input = [[1,2,3,4,5], [6,7,8,9,10], ... ]

parmap 라이브러리를 이용해 다음과 같이 실행한다.

parmap.map(	
  ex_func,      # 실행 함수 
  split_input,  # input data
  a, b,         # 함수 파라미터
  pm_pbar=True, # 진행상황 bar  
  pm_processes=NUM_CORES, # core 갯수
    )

 

SerializeToString - 데이터 직렬화

api 호출

asw 서버 접속

os.path 대신 pathlib

 

 

에러

Can not perform a '--user' install. User site-packages are not visible in this virtualenv.

파이썬 가상환경에서 패키지 설치시 생기는 에러, vscode 설정 검색창에 'python.globalModuleInstallation' 치고 체크박스를 체크해주면 된다.

SSH ERROR: Could not establish connection to host

vscode로 서버 remote 할 때, 서버 연결이 안되는 에러. 서버 비밀번호를 입력하라는 명령이 반복되기도 한다. 서버에 vscode를 업데이트 하면서 발생하는 문제로, 서버에 .vscode-server 폴더를 삭제 후 다시 연결하면  vscode server가 재설치되며 연결된다.

rm -rf .vscode-server

원래라면 자동으로 vscode-server가 재설치되지만, 또 에러가 나는 경우가 있다. 이때는 수동으로 vscode-server를 다운로드 후 설치해줘야 한다. 

<수동으로 서버에 vscode-server 설치하기>

 

Using "Remote SSH" in VSCode on a target machine that only allows inbound SSH connections

Is there a way to use the VSCode Remote SSH extension to interact with a remote host that does not allow outbound internet connections? Is it possible to download the vscode-server files from anot...

stackoverflow.com

 

 

개발 Tips

- 깃헙에서 코드를 clone해서 볼 때, 들여쓰기 안 맞아 불편할 때 vscode 기준 들여쓰기 자동 정렬 커맨드

Alt + shift + F

 하면 fomatter 설치하라고 뜨는데 install 누르면 된다.