no image
[FSDL 정리] 머신러닝 프로젝트 진행 시 고려 사항
Full Stack Deep Learning - Lecture 1: Course Vision and When to Use ML Introduction to planning, developing, and shipping ML-powered products. fullstackdeeplearning.com 모든 사진과 글은 위 링크를 참고했습니다. ML은 언제 활용해야 할까 머신러닝 프로젝트는 연구적 성향이 강하기 때문에 다른 소프트웨어 프로젝트와 비교 했을 때 실패 확률이 높다. 또한 많은 양의 데이터를 처리하기 위해 시스템이 복잡해져 유지 보수 과정에 큰 비용이 든다. 따라서 머신 러닝을 프로젝트에 도입하기 전엔, 다음과 같은 사항을 고려해 정말 필요한 지 따져 보고 도입하는 것이 중요하다. 정말 사용할 ..
2022.12.18
no image
[Git] 오픈소스와 Git - (2)
오픈소스 컨트리뷰션 아카데미에서 진행된 Git/Github 고급 실습 강의를 정리한 내용입니다. fetch 언제 사용? Origin(fork 해온 상태)과 Upstream(현재 원본 repo 상태)다를 때, 추가된 commit을 가져오고 싶을 때 활용 히스토리 창고(.git)에만 저장 git fetch upstream master pull = fetch + merge upstream/master 라는 branch 이름이 자동으로 생성 됨 rebase 현재 Base를 최신으로 갱신한다 내가 사용 중인 Base가 최신 것이 아니면 오류 발생할 수 있음 만약 내가 수정한 코드가 다른 사람이 최근에 수정된 코드가 동일한 파일에서 나왔을 경우 git rebase upstream/master rebase 단계 1단..
2022.08.25
no image
[Git] 오픈소스와 Git - (1)
오픈소스 컨트리뷰션 아카데미에서 진행된 Git/Github 기본 실습 강의를 정리한 내용입니다. 오픈소스 기여 과정 개괄 개발 환경 구축(컨테이너) fork하여 프로젝트 복사 clone하여 소스 다운로드 프로젝트 개발 현황 파악/분석 → Reading Skills 필요 history를 파악하는 것이 중요! → Reading Skills 소스 수정 → commit하여 히스토리 저장 수정 내용 제출 → PR! Container 개발 환경 구축을 간단하게 도와줌 독립된 리눅스 환경 구성 개발 환경을 간단하게 구성 ex) pytorch, tensorflow Dockerfile → image → Container Git? 이력 관리(수단), 협업(목적) Push 나의 프로젝트에 commit을 업로드할 때 사용 C..
2022.08.25
no image
[QWIKLABS] GCP에서 Docker 사용하기
Docker 간단하게 실행해보기 Cloud Shell 기본 명령어 https://cloud.google.com/sdk/gcloud gcloud auth list -> active 계정 이름 확인 gcloud config list project -> 프로젝트 ID 확인 Docker 파일 실행해보기 hello-world라는 container 실행 docker run hello-world 코드 실행 과정 도커 daemon이 hello-world라는 image를 로컬에서 확인 image가 없다면 Docker Hub라는 public registry에서 다운로드하여 사용 현재 사용 가능한 도커 images 확인 사용 가능하려면 도커 이미지가 built 돼야 함 docker images 현재 실행 중인 contain..
2022.07.11
no image
[Python] pipreqes으로 사용한 패키지만 requirements.txt에 포함하기
pip freeze의 문제점 패키지 관리를 위해 일반적으로 pip freeze > requirements.txt를 사용한다. pip freeze는 편리하지만, 의존 패키지까지 모두 포함 시켜 가독성을 떨어트린다는 문제가 있다. 실제로 aiohttp, beautifulsoup4, GitPython, requests만 사용한 경우에도, requirements.txt는 다음과 같이 굉장히 지저분하게 생성된다. pip freeze > requirements.txt >> aiohttp==3.8.4 aiosignal==1.3.1 async-timeout==4.0.2 asyncio==3.4.3 attrs==22.2.0 autopep8==2.0.2 beautifulsoup4==4.11.2 certifi==2022.12..
2022.06.21
no image
Anaconda 환경에서 pip 사용하기
Anacoda에서 pip? Anaconda 환경에선 기본적으로 conda install을 이용해서 패키지를 설치한다. 하지만 원하는 버전의 패키지가 conda에 없는 경우가 있으면 pip install을 사용해야 한다. pip install로 패키지를 설치하면 base 환경에 설치돼 가상 환경 분리가 안된다는 단점이 있다. 이럴 때 가상 환경에 먼저 pip를 설치하고, pip install을 적용하면 사용 중인 환경에만 패키지가 설치된다. 현재 가상 환경에 pip 설치 하기 conda install pip 가상 환경을 만들 때 부터 pip를 설치하려면 다음과 같은 명령어를 사용하면 된다 conda create -n 이름 pip 예시 임의로 test라는 가상 환경을 만든 뒤 확인해보자. (base) ~/a..
2022.06.21
no image
Hydra 사용법 정리
Hydra? configuration을 모듈로 세분화하여 관리 가능 미리 정의한 configration을 hydra 환경에서 사용 실행된 hydra 환경에서의 실행 기록을 outputs/날짜/시간/.hydra/config.yaml 에 저장 어떤 configuration을 사용했는 지 모두 기록해 실험 관리에 도움 ├── outputs │ └── 2022-06-19 │ └── 19-23-30 │ ├── .hydra │ └── config.yaml | └── ... MNIST 분류 문제를 해결하는 경우 다음과 같이 config 구성 가능 Configuration 구성 모듈별 폴더를 생성해 configuration 구성 model에서 처럼 다양하게 구성해뒀다가 실험 환경에 맞게 변경 가능 ├── configs..
2022.06.19
no image
[파이썬] Interpreter(인터프리터) 알아보기
Python(파이썬)의 Interpreter(인터프리터) 확인하기 파이썬은 인터프리터 언어라고 알려져있다. 따라서 보통 생각하는 파이썬의 실행 과정은 다음과 같을 것이다. 하지만 파이썬 인터프리터는 사실 Compiler(컴파일러)와 VM(Virtual Machine)으로 구성돼 있다! 컴파일러에 대한 오해 해결하기 컴파일러만 거치면 바로 기계어(machine code)가 생성되는 거 아닌가? 뒤에 과정은 뭐야? 라고 생각할 수도 있다. 하지만 컴파일러의 역할은 현재 언어를 low-level 언어로 변경하는 것으로 꼭 변환 대상이 기계어일 필요는 없다. 실제로 컴파일러는 변경 대상 및 결과에 따라 다음과 같이 4 가지로 나뉜다. 1. 입력 코드를 바로 기계어로 변환하는 정적 컴파일(Static Compil..
2022.06.08
no image
[파이썬] static type checker
Type Hint(타입 힌트) 점검? 타입 힌트의 필요성을 느껴 사용했다면, 이제 힌트를 제대로 적었는지 확인해야 한다. 파이썬은 Dynamic typing(동적 타이핑) 언어라서, 잘못된 힌트를 적었더라도 실행엔 아무런 이상이 없다. 그래서 힌트가 제대로 됐는지 확인할 수가 없다. 파이썬에서 타입 힌트가 제대로 됐는지 확인하려면 별도의 Type Checker(타입 체커)를 사용해야 한다. 타입 체커는 mypy, pyright, pytype 등이 있는데 이 중에서 mypy와 pyright가 많이 활용되고 있다. 주의할 점 타입 힌트가 파이썬에 도입됐지만, 타입 체커가 아직 정식으로 지원되는 것은 아니라고 한다. 따라서 전체 프로그램 코드를 모두 확인하기 보다는, 확인이 필요한 함수나 클래스만 따로 떼어서..
2022.06.07
no image
Python의 메모리 관리 방법 알아보기
Python의 모든 것은 객체다 파이썬의 메모리 관리 방법을 이해하려면, 우선 파이썬의 모든 것이 객체라는 것을 이해해야 한다. 이는 파이썬의 모든 것은 Heap 영역에 동적으로 할당된 객체를 참조하는 것이라는 말과 동일하다. 실제로 파이썬의 메모리 할당 과정은 다음과 같다. 그림에서 알 수 있듯, Heap 메모리 영역에 동적으로 할당된 객체를 모든 것(변수, 함수)들이 참조하는 구조다. 메모리가 동적으로 할당 된다는 것은, 결국 런타임 시 메모리가 할당된다는 것을 의미한다. 파이썬의 프로그램은 Byte-code(바이트 코드)를 인터프리터가 한 줄 씩 읽어가며 실행되기 때문에 동적 할당과 잘 맞다. 메모리 해제? 동적으로 메모리를 할당할 경우, 자료의 크기 등을 자유롭게 관리할 수 있어 편리하다는 장점이..
2022.06.03
no image
[Python] Global Interpreter Lock(GIL)은 왜 도입됐고, 어떤 특징이 있나요?
Global Interpreter Lock(GIL)? GIL은 문자 그대로 인터프리터에 대한 Lock이다. Lock은 인터프리터가 여러 스레드를 병렬적으로(Parallel) 실행하지 않도록 막는다. 파이썬엔 GIL이 있기 때문에, 인터프리터가 매 순간 1개의 쓰레드만 실행할 수 있다. 결국 파이썬의 멀티 스레딩은 병렬적(Parallel)으로 실행되는 대신, 동시적으로(Concurrent) 실행된다. 이때 여러 스레드 중 실행 될 1개의 스레드를 정하려면, 스레드 스케줄러가 필요하다. 하지만 파이썬은 자체적인 스케줄러가 없어서, OS의 스레드 스케줄링을 그대로 활용한다. 그래서 I/O Block이 발생할 경우 GIL도 마찬가지로 Release된다. 따라서 I/O Bound 작업의 경우, 멀티 스레딩으로 병..
2022.06.03
no image
Python의 메모리 절약법 : Object Interning(객체 재사용)
Mutable vs Immutable 파이썬의 객체는 생성 후 값을 변경할 수 있는지 여부에 따라 mutable, immutable로 나뉜다. 객체의 값을 변경할 수 있다는 것은, 그 값이 변경돼도 같은 메모리 주소를 가진다는 것을 의미한다. 그래서 mutable 객체인 List는 값을 막 바꿔봐도 id가 변하지 않는다. x = [1,2,3] y = x print(id(x)) print(id(y)) y[0] = 3 print(id(y)) print(id(x)) 2062815432192 2062815432192 2062815432192 2062815432192 하지만 immutable 객체인 int의 경우 값을 바꾸면 id가 변하게 된다. 이는 값이 변경되면서, 기존과 다른 새로운 객체를 가리키기 때문이다..
2022.06.03