La sezione seguente fornisce un esempio di ottimizzazione di un modello BERT per la classificazione di sequenze utilizzando la libreria Hugging Face Transformers con TensorFlow. Il set di dati viene scaricato in un volume basato su Parallelstore montato, consentendo all'addestramento del modello di leggere direttamente i dati dal volume.
Prerequisiti
- Assicurati che il tuo nodo abbia almeno 8 GiB di memoria disponibile.
- Crea un'istanza PersistentVolumeClaim che richieda un volume basato su Parallelstore.
Salva il seguente manifest YAML (parallelstore-csi-job-example.yaml
) per il job di addestramento del modello.
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
Applica il manifest YAML al cluster.
kubectl apply -f parallelstore-csi-job-example.yaml
Controlla l'avanzamento del caricamento dei dati e dell'addestramento del modello con il seguente comando:
POD_NAME=$(kubectl get pod | grep 'parallelstore-csi-job-example' | awk '{print $1}')
kubectl logs -f $POD_NAME -c tensorflow