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

Platform For AI:FastNN

最終更新日:Apr 08, 2025

Fast Neural Network (FastNN) は、PAISoar フレームワークに基づく分散ニューラルネットワークライブラリです。FastNN は、Inception、Residual Networks (ResNet)、Visual Geometry Group (VGG) などの一般的なニューラルネットワークをサポートしており、将来的にはより高度なモデルをリリースする予定です。FastNN は、Platform for AI (PAI) の Machine Learning Designer に統合されています。 PAI制御台PAI コンソールで FastNN を使用できます。

警告

GPU アクセラレーションサーバーは段階的に廃止されます。CPU サーバーで実行される TensorFlow タスクを送信できます。モデルトレーニングに GPU インスタンスを使用する場合は、Deep Learning Containers (DLC) にアクセスしてジョブを送信してください。詳細については、「トレーニングジョブを送信する」をご参照ください。

データセットを準備する

で FastNN を簡単に使用できます。 PAI コンソール CIFAR-10、MNIST、および flowers データセットはダウンロードされ、TFRecord ファイルに変換された後、Object Storage Service (OSS) に保存されます。 [Read Table] コンポーネントまたは [OSS Data Synchronization] コンポーネントを使用して、データセットにアクセスできます。次の表は、データセットの OSS ストレージパスを示しています。

データセット

データセット内のクラス数

トレーニングデータセット内のサンプル数

テストデータセット内のサンプル数

ストレージパス

MNIST

10

3320

350

  • 中国 (北京): oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/mnist/

  • 中国 (上海): oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/mnist/

CIFAR-10

10

50000

10000

  • 中国 (北京): oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/cifar10/

  • 中国 (上海): oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/cifar10/

flowers

5

60000

10000

  • 中国 (北京): oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/flowers/

  • 中国 (上海): oss://pai-online.oss-cn-shanghai-internal.aliyuncs.com/fastnn-data/flowers/

FastNN は、TFRecord ファイルに保存されているデータを読み取ることができます。 TFRecordDataset クラスを使用して、モデルトレーニング用のデータセットパイプラインを構築できます。これにより、データの前処理に必要な時間が短縮されます。さらに、FastNN は詳細なデータパーティションをサポートしていません。ワーカー間でデータを均等に分散させるために、次のルールを適用することをお勧めします。

  • 各 TFRecord ファイルには、同じ数のサンプルが含まれています。

  • 各ワーカーは、同じ数の TFRecord ファイルを処理します。

データセットが TFRecord ファイルに保存されている場合は、FastNN コードをダウンロードし、datasets ディレクトリのサンプルファイル (cifar10.py、mnist.py、flowers.py など) を使用してデータセットパイプラインを構築できます。次の例では、CIFAR-10 データセットを使用します。

CIFAR-10 データセットの特徴は次の形式です。

features={
        'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
        'image/format': tf.FixedLenFeature((), tf.string, default_value='png'),
        'image/class/label': tf.FixedLenFeature(
          [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)),
}
  1. datasets ディレクトリに、データ解析用の cifar10.py という名前のファイルを作成し、ファイルを編集します。

    """Cifar10 データセットのデータを提供します。
    データセットの作成に使用されたデータセットスクリプトは、次の場所にあります。
    datasets/download_and_covert_data/download_and_convert_cifar10.py
    """
    from __future__ import division
    from __future__ import print_function
    import tensorflow as tf
    """func_name が 'parse_fn' であることを想定します
    """
    def parse_fn(example):
      with tf.device("/cpu:0"):
        features = tf.parse_single_example(
          example,
          features={
            'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
            'image/format': tf.FixedLenFeature((), tf.string, default_value='png'),
            'image/class/label': tf.FixedLenFeature(
              [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)),
          }
        )
        image = tf.image.decode_jpeg(features['image/encoded'], channels=3)
        label = features['image/class/label']
        return image, label
  2. datasets ディレクトリで、dataset_factory.py ファイルを開き、dataset_map パラメーターを設定します。

    from datasets import cifar10
    datasets_map = {
        'cifar10': cifar10,
    }
  3. トレーニングジョブを実行するときに、コマンドに dataset_name=cifar10 と train_files=cifar10_train.tfrecord を追加して、CIFAR-10 データセットをモデルトレーニングに使用します。

説明

