전체 글

전체 글

    Introduction to Machine Learning in Production (0) - Overview

    Introduction to Machine Learning in Production (0) - Overview

    본 글은 Coursera의 Machine Learning Engineering for Production (MLOps) 특화 과정의 일부인 Introduction to Machine Learning in Production 강좌의 내용을 개인적인 의견과 함께 정리한 글이다. 원 강좌 내용에 관심이 생긴다면 한번 수강해 보도록 하자! Class Overview 머신 러닝 학계를 들여다 보면, 실제 세계의 문제를 해결하고자 하는 머신 러닝 알고리즘 논문이 하루에도 수십, 수백 편 씩 아카이브에 게재된다. 이렇게 계속 새롭게 등장하는 ML 알고리즘들은 성능의 정량적 비교를 위해 고정된 데이터셋 하에서 통제된 학습/테스트 셋 조건을 이용해 평가되고, 한 시점에서 가장 높은 성능을 내는 알고리즘이 SOTA (St..

    [Python] 클래스가 object를 상속받는 경우

    [Python] 클래스가 object를 상속받는 경우

    Introduction 남의 파이썬 코드를 보다 보면, 종종 다음과 같은 형태의 클래스 선언과 마주하게 된다. class MyClass(object): # blah blah... 일단은 해당 라인만 보면 내가 선언한 클래스가 object 클래스를 상속 받아서 뭔가를 하고 있는 것처럼 보인다. 하지만 스크롤을 더 내려 봐도 상속을 받아서 따로 하는 것도 없어 보이고, 심지어는 object 상속을 제거해도 코드는 아무런 에러 없이 멀쩡히 돌아간다! 대체 이건 용도가 무엇이며 왜 굳이 넣는 걸까? 결론부터 말하자면, 파이썬 3에서의 object 상속은 표기상의 차이 이외에 상속 관계가 없는 클래스 선언과 아무런 차이점이 없다. 파이썬 2 (정확히는 2.2 이상) 에서는 클래스에 object를 명시적으로 상속시..

    [Python] 프로파일링 (profiling)

    [Python] 프로파일링 (profiling)

    Introduction 파이썬 코드를 작성하다 보면 성능 최적화를 위해 코드의 실행 시간을 정확히 측정하고 싶을 때가 있다. 물론 아래와 같이 time 모듈을 이용해 시간 성능 저하가 예상되는 일부 코드 블럭의 실행 시간을 직접 측정해 볼 수 있지만, 요소별로 실행 시간을 측정하기가 불편하고, 무엇보다도 파이썬의 동적인 특성으로 인해 예상되는 지연 구간과 실제 지연이 일어나는 부분이 다를 수 있다는 문제가 있다. from time import time from math import sin, cos, pi def projectile_landing_position(velocity, angle, g_constant): """ XY평면 (0,0) 좌표에서 X축 기준 angle(deg,

    [Python] 파이썬 3.10 기능 소개

    [Python] 파이썬 3.10 기능 소개

    Introduction 최근에 파이썬 3.10 업데이트 관련 소식이 간간히 들려오는데, 문득 어떤 점이 달라진 건지 궁금해진 차에 한번 관련 내용들을 정리해 보기로 했다. 이번 글에서는 파이썬 3.10의 주요 새 기능들을 간략히 정리할 예정이다. 글의 내용은 Python 3.10 beta 3 (3.10.0b3, 2021년 6월 17일 release) 를 기준으로 한다. 그리고 대부분의 예제 코드는 공식 도큐멘테이션을 참고했다! 맨 아래에 직접 pre-release 를 다운로드 할 수 있는 링크도 남겨두었으니 한번씩 체험해 봐도 좋을 듯 하다. (다음 글) [Python] 파이썬 3.11 기능 소개 1. 타입 힌트 관련 파이썬의 타입 힌트 기능에 관련된 기초적인 내용은 여기를 참고하자. 파이썬 자체는 동적..

    [Python] 파이썬 디버거 (pdb)

    [Python] 파이썬 디버거 (pdb)

    Introduction 내가 작성한 파이썬 코드가 예상하던 대로 작동하지 않거나, 예기치 못한 오류로 자꾸 종료된다면 프로그램 내부의 지역 변수를 들여다 보고 원하는 지점에 원하는 값이 대입되고 있는 지를 한번 확인해 보면 좋을 것이다. 이를 위해서, 간단하게는 print 함수를 써서 확인이 필요한 지점마다 값을 출력하게 해 프로그램 실행 중의 변수를 확인하거나, 조그만 테스트 코드를 작성해 문제가 될 만한 상황을 재현해 볼 수 있다. 하지만 프로그램과 데이터의 규모가 커지고 복잡해질수록, 위와 같은 방법만으로는 문제의 원인을 해결하기가 여전히 어려울 수 있다. 이런 상황에서는 파이썬 디버거 (pdb) 가 유용한 해결책이 될 수 있다. pdb - Python debugger pdb 모듈은 파이썬을 위한 ..

    [Python] FIFO 큐와 데크(Deque)

    [Python] FIFO 큐와 데크(Deque)

    Introduction 프로그램을 작성하다 보면 선입선출 (First-In First-Out, FIFO) 구조를 위해 큐 (Queue) 자료구조를 활용하면 좋을 때가 있다. FIFO 구조란 더 먼저 추가된 데이터를 먼저 사용하도록 하는, 말 그대로 순차적인 대기열을 떠올리면 이해가 편하다. 파이썬에서는 종종 이런 큐 자료구조를 이용해야 할 때, 기본적인 list 자료형에다 append와 pop(0) 메서드를 붙여서 간편하게 큐 자료구조를 흉내내 쓰곤 한다. List Implementation 예를 들어, 아래와 같이 먼저 빈 리스트 오브젝트를 하나 생성한 후 append를 호출해 리스트 맨 뒤에 새로운 원소를 추가할 수 있으며, 반대로 pop(0)을 호출해 리스트 맨 앞의 원소를 제거하고, 그 값을 반환..

    [PyTorch] 파이토치 프로파일링 (PyTorch profiler API)

    [PyTorch] 파이토치 프로파일링 (PyTorch profiler API)

    Introduction 지지난 글에서는, 파이썬 코드를 실행할 때 코드의 시간 성능을 프로파일러 (profiler) 를 이용해 측정하는 방법을 알아봤었다. 여기 (지지난 글이었지만 글을 수정 하면서 발행일을 업데이트 했고... 목록의 한참 위로 올라가 버렸다) 함수의 호출 수와 개별 / 누적 소모 시간을 한 번에 정리해 주기 때문에 어느 구간에서 프로그램의 연산 병목이 일어나고 있는지 쉽게 찾을 수 있다. 그렇다면 비슷한 느낌으로 파이토치 연산의 전체적인 시간 / 메모리 성능을 한 눈에 보기 쉽게 정리해 주는 기능은 없을까? 일단 위의 프로파일러는 CPU 상에서 실행되는 함수만을 트래킹 하기 때문에, 대부분 GPU를 사용하는 파이토치 모델의 성능 측정에 사용하기에는 적합하지 않다. 다행히도 파이토치 라이..

    [PyTorch] 재현성 (Reproducibility)

    [PyTorch] 재현성 (Reproducibility)

    Introduction 파이토치를 이용하다 보면, 분명 똑같은 세팅으로 실험을 돌렸음에도 불구하고 학습 loss나 세세한 inference 결과 등이 조금씩 차이나는 현상을 볼 수 있다. 분명 non-deterministic 한 부분 (랜덤 시드 등) 을 다 통제했다고 생각했는데, 결과가 매번 다르니 굉장히 난감할 것이다. 오늘은 이에 대한 원인을 간략히 짚어보고, 파이토치의 재현성 (reproducibility) 을 어떻게 보장할 수 있는가에 대해 간단히 정리할 생각이다. 본론부터 말하면, 파이토치가 랜덤한 동작을 보이는 원인은 크게 파이토치 내/외부의 난수 생성기 (random number generator) cuDNN의 컨볼루션 벤치마킹 그리고 PyTorch에서 사용하는 알고리즘 자체의 non-de..