-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Lightweight python components
Alexey Volkov edited this page Nov 8, 2018
·
5 revisions
Lightweight python components do not require you to build a new container image for every code change. They're intended to use for fast iteration in notebook environment.
- Faster iteration: No need to build new container image after every change (building images takes some time)
- Easier authoring: Components can be created in local environment. Docker or Kubernetes are not required.
To build a component just define a stand-alone python function and then call kfp.components.func_to_container_op(func) to convert the function to a component that can be used in a pipeline.
There are several requirements for the component function:
- The function must be stand-alone.
-
- It should not use any code declared outside of the function definition.
-
- Any imports should be added inside the main component function.
-
- Any helper functions should also be defined inside the main component function.
- The function can only import packages that are available in the base image.
-
- If you need to import a package that's not available in the default base image you can try to find a container image that already includes the required packages. (As a workaround you can use the
subprocessmodule to run pip install for the required package.)
- If you need to import a package that's not available in the default base image you can try to find a container image that already includes the required packages. (As a workaround you can use the
- If the function operates on numbers, the parameters need to have type hints. Supported types are
int,float,bool. All other arguments are passed as strings. - To build a component with multiple output values, use python's typing.NamedTuple type hint syntax:
NamedTuple('MyFunctionOutputs', [('output_name_1', type), ('output_name_2', float)])(TheNamedTupleclass is already imported, so that it can be used in the function declaration.)
See the Lightweight Python components - basics notebook for an example on creating lightweight python components and using them in a pipeline.