他の形式のデータセットを読み取るには、utils/dataset_utils.py ファイルを参照してデータセットパイプラインを構築してください。

ハイパーパラメーターファイルを準備する

FastNN は、次のタイプのハイパーパラメーターをサポートしています。

  • データセットのハイパーパラメーター: トレーニングデータセットの基本属性。たとえば、dataset_dir ハイパーパラメーターは、トレーニングデータセットのストレージパスを指定します。

  • データの前処理のハイパーパラメーター: データの前処理関数とデータセットパイプラインパラメーター。

  • モデルのハイパーパラメーター: model_name や batch_size など、モデルトレーニングの基本パラメーター。

  • 学習率のハイパーパラメーター: 学習率パラメーターと調整パラメーター。

  • オプティマイザーのハイパーパラメーター: オプティマイザーに関連するパラメーター。

  • ログのハイパーパラメーター: 出力ログに関連するパラメーター。

  • パフォーマンチューニングのハイパーパラメーター: 混合精度などの調整パラメーター。

ハイパーパラメーターファイルの形式の例を次に示します。

enable_paisora=True
batch_size=128
use_fp16=True
dataset_name=flowers
dataset_dir=oss://pai-online-beijing.oss-cn-beijing-internal.aliyuncs.com/fastnn-data/flowers/
model_name=inception_resnet_v2
optimizer=sgd
num_classes=5
job_name=worker
  • データセットのハイパーパラメーター

    パラメーター

    タイプ

    説明

    dataset_name

    string

    解析する入力データセットの名前。有効な値: mockcifar10mnistflowers。詳細については、image_models/datasets ディレクトリの dataset_factory.py ファイルを参照してください。デフォルト値: mock

    dataset_dir

    string

    入力データセットの絶対パス。デフォルト値: なし。

    num_sample_per_epoch

    integer

    データセット内のサンプルの総数。このパラメーターの値に基づいて学習率を調整します。

    num_classes

    integer

    データセット内のクラスの数。デフォルト値: 100。

    train_files

    string

    すべてのトレーニングデータを含むファイルの名前。複数の名前はコンマ (,) で区切ります。例: 0.tfrecord,1.tfrecord

  • データの前処理のハイパーパラメーター

    パラメーター

    タイプ

    説明

    preprocessing_name

    string

    このパラメーターは、model_name パラメーターと共に使用して、データの前処理関数の名前を指定します。有効な値については、image_models/preprocessing ディレクトリの preprocessing_factory.py ファイルを参照してください。デフォルト値: なし。これは、データが前処理されないことを指定します。

    shuffle_buffer_size

    integer

    データパイプラインの作成時に、サンプルベースのシャッフルのバッファープールのサイズ。デフォルト値: 1024。

    num_parallel_batches

    integer

    並列スレッドの数。これは batch_size パラメーターの値に乗算されて map_and_batch パラメーターの値が得られます。このパラメーターは、解析サンプルの並列粒度を指定するために使用されます。デフォルト値: 8。

    prefetch_buffer_size

    integer

    データパイプラインによってプリフェッチされるデータバッチの数。デフォルト値: 32。

    num_preprocessing_threads

    integer

    データパイプラインが同時にデータのプリフェッチに使用するスレッドの数。デフォルト値: 16。

    datasets_use_caching

    bool

    メモリを使用して圧縮入力データのキャッシュを有効にするかどうかを指定します。デフォルト値: False。これは、キャッシュが無効になっていることを指定します。

  • モデルのハイパーパラメーター

    パラメーター

    タイプ

    説明

    task_type

    string

    タスクのタイプ。有効な値:

    • pretrain: モデルの事前トレーニング。これはデフォルト値です。

    • finetune: モデルのチューニング。

    model_name

    string

    トレーニングするモデルの名前。有効な値には、image_models/models ディレクトリにあるすべてのモデルが含まれます。 image_models/models/model_factory.py ファイルで定義されているモデルに基づいて、このパラメーターを設定できます。デフォルト値: inception_resnet_v2

    num_epochs

    integer

    トレーニングデータセットのトレーニングラウンド数。デフォルト値: 100。

    weight_decay

    float

    モデルトレーニング中の重み減衰係数。デフォルト値: 0.00004。

    max_gradient_norm

    float

    グローバル正規化値に基づいて勾配クリッピングを実行するかどうかを指定します。デフォルト値: なし。これは、勾配クリッピングが実行されないことを指定します。

    batch_size

    integer

    GPU が各反復で処理するデータ量。デフォルト値: 32。

    model_dir

    string

    モデルの再読み込みに使用するチェックポイントファイルのパス。デフォルト値: なし。これは、モデルチューニングが実行されないことを指定します。

    ckpt_file_name

    string

    モデルの再読み込みに使用するチェックポイントファイルの名前。デフォルト値: なし。

  • 学習率のハイパーパラメーター

    パラメーター

    タイプ

    説明

    warmup_steps

    integer

    学習率の逆減衰の反復回数。デフォルト値: 0。

    warmup_scheme

    string

    学習率の逆減衰スキーム。値を t2t (Tensor2Tensor) に設定します。この値は、次のスキームを指定します。学習率を指定された学習率の 1/100 に初期化し、逆指数関数的減衰に従って指定された学習率に到達させます。

    decay_scheme

    string

    学習率の減衰スキーム。有効な値:

    • luong234: 総反復回数の 3 分の 2 が完了した後、4 ステップの減衰スキームを開始します。各ステップで学習率が 1/2 ずつ減少します。

    • luong5: 総反復回数の半分が完了した後、5 ステップの減衰スキームを開始します。各ステップで学習率が 1/2 ずつ減少します。

    • luong10: 総反復回数の半分が完了した後、10 ステップの減衰スキームを開始します。各ステップで学習率が 1/2 ずつ減少します。

    learning_rate_decay_factor

    float

    学習率減衰の係数。デフォルト値: 0.94。

    learning_rate_decay_type

    string

    学習率減衰のタイプ。有効な値: fixedexponentialpolynomial。デフォルト値: exponential。

    learning_rate

    float

    初期学習率。デフォルト値: 0.01。

    end_learning_rate

    float

    減衰中の最小学習率。デフォルト値: 0.0001。

  • オプティマイザーのハイパーパラメーター

    パラメーター

    タイプ

    説明

    optimizer

    string

    オプティマイザーの名前。有効な値: adadeltaadagradadamftrlmomentumsgdrmspropadamweightdecay。デフォルト値: rmsprop

    adadelta_rho

    float

    Adadelta オプティマイザーの減衰係数。デフォルト値: 0.95。このパラメーターは、optimizer パラメーターを adadelta に設定した場合にのみ有効です。

    adagrad_initial_accumulator_value

    float

    Adagrad アキュムレータの初期値。デフォルト値: 0.1。このパラメーターは、optimizer パラメーターを adagrad に設定した場合にのみ有効です。

    adam_beta1

    float

    プライマリモーメンタム予測における指数関数的減衰率。デフォルト値: 0.9。このパラメーターは、optimizer パラメーターを adam に設定した場合にのみ有効です。

    adam_beta2

    float

    セカンダリモーメンタム予測における指数関数的減衰率。デフォルト値: 0.999。このパラメーターは、optimizer パラメーターを adam に設定した場合にのみ有効です。

    opt_epsilon

    float

    オプティマイザーのオフセット。デフォルト値: 1.0。このパラメーターは、optimizer パラメーターを adam に設定した場合にのみ有効です。

    ftrl_learning_rate_power

    float

    学習率のべき等パラメーター。デフォルト値: -0.5。このパラメーターは、optimizer パラメーターを ftrl に設定した場合にのみ有効です。

    ftrl_initial_accumulator_value

    float

    FTRL アキュムレータの開始点。デフォルト値: 0.1。このパラメーターは、optimizer パラメーターを ftrl に設定した場合にのみ有効です。

    ftrl_l1

    float

    FTRL l1 の正則化項。デフォルト値: 0.0。このパラメーターは、optimizer パラメーターを ftrl に設定した場合にのみ有効です。

    ftrl_l2

    float

    FTRL l2 の正則化項。デフォルト値: 0.0。このパラメーターは、optimizer パラメーターを ftrl に設定した場合にのみ有効です。

    momentum

    float

    Momentum オプティマイザーのモーメンタムパラメーター。デフォルト値: 0.9。このパラメーターは、optimizer パラメーターを momentum に設定した場合にのみ有効です。

    rmsprop_momentum

    float

    RMSProp オプティマイザーのモーメンタムパラメーター。デフォルト値: 0.9。このパラメーターは、optimizer パラメーターを rmsprop に設定した場合にのみ有効です。

    rmsprop_decay

    float

    RMSProp オプティマイザーの減衰係数。デフォルト値: 0.9。このパラメーターは、optimizer パラメーターを rmsprop に設定した場合にのみ有効です。

  • ログのハイパーパラメーター

    パラメーター

    タイプ

    説明

    stop_at_step

    integer

    トレーニングエポックの総数。デフォルト値: 100。

    log_loss_every_n_iters

    integer

    損失情報が出力される反復頻度。デフォルト値: 10。

    profile_every_n_iters

    integer

    タイムラインが出力される反復頻度。デフォルト値: 0。

    profile_at_task

    integer

    タイムラインを生成するマシンのインデックス。デフォルト値: 0。これはチーフワーカーのインデックスに対応します。

    log_device_placement

    bool

    デバイス配置情報を出力するかどうかを指定します。デフォルト値: False。

    print_model_statistics

    bool

    トレーニング可能な変数情報を出力するかどうかを指定します。デフォルト値: false。

    hooks

    string

    トレーニングフック。デフォルト値: StopAtStepHook,ProfilerHook,LoggingTensorHook,CheckpointSaverHook

  • パフォーマンチューニングのハイパーパラメーター

    パラメーター

    タイプ

    説明

    use_fp16

    bool

    半精度トレーニングを実行するかどうかを指定します。デフォルト値: True。

    loss_scale

    float

    トレーニング中の損失関数のスケーリング係数。デフォルト値: 1.0。

    enable_paisoar

    bool

    PAISoar フレームワークを使用するかどうかを指定します。デフォルト値: True。

    protocol

    string

    デフォルト値: grpc.rdma。これは、クラスターが gRPC Remote Procedure Calls (gRPC) を使用してデータアクセス効率を向上させることを指定します。

