翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ModelTrainer と 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 の両方に使用できます。