Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Core] Admin policy enforcement plugin #3966

Merged
merged 67 commits into from
Sep 24, 2024
Merged

[Core] Admin policy enforcement plugin #3966

merged 67 commits into from
Sep 24, 2024

Conversation

Michaelvll
Copy link
Collaborator

@Michaelvll Michaelvll commented Sep 20, 2024

This PR allows the admin to bring a customized policy enforcement script in Python, which can apply any mutation to all user tasks based on customized policy requirements.

Usage:

User-side

In ~/.sky/config.yaml:

policy: my_package.MyPolicy

Admin-side

Create the MyPolicy class with the following signature:

class MyPolicy(sky.AdminPolicy):
  @classmethod
  def validate_and_muteate(user_task: sky.UserRequest) -> sky.MutatedUserRequest:
      pass

See policy.py for the definition of these two types.

TODO:

Tested (run the relevant ones):

  • Code formatting: bash format.sh
  • Any manual or new tests for this PR (please specify below)
    • normal launch with customized labels
    • normal launch/exec with autostop enforcement
    • jobs launch with customized labels
    • jobs launch with autostop enforcement
    • service launch with customized labels
export SKYPILOT_CONFIG='/home/gcpuser/skypilot-dev/examples/admin_policy/config_label_config.yaml'
sky serve up -n test-global-label examples/serve/http_server/task.yaml --cloud gcp
  • All smoke tests: pytest tests/test_smoke.py
  • Relevant individual smoke tests: pytest tests/test_smoke.py::test_fill_in_the_name
  • Backward compatibility tests: conda deactivate; bash -i tests/backward_compatibility_tests.sh

