🌞
【13日目】量子化をやってみる【2021アドベントカレンダー】
2021年1人アドベントカレンダー(機械学習)、13日目の記事になります。
テーマは 量子化 になります。
量子化とは、重みなどのパラーメータをより小さいビットで表現することで、モデルの軽量化を図る手法。
使用するビットを制限することでネットワークの構造を変えずにメモリ使用量を削減できます。
使っている手法がニューラルネットワークではありませんが、float64 と float16 で比較してみます。
Colab のコードはこちら
再現性確保のため、以下の記事を参考に 少し LightGBM の実装部分を改変しました。
詳細は 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