본문 바로가기
인공지능/데이터 분석

[데이터 분석] Joblib 라이브러리

by 클레어몬트 2024. 12. 17.

ㅇJoblib 라이브러리: Python에서 데이터 직렬화, 병렬처리 및 메모리 효율적인 데이터 처리에 사용되는 라이브러리

주로 머신러닝이나 데이터 과학 작업에서 모델을 저장하거나 대규모 데이터를 처리할 때 유용하게 사용된다. joblib은 표준 라이브러리인 pickle과 유사하지만 더 빠르고 효율적으로 동작한다는 장점이 있다.

데이터 분석이나 머신러닝 프로젝트에서는 pickle보다 joblib을 더 선호하는 추세이다 (특히, NumPy 배열을 다룰 때)

 

 

[joblib의 주요 기능]

1. 데이터 직렬화 역직렬화를 통한 모델 저장과 불러오기

2. 메모리 캐싱을 통한 계산 최적화

3. 병렬 처리를 통한 성능 향상

 

 

[데이터 직렬화 역직렬화]

joblib의 dump() 와 load() 함수는 데이터나 머신러닝 모델을 파일로 저장하고 불러올 때 사용된다. 이 기능은 학습된 모델을 나중에 재사용하거나 공유할 때 매우 유용하다. 예를 들어 scikit-learn으로 학습한 모델을 저장할 때 다음과 같이 사용한다.

from joblib import dump, load
from sklearn.linear_model import LogisticRegression

# 모델 훈련
model = LogisticRegression()
model.fit([[0, 0], [1, 1]], [0, 1])

# 모델 저장
dump(model, 'logistic_model.joblib')

# 모델 불러오기
loaded_model = load('logistic_model.joblib')
print(loaded_model.predict([[1, 1]]))

 

이 코드에서 dump()를 사용하면 모델이 logistic_model.joblib 파일로 저장되고, load()를 사용하면 파일에 저장된 모델을 다시 불러와 사용할 수 있다. joblib은 pickle보다 큰 데이터를 더 빠르게 직렬화할 수 있다는 점에서 장점이 있다.

 

 

[메모리 캐싱]

joblib의 Memory 객체를 사용하면 동일한 계산을 반복할 때 시간을 절약할 수 있다. 계산 결과를 캐싱해 두고 이미 계산된 결과는 재사용하기 때문이다. 이 기능은 특히 시간이 오래 걸리는 함수나 반복 작업에 유용하다. (DP 메모이제이션 및 타뷸레이션과 유사)

from joblib import Memory
import time

cachedir = './cachedir'
memory = Memory(cachedir, verbose=0)

@memory.cache
def expensive_function(x):
    time.sleep(2)  # 오래 걸리는 작업 시뮬레이션
    return x * x

# 첫 호출 (계산 수행)
print(expensive_function(4))  # 출력: 16 (2초 대기)

# 두 번째 호출 (캐시 사용)
print(expensive_function(4))  # 출력: 16 (즉시 반환)

 

이 코드에서 Memory 객체는 함수의 입력값과 결과를 캐싱하고, 동일한 입력이 들어오면 캐시에서 결과를 반환한다. 이를 통해 불필요한 계산을 줄일 수 있다.

 

 

[병렬 처리]

joblib의 Parallel과 delayed를 사용하면 반복 작업을 병렬로 실행할 수 있다. 이는 CPU의 여러 코어를 활용해 작업 속도를 높이는 데 도움을 준다.

from joblib import Parallel, delayed
import time

def work_function(x):
    time.sleep(1)
    return x * 2

# 병렬 처리
results = Parallel(n_jobs=4)(delayed(work_function)(i) for i in range(8))
print(results)

 

여기서 n_jobs=4는 작업을 4개의 CPU 코어에서 병렬로 실행하라는 의미이다. 전체 작업은 총 8개로, 병렬 처리를 사용하지 않는다면 약 8초가 걸리지만 병렬 처리로 4개의 작업이 동시에 실행되므로 약 2초 정도 소요된다.

 

 

[joblib과 pickle의 차이점]

joblib과 pickle 모두 직렬화에 사용되지만 joblib은 numpy 배열과 같은 대용량 데이터 처리를 더 빠르게 수행한다. joblib은 대용량 데이터를 효율적으로 압축할 수 있도록 설계되어 있으므로 머신러닝 모델 직렬화에 더 적합하다.

 

joblib은 직렬화, 메모리 캐싱, 병렬 처리 등 데이터 과학 및 머신러닝 프로젝트에서 필수적인 기능을 제공하는 강력한 라이브러리이다. 모델 저장 및 불러오기, 반복 계산 최적화, 병렬 작업 등 다양한 기능을 통해 작업 시간을 단축하고 효율성을 높일 수 있다. 직렬화와 병렬 처리를 효율적으로 수행하고자 한다면 joblib은 반드시 고려해야 할 도구이다. '폭립'같은 joblib 최고!

'인공지능 > 데이터 분석' 카테고리의 다른 글

[데이터 분석] Pandas 라이브러리  (2) 2024.12.15