メインファイルを開発する

既存の FastNN モデルが要件を満たしていない場合は、データセット、モデル、および前処理 API を使用してさらに開発を行うことができます。開発前に、FastNN モデルの基本ロジックをよく理解しておいてください。FastNN コードをダウンロードした場合は、train_image_classifiers.py エントリファイルで画像分類モデルの基本ロジックを確認できます。サンプルコード:

# model_name パラメーターを使用してモデルを初期化し、network_fn 関数を作成します。入力パラメーター train_image_size が返される場合があります。
    network_fn = nets_factory.get_network_fn(
            FLAGS.model_name,
            num_classes=FLAGS.num_classes,
            weight_decay=FLAGS.weight_decay,
            is_training=(FLAGS.task_type in ['pretrain', 'finetune']))
# model_name パラメーターまたは preprocessing_name パラメーターを使用して、preprocess_fn 関数を初期化します。
    preprocessing_fn = preprocessing_factory.get_preprocessing(
                FLAGS.model_name or FLAGS.preprocessing_name,
                is_training=(FLAGS.task_type in ['pretrain', 'finetune']))
# dataset_name パラメーターに基づいて有効な TFRecord 形式を選択し、preprocess_fn 関数を同期的に呼び出してデータセットを解析し、dataset_iterator オブジェクトを取得します。
    dataset_iterator = dataset_factory.get_dataset_iterator(FLAGS.dataset_name,
                                                            train_image_size,
                                                            preprocessing_fn,
                                                            data_sources,
    )
# network_fn 関数と dataset_iterator.get_next 関数を呼び出して、損失の計算に使用する loss_fn 関数を定義します。
    def loss_fn():
      with tf.device('/cpu:0'):
          images, labels = dataset_iterator.get_next()
        logits, end_points = network_fn(images)
        loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=tf.cast(logits, tf.float32), weights=1.0)
        if 'AuxLogits' in end_points:
          loss += tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=tf.cast(end_points['AuxLogits'], tf.float32), weights=0.4)
        return loss
# PAI-Soar API を呼び出して、ネイティブ TensorFlow オプティマイザーと loss_fn 関数をカプセル化します。
    opt = paisoar.ReplicatedVarsOptimizer(optimizer, clip_norm=FLAGS.max_gradient_norm)
    loss = optimizer.compute_loss(loss_fn, loss_scale=FLAGS.loss_scale)
# opt パラメーターと loss パラメーターの値に基づいてトレーニングテンソルを定義します。
    train_op = opt.minimize(loss, global_step=global_step)