بناء المكونات القائمة على الحاويات

توفر المكونات المستندة إلى الحاوية المرونة اللازمة لدمج التعليمات البرمجية المكتوبة بأي لغة في المسار الخاص بك، طالما يمكنك تنفيذ هذه التعليمات البرمجية في حاوية Docker.

إذا كنت جديدًا في استخدام خطوط أنابيب TFX، فتعرف على المزيد حول المفاهيم الأساسية لخطوط أنابيب TFX .

إنشاء مكون قائم على الحاوية

يتم دعم المكونات المستندة إلى الحاوية بواسطة برامج سطر الأوامر الموجودة في حاويات. إذا كان لديك بالفعل صورة حاوية، فيمكنك استخدام TFX لإنشاء مكون منها باستخدام وظيفة create_container_component لإعلان المدخلات والمخرجات. معلمات الوظيفة:

  • الاسم: اسم المكون.
  • المدخلات: قاموس يقوم بتعيين أسماء الإدخال إلى الأنواع. المخرجات: قاموس يقوم بتعيين أسماء المخرجات إلى معلمات الأنواع: قاموس يقوم بتعيين أسماء المعلمات إلى الأنواع.
  • الصورة: اسم صورة الحاوية، وعلامة الصورة اختياريًا.
  • الأمر: سطر أوامر نقطة دخول الحاوية. لا يتم تنفيذه داخل الصدفة. يمكن لسطر الأوامر استخدام كائنات العناصر النائبة التي يتم استبدالها في وقت الترجمة بالإدخال أو الإخراج أو المعلمة. يمكن استيراد كائنات العنصر النائب من tfx.dsl.component.experimental.placeholders . لاحظ أن قوالب Jinja غير مدعومة.

قيمة الإرجاع: فئة مكون ترث من base_component.BaseComponent والتي يمكن إنشاء مثيل لها واستخدامها داخل المسار.

العناصر النائبة

بالنسبة للمكون الذي يحتوي على مدخلات أو مخرجات، يحتاج command غالبًا إلى وجود عناصر نائبة يتم استبدالها بالبيانات الفعلية في وقت التشغيل. يتم توفير العديد من العناصر النائبة لهذا الغرض:

  • InputValuePlaceholder : عنصر نائب لقيمة عنصر الإدخال. في وقت التشغيل، يتم استبدال هذا العنصر النائب بتمثيل السلسلة لقيمة القطعة الأثرية.

  • InputUriPlaceholder : عنصر نائب لـ URI الخاص بوسيطة عناصر الإدخال. في وقت التشغيل، يتم استبدال هذا العنصر النائب بمعرف URI الخاص ببيانات الإدخال.

  • OutputUriPlaceholder : عنصر نائب لـ URI الخاص بوسيطة عناصر الإخراج. في وقت التشغيل، يتم استبدال هذا العنصر النائب بمعرف URI حيث يجب أن يقوم المكون بتخزين بيانات المنتج الناتج.

تعرف على المزيد حول العناصر النائبة لسطر أوامر مكون TFX .

مثال للمكون القائم على الحاوية

فيما يلي مثال لمكون غير Python يقوم بتنزيل البيانات وتحويلها وتحميلها:

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'),
    ],
)