@Michaelvll Michaelvll changed the title [Core] Customized policy enforcement Plugin [Core] Customized policy enforcement plugin Sep 20, 2024
docs/source/reference/config.rst Outdated Show resolved Hide resolved
sky/policy.py Outdated Show resolved Hide resolved
sky/policy.py Outdated Show resolved Hide resolved
@@ -124,6 +125,8 @@ def up(

_validate_service_task(task)

task = policy.Policy().apply_to_task(task)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A bit unclear if it's in-place since it also returns the task. How about "apply_in_place"?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not in-place. Either way is fine, but I found not in-place is more commonly seen operations.

sky/utils/dag_utils.py Outdated Show resolved Hide resolved
sky/policy.py Outdated Show resolved Hide resolved
@Michaelvll Michaelvll changed the title [Core] Customized policy enforcement plugin [Core] Admin policy enforcement plugin Sep 23, 2024
Copy link
Member

@concretevitamin concretevitamin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM @Michaelvll. I think two TODOs before merging:

(1) Smoke tests, since this touches config / backend
(2) Update PR description (policy)

docs/source/cloud-setup/policy.rst Outdated Show resolved Hide resolved
docs/source/cloud-setup/policy.rst Outdated Show resolved Hide resolved
sky/execution.py Outdated Show resolved Hide resolved
tests/unit_tests/test_admin_policy.py Outdated Show resolved Hide resolved
sky/execution.py Outdated
cluster_exists = existing_handle is not None
cluster_record = global_user_state.get_cluster_from_name(cluster_name)
cluster_exists = cluster_record is not None
cluster_running = (cluster_record is not None and
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q: what's the latency impact of this policy on sky launch/exec? Is it small? Do we expect users to use this example policy and be ok with the latency?

docs/source/cloud-setup/policy.rst Outdated Show resolved Hide resolved
@Michaelvll
Copy link
Collaborator Author

@Michaelvll Michaelvll added this pull request to the merge queue Sep 24, 2024
Merged via the queue into master with commit 800f7d6 Sep 24, 2024
20 checks passed
@Michaelvll Michaelvll deleted the policy-hook branch September 24, 2024 04:44
github-merge-queue bot pushed a commit that referenced this pull request Sep 25, 2024
…3976)

Use wget instead of git clone for faster downloading
asaiacai added a commit to asaiacai/skypilot that referenced this pull request Sep 27, 2024
* [LLM] Update qwen examples (skypilot-org#3957)

* update qwen examples

* Fix misalign

* Qwen 2.5 support (skypilot-org#3959)

* Update qwen example for 2.5 release

* Add support for qwen 2.5 example

* Qwen 2.5 k8s (skypilot-org#3960)

* Update qwen example for 2.5 release

* Add support for qwen 2.5 example

* add kubernetes

* Integrating the Yi series models (skypilot-org#3958)

* Add files via upload

* Update and rename qwen2-7b.yaml to yi15-6b.yaml

* Add files via upload

* Update yi15-9b.yaml

* Update yi15-34b.yaml

* Update yi15-6b.yaml

* Add files via upload

* Update yicoder-1_5b.yaml

* Update yicoder-9b.yaml

* Add files via upload

* Update yi15-34b.yaml

* Update yi15-6b.yaml

* Update yi15-9b.yaml

* Update yicoder-1_5b.yaml

* Update yicoder-9b.yaml

* [Test] Fix Smoke Test `test-skyserve-fast-update` (skypilot-org#3956)

* init

* add newline

* [LLM] Add Qwen2-VL multimodal example (skypilot-org#3961)

Add multimodal example

* Update README.md  (skypilot-org#3969)

* Add files via upload

* Update and rename qwen2-7b.yaml to yi15-6b.yaml

* Add files via upload

* Update yi15-9b.yaml

* Update yi15-34b.yaml

* Update yi15-6b.yaml

* Add files via upload

* Update yicoder-1_5b.yaml

* Update yicoder-9b.yaml

* Add files via upload

* Update yi15-34b.yaml

* Update yi15-6b.yaml

* Update yi15-9b.yaml

* Update yicoder-1_5b.yaml

* Update yicoder-9b.yaml

* Update README.md

* [Core] Admin policy enforcement plugin (skypilot-org#3966)

* support policy hook

* test task labels

* Add test for policy that sets labels

* Fix comment

* format

* use -e to make test related files visible

* Add config.rst

* Fix test

* fix config rst

* Apply policy to service

* add policy for serving

* Add docs

* fix

* format

* Update interface

* fix

* Fix

* fix

* Fix test config

* Fix mutated config

* fix

* Add policy doc

* rename

* minor

* Add additional arguments for autostop

* fix mypy

* format

* rejected message

* format

* Update sky/utils/policy_utils.py

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update sky/utils/policy_utils.py

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Fix

* Update examples/admin_policy/example_policy/example_policy/__init__.py

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update docs/source/reference/config.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Address comments

* format

* changes in examples

* Fix enforce autostop

* Fix autostop enforcement

* fix test

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update sky/admin_policy.py

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update sky/admin_policy.py

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* wip

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* fix

* fix

* fix

* Use sky.status for autostop

* update policy

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* fix policy.rst

* Add comment

* Fix logging

* fix CI

* Update docs/source/cloud-setup/policy.rst

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Use sphnix inline code

* Add comment

* fix skypilot config file mounts for jobs and serve

---------

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* [k8s] Autodown Serve controller on Kubernetes (skypilot-org#3984)

* Add autodown for skyserve on k8s

* lint

* [Tests] Add missing changes from skypilot-org#3966 for fast service update test (skypilot-org#3976)

Use wget instead of git clone for faster downloading

* [Paperspace] add A4000, P4000, GPU+ (skypilot-org#3991)

add A4000, P4000, GPU+

* [Docs] Fix highlighting in code block (skypilot-org#3994)

Fix highlighting in code block

Fixes skypilot-org#3993

* [LLM] Llama 3.2 guide (skypilot-org#3990)

* Add llama 3.2 example

* update

* length

* fix

* update

* update cpus limit

* Use 11B instead for better performance

* update

* update

* Add link

* Fix reference

* Fix vllm version

* Update llm/llama-3_2/README.md

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update llm/llama-3_2/README.md

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update llm/llama-3_2/README.md

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Update llm/llama-3_2/README.md

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* Fix title

* news

* no need to pin transformers

* remove cover photo for now

---------

Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>

* [k8s] Add cluster attributes(autodown, idle-minutes-to-autostop) as annotations to the pod (skypilot-org#3870)

* add autodown annotations to the k8s pod

* revert kubernetes ray template

* revert backend_utils from invasive approach

* nit

* revert from invasive approaches

* revert

* updated approach

* nit

* nit

* Use constant to represent idle_minutes_to_autostop for cancellation

* revert using constants for cancel

* nit

* nit

* add smoke tests

* Update sky/provision/kubernetes/utils.py

Co-authored-by: Romil Bhardwaj <romil.bhardwaj@gmail.com>

* fix comments

* nit

* remove loops and annotate one by one

* format

* update with autodown annotation with context

* format

---------

Co-authored-by: Romil Bhardwaj <romil.bhardwaj@gmail.com>

* [Examples] Add airflow example (skypilot-org#3982)

* Airflow example

* Airflow example

* Airflow example

* Airflow example

* wip

* Update airflow examples

* Update airflow examples

* Update airflow examples

* Add to readme

* Add to readme

* Add to readme

* lint

* updates

* less salesy

* comments

* comments

* comments

* [UX] default to minimal logging (no module/line number/timestamp). (skypilot-org#3980)

* [UX] default to minimal logging (no module/line number/timestamp).

* Fix mypy.

* Fix typing

* Update sky/utils/env_options.py

Co-authored-by: Tian Xia <cblmemo@gmail.com>

* Update sky/utils/env_options.py

Co-authored-by: Tian Xia <cblmemo@gmail.com>

* Account for debug flag.

* Remove prefixes from docs.

---------

Co-authored-by: Tian Xia <cblmemo@gmail.com>

* Revert "[UX] default to minimal logging (no module/line number/timestamp)." (skypilot-org#4003)

Revert "[UX] default to minimal logging (no module/line number/timestamp). (#…"

This reverts commit b96a5b4.

* [Docs] Clarify k8s private registry usage in docs (skypilot-org#3998)

* Clarify k8s private registry auth in docs.

* comments

* [Docs] Various polishing. (skypilot-org#4002)

* [Docs] Various polishing.

* update

* Reword.

* lint

---------

Co-authored-by: Zhanghao Wu <zhanghao.wu@outlook.com>
Co-authored-by: Haijian Wang <130898843+Haijian06@users.noreply.github.com>
Co-authored-by: Tian Xia <cblmemo@gmail.com>
Co-authored-by: Zongheng Yang <zongheng.y@gmail.com>
Co-authored-by: Romil Bhardwaj <romil.bhardwaj@berkeley.edu>
Co-authored-by: Andy Lee <andylizf@outlook.com>
Co-authored-by: landscapepainter <34902420+landscapepainter@users.noreply.github.com>
Co-authored-by: Romil Bhardwaj <romil.bhardwaj@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants