Skip to main content

Enables actor v2

Project description

Union.ai Actors

Developer Setup

Make sure you have a virtual environment set up and activated. Use uv.

Go into the folder this readme is in (cd fasttask/worker-v2 from base of repo). Then,

uv venv --python 3.13
source .venv/bin/activate

To build wheels containing the Rust code you'll also need this for now. make build-builders to build the builder images

This is because the manylinux by default don't come with rust installed. Installing them into the manylinux image every time is too time-consuming, so these are really lightweight images that just install rust/cargo/maturin.

We can get rid of these once we find better ways to build multi-arch wheels, or find maintained public images. I'm sure they exist, just haven't looked in depth.

End to end iterating

make build-wheels to build the wheels. This compiles all the Rust code

Do something like this on the Python side

actor_dist_folder = Path("/Users/ytong/go/src/github.com/unionai/flyte/fasttask/worker-v2/dist")
wheel_layer = PythonWheels(wheel_dir=actor_dist_folder, package_name="unionai-reuse")
base = flyte.Image.from_debian_base()
actor_image = base.clone(addl_layer=wheel_layer)

and also run make dist as you would normally when iterating just in the flyte-sdk.

From examples folder of flyte-sdk, using a different virtual environment. Make sure to update the wheel folder in the example code.

flyte -c ~/.flyte/config-k3d.yaml run -d development reuse/oomer_reuse.py failure_recovery

Note when hitting Ctrl-C during the make command, the docker process doesn't stop. You'll have to docker stop/rm the container if you don't want to wait around for the build to finish.

Executor iteration

To make a change to the python side

  • Just make sure that the flyte-sdk library is installed in editable mode and changes should get picked up. Test with a print statement to confirm.

To make a change to the rust side These instructions may be incomplete

Run the test server so that the executor has something to attach to.

cargo run -p unionai_actor_bridge --bin test_server

Another test service is available called ping_test - it doesn't ping, it calls devbox one.

cargo run -p unionai_actor_bridge --bin ping_test
cargo run -p unionai_actor_bridge --bin ping_test -- --test-cancel --cancel-wait 10

Run the executor (see below for building)

unionai-actor-executor --executor-registration-addr 127.0.0.1:15606 --id 0 --num-workers 1

This adds local flyte-sdk changes to the path. Also adds the examples folder to the path so that the manual override added (need to document), can be picked up.

When using this, you'll also need to pull this test branch in flyte-sdk, which helps short-circuit part of the task execution process. https://github.com/flyteorg/flyte-sdk/compare/rusty-test-abort?expand=1

PYTHONPATH=/Users/ytong/go/src/github.com/flyteorg/flyte-sdk/examples:/Users/ytong/go/src/github.com/flyteorg/flyte-sdk/src: unionai-actor-executor --executor-registration-addr 127.0.0.1:15606 --id 0 --num-workers 1

Will need to uv pip install -e . from base folder (the dir this readme is in) to pick up changes - need to investigate how to run maturin develop from the executor/ folder, which doesn't seem to work currently. Changes don't get pick up.

Bridge iteration

fill this in next time someone is working only on the bridge side.

SDK side

In addition to the test branch above, to get the flyte-sdk to pick up the whls that are build as part of the make build-wheels target, you can use this Python snippet as the image in the TaskEnvironment

from pathlib import Path
from flyte._image import PythonWheels

actor_dist_folder = Path("/Users/yourusername/go/src/github.com/unionai/flyte/fasttask/worker-v2/dist")
wheel_layer = PythonWheels(wheel_dir=actor_dist_folder, package_name="unionai-reuse")
base = flyte.Image.from_debian_base()
actor_image = base.clone(addl_layer=wheel_layer)

If a test version has been published to test pypi, then you can use it in the task Image with

flyte.Image.from_debian_base().with_pip_packages("unionai-reuse==0.1.8b4", extra_index_urls=["https://test.pypi.org/simple/"])

Releasing

There is some CI in .github/workflows/wheels.yml at the base of this repo, but it is slow. That workflow will build and publish wheels to pypi and test pypi based on the following:

To trigger the workflow, create and push a tag (or create on GitHub) matching unionai_reuse-v*.

  • Tags on the master branch publish to PyPI, while tags on feature branches publish to TestPyPI for testing.
  • Beta/prerelease versions (identified by b, rc, alpha, beta, or dev in the version string, e.g., unionai_reuse-v0.1.8b0) pushed from master will also publish to TestPyPI.
  • The workflow builds wheels for Linux (x86_64 and aarch64) and macOS platforms.

To tag locally, run

git tag unionai_reuse-v0.1.9b0
git push origin unionai_reuse-v0.1.9b0

However the CI is super, super slow - like running the ARM build takes like 40-50 mins. Can investigate ARM machines in the future. The below commands use the local commands and override the python version. This is the better option if you're in a hurry. Building for amd64 on a macbook arm is much faster, at least on my M4 I'm typing this on. The make targets are needed anyways in local development so we'll definitely keep these around.

make build-wheels SETUPTOOLS_SCM_PRETEND_VERSION=0.1.7a0b0
SETUPTOOLS_SCM_PRETEND_VERSION=0.1.7a0 python -m build --wheel

but wheels need to be renamed to this pattern

mv unionai_reuse-0.1.7a0-cp38-abi3-linux_aarch64.whl unionai_reuse-0.1.7a0-cp38-abi3-manylinux_2_28_aarch64.whl;
mv unionai_reuse-0.1.7a0-cp38-abi3-linux_x86_64.whl unionai_reuse-0.1.7a0-cp38-abi3-manylinux_2_28_x86_64.whl

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

unionai_reuse-0.1.10-cp38-abi3-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eaaec24b7d5836fd7d5cae588b519682d751c1127e115c65de4470803cb34396
MD5 f92b6ef42902d8de693e6ba125aa3a88
BLAKE2b-256 ba34beafa6839b79ea6a814ec1c24308e56ff3f03f442c69bd2c61dab9a36d15

See more details on using hashes here.

File details

Details for the file unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for unionai_reuse-0.1.10-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9d32a22d2903b780d8b18e119d5325a645e3483e6cc708f85cfeddc0d8ecba58
MD5 23a8d0e45fe513387d1924c8f6a86ede
BLAKE2b-256 7888192b6412fc7596e7e4bfbf1a347cecb84f9951afc0d2ac68482a040cff1f

See more details on using hashes here.

File details

Details for the file unionai_reuse-0.1.10-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for unionai_reuse-0.1.10-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a8b2b5012ea64b9b13ada61cc5b69557e588c7a0b49b272d897167639935989
MD5 2262959a3f201b3bf37b0f6fb5387aad
BLAKE2b-256 1d4f230fcc4db843072387ec39c2b3b5d89119da9739d756678702c6b91e9012

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page