skypilot-nightly 1.0.0.dev20250806__py3-none-any.whl → 1.0.0.dev20250807__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of skypilot-nightly might be problematic. Click here for more details.
- sky/__init__.py +2 -2
- sky/backends/cloud_vm_ray_backend.py +33 -4
- sky/check.py +11 -1
- sky/client/cli/command.py +208 -93
- sky/client/sdk.py +14 -1
- sky/client/sdk_async.py +4 -0
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/YAirOGsV1z6B2RJ0VIUmD/_buildManifest.js +1 -0
- sky/dashboard/out/_next/static/chunks/1141-a8a8f1adba34c892.js +11 -0
- sky/dashboard/out/_next/static/chunks/1871-980a395e92633a5c.js +6 -0
- sky/dashboard/out/_next/static/chunks/3785.6003d293cb83eab4.js +1 -0
- sky/dashboard/out/_next/static/chunks/3850-ff4a9a69d978632b.js +1 -0
- sky/dashboard/out/_next/static/chunks/4725.29550342bd53afd8.js +1 -0
- sky/dashboard/out/_next/static/chunks/{4937.d6bf67771e353356.js → 4937.a2baa2df5572a276.js} +1 -1
- sky/dashboard/out/_next/static/chunks/6130-2be46d70a38f1e82.js +1 -0
- sky/dashboard/out/_next/static/chunks/6601-3e21152fe16da09c.js +1 -0
- sky/dashboard/out/_next/static/chunks/{691.6d99cbfba347cebf.js → 691.5eeedf82cc243343.js} +1 -1
- sky/dashboard/out/_next/static/chunks/6989-6129c1cfbcf51063.js +1 -0
- sky/dashboard/out/_next/static/chunks/6990-0f886f16e0d55ff8.js +1 -0
- sky/dashboard/out/_next/static/chunks/8056-019615038d6ce427.js +1 -0
- sky/dashboard/out/_next/static/chunks/8252.62b0d23aed618bb2.js +16 -0
- sky/dashboard/out/_next/static/chunks/8969-318c3dca725e8e5d.js +1 -0
- sky/dashboard/out/_next/static/chunks/9025.a1bef12d672bb66d.js +6 -0
- sky/dashboard/out/_next/static/chunks/9159-11421c0f2909236f.js +1 -0
- sky/dashboard/out/_next/static/chunks/9360.85b0b1b4054574dd.js +31 -0
- sky/dashboard/out/_next/static/chunks/9666.cd4273f2a5c5802c.js +1 -0
- sky/dashboard/out/_next/static/chunks/{9847.4c46c5e229c78704.js → 9847.757720f3b40c0aa5.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/{_app-2a43ea3241bbdacd.js → _app-1e6de35d15a8d432.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-6fd1d2d8441aa54b.js +11 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-155d477a6c3e04e2.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/{clusters-47f1ddae13a2f8e4.js → clusters-b30460f683e6ba96.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/config-dfb9bf07b13045f4.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/infra/{[context]-2a44e70b500b6b70.js → [context]-13d53fffc03ccb52.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/{infra-22faac9325016d83.js → infra-fc9222e26c8e2f0d.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-154f55cf8af55be5.js +11 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-f5ccf5d39d87aebe.js +21 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs-cdc60fb5d371e16a.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/{users-b90c865a690bfe84.js → users-7ed36e44e779d5c7.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/{volumes-7af733f5d7b6ed1c.js → volumes-c9695d657f78b5dc.js} +1 -1
- sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-f72f73bcef9541dc.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces-8f67be60165724cc.js +1 -0
- sky/dashboard/out/_next/static/chunks/webpack-76efbdad99742559.js +1 -0
- sky/dashboard/out/_next/static/css/4614e06482d7309e.css +3 -0
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -0
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/global_user_state.py +14 -2
- sky/jobs/__init__.py +2 -0
- sky/jobs/client/sdk.py +43 -2
- sky/jobs/server/core.py +48 -1
- sky/jobs/server/server.py +52 -3
- sky/jobs/state.py +5 -1
- sky/schemas/db/global_user_state/002_add_workspace_to_cluster_history.py +35 -0
- sky/schemas/db/spot_jobs/003_pool_hash.py +34 -0
- sky/serve/client/impl.py +85 -1
- sky/serve/client/sdk.py +16 -47
- sky/serve/constants.py +2 -1
- sky/serve/controller.py +4 -2
- sky/serve/serve_state.py +28 -5
- sky/serve/serve_utils.py +77 -46
- sky/serve/server/core.py +13 -197
- sky/serve/server/impl.py +239 -2
- sky/serve/service.py +8 -3
- sky/server/common.py +11 -4
- sky/server/constants.py +1 -1
- sky/server/requests/executor.py +5 -3
- sky/server/requests/payloads.py +19 -0
- sky/task.py +18 -11
- sky/templates/kubernetes-ray.yml.j2 +5 -0
- sky/templates/sky-serve-controller.yaml.j2 +1 -0
- sky/usage/usage_lib.py +8 -6
- sky/utils/annotations.py +8 -3
- sky/utils/common_utils.py +11 -1
- sky/utils/db/migration_utils.py +2 -2
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/METADATA +18 -13
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/RECORD +95 -92
- sky/client/sdk.pyi +0 -301
- sky/dashboard/out/_next/static/Gelsd19kVxXcX7aQQGsGu/_buildManifest.js +0 -1
- sky/dashboard/out/_next/static/chunks/1043-75af48ca5d5aaf57.js +0 -1
- sky/dashboard/out/_next/static/chunks/1141-8678a9102cc5f67e.js +0 -11
- sky/dashboard/out/_next/static/chunks/1664-22b00e32c9ff96a4.js +0 -1
- sky/dashboard/out/_next/static/chunks/1871-ced1c14230cad6e1.js +0 -6
- sky/dashboard/out/_next/static/chunks/2003.f90b06bb1f914295.js +0 -1
- sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +0 -1
- sky/dashboard/out/_next/static/chunks/2622-951867535095b0eb.js +0 -1
- sky/dashboard/out/_next/static/chunks/3785.0a173cd4393f0fef.js +0 -1
- sky/dashboard/out/_next/static/chunks/4725.42f21f250f91f65b.js +0 -1
- sky/dashboard/out/_next/static/chunks/4869.18e6a4361a380763.js +0 -16
- sky/dashboard/out/_next/static/chunks/5230-f3bb2663e442e86c.js +0 -1
- sky/dashboard/out/_next/static/chunks/6601-2109d22e7861861c.js +0 -1
- sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +0 -1
- sky/dashboard/out/_next/static/chunks/8969-9a8cca241b30db83.js +0 -1
- sky/dashboard/out/_next/static/chunks/9025.99f29acb7617963e.js +0 -6
- sky/dashboard/out/_next/static/chunks/938-bda2685db5eae6cf.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-7cb24da04ca00956.js +0 -11
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-1e95993124dbfc57.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/config-d56e64f30db7b42e.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-90693cb88b5599a7.js +0 -11
- sky/dashboard/out/_next/static/chunks/pages/jobs-ab318e52eb4424a7.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-35e0de5bca55e594.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/workspaces-062525fb5462acb6.js +0 -1
- sky/dashboard/out/_next/static/chunks/webpack-387626669badf82e.js +0 -1
- sky/dashboard/out/_next/static/css/b3227360726f12eb.css +0 -3
- /sky/dashboard/out/_next/static/{Gelsd19kVxXcX7aQQGsGu → YAirOGsV1z6B2RJ0VIUmD}/_ssgManifest.js +0 -0
- /sky/dashboard/out/_next/static/chunks/{6135-2d7ed3350659d073.js → 6135-85426374db04811e.js} +0 -0
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250806.dist-info → skypilot_nightly-1.0.0.dev20250807.dist-info}/top_level.txt +0 -0
sky/task.py
CHANGED
|
@@ -241,8 +241,8 @@ class Task:
|
|
|
241
241
|
self,
|
|
242
242
|
name: Optional[str] = None,
|
|
243
243
|
*,
|
|
244
|
-
setup: Optional[str] = None,
|
|
245
|
-
run: Optional[CommandOrCommandGen] = None,
|
|
244
|
+
setup: Optional[Union[str, List[str]]] = None,
|
|
245
|
+
run: Optional[Union[CommandOrCommandGen, List[str]]] = None,
|
|
246
246
|
envs: Optional[Dict[str, str]] = None,
|
|
247
247
|
secrets: Optional[Dict[str, str]] = None,
|
|
248
248
|
workdir: Optional[Union[str, Dict[str, Any]]] = None,
|
|
@@ -293,15 +293,15 @@ class Task:
|
|
|
293
293
|
|
|
294
294
|
Args:
|
|
295
295
|
name: A string name for the Task for display purposes.
|
|
296
|
-
setup: A setup command, which will be run before executing the run
|
|
296
|
+
setup: A setup command(s), which will be run before executing the run
|
|
297
297
|
commands ``run``, and executed under ``workdir``.
|
|
298
298
|
run: The actual command for the task. If not None, either a shell
|
|
299
|
-
command (str) or a command generator (callable).
|
|
300
|
-
must take a node rank and a list of node addresses as
|
|
301
|
-
return a shell command (str) (valid to return None for
|
|
302
|
-
in which case no commands are run on them).
|
|
303
|
-
run under ``workdir``. Note the command generator
|
|
304
|
-
self-contained lambda.
|
|
299
|
+
command(s) (str, list(str)) or a command generator (callable). If
|
|
300
|
+
latter, it must take a node rank and a list of node addresses as
|
|
301
|
+
input and return a shell command (str) (valid to return None for
|
|
302
|
+
some nodes, in which case no commands are run on them). Run
|
|
303
|
+
commands will be run under ``workdir``. Note the command generator
|
|
304
|
+
should be a self-contained lambda.
|
|
305
305
|
envs: A dictionary of environment variables to set before running the
|
|
306
306
|
setup and run commands.
|
|
307
307
|
secrets: A dictionary of secret environment variables to set before
|
|
@@ -347,15 +347,22 @@ class Task:
|
|
|
347
347
|
YAML config.
|
|
348
348
|
"""
|
|
349
349
|
self.name = name
|
|
350
|
-
self.run = run
|
|
351
350
|
self.storage_mounts: Dict[str, storage_lib.Storage] = {}
|
|
352
351
|
self.storage_plans: Dict[storage_lib.Storage,
|
|
353
352
|
storage_lib.StoreType] = {}
|
|
354
|
-
self.setup = setup
|
|
355
353
|
self._envs = envs or {}
|
|
356
354
|
self._secrets = secrets or {}
|
|
357
355
|
self._volumes = volumes or {}
|
|
358
356
|
|
|
357
|
+
# concatenate commands if given as list
|
|
358
|
+
def _concat(commands):
|
|
359
|
+
if isinstance(commands, list):
|
|
360
|
+
return '\n'.join(commands)
|
|
361
|
+
return commands
|
|
362
|
+
|
|
363
|
+
self.run = _concat(run)
|
|
364
|
+
self.setup = _concat(setup)
|
|
365
|
+
|
|
359
366
|
# Validate Docker login configuration early if both envs and secrets
|
|
360
367
|
# contain Docker variables
|
|
361
368
|
if self._envs or self._secrets:
|
|
@@ -777,6 +777,11 @@ available_node_types:
|
|
|
777
777
|
{{ ray_installation_commands }}
|
|
778
778
|
|
|
779
779
|
VIRTUAL_ENV=~/skypilot-runtime ~/.local/bin/uv pip install skypilot[kubernetes,remote]
|
|
780
|
+
# Wait for `patch` package to be installed before applying ray patches
|
|
781
|
+
until dpkg -l | grep -q "^ii patch "; do
|
|
782
|
+
sleep 0.1
|
|
783
|
+
echo "Waiting for patch package to be installed..."
|
|
784
|
+
done
|
|
780
785
|
# Apply Ray patches for progress bar fix
|
|
781
786
|
~/.local/bin/uv pip list | grep "ray " | grep 2.9.3 2>&1 > /dev/null && {
|
|
782
787
|
VIRTUAL_ENV=~/skypilot-runtime python -c "from sky.skylet.ray_patches import patch; patch()" || exit 1;
|
sky/usage/usage_lib.py
CHANGED
|
@@ -10,6 +10,8 @@ import traceback
|
|
|
10
10
|
import typing
|
|
11
11
|
from typing import Any, Callable, Dict, List, Optional, Union
|
|
12
12
|
|
|
13
|
+
from typing_extensions import ParamSpec
|
|
14
|
+
|
|
13
15
|
import sky
|
|
14
16
|
from sky import sky_logging
|
|
15
17
|
from sky.adaptors import common as adaptors_common
|
|
@@ -517,26 +519,26 @@ def entrypoint_context(name: str, fallback: bool = False):
|
|
|
517
519
|
|
|
518
520
|
|
|
519
521
|
T = typing.TypeVar('T')
|
|
522
|
+
P = ParamSpec('P')
|
|
520
523
|
|
|
521
524
|
|
|
522
525
|
@typing.overload
|
|
523
526
|
def entrypoint(
|
|
524
527
|
name_or_fn: str,
|
|
525
|
-
fallback: bool = False
|
|
526
|
-
) -> Callable[[Callable[..., T]], Callable[..., T]]:
|
|
528
|
+
fallback: bool = False) -> Callable[[Callable[P, T]], Callable[P, T]]:
|
|
527
529
|
...
|
|
528
530
|
|
|
529
531
|
|
|
530
532
|
@typing.overload
|
|
531
|
-
def entrypoint(name_or_fn: Callable[
|
|
532
|
-
fallback: bool = False) -> Callable[
|
|
533
|
+
def entrypoint(name_or_fn: Callable[P, T],
|
|
534
|
+
fallback: bool = False) -> Callable[P, T]:
|
|
533
535
|
...
|
|
534
536
|
|
|
535
537
|
|
|
536
538
|
def entrypoint(
|
|
537
|
-
name_or_fn: Union[str, Callable[
|
|
539
|
+
name_or_fn: Union[str, Callable[P, T]],
|
|
538
540
|
fallback: bool = False
|
|
539
|
-
) -> Union[Callable[
|
|
541
|
+
) -> Union[Callable[P, T], Callable[[Callable[P, T]], Callable[P, T]]]:
|
|
540
542
|
return common_utils.make_decorator(entrypoint_context,
|
|
541
543
|
name_or_fn,
|
|
542
544
|
fallback=fallback)
|
sky/utils/annotations.py
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
"""Annotations for public APIs."""
|
|
2
2
|
|
|
3
3
|
import functools
|
|
4
|
-
from typing import Callable, Literal
|
|
4
|
+
from typing import Callable, Literal, TypeVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import ParamSpec
|
|
5
7
|
|
|
6
8
|
# Whether the current process is a SkyPilot API server process.
|
|
7
9
|
is_on_api_server = True
|
|
8
10
|
FUNCTIONS_NEED_RELOAD_CACHE = []
|
|
9
11
|
|
|
12
|
+
T = TypeVar('T')
|
|
13
|
+
P = ParamSpec('P')
|
|
14
|
+
|
|
10
15
|
|
|
11
|
-
def client_api(func):
|
|
16
|
+
def client_api(func: Callable[P, T]) -> Callable[P, T]:
|
|
12
17
|
"""Mark a function as a client-side API.
|
|
13
18
|
|
|
14
19
|
Code invoked by server-side functions will find annotations.is_on_api_server
|
|
@@ -38,7 +43,7 @@ def lru_cache(scope: Literal['global', 'request'], *lru_cache_args,
|
|
|
38
43
|
lru_cache_kwargs: Keyword arguments for functools.lru_cache.
|
|
39
44
|
"""
|
|
40
45
|
|
|
41
|
-
def decorator(func: Callable) -> Callable:
|
|
46
|
+
def decorator(func: Callable[P, T]) -> Callable[P, T]:
|
|
42
47
|
if scope == 'global':
|
|
43
48
|
return functools.lru_cache(*lru_cache_args,
|
|
44
49
|
**lru_cache_kwargs)(func)
|
sky/utils/common_utils.py
CHANGED
|
@@ -271,12 +271,13 @@ _current_command: Optional[str] = None
|
|
|
271
271
|
_current_client_entrypoint: Optional[str] = None
|
|
272
272
|
_using_remote_api_server: Optional[bool] = None
|
|
273
273
|
_current_user: Optional['models.User'] = None
|
|
274
|
+
_current_request_id: Optional[str] = None
|
|
274
275
|
|
|
275
276
|
|
|
276
277
|
def set_request_context(client_entrypoint: Optional[str],
|
|
277
278
|
client_command: Optional[str],
|
|
278
279
|
using_remote_api_server: bool,
|
|
279
|
-
user: Optional['models.User']):
|
|
280
|
+
user: Optional['models.User'], request_id: str) -> None:
|
|
280
281
|
"""Override the current client entrypoint and command.
|
|
281
282
|
|
|
282
283
|
This is useful when we are on the SkyPilot API server side and we have a
|
|
@@ -286,10 +287,19 @@ def set_request_context(client_entrypoint: Optional[str],
|
|
|
286
287
|
global _current_client_entrypoint
|
|
287
288
|
global _using_remote_api_server
|
|
288
289
|
global _current_user
|
|
290
|
+
global _current_request_id
|
|
289
291
|
_current_command = client_command
|
|
290
292
|
_current_client_entrypoint = client_entrypoint
|
|
291
293
|
_using_remote_api_server = using_remote_api_server
|
|
292
294
|
_current_user = user
|
|
295
|
+
_current_request_id = request_id
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def get_current_request_id() -> str:
|
|
299
|
+
"""Returns the current request id."""
|
|
300
|
+
if _current_request_id is not None:
|
|
301
|
+
return _current_request_id
|
|
302
|
+
return 'dummy-request-id'
|
|
293
303
|
|
|
294
304
|
|
|
295
305
|
def get_current_command() -> str:
|
sky/utils/db/migration_utils.py
CHANGED
|
@@ -19,11 +19,11 @@ logger = sky_logging.init_logger(__name__)
|
|
|
19
19
|
DB_INIT_LOCK_TIMEOUT_SECONDS = 10
|
|
20
20
|
|
|
21
21
|
GLOBAL_USER_STATE_DB_NAME = 'state_db'
|
|
22
|
-
GLOBAL_USER_STATE_VERSION = '
|
|
22
|
+
GLOBAL_USER_STATE_VERSION = '002'
|
|
23
23
|
GLOBAL_USER_STATE_LOCK_PATH = '~/.sky/locks/.state_db.lock'
|
|
24
24
|
|
|
25
25
|
SPOT_JOBS_DB_NAME = 'spot_jobs_db'
|
|
26
|
-
SPOT_JOBS_VERSION = '
|
|
26
|
+
SPOT_JOBS_VERSION = '003'
|
|
27
27
|
SPOT_JOBS_LOCK_PATH = '~/.sky/locks/.spot_jobs_db.lock'
|
|
28
28
|
|
|
29
29
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skypilot-nightly
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev20250807
|
|
4
4
|
Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
|
|
5
5
|
Author: SkyPilot Team
|
|
6
6
|
License: Apache 2.0
|
|
@@ -256,12 +256,18 @@ Dynamic: summary
|
|
|
256
256
|
|
|
257
257
|
----
|
|
258
258
|
|
|
259
|
-
SkyPilot is an open-source
|
|
259
|
+
SkyPilot is an open-source system for running AI and batch workloads on any infra.
|
|
260
260
|
|
|
261
261
|
SkyPilot **is easy to use for AI users**:
|
|
262
|
-
- Quickly spin up
|
|
262
|
+
- Quickly spin up jobs on your own infra
|
|
263
263
|
- Environment and job as code — simple and portable
|
|
264
|
-
- Easy
|
|
264
|
+
- Easy management: queue, run, and auto-recover many jobs
|
|
265
|
+
|
|
266
|
+
SkyPilot **makes Kubernetes easy for AI teams**:
|
|
267
|
+
|
|
268
|
+
- Slurm-like ease of use, cloud-native robustness
|
|
269
|
+
- Local dev experience on K8s: SSH into pods, sync code, or connect IDE
|
|
270
|
+
- Turbocharge your clusters: gang scheduling, multi-cluster, and scaling
|
|
265
271
|
|
|
266
272
|
SkyPilot **unifies multiple clusters, clouds, and hardware**:
|
|
267
273
|
- One interface to use reserved GPUs, Kubernetes clusters, or 16+ clouds
|
|
@@ -309,7 +315,7 @@ You can find our documentation [here](https://docs.skypilot.co/).
|
|
|
309
315
|
|
|
310
316
|
A SkyPilot task specifies: resource requirements, data to be synced, setup commands, and the task commands.
|
|
311
317
|
|
|
312
|
-
Once written in this [**unified interface**](https://docs.skypilot.co/en/latest/reference/yaml-spec.html) (YAML or Python API), the task can be launched on any available cloud. This avoids vendor lock-in, and allows easily moving jobs to a different provider.
|
|
318
|
+
Once written in this [**unified interface**](https://docs.skypilot.co/en/latest/reference/yaml-spec.html) (YAML or Python API), the task can be launched on any available infra (Kubernetes, cloud, etc.). This avoids vendor lock-in, and allows easily moving jobs to a different provider.
|
|
313
319
|
|
|
314
320
|
Paste the following into a file `my_task.yaml`:
|
|
315
321
|
|
|
@@ -347,12 +353,11 @@ sky launch my_task.yaml
|
|
|
347
353
|
```
|
|
348
354
|
|
|
349
355
|
SkyPilot then performs the heavy-lifting for you, including:
|
|
350
|
-
1. Find the
|
|
351
|
-
2. Provision the
|
|
352
|
-
3. Sync
|
|
353
|
-
4.
|
|
354
|
-
5. Run the task's `run` commands
|
|
355
|
-
|
|
356
|
+
1. Find the cheapest & available infra across your clusters or clouds
|
|
357
|
+
2. Provision the GPUs (pods or VMs), with auto-failover if the infra returned capacity errors
|
|
358
|
+
3. Sync your local `workdir` to the provisioned cluster
|
|
359
|
+
4. Auto-install dependencies by running the task's `setup` commands
|
|
360
|
+
5. Run the task's `run` commands, and stream logs
|
|
356
361
|
|
|
357
362
|
See [Quickstart](https://docs.skypilot.co/en/latest/getting-started/quickstart.html) to get started with SkyPilot.
|
|
358
363
|
|
|
@@ -364,13 +369,13 @@ Latest featured examples:
|
|
|
364
369
|
|
|
365
370
|
| Task | Examples |
|
|
366
371
|
|----------|----------|
|
|
367
|
-
| Training | [
|
|
372
|
+
| Training | [Verl](https://docs.skypilot.co/en/latest/examples/training/verl.html), [Finetune Llama 4](https://docs.skypilot.co/en/latest/examples/training/llama-4-finetuning.html), [PyTorch](https://docs.skypilot.co/en/latest/getting-started/tutorial.html), [DeepSpeed](https://docs.skypilot.co/en/latest/examples/training/deepspeed.html), [NeMo](https://docs.skypilot.co/en/latest/examples/training/nemo.html), [Ray](https://docs.skypilot.co/en/latest/examples/training/ray.html), [Unsloth](https://docs.skypilot.co/en/latest/examples/training/unsloth.html), [Jax/TPU](https://docs.skypilot.co/en/latest/examples/training/tpu.html) |
|
|
368
373
|
| Serving | [vLLM](https://docs.skypilot.co/en/latest/examples/serving/vllm.html), [SGLang](https://docs.skypilot.co/en/latest/examples/serving/sglang.html), [Ollama](https://docs.skypilot.co/en/latest/examples/serving/ollama.html) |
|
|
369
374
|
| Models | [DeepSeek-R1](https://docs.skypilot.co/en/latest/examples/models/deepseek-r1.html), [Llama 3](https://docs.skypilot.co/en/latest/examples/models/llama-3.html), [CodeLlama](https://docs.skypilot.co/en/latest/examples/models/codellama.html), [Qwen](https://docs.skypilot.co/en/latest/examples/models/qwen.html), [Mixtral](https://docs.skypilot.co/en/latest/examples/models/mixtral.html) |
|
|
370
375
|
| AI apps | [RAG](https://docs.skypilot.co/en/latest/examples/applications/rag.html), [vector databases](https://docs.skypilot.co/en/latest/examples/applications/vector_database.html) (ChromaDB, CLIP) |
|
|
371
376
|
| Common frameworks | [Airflow](https://docs.skypilot.co/en/latest/examples/frameworks/airflow.html), [Jupyter](https://docs.skypilot.co/en/latest/examples/frameworks/jupyter.html) |
|
|
372
377
|
|
|
373
|
-
Source files
|
|
378
|
+
Source files can be found in [`llm/`](https://github.com/skypilot-org/skypilot/tree/master/llm) and [`examples/`](https://github.com/skypilot-org/skypilot/tree/master/examples).
|
|
374
379
|
|
|
375
380
|
## More information
|
|
376
381
|
To learn more, see [SkyPilot Overview](https://docs.skypilot.co/en/latest/overview.html), [SkyPilot docs](https://docs.skypilot.co/en/latest/), and [SkyPilot blog](https://blog.skypilot.co/).
|