파이썬/파이썬 활용 팁
파이썬 인스턴스 (AI 모델 포함) 크기 측정 방법
GIL~
2022. 1. 14. 12:17
파이썬 인스턴스 크기는 sys.getsizeof를 이용하여 측정할 수 있습니다.
크기가 100과 1000000인 난수 배열의 크기를 측정해보겠습니다.
먼저 난수 배열을 다음과 같이 생성합니다.
import numpy as np
small_arr = np.random.random(100)
large_arr = np.random.random(1000000)
다음으로 크기를 측정합니다.
print(sys.getsizeof(small_arr))
print(sys.getsizeof(large_arr))
[실행 결과]
896
8000096
크기가 잘 측정되는 것으로 보입니다.
그럼 머신러닝 모델의 인스턴스도 잘 측정되는지 보겠습니다.
먼저 5개의 트리로 구성된 작은 랜덤포레스트 모델과 100개 트리로 구성된 큰 랜덤포레스트 모델을 학습합니다.
from sklearn.ensemble import RandomForestRegressor as RFR
X = np.random.random((100, 10))
Y = np.random.random(100)
small_model = RFR(5).fit(X, Y)
large_model = RFR(100).fit(X, Y)
아까와 같은 방법으로 크기를 측정해보겠습니다.
print(sys.getsizeof(small_model))
print(sys.getsizeof(large_model))
[실행 결과]
48
48
당연히 large_model이 더 커야하지만 그렇지 않게 나옵니다. 또, 앙상블 모델이 크기 100짜리 배열보다 가볍다는게 잘 이해가 가지 않습니다. 그 이유는 sys.getsizeof는 내장 자료형에 대해서만 잘 작동하기 때문입니다.
어느 상황에서도 쓰려면 아래 함수가 적절합니다.
import sys
from types import ModuleType, FunctionType
from gc import get_referents
def getsize(obj):
BLACKLIST = type, ModuleType, FunctionType
seen_ids = set()
size = 0
objects = [obj]
while objects:
need_referents = []
for obj in objects:
if not isinstance(obj, BLACKLIST) and id(obj) not in seen_ids:
seen_ids.add(id(obj))
size += sys.getsizeof(obj)
need_referents.append(obj)
objects = get_referents(*need_referents)
return size
다시 모델의 크기를 측정해보겠습니다.
print(getsize(small_model))
print(getsize(large_model))
[실행 결과]
4934
45138
이번엔 잘 나온 것으로 보입니다.
배열 크기도 측정해보겠습니다.
print(sys.getsizeof(small_arr))
print(sys.getsizeof(large_arr))
[실행 결과]
896
8000096
정리하자면, getsize 함수를 위와 같이 만들어서 사용하는 것이 좋습니다.