v0.6.0
skypilot-org/skypilotv0.6.0May 30, 2024by romilbhardwaj
AI Summary
SkyPilot v0.6.0 introduces a major Jobs API for job execution and recovery, adds Kubernetes support for SkyServe and Managed Jobs, and adds Paperspace as a new cloud provider. The release also enables mixing spot and on-demand instances in SkyServe for cost-effective high availability.
Key Highlights
- Managed Jobs API replaces spot jobs with broader support for on-demand and spot instances with automatic recovery
- SkyServe and Managed Jobs can now run on Kubernetes clusters
- New cloud provider: Paperspace with H100 and A100-80GB GPUs
- SkyServe now supports intelligent mixing of spot and on-demand instances with automatic fallback
- New LLM recipes added: Llama-3, Qwen, Ollama, DBRX, Unsloth, and Cog
Breaking Changes
- `sky spot` CLI is deprecated - use `sky jobs` CLI instead
- `core.spot_xxx` APIs have been refactored to `jobs.xxx`
- `qps_lower_threshold` and `auto_restart` in service config are deprecated - use `target_qps_per_replica` instead
New Features
- Managed Jobs for job execution with automatic recovery from spot preemptions and hardware failures
- SkyServe and Jobs controllers can run on Kubernetes
- Mix spot and on-demand instances in SkyServe with intelligent policies
- Paperspace cloud support with H100 and A100-80GB GPUs
- SkyServe now uses proxy instead of HTTP redirect for better performance
- Readiness probe now supports custom headers
- `sky check` supports checking credentials for specific clouds
- Resources support `labels` field for cloud resource labeling
- New environment variable `SKYPILOT_CLUSTER_INFO` with cluster details
- Python 3.11 support
- Lazy imports for 2x faster import times
- GCP H100 GPU support
- Azure custom images support
- AWS fine-grained IAM roles on per-resource basis
- Fluidstack H100 and A100 Nvlink support
- Kubernetes autoscaling support for GKE node pools and Karpenter
- GPU isolation - no more privileged containers
Full Release Notes
## SkyPilot v0.6.0: Jobs API, SkyServe on Kubernetes, Spot + On-demand mixing, Paperspace support and more! We are excited to release SkyPilot v0.6.0! This release includes a number of new features: * [Managed Jobs](https://skypilot.readthedocs.io/en/latest/examples/managed-jobs.html) for job execution and recovery * SkyServe and Jobs on Kubernetes * Mix on-demand and spot instances in SkyServe * New cloud: [Paperspace](https://skypilot.readthedocs.io/en/latest/getting-started/installation.html#paperspace) ## Release Highlights ### Managed Jobs * The spot controller has been enhanced to support any job on on-demand or spot instances. * To use, run `sky jobs launch` instead of `sky spot launch`. * The new job controller can automatically recover jobs from any spot preemptions or hardware failures, and also execute pipelines of jobs. * The `sky jobs` API is identical to the `sky spot` API, but also supports on-demand instances. ### SkyServe and Jobs on Kubernetes * SkyPilot can now run SkyServe and Managed Job controllers on Kubernetes * This means you can now run your SkyServe and Managed Jobs on your Kubernetes cluster! * Simply run `sky jobs launch` or `sky serve up`, and SkyPilot will automatically deploy the controller on your Kubernetes cluster if available and run jobs on the cheapest available location. ### Mix on-demand and spot instances in SkyServe * SkyServe now supports a new intelligent policy for mixing spot and on-demand instances. [Example](https://github.com/skypilot-org/skypilot/blob/master/examples/serve/spot_policy/base_on_demand_fallback_replicas.yaml). * Uses on-demand instances to ensure availability and spot instances to save costs. * Dynamically falls back to on-demand replicas when spot replicas are not available. [Example](https://github.com/skypilot-org/skypilot/blob/master/examples/serve/spot_policy/dynamic_on_demand_fallback.yaml). ### Paperspace support * Newest cloud to join the Sky: Paperspace! * Paperspace offers the latest GPUs including H100 and A100-80GB for AI training and inference. * Simply add your Paperspace API key to `~/.paperspace/config.json` and run `sky check paperspace` to [get started](https://skypilot.readthedocs.io/en/latest/getting-started/installation.html#paperspace). * Big thanks to @asaiacai for contributing Paperspace support! ### More LLMs and Recipes * New LLM Recipes: [Llama-3](https://skypilot.readthedocs.io/en/latest/gallery/llms/llama-3.html), [Qwen](https://skypilot.readthedocs.io/en/latest/gallery/llms/qwen.html), [Ollama](https://skypilot.readthedocs.io/en/latest/gallery/frameworks/ollama.html), [DBRX](https://skypilot.readthedocs.io/en/latest/gallery/llms/dbrx.html), [Unsloth](https://github.com/skypilot-org/skypilot/blob/master/examples/unsloth/unsloth.yaml), [Cog](https://github.com/skypilot-org/skypilot/pull/3219) ## Deprecation Notes The following features have been deprecated and will be removed in the next minor release: * `sky spot` CLI: use `sky jobs` CLI instead. * `core.spot_xxx` APIs: refactored to `jobs.xxx`. * `qps_lower_threshold` and `auto_restart` in `service`: use `target_qps_per_replica` instead. ## Changelog ### Managed Jobs * Changes make to local catalog at ~/.sky/catalog are now reflected on the controller (#3289) * The name of the spot job is now included in the `SKYPILOT_TASK_ID` environment variable (#3424) * Legacy spot job APIs have been refactored from `core.spot_xxx` to `jobs.xxx` (#3417) * Cloud for the controller is now chosen based on the resources of the replicas (#3363) * Bug fixes (#3302, #3397, #3459, #3468, #3480) ### SkyServe New Features * New intelligent policy for mixing spot and on-demand instances in SkyServe (#3194) * **SkyServe now uses proxy** instead of HTTP redirect responses for better performance (#3395) * **Readiness probe now supports headers**: this is useful for authentication or other headers required for readiness checks (#3552) Enhancements * Optimizations - replicas are reused when only service section is changed (#3214) * Rolling updates are now the default behavior for SkyServe (#3249) * Controller cloud is now chosen from replica resources if it is not already up (#3231) * Bug fixes and API improvements (#3257, #3299, #3303, #3411, #3411, #3546) ### Kubernetes * Kubernetes clusters can now run SkyServe and Managed Jobs (#3377, #3524, #3521) * `sky show-gpus` now shows realtime availability of GPUs in the cluster (#3499) * Autoscaling Kubernetes clusters are now supported: SkyPilot can now wait for GKE node pools, Karpenter and other autoscalers to provision nodes (#3513, #3415) * Use Kubernetes service accounts by specifying `remote_identity` in ~/.sky/config.yaml (#3377, #3527) * `sky local up` now also automatically installs the Nginx Ingress Controller (#3223) * Support for specifying custom pod configurations with `pod_config` (#3244) * Use this to modify the pod configuration for your environment, e.g., attaching volumes, specifying imagePullSecrets, increasing /dev/shm size limit, setting `HTTP_PROXY` and more! See [example `pod_config` here](https://skypilot.readthedocs.io/en/latest/reference/config.html). * Support for specifying custom metadata to all Kubernetes resources created by SkyPilot (#3333) * Useful for tracking resources created by SkyPilot in your Kubernetes cluster. * Support for PodIP mode for exposing ports (#3445) Enhancements * **GPU Isolation**: SkyPilot no longer uses privileged containers and pods can no longer use GPUs not allocated to them (#3443) * Ingress creation requests are now batched to minimize nginx reloads and ingress paths are namespaced (#3263, #3373) * All SkyPilot pods are now labelled with `skypilot-user` to identify the owner of the pod (#3576) * Special characters in environment variables are now correctly parsed (#3322) * GPU labelling is now more robust (#3274) * Bug fixes and quality of life improvements (#3266, #3392, #3439, #3509, #3524, #3525, #3532, #3563, #3578, #3374) ### CLI & Core interfaces New Features * `resources` now supports `labels` field to set labels (instance tags on aws, labels on gcp and k8s) on cloud resources (#3464, #3505) * `sky check` now supports checking credentials for specific clouds, e.g. `sky check aws gcp` (#3229) * You can also restrict which clouds are checked by setting `allowed_clouds` in `~/.sky/config.yaml`. (#3556) * `any_of` or `ordered` fields in `resources` can now have clouds that are not enabled (#3567) * A [new environment variable `SKYPILOT_CLUSTER_INFO`](https://skypilot.readthedocs.io/en/latest/running-jobs/environment-variables.html), containing cluster name, cloud, region and zone is now available in all tasks (#3424) Enhancements * Optimizer is up to 10x faster when multiple resources are specified (#3567) * Autostop timer is now reset at the start of a new sky launch to avoid unexpected autostops (#3205) * GCP GPUs now include `DEVICE_MEM` in `sky show-gpus` (#3375) * Better sorting for `sky show-gpus` (#3492) * Handling for usernames containing invalid characters (#3528) * Null environment variables now raise an error (#3557) ### Runtime & Backend * SkyPilot now supports Python 3.11 (#3248) * SkyPilot runtime is now isolated from any environment changes made by user code (#3575, #3326, #3339) * Fix for jobs and services running longer than 12 days (#3460) * Docker runtime fixes and enhancements, including fix for storage mounting in container (#3450, #3436, #3481, #3343) * Bug fixes and optimizations (#3280, #3292, #3178, #3386, #3292, #3386, #3407, #3423, #3368, #3457, #3469, #3482, #3495, #3512, #3536, #3568) Optimizations * Lazy imports for 2x faster import times (#3394, #3463) * Faster setup and job submission (#3523, #3484), ### Cloud: GCP * H100 GPUs are now supported on GCP (#3279) * Support for fine-grained GCP IAM permissions (#3284) ### Cloud: Azure * Custom images are now supported on Azure. Simply specify `image_id` in the `resources` field. (#3362) * 8x faster autostop for Azure (#3519) * Fix GPUs not being detected in Azure (#3313) * Provisioning fixes (#3483) ### Cloud: AWS * Fine-grained IAM roles: you can now specify IAM roles on a per-resource basis (#3488, #3514) * SkyPilot can now be run in ECS containers by assuming `container-role` IAM roles (#3503) * SkyPilot will not delete user-specified security groups (#3402) ### Cloud: Fluidstack * H100 and A100 Nvlink support for Fluidstack (#3467) * Opening ports is now supported for Fluidstack (#3294) * Bug fixes (#3254, #3265) ### Other Clouds * Bug fixes for Lambda provisioning and termination (#3409, #3410) * Multi-gpu fixes for RunPod (#3291) * Cudo: handle missing project errors (#3438) ## Thanks to all contributors! New contributors: @MysteryManav, @JGSweets, @Harthgar, @mjkanji Many thanks to all contributors who contributed to this release! Contributors: @Michaelvll, @romilbhardwaj, @concretevitamin, @cblmemo, @MaoZiming, @shethhriday29, @asaiacai, @JGSweets, @mjkanji, @MysteryManav, @landscapepainter, @Harthgar, @mjibril, @dtran24, @fozziethebeat, @JungleCatSW **Full Changelog**: https://github.com/skypilot-org/skypilot/compare/v0.5.0...v0.6.0