翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
TensorFlow
独自の TensorFlow モデルを SageMaker AI に持ち込み、SageMaker Training Compiler でトレーニングジョブを実行します。
TensorFlow モデル
SageMaker Training Compiler は、ネイティブ TensorFlow API または高レベルの Keras API の上に構築されたモデルトレーニングワークロードを自動的に最適化します。
ヒント
入力データセットを前処理する場合は、必ず静的な入力形状を使用してください。動的入力形状は、モデルの再コンパイルを開始し、合計トレーニング時間が長くなる可能性があります。
Keras の使用 (推奨)
最良のコンパイラアクセラレーションを行うには、TensorFlow Keras のサブクラスであるモデル (tf.keras.Model
シングル GPU のトレーニングの場合
トレーニングスクリプトに追加が必要な変更はありません。
Keras を使用しない
SageMaker Training Compiler は TensorFlow での eager execution をサポートしていません。したがって、コンパイラアクセラレーションを活用するには、モデルとトレーニングループを TensorFlow 関数デコレータ (@tf.function
) でラップする必要があります。
SageMaker Training Compiler は、グラフレベルの最適化を実行し、デコレータを使用して確実に TensorFlow 関数がグラフモード
単一 GPU のトレーニングの場合
TensorFlow 2.0 以降では、デフォルトで eager execution がオンになっているため、@tf.function
デコレータを TensorFlow モデルの構築に使用するすべての関数の前に追加してください。
Hugging Face Transformer を使用する TensorFlow モデル
Hugging Face TransformersHuggingFace
推定器と SageMaker Training Compiler 設定クラスを使用してトレーニングスクリプトを実行できますSageMaker トレーニングコンパイラを使用して TensorFlow トレーニングジョブを実行する。
SageMaker Training Compiler は、TensorFlow transformer モデルなど、ネイティブ TensorFlow API または高レベルの Keras API の上に構築されたモデルトレーニングワークロードを自動的に最適化します。
ヒント
トレーニングスクリプトで Transformers を使用して NLP モデルのトークナイザを作成する場合は、必ず padding='max_length'
を指定して静的な入力テンソル形状を使用してください。バッチ内の最長シーケンスにパディングすると、各トレーニングバッチのテンソル形状が変化する可能性があるため、padding='longest'
は使用しないでください。動的入力形状はモデルの再コンパイルを開始し、合計トレーニング時間が長くなる可能性があります。Transformer トークナイザのパディングオプションの詳細については、Hugging Face Transformers ドキュメントの「Padding and truncation
Keras を使用する
最良のコンパイラアクセラレーションを行うには、TensorFlow Keras のサブクラスであるモデル (tf.keras.Model
単一 GPU のトレーニングの場合
トレーニングスクリプトに追加が必要な変更はありません。
分散トレーニングの場合
SageMaker Training Compiler アクセラレーションは、tf.distribute.Strategy.scope()
-
適切な分散トレーニング戦略を選択します。
-
シングルノードマルチ GPU の場合は、
tf.distribute.MirroredStrategy
を使用して戦略を設定します。strategy = tf.distribute.MirroredStrategy()
-
マルチノードマルチ GPU の場合は、戦略を作成する前に、次のコードを追加して TensorFlow 分散トレーニング設定を適切に設定します。
def set_sm_dist_config(): DEFAULT_PORT = '8890' DEFAULT_CONFIG_FILE = '/opt/ml/input/config/resourceconfig.json' with open(DEFAULT_CONFIG_FILE) as f: config = json.loads(f.read()) current_host = config['current_host'] tf_config = { 'cluster': { 'worker': [] }, 'task': {'type': 'worker', 'index': -1} } for i, host in enumerate(config['hosts']): tf_config['cluster']['worker'].append("%s:%s" % (host, DEFAULT_PORT)) if current_host == host: tf_config['task']['index'] = i os.environ['TF_CONFIG'] = json.dumps(tf_config) set_sm_dist_config()
tf.distribute.MultiWorkerMirroredStrategy
を使用して戦略を設定します。strategy = tf.distribute.MultiWorkerMirroredStrategy()
-
-
選択した戦略を使用して、モデルをラップします。
with strategy.scope(): # create a model and do fit
Keras を使用しない
Keras を使用せずに TensorFlow を使用してカスタムトレーニングループを持つカスタムモデルを持ち込む場合は、モデルとトレーニングループを TensorFlow 関数デコレータ (@tf.function
) でラップして、コンパイラアクセラレーションを活用します。
SageMaker Training Compiler は、グラフレベルの最適化を実行し、デコレータを使用して TensorFlow 関数がグラフモードで実行されるよう確実に設定します。
単一 GPU のトレーニングの場合
TensorFlow 2.0 以降では、デフォルトで eager execution がオンになっているため、@tf.function
デコレータを TensorFlow モデルの構築に使用するすべての関数の前に追加してください。
分散トレーニングの場合
分散トレーニングに Keras を使用するために必要な変更に加えて、各 GPU で実行される関数に @tf.function
のアノテーションが付加されるようにする必要があります。一方、クロス GPU 通信機能にはアノテーションは付加されません。トレーニングコードの例は、次ようになります。
@tf.function() def compiled_step(inputs, outputs): with tf.GradientTape() as tape: pred=model(inputs, training=True) total_loss=loss_object(outputs, pred)/args.batch_size gradients=tape.gradient(total_loss, model.trainable_variables) return total_loss, pred, gradients def train_step(inputs, outputs): total_loss, pred, gradients=compiled_step(inputs, outputs) if args.weight_decay > 0.: gradients=[g+v*args.weight_decay for g,v in zip(gradients, model.trainable_variables)] optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss.update_state(total_loss) train_accuracy.update_state(outputs, pred) @tf.function() def train_step_dist(inputs, outputs): strategy.run(train_step, args= (inputs, outputs))
この手順は、シングルノードマルチ GPU とマルチノードマルチ GPU の両方に使用できます。