RFC: Conda Package Workflow and Ownership for AYON on Deadline Cloud #26
Replies: 2 comments 2 replies
-
|
Thanks for the analysis. definitely something to think about. It goes a little bit against some core concepts of AYON, but maybe we can distill something from it. The biggest issue is that AYON is designed to handle versions and dependencies of its components in very flexible manner. This "packaging" works like this: Bundles are the core concept - they group together AYON addons versions, AYON launcher and dependency package. LauncherLauncher is important in this case not just for bootstrapping but it also provides basic dependencies - like specific version of ayon-python-api, Qt and python, etc. Addon versionsSettings in AYON are bound to addon versions (and variants Dependency packageIs a collection of all python dependencies specified by individual addon versions with bundle minus the ones defined by AYON launcher. This allows you to run AYON with various configurations and environments but also complicates versioning externally. How this works with farm schedulers:
Another point to consider are Variants - bundle variants can be used to switch between addon settings so you can test various addon versions and their settings before you run them in production. This is an important aspect - it allows you to submit the jobs in staging environment. All of it is difficult to convert to a single conda package version thanks to the mentioned package immutability. You would need to either completely replace the logic of how versioning works in AYON or seriously limit these features. What could work:
This will solve consistent environment, bootstrapping of workers, and it will minimize redownloading of larger data. Now I am not that versed in AWS ecosystem so there might be flaws I am not seeing - the cache persistance or maybe associated cost, or some other difficulities. What do you think @leon-li-inspire and @oehmends |
Beta Was this translation helpful? Give feedback.
-
|
Outcome of the 9 June dev deep dive — where we landed Following up on this RFC and @antirotor's reply. On the call (@leon-li-inspire, @antirotor and me) we aligned on an approach to take forward as a PoC and validate for viability. Two parts, and they're independent of each other. 1. Getting AYON + the bundle onto the worker
This lines up with @antirotor's proposal — a lightweight package that resolves the bundle, caches what workers need, and executes the Launcher. The open part is to build it and confirm it holds up in practice. 2. Reaching the AYON server Separate from distributing the attachments, and it varies by where the AYON server lives (on-prem, AYON-managed cloud, or self-hosted EC2 → VPN / VPC Lattice / SSM). I'll map the connection scenarios per studio setup as a mermaid diagram for the next call, building on the distribution analysis doc: launcher-distribution.md. One constraint to keep in mind: hybrid SMF/CMF works, but only with synchronized storage — otherwise on-prem workers pull the whole payload from cloud S3. Next steps
Next call is Monday. Shout on Discord in the meantime if anything's unclear. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
RFC: Conda Package Workflow and Ownership for AYON on Deadline Cloud
Problem
The PUBLISH step on Deadline Cloud Service-Managed Fleet (SMF) workers requires AYON libraries (
ayon-core,ayon-python-api,pyblish-base,ayon-deadline-cloudaddon) to run. Without them, SMF workers fail withayon: command not found.Two distribution options were considered (analysis):
We propose option 2: a headless conda package containing only the libraries needed for publishing.
Proposal
What ships to workers
A single
noarch: pythonconda package (~10 MB) containing:ayon-coreayonCLI. Only the headless client code is included (no GUI/Qt).ayon-python-apipyblish-baseclique,nxtools, and other depsframe.0001.exr...frame.0100.exr), path handling, and media metadata.ayon-deadline-cloudaddonNo launcher GUI, no self-update, no cx_Freeze bundle. Version pinned at build time.
Recipe location
The recipe lives in
ynput/ayon-core. This provides:Channel hosting
YNPUT owns and operates the public conda channel. This is an S3-backed channel (e.g.,
s3://ynput-conda-channel/ayon/) that customers add to their queue'sCondaChannelsparameter.Rationale:
Not in the
deadline-cloudchannel — that channel is AWS-managed and tied to AWS release processes. AYON's release cadence is independent.Workflow
Build & publish (YNPUT responsibility)
The channel accumulates all published versions — older versions remain available:
Version pinning
Each
ayon-publishpackage version bundles a fixed set of AYON libraries. Customers choose which version to install at submission time:ayon-publish→ latest availableayon-publish=1.9.0→ exact version matching their AYON server/bundleThe AYON addon automatically pins the version at submission based on the studio's active bundle configuration. This ensures every worker in a job runs the same code, regardless of when it starts.
Customer setup (one-time)
Job execution
Key Design Decisions
noarch: python— cross-platform by defaultThe package is
noarch: python(platform-independent, pure Python). A single package works on both Linux and Windows workers — conda handles platform-specific file placement (entry points go tobin/on Linux,Scripts/on Windows). No separate builds needed per platform.Requires
conda-forgein the queue's channel list to provide a standalonepythonpackage for the solver and linker — matching the pattern used by all official Deadline Cloud sample recipes.Addon pinning strategy
Three approaches for how addons and libraries ship:
ayon-core=1.9.0 ayon-deadline-cloud=0.2.0)ayon-publish=1.9.0ayon-core=1.9.0 ayon-python-api=1.2.19 ayon-deadline-cloud=0.2.0ayon-publish-core=1.9.0(addons synced from S3)Option C detail: Uses the same plugin sync pattern that Deadline Cloud DCC packages use for Maya/Blender plugins. The conda package includes a base (
ayon-core+ayon-python-api+ deps) plus an activation script that downloads addons from the queue's job attachments S3 bucket at session start:The activation script (runs when conda env activates) downloads these to the session directory and adds them to
PYTHONPATH. Studios manage addon versions by uploading to S3 — no conda rebuild, no AYON server dependency.MVP: Option A (single fat package). Simple, deterministic, no coordination overhead.
Option B becomes viable when: YNPUT has stable CI for each component and studios need to independently version addons without server-side resolution.
Option C becomes viable when: Studios want full control over addon versions without waiting for any package publish, and want to use the same plugin distribution pattern they already use for DCC plugins.
Version compatibility
The
ayon-publishpackage version must be compatible with the studio's AYON server version. A mismatch causes failures:ayon-python-apivs serverayon-corevs serverayon-deadline-cloudvsayon-coreAYON manages compatibility through bundles — a bundle declares which versions of server + addons are tested together. Each
ayon-publishpackage version corresponds to a tested bundle combination.Mitigation: The AYON addon at submission time automatically selects the package version matching the studio's active bundle. If a studio upgrades their AYON server, they must also ensure a compatible
ayon-publishversion is available in the channel. YNPUT is responsible for publishing a package version for each supported bundle.Open Questions
Public channel access model — Should the YNPUT channel be fully public (anonymous read) or require customer-specific IAM credentials? Public is simpler; credentialed allows YNPUT to track adoption.
Version compatibility matrix — How do we document which
ayon-publishversion works with which AYON server version? A compatibility table in the repo README, or enforced via the AYON server's bundle configuration?Beta Was this translation helpful? Give feedback.
All reactions