TensorFlow 클라우드

TensorFlow.org에서 보기 Google Colab에서 실행 GitHub에서 보기 노트북 다운로드 캐글 로고캐글에서 실행

TensorFlow Cloud는 Google Cloud에서 Keras 모델의 학습 및 초매개변수 조정을 더 쉽게 수행할 수 있게 해주는 라이브러리입니다.

TensorFlow Cloud의 run API를 사용하면 모델 코드를 Google Cloud 계정으로 직접 보낼 수 있으며, 로그인하거나 Cloud UI와 상호작용할 필요 없이(콘솔에서 프로젝트를 설정한 후) Google Cloud 컴퓨팅 리소스를 사용할 수 있습니다.

즉, Python 노트북 내부에서 직접 Google Cloud 컴퓨팅 리소스를 사용할 수 있습니다. 바로 이와 같은 노트북입니다! 일반 .py Python 스크립트에서 Google Cloud로 모델을 보낼 수도 있습니다.

간단한 예

이는 TensorFlow Cloud 및 Google Cloud를 사용하여 원격으로 모델을 학습시키는 방법을 보여주는 간단한 소개 예시입니다.

이 내용을 읽어보면서 이것이 어떻게 작동하는지 알아볼 수도 있고, Google Colab에서 노트북을 실행할 수도 있습니다. 노트북을 실행하려면 Google Cloud 계정에 연결하고 사용자 인증 정보와 프로젝트 ID를 입력해야 합니다. 아직 계정이 없거나 콘솔에서 프로젝트를 설정하는 방법을 잘 모르는 경우 Google Cloud 계정 설정 및 연결을 참조하세요.

필수 모듈 가져오기

import tensorflow as tf
tf.version.VERSION
'2.6.0'
! pip install -q tensorflow-cloud
import tensorflow_cloud as tfc
print(tfc.__version__)
import sys

프로젝트 구성

프로젝트 매개변수를 설정합니다. GCP_PROJECT_ID 또는 GCS_BUCKET 무엇인지 모르는 경우 Google 클라우드 계정 설정 및 연결을 참조하세요.

JOB_NAME 은 선택 사항이며 임의의 문자열로 설정할 수 있습니다. 예를 들어 대규모 프로젝트의 일부로 여러 교육 실험을 수행하는 경우 각 실험에 고유한 JOB_NAME 부여할 수 있습니다.

# Set Google Cloud Specific parameters

# TODO: Please set GCP_PROJECT_ID to your own Google Cloud project ID.
GCP_PROJECT_ID = 'YOUR_PROJECT_ID'

# TODO: set GCS_BUCKET to your own Google Cloud Storage (GCS) bucket.
GCS_BUCKET = 'YOUR_GCS_BUCKET_NAME'

# DO NOT CHANGE: Currently only the 'us-central1' region is supported.
REGION = 'us-central1'

# OPTIONAL: You can change the job name to any string.
JOB_NAME = 'mnist'

# Setting location were training logs and checkpoints will be stored
GCS_BASE_PATH = f'gs://{GCS_BUCKET}/{JOB_NAME}'
TENSORBOARD_LOGS_DIR = os.path.join(GCS_BASE_PATH,"logs")
MODEL_CHECKPOINT_DIR = os.path.join(GCS_BASE_PATH,"checkpoints")
SAVED_MODEL_DIR = os.path.join(GCS_BASE_PATH,"saved_model")

Google Cloud 프로젝트를 사용하기 위해 노트북 인증

이 코드는 노트북을 인증하여 유효한 Google Cloud 사용자 인증 정보와 ID를 확인합니다. 노트북에서만 실행되고 노트북 코드가 Google Cloud로 전송될 때 실행되지 않도록 하기 위해 if not tfc.remote() 블록 내부에 있습니다.

# Using tfc.remote() to ensure this code only runs in notebook
if not tfc.remote():

    # Authentication for Kaggle Notebooks
    if "kaggle_secrets" in sys.modules:
        from kaggle_secrets import UserSecretsClient
        UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)

    # Authentication for Colab Notebooks
    if "google.colab" in sys.modules:
        from google.colab import auth
        auth.authenticate_user()
        os.environ["GOOGLE_CLOUD_PROJECT"] = GCP_PROJECT_ID

모델 및 데이터 설정

여기에서는 MNIST 데이터세트에서 분류를 실행하기 위해 간단한 Keras 모델을 설정하는 기본 절차를 따릅니다.

데이터 로드 및 분할

원시 데이터를 읽고 분할하여 데이터 세트를 훈련하고 테스트합니다.

