전체 글 109

[pytest] 테스트 코드에서 명령행 인자 전달하는 방법 (feat. argparse)

아래와 같이 argparse 모듈을 통해 명령행 인자를 입력받는 함수 main()이 있다. # main.py import argparse def main(): parser = argparse.ArgumentParser() parser.add_argument("--name", default="sangwon") args = parser.parse_args() return args.name if __name__ == "__main__": print(main()) main.py는 아래과 같이 실행할 수 있다. >> python main.py --name YoonSangWon YoonSangWon 그렇다면 테스트 코드에서 main 함수에 명령행 인자를 전달하기 위해서는 어떻게 해야 할까? monkeypatch f..

Backend/pytest 2023.06.15

[논문 리뷰] Attention is All You Need

논문이 다루는 Task Task: Machine Translation WMT 2014 English-to-German translation task input: tokenize된 영어 문장 input_size: (batch size, source_max_length) output: 독일어 token의 probability sequence output_size: (batch size, target_max_length, vocab_size) WMT 2014 English-to-French Translation task input: tokenize된 영어 문장 input_size: (batch size, source_max_length) output: 프랑스어 token의 probability sequence..

AI/논문 리뷰 2023.06.12

[pytest] Fixture

Fixture 테스팅을 하는데 있어서 필요한 조건들을 미리 준비해놓은 리소스 또는 코드 예) 특정 조건으로 구성된 데이터베이스, 데이터 셋 Fixture 생성 예시 @pytest.fixture 데코레이터를 함수에 붙여 fixture로 만들 수 있다. import pytest @pytest.fixture def my_fruits(): return ["apple", "banana", "grape", "orange"] Fixture를 사용하지 않는 경우 def test1(): fruits = ["apple", "banana", "grape", "orange"] assert len(fruits) == 4 def test2(): fruits = ["apple", "banana", "grape", "orange"]..

Backend/pytest 2023.06.10

[pytest] 파이썬 테스팅을 위한 pytest 사용법

pytest 설치 방법 pip install pytest pytest 실행 방법 1. 현재 디렉토리에서 테스트 pytest 현재 디렉토리 내에 존재하는 test_*.py 또는 *_test.py 형식의 파일들을 모두 테스트한다. 2. 특정 파일만 테스트 # pytest pytest test_file.py 3. 특정 경로에서 테스트 # pytest pytest testing/ 이 때, 테스트해야 하는 파일의 이름은 test_*.py 또는 *_test.py 형식이어야 한다. 4. 특정 키워드를 갖는 요소만 테스트 # pytest -k pytest -k 'MyClass and not method' keyword expression에 부합하는 이름을 갖는 파일, 클래스, 함수를 테스트한다. 위 명령어를 입력할 경..

Backend/pytest 2023.06.09

딥러닝 모델 패키징

이번 포스팅에서는 개체 간 관계 추출 프로젝트에서 사용했던 SangwonYoon/klue-roberta-large-tapt 모델을 Docker 컨테이너로 패키징하고, Docker Hub에 이미지를 push하기까지 진행한 작업들을 공유하고자 한다. 가상환경 생성 >> pip install --user virtualenv pip install: 설치된 파이썬 패키지가 /usr/local/lib/pythonX.X 경로에 설치되어 전역적으로 패키지를 설치한다. pip install --user: 사용자 디렉토리에 로컬하게 패키지를 설치한다. >> virtualenv mlops_practice # 가상환경 생성 >> source mlops_pracitce/bin/activate # 가상환경 활성화 >> vim ...

Backend/기타 2023.06.06

[FastAPI 에러 해결] ERR_EMPTY_RESPONSE in Docker Container

