8. Référence de configuration
Karthikeyan Nagalingam, NetApp
Le guide de configuration décrit les paramètres d'exécution qui contrôlent l'ingestion des données, la préparation des données, la mobilité des données XCP, l'apprentissage, la création de points de contrôle et l'archivage. Le bucket NAS ONTAP est utilisé principalement comme couche de staging des données préparées et de XCP pour la prise en charge et la portabilité. Dans un environnement de production en temps réel, ces mêmes données préparées peuvent également être exploitées via des chemins d'accès directs compatibles RDMA lorsque cela correspond mieux aux exigences de charge de travail et de latence.
L'ensemble du comportement d'exécution est fourni via dag_run.conf, ce qui permet à un même DAG de prendre en charge différents systèmes sources, moteurs de transformation, destinations de stockage, stratégies de récupération et périmètres d'archivage. Configurez uniquement les groupes de paramètres requis pour le flux de travail sélectionné, conservez les identifiants dans Airflow Connections ou un backend de secrets, et utilisez les exemples comme modèles hors production plutôt que comme valeurs d'identifiants.
[[8-1-ingestion-parameters]]
== 8.1 Paramètres d'ingestion
Utilisez ces paramètres pour sélectionner et configurer le mécanisme d’ingestion en amont. s3_direct utilise les objets de données brutes StorageGRID configurés dans le groupe de préparation des données ; les paramètres Airbyte et NiFi ne sont nécessaires que si ces outils d’ingestion respectifs sont sélectionnés.
| Paramètre | Défaut | Obligatoire | Description | Exemple |
|---|---|---|---|---|
|
|
Non |
Sélectionne le mode d'ingestion |
|
|
Aucune |
Airbyte uniquement |
Point de terminaison de l'API Airbyte |
|
|
Aucune |
Airbyte uniquement |
ID de connexion Airbyte |
|
|
Aucune |
Facultatif |
Jeton Bearer |
|
|
|
Non |
Délai d'attente Airbyte dépassé |
|
|
Aucune |
NiFi uniquement |
NiFi point de terminaison de l’API |
|
|
Aucune |
NiFi uniquement |
groupe de processus NiFi |
|
|
|
Non |
NiFi délai d’expiration |
|
[[8-2-data-preparation-parameters]]
== 8.2 Paramètres de préparation des données
Ces paramètres contrôlent l'accès aux données brutes, la sortie des données préparées, la découverte des entrées et le comportement de transformation. Les paramètres s3_raw_* font référence à StorageGRID, tandis que les paramètres compatibles avec le code s3_formatted_* identifient le compartiment NAS ONTAP où les données préparées, horodatées à l’exécution, ainsi que les manifestes, sont écrits.
Bucket NAS StorageGRID brut / données préparées ONTAP :
Configurez des points de terminaison et des identifiants distincts lorsque StorageGRID et le compartiment NAS ONTAP utilisent des services compatibles S3 ou des politiques d'accès différents. Les clés de secours génériques ne s'appliquent que lorsqu'aucun paramètre de données brutes ou préparées plus spécifique n'est défini.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
compartiment d'entrée brute StorageGRID |
|
|
|
Préfixe de données brutes StorageGRID |
|
|
chaîne de repli |
Point de terminaison S3 StorageGRID |
|
|
chaîne de repli |
Clé d'accès brute |
|
|
chaîne de repli |
Clé secrète brute |
|
|
|
Région brute |
|
|
|
Compartiment de sortie des données préparées ONTAP NAS |
|
|
|
Préfixe de données préparées ONTAP NAS |
|
|
chaîne de repli |
Point de terminaison S3 du compartiment NAS ONTAP |
|
|
chaîne de repli |
Clé d'accès au compartiment NAS ONTAP |
|
|
chaîne de repli |
Clé secrète du compartiment NAS ONTAP |
|
Solution de repli générale : s3_endpoint_url, s3_access_key_id, s3_secret_access_key, s3_session_token, s3_verify, aws_region, aws_access_key_id, aws_secret_access_key, aws_session_token.
Sélection des entrées :
Utilisez des paramètres explicites de clé d’objet pour traiter les entrées CSV connues ; sinon, la tâche détecte les objets tabulaires éligibles sous le préfixe brut StorageGRID configuré.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
Découverte automatique |
Liste explicite des clés CSV |
|
|
Aucune |
Clé CSV explicite unique |
|
Transformation:
Choisissez le chemin Python pour une préparation locale légère ou Spark pour une préparation distribuée. L'échantillonnage et la graine s'appliquent de manière reproductible aux ensembles d'entraînement, de validation et d'inférence générés.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
|
|
|
|
Échec plutôt que repli |
|
|
|
|
|
|
|
Échec si le format est indisponible |
|
|
toutes les lignes |
Limite de lignes (≤0 = toutes) |
|
|
|
Graine de mélange reproductible |
|
Spark :
Ces paramètres s'appliquent uniquement à transformation_engine=spark. Ils contrôlent le placement des processus Spark, l'allocation des ressources, les limites de temps et les dépendances d'exécution optionnelles de Delta Lake ou d'Iceberg.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Binaire Spark |
|
|
|
Spark master |
|
|
|
Mémoire du pilote |
|
|
|
Mémoire de l'exécuteur |
|
|
|
Délai d'attente (0 = désactivé) |
|
|
Delta 3.2.0 |
package d'exécution Delta |
|
|
Iceberg 1.5.2 |
package d'exécution Iceberg |
|
|
|
Nom du catalogue Iceberg |
|
[[8-3-xcp-and-training-destination-parameters]]
== 8.3 Paramètres XCP et de destination d’entraînement
Utilisez ce groupe enable_xcp=true pour valider la source ONTAP NAS NFS, invoquer l’hôte XCP et choisir le niveau d’entraînement actif. xcp_copy_destination est le commutateur de contrôle : il sélectionne soit les paramètres spécifiques à ONTAP S3, soit ceux spécifiques à LustreFS ci-dessous, et les étapes du modèle en aval utilisent le même niveau sélectionné.
| Paramètre | Défaut | Obligatoire | Description | Exemple |
|---|---|---|---|---|
|
|
Oui pour XCP |
Active la branche XCP |
|
|
|
Non |
|
|
|
|
Vérification préalable XCP |
IP du serveur NFS |
|
|
|
Vérification préalable XCP |
Chemin d'export NFS |
|
|
|
Non |
Utilisateur SSH de l’hôte XCP |
|
|
|
Non |
Adresse de l’hôte XCP |
|
Destination S3 (requise lorsque xcp_copy_destination=s3) :
Fournissez ces paramètres uniquement pour le chemin d’entraînement ONTAP S3. Le profil ou les identifiants directs permettent à XCP et à la logique de synchronisation des artefacts du modèle d’accéder au compartiment et au préfixe ONTAP S3 sélectionnés.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
défaut |
Point de terminaison XCP S3 |
|
|
Aucune |
compartiment de destination XCP |
|
|
|
Préfixe de destination |
|
|
|
Préfixe de découverte de la formation |
|
|
|
Profil d’identifiant nommé |
|
|
Aucune |
Correspondance de profil |
|
|
Aucune |
Basculement direct par clé |
|
|
Aucune |
Repli secret direct |
|
|
|
Région XCP S3 |
|
Destination LustreFS (obligatoire lorsque xcp_copy_destination=lustrefs) :
Fournissez ces paramètres uniquement pour le chemin d'entraînement LustreFS. La source et la destination doivent être montées et accessibles sur l'hôte XCP ; la destination doit également être accessible au worker Airflow qui exécute les étapes du modèle.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Source de copie XCP |
|
|
|
Destination de montage LustreFS |
|
|
|
Sous-répertoire d’entraînement sous le point de montage |
|
|
|
Identifiant de tâche XCP |
|
Comportement du texte source :
Ces options déterminent comment les trois ensembles de données textuelles sont trouvés après la migration XCP. Les clés explicites prévalent sur la détection automatique ; le repli local peut être désactivé pour exiger que les entrées de texte proviennent de la destination XCP sélectionnée.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Autoriser le repli vers le texte local |
|
|
Automatique |
Emplacement explicite du texte de base |
|
|
Automatique |
Emplacement explicite du texte de réglage fin |
|
|
Automatique |
Emplacement explicite du texte d'inférence |
|
[[8-4-model-training-parameters]]
== 8.4 Paramètres d'entraînement du modèle
Ces paramètres permettent de sélectionner la source locale ou fournie par XCP, de limiter le volume d'entraînement et de préserver l'ordre reproductible des données. Lorsque XCP est activé, l'entraînement lit le niveau ONTAP S3 ou LustreFS sélectionné et publie les artefacts de référence vers cette même destination.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Sélectionne la source XCP ou locale |
|
|
|
Sélectionne le niveau source |
|
|
toutes les lignes |
Limite de l'échantillon d'entraînement |
|
|
|
Mélange reproductible |
|
Produit regression_model.bin, text_vectorizer.bin, text_classifier.bin, train_metrics.json.
[[8-5-fine-tuning-parameters]]
== 8.5 Ajustement précis des paramètres
Le réglage fin consiste à matérialiser les artefacts textuels de référence à partir de la destination XCP sélectionnée, à appliquer un apprentissage incrémental à l'ensemble de données de réglage fin, puis à republier le classificateur optimisé et ses métriques. Veillez à conserver la cohérence des paramètres XCP avec ceux utilisés lors de l'entraînement du modèle afin de préserver la provenance des artefacts.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Permet de matérialiser/publier l'artefact |
|
|
|
Sélectionne la source/destination de l'artefact |
|
Consomme text_vectorizer.bin, text_classifier.bin, text_finetune.json. Produit text_classifier_tuned.bin, fine_tune_metrics.json.
[[8-6-inference-parameters]]
== 8.6 Paramètres d'inférence
Ces indicateurs contrôlent la portée de l’évaluation une fois le modèle ajusté matérialisé à partir du niveau d’entraînement sélectionné. Activez l’une ou l’autre option lorsque les exigences de validation ou métier nécessitent des sorties au-delà de la répartition d’inférence par défaut et du texte d’entrée d’inférence.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Notation des divisions train/val/infer |
|
|
|
Noter le texte de base/affiné/d’inférence |
|
Consomme regression_model.bin, text_vectorizer.bin, text_classifier_tuned.bin. Produit tabular_predictions.csv, text_predictions.json.
[[8-7-checkpoint-parameters]]
== 8.7 Paramètres du point de contrôle
La création de points de contrôle est limitée à model_training. Ces paramètres déterminent si l'enregistrement de fin de formation est créé, où il est stocké, comment les échecs de téléchargement sont gérés et si une exécution ultérieure vérifie ou réutilise un résultat de formation terminé valide.
| Paramètre | Défaut | Description | Exemple |
|---|---|---|---|
|
|
Permet la création de fichiers de point de contrôle |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Alias rétrocompatible |
|
[[8-8-manual-archive-parameters]]
== 8.8 Paramètres d'archivage manuel
Utilisez ce groupe pour activer l’archivage StorageGRID, identifier le compartiment de destination et les identifiants, puis choisir le point d’archivage. Le paramètre sélectionné `manual_archive_stage`détermine à la fois le moment de l’archivage et si l’archive contient uniquement les artefacts d’entraînement de base ou l’ensemble complet des résultats d’inférence.
| Paramètre | Défaut | Obligatoire | Description | Exemple |
|---|---|---|---|---|
|
|
Non |
Permet l'archivage |
|
|
|
Non |
Point d'archivage et ensemble d'artefacts : |
|
|
|
Oui lorsqu’elle est activée |
compartiment d'archive |
|
|
|
Non |
Préfixe d'archive |
|
|
défaut |
Personnalisé uniquement |
Point de terminaison S3 d’archivage |
|
|
|
Recommandé |
Profil d’identification |
|
|
Aucune |
Facultatif |
Correspondance de profil |
|
|
|
Non |
Inclure les entrées XCP dans l'archive |
|
|
|
Non |
Supprimer le dossier brut local après le téléchargement |
|
Alias : fabricpool_archive_* pour tous les manual_archive_* paramètres.
[[8-8-1-manual-archive-stage-decision]]
=== 8.8.1 Décision relative à l’étape d’archivage manuel
La route_manual_archive_stage tâche de branche lit manual_archive_stage une fois par exécution du DAG. La valeur sélectionnée détermine à la fois le moment où l'archivage s'exécute et les artefacts qui sont téléchargés vers le bucket d'archivage StorageGRID. Les objets d'archive sont stockés sous s3://<manual_archive_bucket>/<manual_archive_prefix>/<stage>/<run_stamp>/.
manual_archive_stage valeur |
Calendrier d’archivage | Artefacts archivés | Utilisation recommandée |
|---|---|---|---|
|
Immédiatement après |
|
Préserver un modèle de référence reproductible, minimiser le volume des archives ou conserver un point de contrôle avant les étapes ultérieures |
|
Après |
Tous |
Conserver l’ensemble des données relatives aux résultats commerciaux et aux preuves de prédiction pour une exécution du modèle |
Quelle que soit l’option choisie, définissez manual_archive_include_xcp_inputs=true pour ajouter les entrées d’entraînement XCP matérialisées localement lorsqu’elles sont présentes. Définissez manual_archive_enabled=false pour ignorer la tâche d’archivage sans modifier le flux de travail d’entraînement et d’inférence.
[[8-9-complete-sample-configuration]]
== 8.9 Exemple de configuration complet
Ce catalogue fournit les configurations de départ pour les principaux chemins de déploiement et de test. Chaque exemple suppose que les données brutes se trouvent dans StorageGRID et que les données préparées sont écrites dans le bucket NAS ONTAP. Remplacez les noms de bucket, les adresses de point de terminaison, les chemins du système de fichiers et les noms de profil par les valeurs de l'environnement cible. Ne placez pas les clés d'accès ou les secrets de production dans CONF_JSON; configurez-les via les connexions Airflow, les variables ou un backend de secrets.
[[8-9-1-xcp-to-lustrefs-with-spark-and-delta-lake]]
=== 8.9.1 XCP vers LustreFS avec Spark et Delta Lake
Utilisez cet exemple à débit maximal pour la préparation distribuée et les E/S hautes performances du modèle LustreFS. Il traite tous les fichiers tabulaires admissibles sous s3_raw_prefix, écrit des tables Delta pendant la préparation, conserve le point de contrôle d’entraînement dans le compartiment de données préparées ONTAP NAS, et archive l’ensemble complet des résultats d’inférence.
{
"ingestion_tool": "s3_direct",
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": true,
"xcp_copy_destination": "lustrefs",
"xcp_nfs_source_ip": "10.63.150.159",
"xcp_nfs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_lustrefs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_lustrefs_dest_path": "/mnt/lustre/client",
"xcp_lustrefs_training_subpath": "example_ai_pipeline",
"xcp_text_allow_local_fallback": false,
"transformation_engine": "spark",
"spark_required": true,
"table_format": "delta",
"table_format_required": true,
"spark_driver_memory": "8g",
"spark_executor_memory": "8g",
"spark_timeout_secs": 0,
"sample_count": 14400,
"seed": 11,
"infer_all_splits": true,
"infer_all_text": true,
"checkpoint_enabled": true,
"checkpoint_store": "formatted_s3",
"training_checkpoint_reuse_mode": "off",
"manual_archive_enabled": true,
"manual_archive_stage": "inferencing",
"manual_archive_bucket": "archivalbucket",
"manual_archive_prefix": "ai-models",
"manual_archive_profile": "sgdlocal",
"manual_archive_cleanup_raw": true
}
[[8-9-2-no-xcp-with-python-preparation]]
=== 8.9.2 Préparation de XCP sans Python
Utilisez cette configuration de base pour une exécution fonctionnelle légère. La préparation utilise le moteur Python local et les étapes en aval utilisent les chemins locaux du pipeline pour les données préparées et les artefacts ; XCP, Spark, les formats de table, la réutilisation des points de contrôle et l'archivage sont désactivés.
{
"ingestion_tool": "s3_direct",
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": false,
"transformation_engine": "python",
"table_format": "none",
"sample_count": 200,
"seed": 11,
"checkpoint_enabled": false,
"manual_archive_enabled": false
}
[[8-9-3-python-preparation-with-two-explicit-input-files]]
=== 8.9.3 Préparation de Python avec deux fichiers d'entrée explicites
Utilisez ce test ciblé lors de la validation du pipeline par rapport à deux objets CSV StorageGRID connus. s3_tabular_object_keys Il désactive la détection automatique des fichiers tabulaires ; les entrées de texte utilisent toujours leurs emplacements attendus sous le préfixe brut.
{
"ingestion_tool": "s3_direct",
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_tabular_object_keys": [
"example_ai_pipeline/raw/tabular_part_01.csv",
"example_ai_pipeline/raw/tabular_part_02.csv"
],
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": false,
"transformation_engine": "python",
"table_format": "none",
"sample_count": 200,
"seed": 11,
"manual_archive_enabled": false
}
[[8-9-4-python-preparation-with-automatic-all-file-discovery]]
=== 8.9.4 Préparation de Python avec découverte automatique de tous les fichiers
Omettez s3_tabular_object_keys et s3_tabular_object_key pour traiter chaque objet tabulaire admissible sous le préfixe brut StorageGRID. Cet exemple convient à un test fonctionnel ou de montée en charge sur tous les fichiers à l’aide du moteur de préparation Python.
{
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": false,
"transformation_engine": "python",
"table_format": "none",
"sample_count": 0,
"seed": 11,
"manual_archive_enabled": false
}
sample_count: 0 signifie que la préparation des données utilise toutes les lignes disponibles. Définissez une valeur positive pour une exécution de test limitée.
[[8-9-5-xcp-to-ontap-s3-with-python-preparation]]
=== 8.9.5 Préparation de XCP vers ONTAP S3 avec Python
Utilisez cette configuration lorsque des données préparées doivent être copiées depuis l’export NFS NAS ONTAP vers un compartiment d’entraînement ONTAP S3. L’entraînement, le réglage fin et l’inférence du modèle génèrent et publient des artefacts via cette même destination ONTAP S3.
{
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": true,
"xcp_copy_destination": "s3",
"xcp_nfs_source_ip": "10.63.150.159",
"xcp_nfs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_s3_endpoint": "https://ontap-s3.example.com",
"xcp_s3_bucket": "trainingbucket",
"xcp_s3_dest_prefix": "example_ai_pipeline",
"xcp_s3_training_prefix": "example_ai_pipeline",
"xcp_s3_profile": "ontaps3",
"transformation_engine": "python",
"table_format": "none",
"sample_count": 14400,
"seed": 11,
"checkpoint_enabled": true,
"checkpoint_store": "formatted_s3",
"manual_archive_enabled": true,
"manual_archive_stage": "model_training",
"manual_archive_bucket": "archivalbucket",
"manual_archive_profile": "storagegrid-archive"
}
[[8-9-6-xcp-to-ontap-s3-with-spark-and-iceberg]]
=== 8.9.6 XCP vers ONTAP S3 avec Spark et Iceberg
Utilisez cette configuration pour la préparation distribuée avec une sortie de table Iceberg et ONTAP S3 comme destination d'entraînement active. Définissez spark_required et table_format_required sur true lorsque l'exécution doit échouer plutôt que de basculer vers une autre solution si Spark ou Iceberg est indisponible.
{
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"enable_xcp": true,
"xcp_copy_destination": "s3",
"xcp_nfs_source_ip": "10.63.150.159",
"xcp_nfs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_s3_bucket": "trainingbucket",
"xcp_s3_dest_prefix": "example_ai_pipeline",
"xcp_s3_profile": "ontaps3",
"transformation_engine": "spark",
"spark_required": true,
"table_format": "iceberg",
"table_format_required": true,
"spark_driver_memory": "8g",
"spark_executor_memory": "8g",
"spark_timeout_secs": 0,
"sample_count": 0,
"seed": 11,
"manual_archive_enabled": true,
"manual_archive_stage": "inferencing",
"manual_archive_bucket": "archivalbucket",
"manual_archive_profile": "storagegrid-archive"
}
[[8-9-7-scenario-selection-summary]]
=== 8.9.7 Résumé de la sélection des scénarios
| Scénario | Destination XCP | Moteur de préparation | Format de tableau | Portée d’entrée | Étape d'archivage |
|---|---|---|---|---|---|
8.9.1 |
LustreFS |
Étincelle |
Delta |
Tous les fichiers découverts |
|
8.9.2 |
Aucune |
Python |
Aucune |
Tous les fichiers découverts |
Désactivées |
8.9.3 |
Aucune |
Python |
Aucune |
Deux fichiers explicites |
Désactivées |
8.9.4 |
Aucune |
Python |
Aucune |
Tous les fichiers découverts |
Désactivées |
8.9.5 |
ONTAP S3 |
Python |
Aucune |
Tous les fichiers découverts |
|
8.9.6 |
ONTAP S3 |
Étincelle |
Iceberg |
Tous les fichiers découverts |
|
[[8-9-8-execution-walkthroughs]]
=== 8.9.8 Procédures pas à pas d'exécution
Exécutez les exemples depuis l'espace de travail Airflow. Le script de déclenchement génère un ID d'exécution unique manual__<UTC timestamp>, attend la fin de l'exécution et renvoie un code de sortie différent de zéro en cas d'échec ou de dépassement du délai d'attente. Les configurations complètes suivantes utilisent le même schéma CONF_JSON="$(python3 - <<'PY' …)" que les exemples opérationnels. Configurez les connexions gérées par Airflow, les profils XCP et les profils d'archivage référencés dans votre système de gestion des secrets avant de les exécuter, et limitez-vous CONF_JSON aux identifiants non secrets de compartiment, de point de terminaison, de chemin et de profil.
Le nom de format de tableau valide est iceberg. N'utilisez pas icerberg, qui n'est pas une valeur prise en charge.
Tous les fichiers, Spark, Iceberg, XCP vers ONTAP S3, point de contrôle vers prepared-data S3, archive après inférence :
CONF_JSON="$(python3 - <<'PY'
import json
print(json.dumps({
"ingestion_tool": "s3_direct",
"enable_xcp": True,
"xcp_copy_destination": "s3",
"xcp_text_allow_local_fallback": True,
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_raw_endpoint_url": "https://storagegrid.example.com",
"s3_raw_region": "us-east-1",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"s3_formatted_endpoint_url": "https://ontap-nas.example.com",
"s3_formatted_region": "us-east-1",
"xcp_nfs_source_ip": "10.63.150.159",
"xcp_nfs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_s3_endpoint": "https://ontap-s3.example.com",
"xcp_s3_bucket": "trainingbucket",
"xcp_s3_dest_prefix": "example_ai_pipeline",
"xcp_s3_training_prefix": "example_ai_pipeline",
"xcp_s3_profile": "ontaps3",
"transformation_engine": "spark",
"spark_required": True,
"table_format": "iceberg",
"table_format_required": True,
"sample_count": 0,
"seed": 11,
"spark_driver_memory": "8g",
"spark_executor_memory": "8g",
"spark_timeout_secs": 0,
"infer_all_splits": True,
"infer_all_text": True,
"checkpoint_enabled": True,
"checkpoint_store": "formatted_s3",
"manual_archive_enabled": True,
"manual_archive_stage": "inferencing",
"manual_archive_bucket": "archivalbucket",
"manual_archive_prefix": "ai-models",
"manual_archive_profile": "sgdlocal",
"manual_archive_endpoint": "https://storagegrid.example.com",
"manual_archive_cleanup_raw": True,
"manual_archive_include_xcp_inputs": True,
}, separators=(",", ":")))
PY
)"
CONF_JSON="$CONF_JSON" AIRFLOW_BIN=./.venv/bin/airflow INGESTION_TOOL=s3_direct \
./trigger_and_wait_ai_pipeline_sklearn.sh
Tous les fichiers, Spark, Iceberg, XCP vers LustreFS, point de contrôle vers prepared-data S3, archive après inférence :
CONF_JSON="$(python3 - <<'PY'
import json
print(json.dumps({
"ingestion_tool": "s3_direct",
"enable_xcp": True,
"xcp_copy_destination": "lustrefs",
"ssh_user": "root",
"ssh_host": "10.63.150.178",
"xcp_text_allow_local_fallback": True,
"s3_raw_bucket": "bucket1",
"s3_raw_prefix": "example_ai_pipeline/raw",
"s3_raw_endpoint_url": "https://storagegrid.example.com",
"s3_raw_region": "us-east-1",
"s3_formatted_bucket": "prepnasbucket",
"s3_formatted_prefix": "example_ai_pipeline/formatted",
"s3_formatted_endpoint_url": "https://ontap-nas.example.com",
"s3_formatted_region": "us-east-1",
"xcp_nfs_source_ip": "10.63.150.159",
"xcp_nfs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_lustrefs_source_path": "/prepnasbucket/example_ai_pipeline",
"xcp_lustrefs_dest_path": "/mnt/lustre/client",
"xcp_lustrefs_training_subpath": "example_ai_pipeline",
"transformation_engine": "spark",
"spark_required": True,
"table_format": "iceberg",
"table_format_required": True,
"sample_count": 0,
"seed": 11,
"spark_driver_memory": "8g",
"spark_executor_memory": "8g",
"spark_timeout_secs": 0,
"infer_all_splits": True,
"infer_all_text": True,
"checkpoint_enabled": True,
"checkpoint_store": "formatted_s3",
"manual_archive_enabled": True,
"manual_archive_stage": "inferencing",
"manual_archive_bucket": "archivalbucket",
"manual_archive_prefix": "ai-models",
"manual_archive_profile": "sgdlocal",
"manual_archive_endpoint": "https://storagegrid.example.com",
"manual_archive_cleanup_raw": True,
"manual_archive_include_xcp_inputs": True,
}, separators=(",", ":")))
PY
)"
AIRFLOW_BIN=./.venv/bin/airflow INGESTION_TOOL=s3_direct \
./trigger_and_wait_ai_pipeline_sklearn.sh
Pour le mode ONTAP S3, transmettez uniquement le nom non secret xcp_s3_profile dans CONF_JSON et définissez les identifiants correspondants sur l’hôte XCP ou via le stockage de secrets géré par Airflow avant l’exécution. Pour le mode LustreFS, la xcp_s3_profiles correspondance est volontairement omise, car le parcours d’entraînement ne résout pas les identifiants ONTAP S3. Dans les deux exemples, définissez les identifiants des données brutes StorageGRID, des données préparées ONTAP NAS et des archives via le stockage de secrets géré par Airflow plutôt qu’en JSON inline. L’omission de s3_tabular_object_keys et le réglage de sample_count sur 0 demandent la découverte automatique de tous les fichiers tabulaires éligibles et l’utilisation de toutes les lignes disponibles.
Python, sans XCP, test à deux fichiers :
CONF_JSON='{"s3_raw_bucket":"bucket1","s3_raw_prefix":"example_ai_pipeline/raw","s3_tabular_object_keys":["example_ai_pipeline/raw/tabular_part_01.csv","example_ai_pipeline/raw/tabular_part_02.csv"],"s3_formatted_bucket":"prepnasbucket","s3_formatted_prefix":"example_ai_pipeline/formatted","enable_xcp":false,"transformation_engine":"python","table_format":"none","sample_count":200,"manual_archive_enabled":false}' \
./trigger_and_wait_ai_pipeline_sklearn.sh
Spark, Delta Lake, XCP vers LustreFS :
CONF_JSON='{"enable_xcp":true,"xcp_copy_destination":"lustrefs","xcp_nfs_source_ip":"10.63.150.159","xcp_nfs_source_path":"/prepnasbucket/example_ai_pipeline","xcp_lustrefs_source_path":"/prepnasbucket/example_ai_pipeline","xcp_lustrefs_dest_path":"/mnt/lustre/client","xcp_lustrefs_training_subpath":"example_ai_pipeline","transformation_engine":"spark","spark_required":true,"table_format":"delta","table_format_required":true,"sample_count":14400,"manual_archive_enabled":true,"manual_archive_stage":"inferencing"}' \
./trigger_and_wait_ai_pipeline_sklearn.sh
Spark, Iceberg, XCP vers ONTAP S3 :
CONF_JSON='{"enable_xcp":true,"xcp_copy_destination":"s3","xcp_nfs_source_ip":"10.63.150.159","xcp_nfs_source_path":"/prepnasbucket/example_ai_pipeline","xcp_s3_bucket":"trainingbucket","xcp_s3_dest_prefix":"example_ai_pipeline","xcp_s3_profile":"ontaps3","transformation_engine":"spark","spark_required":true,"table_format":"iceberg","table_format_required":true,"sample_count":0,"manual_archive_enabled":true,"manual_archive_stage":"inferencing"}' \
./trigger_and_wait_ai_pipeline_sklearn.sh
Avant une exécution de XCP, vérifiez le chemin NFS NAS ONTAP configuré et l'accessibilité de la destination depuis l'hôte XCP. Après une exécution réussie, consultez les journaux des tâches pour [data_prep] effective_config, [xcp_copy] effective_config, [model_training] effective_config et [manual_archive] confirmer le moteur sélectionné, la portée d'entrée, la destination et l'étape d'archivage.