Containerized Python Components extend Lightweight Python Components by relaxing the constraint that Lightweight Python Components be hermetic (i.e., fully self-contained). This means Containerized Python Component functions can depend on symbols defined outside of the function, imports outside of the function, code in adjacent Python modules, etc. To achieve this, the KFP SDK provides a convenient way to package your Python code into a container.
The following shows how to use Containerized Python Components by modifying the add component from the Lightweight Python Components example:
from kfp import dsl@dsl.componentdefadd(a:int,b:int)->int:return a + b
1. Source code setup
Start by creating an empty src/ directory to contain your source code:
src/
Next, add the following simple module, src/math_utils.py, with one helper function:
Lastly, move your component to src/my_component.py and modify it to use the helper function:
# src/my_component.pyfrom kfp import dslfrom math_utils import add_numbers@dsl.componentdefadd(a:int,b:int)->int:returnadd_numbers(a, b)
src now looks like this:
2. Modify the dsl.component decorator
In this step, youβll provide base_image and target_image arguments to the @dsl.component decorator of your component in src/my_component.py:
Setting target_image both (a) specifies the tag for the image youβll build in Step 3, and (b) instructs KFP to run the decorated Python function in a container that uses the image with that tag.
In a Containerized Python Component, base_image specifies the base image that KFP will use when building your new container image. Specifically, KFP uses the base_image argument for the FROM instruction in the Dockerfile used to build your image.
The previous example includes base_image for clarity, but this is not necessary as base_image will default to 'python:3.7' if omitted.
3. Build the component
Now that your code is in a standalone directory and youβve specified a target image, you can conveniently build an image using the kfp component build CLI command:
Since addβs target_image uses Google Cloud Artifact Registry (indicated by the gcr.io URI), the pipeline shown here assumes you have pushed your image to Google Cloud Artifact Registry, you are running your pipeline on Google Cloud Vertex AI Pipelines, and you have configured IAM permissions so that Vertex AI Pipelines can pull images from Artifact Registry.