Aide à protéger la Grande barrière de corail avec tensorflow sur Kaggle Rejoignez Défi

Construire des composants basés sur des conteneurs

Les composants basés sur des conteneurs offrent la possibilité d'intégrer du code écrit dans n'importe quel langage dans votre pipeline, à condition que vous puissiez exécuter ce code dans un conteneur Docker.

Si vous êtes nouveau aux pipelines TFX, en savoir plus sur les concepts de base de pipelines TFX .

Création d'un composant basé sur un conteneur

Les composants basés sur des conteneurs sont soutenus par des programmes de ligne de commande conteneurisés. Si vous avez déjà une image de conteneur, vous pouvez utiliser TFX pour créer un composant de celui - ci en utilisant la create_container_component fonction de déclarer les entrées et sorties. Paramètres de fonction :

  • Nom: Le nom du composant.
  • Entrées: Un dictionnaire qui associe des noms d' entrée à des types. sorties : un dictionnaire qui mappe les noms de sortie aux paramètres de types : un dictionnaire qui mappe les noms de paramètres aux types.
  • Image: Container nom de l' image, et éventuellement balise image.
  • commande: Container ligne de commande entrypoint. Non exécuté dans un shell. La ligne de commande peut utiliser des objets d'espace réservé qui sont remplacés au moment de la compilation par l'entrée, la sortie ou le paramètre. Les objets d'espace réservé peuvent être importés de tfx.dsl.component.experimental.placeholders . Notez que les modèles Jinja ne sont pas pris en charge.

Valeur de retour: une classe héritant de composant base_component.BaseComponent qui peut être instancié et utilisé à l' intérieur du pipeline.

Espaces réservés

Pour un composant qui a des entrées ou des sorties, la command a souvent besoin d'avoir des espaces réservés qui sont remplacées par des données réelles lors de l' exécution. Plusieurs espaces réservés sont prévus à cet effet :

  • InputValuePlaceholder : un espace réservé pour la valeur de l'artefact d'entrée. Au moment de l'exécution, cet espace réservé est remplacé par la représentation sous forme de chaîne de la valeur de l'artefact.

  • InputUriPlaceholder : un espace réservé pour l'URI de l'argument de l' artefact d'entrée. Au moment de l'exécution, cet espace réservé est remplacé par l'URI des données de l'artefact d'entrée.

  • OutputUriPlaceholder : un espace réservé pour l'URI de l'argument de l' artefact de sortie. Au moment de l'exécution, cet espace réservé est remplacé par l'URI où le composant doit stocker les données de l'artefact de sortie.

En savoir plus sur les espaces réservés en ligne de commande composant TFX .

Exemple de composant basé sur un conteneur

Voici un exemple de composant non Python qui télécharge, transforme et charge les données :

import tfx.v1 as tfx

grep_component = tfx.dsl.components.create_container_component(
    name='FilterWithGrep',
    inputs={
        'text': tfx.standard_artifacts.ExternalArtifact,
    },
    outputs={
        'filtered_text': tfx.standard_artifacts.ExternalArtifact,
    },
    parameters={
        'pattern': str,
    },
    # The component code uses gsutil to upload the data to Google Cloud Storage, so the
    # container image needs to have gsutil installed and configured.
    image='google/cloud-sdk:278.0.0',
    command=[
        'sh', '-exc',
        '''
          pattern="$1"
          text_uri="$3"/data  # Adding suffix, because currently the URI are "directories". This will be fixed soon.
          text_path=$(mktemp)
          filtered_text_uri="$5"/data  # Adding suffix, because currently the URI are "directories". This will be fixed soon.
          filtered_text_path=$(mktemp)

          # Getting data into the container
          gsutil cp "$text_uri" "$text_path"

          # Running the main code
          grep "$pattern" "$text_path" >"$filtered_text_path"

          # Getting data out of the container
          gsutil cp "$filtered_text_path" "$filtered_text_uri"
        ''',
        '--pattern', tfx.dsl.placeholders.InputValuePlaceholder('pattern'),
        '--text', tfx.dsl.placeholders.InputUriPlaceholder('text'),
        '--filtered-text', tfx.dsl.placeholders.OutputUriPlaceholder('filtered_text'),
    ],
)