실행 환경 OS: MacOS FastAPI: 0.96.0 버전 문제 상황 로컬에서 정상적으로 작동하는 FastAPI 애플리케이션을 Docker 이미지로 빌드한 뒤, 컨테이너로 실행시켰더니 ERR_EMPTY_RESPONSE 메세지를 출력하며 아무런 응답을 보내지 않음 # Dockerfile FROM python:3.10 RUN python3 -m pip install --upgrade pip COPY ./requirements.txt /ws/requirements.txt WORKDIR /ws RUN pip install -r requirements.txt COPY ./webapp/ /ws CMD ["uvicorn", "main:app"] 문제 해결 uvicorn을 실행할 때 --host 옵션이 있는데, 이..

GitHub 협업 가이드 - Tag

Tag tag는 특정 커밋에 버전을 기록할 때 사용하는 기능이다. tag는 lightweight tag와 annotated tag 2가지 종류로 나뉜다. lightweight tag는 버전만 기록하는 기본적인 tag이다. 예) v1.0.0 annotated tag는 tag에 추가적인 정보를 기록하는 tag이다. lightweight tag는 git tag 으로 생성할 수 있다. 생성한 tag를 원격 저장소에 등록하기 위해서는 git push origin 으로 등록할 수 있다. annotated tag는 -a 옵션을 사용하여 추가적인 정보를 기록할 수 있다. git log 명령어를 통해 commit에 등록된 tag를 확인할 수 있다. git show 으로 tag의 정보를 확인할 수 있다. 원격 저장소에 등..

GitHub 2023.06.03

GitHub 협업 가이드 - Pull Request

Pull Request pull request는 다른 브랜치로 merge하기 전 팀원들에게 코드 리뷰를 요청하는 단계이다. 다른 팀원이 작업한 내용을 파악할 수 있도록 전체적인 내용(Overview), 변경된 부분(Change Log), 리뷰어가 참고해야할 사항(To Reviewer), 관련된 이슈(Issue Tag)를 기록한다. reviewer(코드 리뷰를 할 팀원들), assignee(본인)를 반드시 지정하고, 작업의 label도 부착한다. 이제 PR Template을 작성한 뒤, 새로운 브랜치를 생성해 작업을 진행한 뒤 PR을 진행해보자. PR Template 먼저 PR Template을 작성해보자. PR template은 issue template과 다르게 GitHub UI에서 추가할 수 없고, ..

GitHub 2023.06.02

GitHub 협업 가이드 - Issue

Issue issue는 전체적인 작업 내용을 세분화하여 쪼갠 개발 작업의 단위이다. issue를 작성함으로써 작업의 history를 관리할 수 있다. commit convention과 마찬가지로 issue의 제목 앞에 prefix를 붙여 어떤 사항에 대한 issue인지 한눈에 파악할 수 있게 한다. ex) [FEAT], [REFACTOR], [FIX] 각 issue에 대응하는 feature 브랜치를 생성하여 작업을 진행한다. 이 때, 브랜치의 이름을 아래와 같이 issue tag를 붙여 작성하면 브랜치에서 작업하는 내용을 파악하기 쉽다. ex) feat-12/branch_name (12번 이슈를 해결하는 기능 구현 브랜치라는 의미) Issue Template issue에는 이 작업이 왜 필요한지(Back..

GitHub 2023.05.27

GitHub 협업 가이드 - Commit Convention & Pre-commit

Commit Convention Commit Convention이란 commit을 남기는 규칙을 의미한다. 일관적인 commit log를 통해 서로 다른 사람들이 작업한 내용을 쉽게 파악하고, 유지보수할 수 있도록 하기 위해 약속하는 commit convention에 대해 알아보자. Header 일반적으로 Header에는 prefix가 붙으며, prefix 뒤로 작업의 대략적인 내용이 붙는다. feat: 새로운 기능 fix: 버그 수정 docs: 문서 내용 수정 style: 코드의 의미가 바뀌지 않는 수정 (공백 처리, 코드 포매팅, 세미 콜론 추가 등) refactor: 코드 리팩토링 perf: 코드 성능 개선 test: 테스트 추가 chore: 빌드 추가, 패키지 관리자 수정 ex) feat: add..

GitHub 2023.05.26