記事検索

検索ワードを入力してください。
Sky Tech Blog
ディープラーニングモデル学習時の​GPUメモリ節約方​法

ディープラーニングモデル学習時の​GPUメモリ節約方​法

ディープラーニングモデルの学習時にGPUメモリ不足を解決するための手法「Gradient Checkpointing」について説明しています。この手法はメモリ消費量を抑えつつ、学習時間の増加を伴うが、バッチサイズを増やすことで高速化も可能です。

ディープラーニングモデルの学習でGPUメモリが足りず、モデルサイズや画像サイズ、トークン長、バッチサイズを大きくできないなど困ったことはありませんか?
今回はディープラーニングモデル学習時のGPUメモリを大幅に節約できる、「Gradient Checkpointing」という手法を紹介します。

Gradient Checkpointingとは

Gradient Checkpointingは勾配計算を工夫することでメモリ消費量を大幅に抑えられる手法です。
そのトレードオフとして、学習時間が増加します(メモリを抑えられる分バッチサイズを増やすことができるので、実際にはその差し引きで高速化することもあります)。
近年のTransformer系のモデルはモデル自体のサイズが大きく、少ないGPUでこれらのモデルを学習させるにはGradient Checkpointingは必須と言ってよいほど重要な手法となっています。

使用方​法

Gradient Checkpointingをスクラッチで実装するにはモデルの勾配計算に関する深い知識が必要となり、非常に難易度が高いです。
今回は簡単にGradient Checkpointingを使用する方法として下記の2通りを紹介します。

使用方​法①:timmライブラリの​モデルを​使う

timm : GitHub - huggingface/pytorch-image-models

timmは数々の事前学習済みモデルを手軽に利用できる便利な画像認識ライブラリです。
(Kaggleの画像認識コンペでは必ずといってよいほど使われており、画像認識タスクにとって必須級のライブラリです)
timmを使えば事前学習済みモデルのインスタンス化とGradient Checkpointingの有効化を以下のように簡単に行うことができます。

import timm
model = timm.create_model(model_name="efficientnet_b0", pretrained=True, num_classes=10) # モデルのインスタンス化
model.set_grad_checkpointing() # Gradient Checkpointingを有効化

※モデルによってはGradient Checkpointingが未実装の場合もあります

使用方​法②:Hugging Faceライブラリの​モデルを​使う

Hugging Face : Efficient Training on a Single GPU (huggingface.co)

Hugging FaceのモデルにはGradient Checkpointingが実装されているモデルが多くあります(一部のモデルでは非対応で使えないケースがあります)。
Gradient Checkpointingを有効化する方法はこちらも簡単で、モデルインスタンスに対して以下のようにgradient_checkpointing_enable()を設定するだけです。

from transformers import AutoConfig, AutoModel
from torch.utils.checkpoint import checkpoint

# initializing model
model_path = "microsoft/deberta-v3-base"
config = AutoConfig.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path, config=config)

# gradient checkpointing
model.gradient_checkpointing_enable()
print(f"Gradient Checkpointing: {model.is_gradient_checkpointing}")

最後に

GPUのメモリ節約方法はいくつかありますが、その中でもGradient Checkpointingは実装済みのライブラリを使用すればお手軽に使用できるのでオススメです。
GPUメモリが足りず学習で困っている場合は是非試してみて下さい。


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム