¿Cómo mejoro la eficiencia del entrenamiento reduciendo la interacción con OBS?
Descripción del escenario
Cuando se utiliza ModelArts para el entrenamiento de aprendizaje profundo personalizado, los datos de entrenamiento generalmente se almacenan en OBS. Si el volumen de datos de entrenamiento es grande (por ejemplo, más de 200 GB), se requiere un grupo de recursos de GPU para el entrenamiento cada vez, lo que resulta en una baja eficiencia del entrenamiento.
Para mejorar la eficiencia del entrenamiento y reducir la interacción con OBS, realice las siguientes operaciones para su optimización.
Principios de optimización
Para el grupo de recursos de GPU proporcionado por ModelArts se conectan SSD NVMe de 500 GB a cada nodo de entrenamiento de forma gratuita. Los SSD están conectados al directorio /cache. El ciclo de vida de los datos en el directorio /cache es el mismo que el de un trabajo de entrenamiento. Una vez completado el trabajo de entrenamiento, se borra todo el contenido del directorio /cache para liberar espacio para el siguiente trabajo de entrenamiento. Por lo tanto, puede copiar datos de OBS al directorio /cache durante el entrenamiento para que los datos se puedan leer desde el directorio /cache cada vez hasta que se complete el entrenamiento. Una vez completada el entrenamiento, el contenido del directorio /cache se borrará automáticamente.
Métodos de optimización
El código de TensorFlow se utiliza como ejemplo.
El siguiente es código antes de la optimización:
1 2 3 4 |
... tf.flags.DEFINE_string('data_url', '', 'dataset directory.') FLAGS = tf.flags.FLAGS mnist = input_data.read_data_sets(FLAGS.data_url, one_hot=True) |
El siguiente es un ejemplo del código optimizado. Los datos se copian en el directorio /cache.
1 2 3 4 5 6 7 |
... tf.flags.DEFINE_string('data_url', '', 'dataset directory.') FLAGS = tf.flags.FLAGS import moxing as mox TMP_CACHE_PATH = '/cache/data' mox.file.copy_parallel('FLAGS.data_url', TMP_CACHE_PATH) mnist = input_data.read_data_sets(TMP_CACHE_PATH, one_hot=True) |