Google Kubernetes Engine에서 Keras를 사용하여 TensorFlow 모델 학습

다음 섹션에서는 TensorFlow와 함께 Hugging Face 변환기 라이브러리를 사용하여 시퀀스 분류를 위해 BERT 모델을 미세 조정하는 예를 제공합니다. 데이터 세트는 마운트된 Parallelstore 지원 볼륨으로 다운로드되므로 모델 학습이 볼륨에서 데이터를 직접 읽을 수 있습니다.

기본 요건

모델 학습 작업에 다음 YAML 매니페스트 (parallelstore-csi-job-example.yaml)를 저장합니다.

  apiVersion: batch/v1
  kind: Job
  metadata:
    name: parallelstore-csi-job-example
  spec:
    template:
      metadata:
        annotations:
            gke-parallelstore/cpu-limit: "0"
            gke-parallelstore/memory-limit: "0"
      spec:
        securityContext:
          runAsUser: 1000
          runAsGroup: 100
          fsGroup: 100
        containers:
        - name: tensorflow
          image: jupyter/tensorflow-notebook@sha256:173f124f638efe870bb2b535e01a76a80a95217e66ed00751058c51c09d6d85d
          command: ["bash", "-c"]
          args:
          - |
            pip install transformers datasets
            python - <<EOF
            from datasets import load_dataset
            dataset = load_dataset("glue", "cola", cache_dir='/data')
            dataset = dataset["train"]
            from transformers import AutoTokenizer
            import numpy as np
            tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
            tokenized_data = tokenizer(dataset["sentence"], return_tensors="np", padding=True)
            tokenized_data = dict(tokenized_data)
            labels = np.array(dataset["label"])
            from transformers import TFAutoModelForSequenceClassification
            from tensorflow.keras.optimizers import Adam
            model = TFAutoModelForSequenceClassification.from_pretrained("bert-base-cased")
            model.compile(optimizer=Adam(3e-5))
            model.fit(tokenized_data, labels)
            EOF
          volumeMounts:
          - name: parallelstore-volume
            mountPath: /data
        volumes:
        - name: parallelstore-volume
          persistentVolumeClaim:
            claimName: parallelstore-pvc
        restartPolicy: Never
    backoffLimit: 1

클러스터에 YAML 매니페스트를 적용합니다.

kubectl apply -f parallelstore-csi-job-example.yaml

다음 명령어를 사용하여 데이터 로드 및 모델 학습 진행 상황을 확인합니다.

POD_NAME=$(kubectl get pod | grep 'parallelstore-csi-job-example' | awk '{print $1}')
kubectl logs -f $POD_NAME -c tensorflow