🌞

【13日目】量子化をやってみる【2021アドベントカレンダー】

2021/12/13に公開

2021年1人アドベントカレンダー(機械学習)、13日目の記事になります。

https://qiita.com/advent-calendar/2021/solo_advent_calendar

テーマは 量子化 になります。

量子化とは、重みなどのパラーメータをより小さいビットで表現することで、モデルの軽量化を図る手法。
使用するビットを制限することでネットワークの構造を変えずにメモリ使用量を削減できます。

https://laboro.ai/activity/column/engineer/ディープラーニングを軽量化するモデル圧縮/

使っている手法がニューラルネットワークではありませんが、float64 と float16 で比較してみます。

Colab のコードはこちら Open In Colab

再現性確保のため、以下の記事を参考に 少し LightGBM の実装部分を改変しました。
https://book-read-yoshi.hatenablog.com/entry/2021/03/22/lightgbm_optuna_deterministic

https://optuna.readthedocs.io/en/stable/reference/generated/optuna.integration.lightgbm.LightGBMTuner.html

詳細は Colab をご覧ください。

量子化

変換前

# 目的変数
print(y_train.dtypes)

# 説明変数
display(pd.DataFrame(X_train_ce.dtypes).T)

X_train_ce = X_train_ce.astype(np.float16)
y_train = y_train.astype(np.float16)

変換後

# 目的変数
print(y_train.dtypes)

# 説明変数
display(pd.DataFrame(X_train_ce.dtypes).T)

print("float64 RMSE:", round(np.mean(cv_result), 3))
print(f"float64 経過時間:{elasped_time}秒")

print("float16 RMSE:", round(np.mean(cv_result_quant), 3))
print(f"float16 経過時間:{elasped_time_quant}秒")

量子化したほうが処理時間が長くなってしまう結果となった...。

内訳 RMSE 処理時間
float64 0.18226 163.0秒
float16 0.17724 249.1秒

13日目は以上になります、最後までお読みいただきありがとうございました。

Discussion