すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:EasyCkpt

最終更新日:Sep 12, 2026

EasyCkpt を Megatron または DeepSpeed と併用することで、PyTorch のトレーニングチェックポイントをほぼゼロのオーバーヘッドで保存し、失われたイテレーションを再計算することなく障害から復旧します。

大規模な GPU クラスターでの基盤モデルのトレーニングは、ハードウェア障害、システム障害、ネットワークエラーによって頻繁に中断されます。従来のチェックポイント作成では、数百億から数千億のパラメータを持つモデルの場合、完了までに数分かかり、各保存中にトレーニングが一時停止します。トレーニングが中断されると、最後のチェックポイント以降のすべてのイテレーションを再計算する必要があります。

EasyCkpt は、非同期階層チェックポイント処理を使用して、トレーニングを一時停止することなくモデルの状態を保存します。GPU 全体に保存されているデータレプリカを使用して障害から復旧するため、再計算が不要になります。

アーキテクチャ

EasyCkpt は、3 つの技術を使用して、トレーニングを一時停止することなくモデルの状態を保存します。

  • 非同期階層チェックポイント処理により、まず状態をメモリにコピーし、その後バックグラウンドでディスクに書き込みます

  • チェックポイントと計算のオーバーラップにより、チェックポイント作成が非同期で実行されている間もトレーニングを継続します

  • ネットワークを考慮した非同期チェックポイント処理により、部分的な障害が発生しても利用可能なネットワークインターフェースを使用します

この設計は、障害発生時の3つの特性を活用しています。

障害は特定のワーカーに影響を与えます。障害は通常、1 台または 2 台のマシンから発生し、分散トレーニングジョブ全体ではなく、一部のワーカーにのみ影響します。

障害は特定のコンポーネントに影響を与えます。GPU エラーは CPU およびメモリ操作に影響を与えません。エラーは特定のネットワークインターフェースでのみ発生するため、ノードは部分的な障害があっても通信を継続できます。

障害は特定のモデルレプリカに影響を与えます。基盤モデルのトレーニングでは、3D 並列処理 (データ、テンソル、パイプライン) または Zero Redundancy Optimizer (ZeRO) を使用し、GPU 全体で複数のデータレプリカを維持します。1 つの GPU に障害が発生した場合、トレーニングは他のマシン上のレプリカから復旧します。

前提条件

AIMaster SDK のインストール

お使いの Python のバージョンに応じて pip install を実行してください:

# Python 3.6
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp36-cp36m-linux_x86_64.whl

# Python 3.8
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp38-cp38-linux_x86_64.whl

# Python 3.10
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp310-cp310-linux_x86_64.whl

Megatron との統合

EasyCkpt を統合するには、トレーニングループファイル (例: training.py) を修正し、モデルファイル (例: pretrain_gpt.py) にフックをインポートします。

トレーニングループの変更

Megatron ネイティブの load_checkpoint インポートを EasyCkpt のバージョンに置き換え、トレーニングループに initialize_easyckpt と save_checkpoint_if_needed の呼び出しを追加します。

from megatron.core.utils import get_model_config
from megatron import print_rank_0
from megatron import print_rank_last
# Megatron ネイティブの load_checkpoint を EasyCkpt のものに置き換えます
# from megatron.checkpointing import load_checkpoint
from megatron.checkpointing import save_checkpoint
from megatron.model import Float16Module
from megatron.model import GPTModel
from megatron.utils import report_memory
from megatron.model.vision.knn_monitor import compute_feature_bank

# EasyCkpt の関数をインポートします
from aimaster.python.torch.easyckpt.megatron import (load_checkpoint,
                                                    initialize_easyckpt,
                                                    save_checkpoint_if_needed)

def print_datetime(string):
    """この呼び出しはすべてのランクで同期されることに注意してください。"""
    timers('interval-time', log_level=0).start(barrier=True)
    print_datetime('before the start of training step')
    report_memory_flag = True

    # トレーニングループの前に EasyCkpt を初期化します。
    # save_mem_interval=1: イテレーションごとにメモリにコピー
    # save_storage_interval=5: 5 イテレーションごとにストレージに書き込み
    # max_ckpt_num=5: ディスクに最大 5 つのチェックポイントを保持
    initialize_easyckpt(save_mem_interval=1,
                        save_storage_interval=5,
                        max_ckpt_num=5,
                        log_file_path='./test.log')

    while iteration < args.train_iters:
        if args.profile and \
           iteration == args.profile_step_start and \
                                       args.micro_batch_size * \
                                       get_num_microbatches()

        # 条件が満たされた場合にインメモリチェックポイントを作成します
        save_checkpoint_if_needed(iteration, model, optimizer, opt_param_scheduler)

        # ログ記録
        loss_scale = optimizer.get_loss_scale().item()
        params_norm = None

EasyCkpt フックのインポート

モデルトレーニングファイル (例: pretrain_gpt.py) で、EasyCkpt Megatron フックをインポートします:

from megatron.utils import average_losses_across_data_parallel_group
from megatron.arguments import core_transformer_config_from_args

# 非同期チェックポイント処理を有効にするために EasyCkpt フックをインポートします
import aimaster.python.torch.easyckpt.megatron.hook

def model_provider(pre_process=True, post_process=True):
    """モデルをビルドします。"""

関連 API

EasyCkpt は、Megatron との統合用に 3 つの関数を提供します。

initialize_easyckpt

EasyCkpt を初期化します。トレーニングループの前にこの関数を呼び出してください。

