[backend] The v2 AWF compiler inadvertently limits workflow size to 256KB.
Environment
-
How did you deploy Kubeflow Pipelines (KFP)? K8s on AWS using the KFP chart.
-
KFP version: 2.2.0
-
KFP SDK version: 2.7.0
Steps to reproduce
Submit the following pipeline:
from kfp import Client, dsl
@dsl.component()
def comp(name: str) -> str:
# Lorem ipsum below to bloat pipeline/component definition size.
"""_summary_
Args:
name (str): _description_
Returns:
str: _description_
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sodales neque sodales ut etiam. At urna condimentum mattis pellentesque. Mattis molestie a iaculis at erat pellentesque. Facilisis magna etiam tempor orci. Tellus at urna condimentum mattis. Lobortis feugiat vivamus at augue eget arcu dictum. Et malesuada fames ac turpis egestas integer. Sollicitudin nibh sit amet commodo nulla facilisi nullam vehicula. Eros in cursus turpis massa tincidunt dui ut. Varius vel pharetra vel turpis nunc eget.
Cras semper auctor neque vitae. Adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum. Purus sit amet volutpat consequat mauris. Dictum sit amet justo donec enim diam vulputate. Non blandit massa enim nec dui nunc mattis. Ipsum dolor sit amet consectetur. Vitae tortor condimentum lacinia quis vel eros donec ac. Arcu ac tortor dignissim convallis aenean et. Ut faucibus pulvinar elementum integer enim neque volutpat ac. Nibh venenatis cras sed felis eget velit aliquet sagittis. Pulvinar sapien et ligula ullamcorper. Egestas quis ipsum suspendisse ultrices gravida dictum fusce. Euismod lacinia at quis risus. Quis viverra nibh cras pulvinar. Risus commodo viverra maecenas accumsan lacus vel facilisis volutpat est.
At auctor urna nunc id. Mi bibendum neque egestas congue quisque egestas. Faucibus a pellentesque sit amet porttitor eget dolor morbi non. Sit amet nulla facilisi morbi tempus iaculis urna. Mauris cursus mattis molestie a iaculis at erat pellentesque. In ante metus dictum at tempor. Mi in nulla posuere sollicitudin aliquam. Vitae elementum curabitur vitae nunc sed velit dignissim sodales ut. Tellus in hac habitasse platea dictumst vestibulum. Euismod lacinia at quis risus sed vulputate odio ut enim. Viverra orci sagittis eu volutpat odio facilisis mauris sit amet. Fermentum dui faucibus in ornare quam. Faucibus a pellentesque sit amet porttitor.
Sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Elit pellentesque habitant morbi tristique. At lectus urna duis convallis convallis tellus id. Velit laoreet id donec ultrices tincidunt arcu non sodales neque. Cursus mattis molestie a iaculis. Ullamcorper eget nulla facilisi etiam dignissim diam quis enim. Tellus at urna condimentum mattis pellentesque id nibh. Morbi tincidunt augue interdum velit euismod in pellentesque. Arcu dui vivamus arcu felis bibendum ut tristique et. Gravida neque convallis a cras semper auctor neque vitae. Enim nec dui nunc mattis enim.
Viverra accumsan in nisl nisi scelerisque eu ultrices vitae. Suspendisse in est ante in nibh mauris cursus mattis molestie. Scelerisque eu ultrices vitae auctor. Massa tincidunt dui ut ornare lectus sit. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Eu lobortis elementum nibh tellus molestie nunc non blandit. Massa enim nec dui nunc. Gravida cum sociis natoque penatibus. Consequat mauris nunc congue nisi vitae. At consectetur lorem donec massa sapien faucibus. Velit scelerisque in dictum non. Amet commodo nulla facilisi nullam vehicula ipsum a. Id neque aliquam vestibulum morbi blandit cursus risus. Gravida dictum fusce ut placerat orci. At augue eget arcu dictum varius duis at consectetur lorem. Tempus imperdiet nulla malesuada pellentesque elit eget. Vulputate odio ut enim blandit volutpat. A arcu cursus vitae congue mauris rhoncus aenean. Aenean sed adipiscing diam donec adipiscing tristique risus. Praesent tristique magna sit amet purus.
Sed augue lacus viverra vitae. Nec ultrices dui sapien eget mi proin sed libero enim. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh mauris cursus mattis molestie a iaculis at erat pellentesque. Vitae tempus quam pellentesque nec nam. Morbi tristique senectus et netus et malesuada fames ac. Dolor purus non enim praesent elementum facilisis leo vel. Erat imperdiet sed euismod nisi porta lorem mollis aliquam. Suspendisse potenti nullam ac tortor vitae purus faucibus ornare suspendisse. Pellentesque sit amet porttitor eget. Congue mauris rhoncus aenean vel elit scelerisque mauris pellentesque pulvinar. At varius vel pharetra vel turpis nunc eget lorem dolor.
Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Tellus in metus vulputate eu. Varius vel pharetra vel turpis nunc eget lorem. Pharetra magna ac placerat vestibulum lectus mauris ultrices eros. Aliquam nulla facilisi cras fermentum odio eu feugiat pretium nibh. Magna ac placerat vestibulum lectus mauris. Urna et pharetra pharetra massa massa ultricies. Vitae tortor condimentum lacinia quis vel. Sed nisi lacus sed viverra tellus in hac habitasse. Enim nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Arcu vitae elementum curabitur vitae nunc sed velit. Scelerisque varius morbi enim nunc. Tortor pretium viverra suspendisse potenti nullam ac. Dui id ornare arcu odio. Quam vulputate dignissim suspendisse in est ante in.
Ut etiam sit amet nisl purus in mollis. Elementum nibh tellus molestie nunc non. Risus in hendrerit gravida rutrum quisque non tellus orci ac. Condimentum lacinia quis vel eros. A condimentum vitae sapien pellentesque habitant morbi tristique senectus et. Eget nunc lobortis mattis aliquam faucibus. Neque gravida in fermentum et sollicitudin ac. Nibh venenatis cras sed felis. Proin sagittis nisl rhoncus mattis. Volutpat ac tincidunt vitae semper quis lectus nulla at. Duis ut diam quam nulla porttitor massa id neque. Velit euismod in pellentesque massa. Egestas dui id ornare arcu odio ut. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Non consectetur a erat nam at lectus urna duis. Luctus accumsan tortor posuere ac ut consequat semper. Nunc mattis enim ut tellus elementum. Amet nisl suscipit adipiscing bibendum est ultricies integer.
Dictum fusce ut placerat orci nulla pellentesque dignissim. Iaculis eu non diam phasellus vestibulum lorem sed risus. In nulla posuere sollicitudin aliquam ultrices sagittis orci a. Pulvinar neque laoreet suspendisse interdum consectetur libero id faucibus nisl. Sit amet tellus cras adipiscing enim eu turpis egestas. Bibendum enim facilisis gravida neque convallis a cras. Massa sapien faucibus et molestie ac feugiat. Nunc sed augue lacus viverra vitae congue eu consequat ac. Lorem ipsum dolor sit amet consectetur adipiscing. Volutpat diam ut venenatis tellus. Tellus in hac habitasse platea dictumst vestibulum rhoncus est. Consequat ac felis donec et. Integer enim neque volutpat ac tincidunt vitae semper quis lectus. Integer enim neque volutpat ac tincidunt vitae.
Est ante in nibh mauris cursus mattis molestie a. Netus et malesuada fames ac turpis egestas sed tempus. Nisi porta lorem mollis aliquam ut porttitor. Id volutpat lacus laoreet non curabitur gravida. Vitae auctor eu augue ut lectus arcu bibendum at varius. Purus semper eget duis at tellus at. Sed turpis tincidunt id aliquet risus feugiat in. Mollis aliquam ut porttitor leo. Nulla facilisi nullam vehicula ipsum a arcu cursus vitae. Suscipit adipiscing bibendum est ultricies integer quis auctor elit sed. Viverra ipsum nunc aliquet bibendum enim facilisis gravida. Sit amet justo donec enim. Sodales ut etiam sit amet nisl. Nec feugiat in fermentum posuere. Vitae tortor condimentum lacinia quis vel eros donec. Morbi tincidunt ornare massa eget egestas purus viverra. Ut placerat orci nulla pellentesque dignissim enim.
Neque viverra justo nec ultrices dui. Varius sit amet mattis vulputate. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque. Scelerisque felis imperdiet proin fermentum leo. Sed elementum tempus egestas sed sed risus pretium quam. Ullamcorper malesuada proin libero nunc consequat interdum. Aliquam id diam maecenas ultricies mi. Duis at consectetur lorem donec massa sapien faucibus. Mi bibendum neque egestas congue quisque. Aliquam sem et tortor consequat id porta. Dolor morbi non arcu risus quis varius quam quisque id. Nisl nunc mi ipsum faucibus vitae aliquet. Lectus vestibulum mattis ullamcorper velit sed ullamcorper. Non diam phasellus vestibulum lorem sed risus ultricies tristique nulla. Viverra nibh cras pulvinar mattis. Suspendisse interdum consectetur libero id faucibus nisl tincidunt. Nulla porttitor massa id neque aliquam vestibulum. Viverra orci sagittis eu volutpat odio facilisis mauris.
Viverra accumsan in nisl nisi scelerisque eu. Non nisi est sit amet facilisis magna etiam. Fames ac turpis egestas integer eget aliquet nibh praesent tristique. Dignissim convallis aenean et tortor. In egestas erat imperdiet sed euismod nisi. Felis eget velit aliquet sagittis id. Quam id leo in vitae. Purus semper eget duis at tellus at. Dictumst quisque sagittis purus sit amet. Scelerisque purus semper eget duis at tellus at urna condimentum.
Nec feugiat in fermentum posuere. Ullamcorper eget nulla facilisi etiam dignissim. Ac placerat vestibulum lectus mauris ultrices eros in cursus. Platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras. Nisi lacus sed viverra tellus in hac habitasse platea dictumst. Diam maecenas ultricies mi eget mauris pharetra et. Consectetur a erat nam at. Faucibus a pellentesque sit amet porttitor eget dolor morbi non. Fringilla ut morbi tincidunt augue. Porta non pulvinar neque laoreet suspendisse. Ut sem viverra aliquet eget sit amet tellus.
Proin sagittis nisl rhoncus mattis. Interdum consectetur libero id faucibus nisl tincidunt eget. Etiam dignissim diam quis enim lobortis. Tortor vitae purus faucibus ornare suspendisse sed nisi. Sagittis orci a scelerisque purus semper eget duis at tellus. Risus ultricies tristique nulla aliquet enim tortor at auctor. Tellus id interdum velit laoreet id donec ultrices. Aliquam purus sit amet luctus venenatis. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Blandit turpis cursus in hac habitasse platea dictumst. Platea dictumst vestibulum rhoncus est pellentesque. In hendrerit gravida rutrum quisque non tellus orci. Iaculis nunc sed augue lacus viverra vitae congue eu. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit. Vitae congue eu consequat ac felis donec. Eget mi proin sed libero enim sed faucibus turpis. Enim nec dui nunc mattis. Volutpat maecenas volutpat blandit aliquam. Ut tortor pretium viverra suspendisse potenti nullam ac tortor vitae. Leo vel orci porta non pulvinar.
Neque ornare aenean euismod elementum nisi quis eleifend quam. Sagittis purus sit amet volutpat consequat mauris nunc. Amet nisl purus in mollis nunc sed id semper risus. Vivamus arcu felis bibendum ut tristique et egestas quis. Tristique et egestas quis ipsum. Sit amet tellus cras adipiscing enim. Ut tellus elementum sagittis vitae et leo duis ut. Sit amet consectetur adipiscing elit ut aliquam purus sit amet. Varius vel pharetra vel turpis nunc eget lorem. A condimentum vitae sapien pellentesque habitant morbi tristique senectus et. Quis auctor elit sed vulputate mi sit amet mauris commodo. Sit amet consectetur adipiscing elit. Pharetra convallis posuere morbi leo urna molestie at elementum eu. Integer enim neque volutpat ac tincidunt vitae semper quis.
Non diam phasellus vestibulum lorem sed risus ultricies. Viverra suspendisse potenti nullam ac tortor. Enim ut tellus elementum sagittis vitae et leo duis ut. Nunc eget lorem dolor sed viverra ipsum nunc. Sed adipiscing diam donec adipiscing tristique risus nec feugiat in. Ornare arcu odio ut sem nulla pharetra diam sit amet. Interdum velit euismod in pellentesque massa placerat. Sed euismod nisi porta lorem. Viverra vitae congue eu consequat ac felis donec. Faucibus turpis in eu mi bibendum neque egestas. Habitasse platea dictumst quisque sagittis purus sit amet volutpat. Tristique et egestas quis ipsum suspendisse. Nulla facilisi cras fermentum odio eu feugiat pretium. Nisi quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Id faucibus nisl tincidunt eget nullam. Diam quis enim lobortis scelerisque. Enim ut sem viverra aliquet eget sit amet tellus.
Ridiculus mus mauris vitae ultricies leo integer malesuada. A diam maecenas sed enim ut. Sed vulputate odio ut enim. Pretium nibh ipsum consequat nisl. Eget aliquet nibh praesent tristique magna sit amet. Odio facilisis mauris sit amet massa vitae tortor condimentum. Volutpat est velit egestas dui id ornare arcu. Quis varius quam quisque id diam. Curabitur vitae nunc sed velit dignissim. Adipiscing elit pellentesque habitant morbi tristique senectus. Nibh tellus molestie nunc non blandit massa. Turpis nunc eget lorem dolor sed viverra ipsum nunc aliquet. Non sodales neque sodales ut etiam sit amet nisl purus. Vel pharetra vel turpis nunc eget lorem dolor sed. Purus non enim praesent elementum facilisis.
Lacus vestibulum sed arcu non odio euismod. Egestas quis ipsum suspendisse ultrices gravida. Lacus vestibulum sed arcu non odio euismod lacinia. Sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus. Duis convallis convallis tellus id interdum velit laoreet id. Nibh venenatis cras sed felis eget velit aliquet sagittis. Nisl purus in mollis nunc sed id. Imperdiet dui accumsan sit amet nulla. Parturient montes nascetur ridiculus mus mauris vitae. Auctor eu augue ut lectus arcu bibendum at varius. Viverra ipsum nunc aliquet bibendum enim facilisis. Rutrum tellus pellentesque eu tincidunt tortor aliquam nulla facilisi. Sed vulputate mi sit amet mauris commodo quis imperdiet. Etiam non quam lacus suspendisse faucibus interdum. Orci ac auctor augue mauris augue. Suscipit adipiscing bibendum est ultricies integer. Egestas erat imperdiet sed euismod nisi porta. Nisi quis eleifend quam adipiscing. Donec pretium vulputate sapien nec. Quis blandit turpis cursus in hac habitasse.
Nibh tortor id aliquet lectus. Aliquet porttitor lacus luctus accumsan tortor posuere ac ut. Potenti nullam ac tortor vitae purus faucibus ornare. Lorem sed risus ultricies tristique nulla aliquet enim. Sit amet facilisis magna etiam tempor orci eu lobortis. Fermentum leo vel orci porta non pulvinar neque. Morbi tristique senectus et netus et malesuada. Eget nunc lobortis mattis aliquam faucibus purus in. Consequat ac felis donec et odio pellentesque diam volutpat. Adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum.
Mi sit amet mauris commodo quis imperdiet massa tincidunt. Odio euismod lacinia at quis risus sed vulputate. Massa ultricies mi quis hendrerit dolor magna eget est lorem. Metus aliquam eleifend mi in nulla posuere sollicitudin. Sagittis aliquam malesuada bibendum arcu vitae elementum curabitur vitae nunc. Penatibus et magnis dis parturient. Eu feugiat pretium nibh ipsum consequat nisl. A cras semper auctor neque vitae. Quis imperdiet massa tincidunt nunc pulvinar sapien. Metus vulputate eu scelerisque felis imperdiet. Congue eu consequat ac felis donec et. Ornare quam viverra orci sagittis eu volutpat. Nulla malesuada pellentesque elit eget gravida cum sociis natoque. Est velit egestas dui id ornare arcu odio ut. Amet purus gravida quis blandit turpis cursus in. Pulvinar elementum integer enim neque volutpat ac tincidunt vitae. Aliquam nulla facilisi cras fermentum odio eu. Potenti nullam ac tortor vitae purus faucibus ornare. Volutpat commodo sed egestas egestas fringilla phasellus faucibus scelerisque eleifend. Mi ipsum faucibus vitae aliquet nec ullamcorper sit amet risus.
"""
hello_text = f"Hello, {name}!"
print(hello_text)
return hello_text
@dsl.pipeline
def pipeline():
for i in range(20):
task = comp(name="foo")
client = Client()
run = comp(pipeline)
The KFP API successfully compiles to an AWF manifest, but when it submits the manifest to the K8s API, the following error is raised:
Reason: Internal Server Error
HTTP response headers: HTTPHeaderDict({'x-powered-by': 'Express', 'content-type': 'application/json', 'date': 'Thu, 27 Jun 2024 15:18:16 GMT', 'content-length': '539', 'x-envoy-upstream-service-time': '190', 'server': 'istio-envoy'})
HTTP response body: {"error":"Failed to create a new run: InternalServerError: Failed to create a workflow for (): [Workflow.argoproj.io](http://workflow.argoproj.io/) \"pipeline-cf9fg\" is invalid: metadata.annotations: Too long: must have at most 262144 bytes","code":13,"message":"Failed to create a new run: InternalServerError: Failed to create a workflow for (): [Workflow.argoproj.io](http://workflow.argoproj.io/) \"pipeline-cf9fg\" is invalid: metadata.annotations: Too long: must have at most 262144 bytes","details":[{"@type":"[type.googleapis.com/google.rpc.Status](http://type.googleapis.com/google.rpc.Status)","code":13,"message":"Internal Server Error"}]}
This is because annotations for a K8s object cannot exceed 256 KB in size.
Expected result
V1 supported compiled AWF manifests that were up to 1.5 MB in size, or whatever etcd's --max-request-bytes was set to (it defaults to 1.5 MB on EKS and cannot be modified).
Due to how compilation was refactored in V2, since (if I understand correctly (please let me know if I'm completely off base here)) component logic is now stored as annotations and referenced using AWF's templating engine (example here), and annotations are restricted to 256 KB at most, there has essentially been a 6 x reduction in max DAG size in KFP v2.
Our users have a lot of gargantuan DAGs that were already struggling to fit in the 1.5 MB limit. 256 KB is not enough.
Max DAG size should at least be at parity with V1. Maybe we can store the component logic somewhere else in the compiled manifest that doesn't impose a 256 KB limit and still reference it using AWF's templating language.
Happy to work on this.
Impacted by this bug? Give it a 👍.
Here's where the stuff that shouldn't happen happens.
In addition, if an identical component is used twice, e.g.:
@dsl.pipeline
def pipeline():
for i in range(2):
task = comp()
Each task gets a dedicated annotation even though the values are identical and it's merely injected via templating into the spec.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
annotations:
pipelines.kubeflow.org/comp: <giant string>
pipelines.kubeflow.org/comp-2: <giant identical string>
This is kind of like copy pasting a function each time you want to invoke it.
Given the above, our proposed solution is to:
- Find a better place to store the component logic that can still be referenced via
{{}}but doesn't run into the 256 KB annotation limit, presumably somewhere in the workflow spec. - Figure out a way to reduce the redundancy of the component logic in the compiled manifest. This should dramatically reduce the compiled manifest size, which should help with issues like https://github.com/kubeflow/pipelines/issues/10529, https://github.com/kubeflow/pipelines/issues/4170, and https://github.com/kubeflow/pipelines/issues/9837.
My teammates and I planning to mob on this. Open to input / feedback.
We're going to try to store the component logic as (deduplicated) workflow parameters instead of annotations. This should resolve the 256 KB annotation limit and dramatically reduce workflow manifest size. There will be a one to many relationship between individual workflow parameters (components) and multiple individual tasks that reference the component using AWF's templating syntax.