촉촉한초코칩

딥러닝 모델 경량화 본문

Study/PBL

딥러닝 모델 경량화

햄친구베이컨 2024. 7. 11. 23:09

1. 프루닝 (Pruning)

  • 모델에서 중요하지 않은 뉴런, 가중치 제거
  • 모델 크기를 줄이고 속도 향상
  • 도구 : Tensorflow model optimization toolkit, PyTorch의 TorchScript 등

2. 양자화 (Quantization)

  • 가중치와 활성화 값을 낮은 비트 정밀도로 표현
  • 메모리 사용량을 줄이고 계산 속도 높임
  • 도구 : Tensorflow lite, PyTorch의 Quantization API

3. 지식 증류 (Knowledge Distillation)

  • 큰 모델의 지식을 작은 모델로 전이
  • 작으 모델이 큰 모델의 성능을 유지할 수 있도록 함
  • 도구 : Tensorflow, PyTorch

4. 경량화 모델 아키텍처 사용

  • 경량화된 모델 아키텍처를 설계하거나 사용
  • 처음부터 경량화된 모델을 사용
  • 예시 : MobileNet, SqueezeNet, EfficientNet 등

5. 모델 압축 및 변환

  • 모델 파일을 압축하고 Tensorflow lite나 ONNX와 같은 경량화된 형식으로 변환 
  • 파일 크기를 줄이고 배포 및 실행 용이
  • 도구 : Tensorflow lite converter, ONXX 등 

 

Tensorflow lite 코드 

import tensorflow as tf

# 기존 TensorFlow 모델 로드
model = tf.keras.models.load_model('your_model.h5')

# TensorFlow Lite 변환기 생성
converter = tf.lite.TFLiteConverter.from_keras_model(model)

# 양자화 적용
converter.optimizations = [tf.lite.Optimize.DEFAULT]

# TFLite 모델로 변환
tflite_model = converter.convert()

# TFLite 모델 저장
with open('model.tflite', 'wb') as f:
    f.write(tflite_model)

 

PyTorch Mobile 코드

import torch

# 기존 PyTorch 모델 로드
model = torch.load('your_model.pth')

# TorchScript로 모델 변환
scripted_model = torch.jit.script(model)

# 양자화 적용
quantized_model = torch.quantization.quantize_dynamic(
    scripted_model, {torch.nn.Linear}, dtype=torch.qint8
)

# TorchScript 모델 저장
quantized_model.save('model.pt')

 

https://blog.mathpresso.com/%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%EC%B5%9C%EC%A0%81%ED%99%94-bb96b5c32c0c

 

모델 경량화 됐는지 확인하는 방법

1. 모델 크기 비교 

import os

before_size = os.path.getsize('path_to_original_model.h5')
after_size = os.path.getsize('path_to_optimized_model.h5')

print(f"Original model size: {before_size} bytes")
print(f"Optimized model size: {after_size} bytes")

2. 성능 평가 

from sklearn.metrics import accuracy_score

# Assuming you have X_test and y_test
original_model_accuracy = accuracy_score(y_test, original_model.predict(X_test))
optimized_model_accuracy = accuracy_score(y_test, optimized_model.predict(X_test))

print(f"Original model accuracy: {original_model_accuracy}")
print(f"Optimized model accuracy: {optimized_model_accuracy}")

3. 추론 시간 비교 

import time

# Original model inference time
start_time = time.time()
original_model.predict(X_test)
original_inference_time = time.time() - start_time

# Optimized model inference time
start_time = time.time()
optimized_model.predict(X_test)
optimized_inference_time = time.time() - start_time

print(f"Original model inference time: {original_inference_time} seconds")
print(f"Optimized model inference time: {optimized_inference_time} seconds")

4. 메모리 사용량 비교 

import tracemalloc

# Original model memory usage
tracemalloc.start()
original_model.predict(X_test)
original_memory = tracemalloc.get_traced_memory()
tracemalloc.stop()

# Optimized model memory usage
tracemalloc.start()
optimized_model.predict(X_test)
optimized_memory = tracemalloc.get_traced_memory()
tracemalloc.stop()

print(f"Original model memory usage: {original_memory}")
print(f"Optimized model memory usage: {optimized_memory}")

'Study > PBL' 카테고리의 다른 글

[혼공머신] Ch03  (0) 2024.07.17
[혼공머신] Ch01, 2  (2) 2024.07.12
Deep Fake voice recognition  (0) 2024.07.11
Machine Learning 3  (0) 2024.05.28
Machine Learning 2  (0) 2024.05.27