(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()

x_train = x_train.reshape((60000, 28 * 28))
x_train = x_train.astype('float32') / 255

모델 생성 및 학습 준비

간단한 모델을 만들고 이에 대한 몇 가지 콜백을 설정하세요.

from tensorflow.keras import layers

model = tf.keras.Sequential([
  tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=tf.keras.optimizers.Adam(),
              metrics=['accuracy'])

빠른 검증 교육

우리는 모든 것이 올바르게 설정되었는지 확인하기 위해 한(1) 에포크 동안 모델을 훈련할 것이며, tfc.remote if not 해당 훈련 명령을 래핑하여 여기 런타임 환경에서만 발생하도록 할 것입니다. Google Cloud로 전송될 때가 아니라 이 글을 읽고 있습니다.

if not tfc.remote():
    # Run the training for 1 epoch and a small subset of the data to validate setup
    model.fit(x=x_train[:100], y=y_train[:100], validation_split=0.2, epochs=1)

원격 교육 준비

아래 코드는 이 글을 읽고 있는 런타임 내부가 아니라 노트북 코드가 GCP로 전송될 때만 실행됩니다.

먼저 다음과 같은 콜백을 설정합니다.

  • TensorBoard 에 대한 로그를 만듭니다.
  • 체크포인트를 생성하고 위에 지정된 체크포인트 디렉터리에 저장합니다.
  • 손실이 충분히 개선되지 않으면 모델 학습을 중지하세요.

그런 다음 model.fitmodel.save 호출합니다. 이 코드는 (이 코드가 Google Cloud에서 실행되는 경우) 실제로 전체 학습(100세대)을 실행한 다음 위에서 정의한 GCS 버킷 및 디렉터리에 학습된 모델을 저장합니다.

if tfc.remote():
    # Configure Tensorboard logs
    callbacks=[
        tf.keras.callbacks.TensorBoard(log_dir=TENSORBOARD_LOGS_DIR),
        tf.keras.callbacks.ModelCheckpoint(
            MODEL_CHECKPOINT_DIR,
            save_best_only=True),
        tf.keras.callbacks.EarlyStopping(
            monitor='loss',
            min_delta =0.001,
            patience=3)]

    model.fit(x=x_train, y=y_train, epochs=100,
              validation_split=0.2, callbacks=callbacks)

    model.save(SAVED_MODEL_DIR)

원격 훈련 시작

TensorFlow Cloud는 로컬 실행 환경(이 노트북)에서 모든 코드를 가져와서 마무리한 후 실행을 위해 Google Cloud로 보냅니다. (이것이 ifif not tfc.remote 래퍼가 중요한 이유입니다.)

이 단계에서는 원격 실행을 위해 이 노트북의 코드를 준비한 다음 Google Cloud Platform에서 원격 학습 작업을 시작하여 모델을 학습합니다.

먼저 tensorflow-cloud Python 패키지를 requirements.txt 파일에 추가합니다. 이 파일은 이 노트북의 코드와 함께 전송됩니다. 필요에 따라 여기에 다른 패키지를 추가할 수 있습니다.

그런 다음 GPU와 CPU 이미지가 지정됩니다. 둘 중 하나만 지정하면 됩니다. GPU는 다음 코드에서 사용됩니다.

마지막으로 TensorFlow 클라우드의 핵심은 tfc.run 호출입니다. 이 노트북 내에서 실행되면 이 노트북의 모든 코드와 이 디렉터리의 나머지 파일이 패키징되어 실행을 위해 Google Cloud로 전송됩니다. run 메소드의 매개변수는 GPU CPU 이미지의 세부사항을 지정합니다. 둘 중 하나만 지정하면 됩니다. GPU는 다음 코드에서 사용됩니다.

마지막으로 TensorFlow 클라우드의 핵심은 tfc.run 호출입니다. 이 노트북 내에서 실행되면 이 노트북의 모든 코드와 이 디렉터리의 나머지 파일이 패키징되어 실행을 위해 Google Cloud로 전송됩니다. run 메소드의 매개변수는 GPU 및 CPU 이미지의 세부사항을 지정합니다. 둘 중 하나만 지정하면 됩니다. GPU는 다음 코드에서 사용됩니다.

마지막으로 TensorFlow 클라우드의 핵심은 tfc.run 호출입니다. 이 노트북 내에서 실행되면 이 노트북의 모든 코드와 이 디렉터리의 나머지 파일이 패키징되어 실행을 위해 Google Cloud로 전송됩니다. run 메소드의 매개변수는 실행 환경의 세부사항과 사용할 배포 전략(있는 경우)을 지정합니다.

작업이 제출되면 다음 단계로 이동하여 Tensorboard를 통해 작업 진행 상황을 모니터링할 수 있습니다.

# If you are using a custom image you can install modules via requirements
# txt file.
with open('requirements.txt','w') as f:
    f.write('tensorflow-cloud\n')

# Optional: Some recommended base images. If you provide none the system
# will choose one for you.
TF_GPU_IMAGE= "tensorflow/tensorflow:latest-gpu"
TF_CPU_IMAGE= "tensorflow/tensorflow:latest"

# Submit a single node training job using GPU.
tfc.run(
    distribution_strategy='auto',
    requirements_txt='requirements.txt',
    docker_config=tfc.DockerConfig(
        parent_image=TF_GPU_IMAGE,
        image_build_bucket=GCS_BUCKET
        ),
    chief_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
    job_labels={'job': JOB_NAME}
)

훈련 결과

Colab 인스턴스를 다시 연결하세요.

대부분의 원격 교육 작업은 장기간 실행됩니다. Colab을 사용하는 경우 학습 결과가 제공되기 전에 시간이 초과될 수 있습니다.

이 경우 훈련 결과에 액세스할 수 있도록 Colab 인스턴스를 다시 연결하고 구성 하려면 다음 섹션을 다시 실행하세요 .

  1. 필수 모듈 가져오기
  2. 프로젝트 구성
  3. Google Cloud 프로젝트를 사용하기 위해 노트북 인증

나머지 코드를 다시 실행 하지 마십시오 .

텐서보드 로드

훈련이 진행되는 동안 Tensorboard를 사용하여 결과를 볼 수 있습니다. 결과는 훈련이 시작된 후에만 표시됩니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

학습된 모델 로드

학습이 완료되면 위에서 지정한 GCS 버킷에서 모델을 검색할 수 있습니다.

trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()