TensorFlow - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

TensorFlow

자체 TensorFlow 모델을 교육 컴파일러로 SageMaker 가져와서 교육 컴파일러로 SageMaker 교육 작업을 실행하십시오.

TensorFlow 모델

SageMaker 교육 컴파일러는 네이티브 TensorFlow API 또는 고급 Keras API를 기반으로 구축된 모델 교육 워크로드를 자동으로 최적화합니다.

작은 정보

입력 데이터 세트를 사전 처리하려면 정적 입력 셰이프를 사용해야 합니다. 동적 입력 셰이프는 모델의 리컴파일을 시작하고 총 훈련 시간을 늘릴 수 있습니다.

Keras 사용 (권장)

컴파일러 가속을 극대화하려면 Keras의 서브클래스인 모델 (tf.keras.Model) 을 사용하는 것이 좋습니다. TensorFlow

단일 GPU 훈련용

훈련 스크립트에서 추가로 변경해야 할 사항은 없습니다.

Keras 미사용

SageMaker 트레이닝 컴파일러는 에서의 빠른 실행을 지원하지 않습니다. TensorFlow 따라서 컴파일러 가속을 활용하려면 모델 및 훈련 루프를 TensorFlow 함수 데코레이터 (@tf.function) 로 래핑해야 합니다.

SageMaker 훈련 컴파일러는 그래프 수준의 최적화를 수행하고 데코레이터를 사용하여 TensorFlow 함수가 그래프 모드에서 실행되도록 설정되어 있는지 확인합니다.

단일 GPU 훈련용

TensorFlow 2.0 이상에서는 기본적으로 즉시 실행 기능이 설정되어 있으므로 모델을 구성하는 데 사용하는 모든 함수 앞에 @tf.function 데코레이터를 추가해야 합니다. TensorFlow

TensorFlow Hugging Face 트랜스포머 장착 모델

TensorFlow Hugging Face Transformer가 탑재된 모델은 tf.keras.Model TensorFlow API를 기반으로 합니다. Hugging Face Transformers는 자연어 처리 (NLP) 모델을 구성하는 데 드는 노력을 줄이는 데 도움이 되는 사전 학습된 모델 TensorFlow 클래스도 제공합니다. Transformer 라이브러리를 사용하여 자체 교육 스크립트를 만든 후에는 이전 항목에서 설명한 것처럼 Training Compiler 구성 클래스와 함께 SageMaker HuggingFace 추정기를 사용하여 SageMaker 훈련 스크립트를 실행할 수 있습니다. TensorFlow 교육 컴파일러로 SageMaker 교육 작업 실행

SageMaker 트레이닝 컴파일러는 네이티브 TensorFlow API 또는 상위 수준의 Keras API (예: 트랜스포머 모델) 를 기반으로 구축된 모델 교육 워크로드를 자동으로 최적화합니다. TensorFlow

작은 정보

훈련 스크립트에서 변환기를 사용하여 NLP 모델용 토크나이저를 만들 때는 padding='max_length'를 지정하여 반드시 정적 입력 텐서 셰이프를 사용해야 합니다. 배치에서 가장 긴 시퀀스에 패딩하면 각 훈련 배치의 텐서 쉐이프가 변경될 수 있으므로 padding='longest'를 사용하지 마세요. 동적 입력 셰이프는 모델의 리컴파일을 시작하고 총 훈련 시간을 늘릴 수 있습니다. 변환기 토크나이저의 패딩 옵션에 대한 추가 정보는 Hugging Face 변환기 설명서패딩 및 잘라내기를 참고하세요.

Keras 사용

최상의 컴파일러 가속화를 위해서는 Keras의 서브클래스인 모델 (tf.keras.Model) 을 사용하는 것이 좋습니다. TensorFlow Hugging Face Transformer 문서의 퀵 투어 페이지에서 언급한 바와 같이, 이 모델들은 TensorFlow 일반 케라스 모델로 사용할 수 있습니다.

단일 GPU 훈련용

훈련 스크립트에서 추가로 변경해야 할 사항은 없습니다.

분산형 훈련용

SageMaker 훈련 컴파일러 가속은 호출 범위 내에서 Keras API를 사용하여 모델을 구성하고 학습시키는 경우 다중 GPU 워크로드에 대해 투명하게 작동합니다. tf.distribute.Strategy.scope()

  1. 올바른 분산형 훈련 전략을 선택하세요.

    1. 단일 노드 멀티 GPU의 경우 tf.distribute.MirroredStrategy을 사용하여 전략을 설정합니다.

      strategy = tf.distribute.MirroredStrategy()
    2. 다중 노드 다중 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()
  2. 선택한 전략을 사용하여 모델을 래핑합니다.

    with strategy.scope(): # create a model and do fit

Keras 미사용

Keras를 사용하지 TensorFlow 않고 사용자 지정 훈련 루프가 포함된 사용자 지정 모델을 가져오려면 컴파일러 가속을 활용하기 위해 모델 및 훈련 루프를 데코레이터 (@tf.function) TensorFlow 함수로 래핑해야 합니다.

SageMaker 훈련 컴파일러는 그래프 수준 최적화를 수행하고 데코레이터를 사용하여 TensorFlow 함수가 그래프 모드에서 실행되도록 설정되어 있는지 확인합니다.

단일 GPU 훈련용

TensorFlow 2.0 이상에서는 기본적으로 즉시 실행 기능이 설정되어 있으므로 모델을 구성하는 데 사용하는 모든 함수 앞에 @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 모두에 사용할 수 있습니다.