initialize_easyckpt(save_mem_interval, save_storage_interval, max_ckpt_num, log_file_path=None)

パラメータ

型

デフォルト

説明

save_mem_interval

int

1

モデルの状態をメモリにコピーする頻度 (イテレーション単位)

save_storage_interval

int

1

チェックポイントを永続ストレージに非同期で書き込む頻度 (イテレーション単位)

max_ckpt_num

int

1

ディスクに保持するチェックポイントの最大数。古いチェックポイントは自動的に削除されます

log_file_path

str

None

チェックポイント作成ログファイルのパス

load_checkpoint

ネイティブの Megatron load_checkpoint() 関数を、分散オプティマイザーのサポートのため concat パラメーターで拡張します。

load_checkpoint(model, optimizer, opt_param_scheduler, load_arg='load', strict=True, concat=False)

パラメータ

型

デフォルト

説明

model

Model

必須

Megatron モデルのインスタンス

optimizer

Optimizer

必須

オプティマイザーのインスタンス

opt_param_scheduler

Scheduler

必須

オプティマイザーパラメータのスケジューラ

load_arg

str

'load'

ロードディレクトリの引数名

strict

bool

True

ステート辞書の一致を厳密に強制するかどうか

concat

bool

False

インスタンス数の変更時、または分散オプティマイザーのパラメーターのマージ時に True に設定します

説明

分散オプティマイザーが有効になっている Megatron 2305 または 2306 では、分散オプティマイザーのパラメーターの読み込みまたはマージ中にインスタンス数を変更する場合は、load_checkpoint() で concat=True を設定します。

Megatron 2304 では、ネイティブの load_checkpoint を EasyCkpt 版に置き換えます。

save_checkpoint_if_needed

インメモリチェックポイントを作成します。トレーニングループ内でこの関数を呼び出してください。

save_checkpoint_if_needed(iteration, model, optimizer, opt_param_scheduler)

パラメータ

型

デフォルト

説明

iteration

int

必須

現在のトレーニングのイテレーション番号

model

Model

必須

Megatron モデルのインスタンス

optimizer

Optimizer

必須

オプティマイザーのインスタンス

opt_param_scheduler

Scheduler

必須

オプティマイザーパラメータのスケジューラ

すべてのパラメータは、トレーニングループ内にある Megatron の変数です。

DeepSpeed との統合

Transformers Trainer を使用する DeepSpeed タスクでは、EasyCkpt は TrainerWrapper クラスを介して統合されます。

チェックポイントパラメータの設定

EasyCkpt は、標準の Transformers のチェックポイントパラメータを再利用します。これらを起動スクリプトに追加します。

--max_steps=10 \
--block_size=2048 \
--num_train_examples=100000 \
--gradient_checkpointing=false \
--save_strategy="steps" \
--save_steps="2" \
--save_total_limit="2"

この例では、2 ステップごとにチェックポイントを保存し、最大 2 つのチェックポイントを保持します。

Trainer のラップ

EasyCkpt の Transformers モジュールから TrainerWrapper をインポートし、お使いの Trainer インスタンスをラップしてチェックポイントの再開を有効にします:

import datasets
import transformers

# Transformers Trainer 用の EasyCkpt ラッパーをインポートします
from aimaster.python.torch.easyckpt.transformers import TrainerWrapper

logger = logging.getLogger(__name__)

    tokenizer=tokenizer,
    data_collator=transformers.default_data_collator,
  )
  # 非同期チェックポイント処理を有効にするために Trainer を EasyCkpt でラップします
  trainer = TrainerWrapper(trainer)
  # 最新のチェックポイントから自動的に再開します
  trainer.train(resume_from_checkpoint=True)

if __name__ == "__main__":
  main()

関連 API

TrainerWrapper

Transformers の Trainer インスタンスをラップして、非同期チェックポイント機能を提供します。

from aimaster.python.torch.easyckpt.transformers import TrainerWrapper

trainer = TrainerWrapper(trainer)
trainer.train(resume_from_checkpoint=True)

チェックポイントパラメータ

これらのパラメーターは、標準の Transformers TrainingArguments の定義に準拠しています:

パラメータ

型

有効な値

説明

save_strategy

str

"no", "epoch", "steps"

チェックポイントを保存するタイミング。 no: 保存を無効にします。 epoch: 各エポックの終了時に保存します。 steps: save_steps で指定された間隔で保存します。

save_steps

int

正の整数

チェックポイントを保存するステップ間隔。save_strategy="steps" の場合にのみ適用されます。

save_total_limit

int

正の整数

保持されるチェックポイントの最大数。この制限に達すると、古いチェックポイントは自動的に削除されます

警告

save_total_limit を有効にすると、古いチェックポイントが自動的に削除されます。 それらのフォルダーに保存されているデータは、削除される前にバックアップしてください。 詳細については、「Transformers の公式ドキュメント」をご参照ください。

データセキュリティ

EasyCkpt は、お客様が指定したストレージディレクトリ内でのみデータの読み書きを行います。チェックポイントの最大数を維持するために、古いチェックポイントを削除することがあります。

Platform for AI (PAI) は、以下の動作を保証します。

  • すべての操作は、設定された保存およびロードディレクトリに限定されます。

  • すべての保存および削除操作はログに記録されます。

重要

モデルの保存またはロードディレクトリに他のデータを保存しないでください。EasyCkpt が正しく機能しない可能性があり、結果として生じるデータ損失についてはお客様の責任となります。