TensorFlow 클라우드

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

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 Cloud 계정 설정 및 연결을 참조 하세요 .

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를 확인합니다. if not tfc.remote() 블록 내부에있어 노트북에서만 실행되고 노트북 코드가 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 을 학습 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)

원격 교육 준비

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

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

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

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

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는 로컬 실행 환경 (이 노트북)에서 모든 코드를 가져 와서 래핑 한 다음 실행을 위해 GCP로 보냅니다. (이것이 tfc.remote 래퍼가 tfc.remote ifif not 가 중요한 이유입니다.)

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

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

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

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

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

마지막으로 TensorFlow 클라우드의 핵심 : tfc.run 대한 호출입니다. 이 노트북 내에서이 작업이 실행되면이 노트북의 모든 코드와이 디렉터리의 나머지 파일이 패키징되어 실행을 위해 GCP로 전송됩니다. 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로드

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

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

훈련 된 모델로드

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

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