skypilot-nightly 1.0.0.dev20250912__py3-none-any.whl → 1.0.0.dev20250913__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 +4 -2
- sky/adaptors/seeweb.py +103 -0
- sky/authentication.py +38 -0
- sky/backends/backend_utils.py +24 -9
- sky/backends/cloud_vm_ray_backend.py +382 -151
- sky/catalog/data_fetchers/fetch_aws.py +0 -36
- sky/catalog/data_fetchers/fetch_seeweb.py +329 -0
- sky/catalog/seeweb_catalog.py +184 -0
- sky/clouds/__init__.py +2 -0
- sky/clouds/kubernetes.py +2 -0
- sky/clouds/seeweb.py +463 -0
- sky/core.py +46 -12
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/{DAiq7V2xJnO1LSfmunZl6 → Y0Q7LyrxiFoWWbTdwb5nh}/_buildManifest.js +1 -1
- sky/dashboard/out/_next/static/chunks/1141-159df2d4c441a9d1.js +1 -0
- sky/dashboard/out/_next/static/chunks/3015-2ea98b57e318bd6e.js +1 -0
- sky/dashboard/out/_next/static/chunks/3294.03e02ae73455f48e.js +6 -0
- sky/dashboard/out/_next/static/chunks/3785.0fa442e16dd3f00e.js +1 -0
- sky/dashboard/out/_next/static/chunks/5339.c033b29835da0f35.js +51 -0
- sky/dashboard/out/_next/static/chunks/6856-e0754534b3015377.js +1 -0
- sky/dashboard/out/_next/static/chunks/6990-11c8e9b982e8ffec.js +1 -0
- sky/dashboard/out/_next/static/chunks/9037-f9800e64eb05dd1c.js +6 -0
- sky/dashboard/out/_next/static/chunks/{webpack-e8a0c4c3c6f408fb.js → webpack-d1e29b3aa66bf4cf.js} +1 -1
- 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 -1
- 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/exceptions.py +5 -0
- sky/global_user_state.py +41 -26
- sky/jobs/utils.py +61 -13
- sky/provision/__init__.py +1 -0
- sky/provision/kubernetes/utils.py +14 -3
- sky/provision/seeweb/__init__.py +11 -0
- sky/provision/seeweb/config.py +13 -0
- sky/provision/seeweb/instance.py +806 -0
- sky/schemas/generated/jobsv1_pb2.py +86 -0
- sky/schemas/generated/jobsv1_pb2.pyi +252 -0
- sky/schemas/generated/jobsv1_pb2_grpc.py +542 -0
- sky/setup_files/dependencies.py +8 -1
- sky/skylet/constants.py +2 -1
- sky/skylet/job_lib.py +128 -10
- sky/skylet/log_lib.py +3 -3
- sky/skylet/services.py +203 -0
- sky/skylet/skylet.py +4 -0
- sky/templates/seeweb-ray.yml.j2 +108 -0
- sky/utils/controller_utils.py +11 -5
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/METADATA +39 -34
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/RECORD +64 -53
- sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js +0 -1
- sky/dashboard/out/_next/static/chunks/3015-86cabed5d4669ad0.js +0 -1
- sky/dashboard/out/_next/static/chunks/3294.ba6586f9755b0edb.js +0 -6
- sky/dashboard/out/_next/static/chunks/3785.4872a2f3aa489880.js +0 -1
- sky/dashboard/out/_next/static/chunks/5339.3fda4a4010ff4e06.js +0 -51
- sky/dashboard/out/_next/static/chunks/6856-6e2bc8a6fd0867af.js +0 -1
- sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +0 -1
- sky/dashboard/out/_next/static/chunks/9037-fa1737818d0a0969.js +0 -6
- /sky/dashboard/out/_next/static/{DAiq7V2xJnO1LSfmunZl6 → Y0Q7LyrxiFoWWbTdwb5nh}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250912.dist-info → skypilot_nightly-1.0.0.dev20250913.dist-info}/top_level.txt +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0487dfbf149d9e53.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-11c8e9b982e8ffec.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-408ed10b2f9fce17.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-e0754534b3015377.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-2ea98b57e318bd6e.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-f9800e64eb05dd1c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-0b4b35dc1dfe046c.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/clusters.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/config.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-6563820e094f68ca.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-aabba60d57826e0f.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0487dfbf149d9e53.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0487dfbf149d9e53.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/jobs.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-1f70d9faa564804f.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/users.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/volumes.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1836-37fede578e2da5f8.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0487dfbf149d9e53.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-11c8e9b982e8ffec.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-408ed10b2f9fce17.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-2ea98b57e318bd6e.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-159df2d4c441a9d1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-af76bb06dbb3954f.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-d1e29b3aa66bf4cf.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-7598c33a746cdc91.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Y0Q7LyrxiFoWWbTdwb5nh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"Y0Q7LyrxiFoWWbTdwb5nh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/exceptions.py
CHANGED
|
@@ -675,6 +675,11 @@ class SkyletInternalError(Exception):
|
|
|
675
675
|
pass
|
|
676
676
|
|
|
677
677
|
|
|
678
|
+
class SkyletMethodNotImplementedError(Exception):
|
|
679
|
+
"""Raised when a Skylet gRPC method is not implemented on the server."""
|
|
680
|
+
pass
|
|
681
|
+
|
|
682
|
+
|
|
678
683
|
class ClientError(Exception):
|
|
679
684
|
"""Raised when a there is a client error occurs.
|
|
680
685
|
|
sky/global_user_state.py
CHANGED
|
@@ -515,7 +515,8 @@ def add_or_update_cluster(cluster_name: str,
|
|
|
515
515
|
config_hash: Optional[str] = None,
|
|
516
516
|
task_config: Optional[Dict[str, Any]] = None,
|
|
517
517
|
is_managed: bool = False,
|
|
518
|
-
provision_log_path: Optional[str] = None
|
|
518
|
+
provision_log_path: Optional[str] = None,
|
|
519
|
+
update_only: bool = False):
|
|
519
520
|
"""Adds or updates cluster_name -> cluster_handle mapping.
|
|
520
521
|
|
|
521
522
|
Args:
|
|
@@ -531,6 +532,8 @@ def add_or_update_cluster(cluster_name: str,
|
|
|
531
532
|
is_managed: Whether the cluster is launched by the
|
|
532
533
|
controller.
|
|
533
534
|
provision_log_path: Absolute path to provision.log, if available.
|
|
535
|
+
update_only: Whether to update the cluster only. If True,
|
|
536
|
+
the cluster record will not be inserted if one does not exist.
|
|
534
537
|
"""
|
|
535
538
|
assert _SQLALCHEMY_ENGINE is not None
|
|
536
539
|
# FIXME: launched_at will be changed when `sky launch -c` is called.
|
|
@@ -628,32 +631,44 @@ def add_or_update_cluster(cluster_name: str,
|
|
|
628
631
|
session.rollback()
|
|
629
632
|
raise ValueError('Unsupported database dialect')
|
|
630
633
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
set_={
|
|
634
|
+
if update_only:
|
|
635
|
+
count = session.query(cluster_table).filter_by(
|
|
636
|
+
name=cluster_name).update({
|
|
637
|
+
**conditional_values, cluster_table.c.handle: handle,
|
|
638
|
+
cluster_table.c.status: status.value,
|
|
639
|
+
cluster_table.c.cluster_hash: cluster_hash,
|
|
640
|
+
cluster_table.c.status_updated_at: status_updated_at
|
|
641
|
+
})
|
|
642
|
+
assert count <= 1
|
|
643
|
+
if count == 0:
|
|
644
|
+
raise ValueError(f'Cluster {cluster_name} not found.')
|
|
645
|
+
else:
|
|
646
|
+
insert_stmnt = insert_func(cluster_table).values(
|
|
647
|
+
name=cluster_name,
|
|
646
648
|
**conditional_values,
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
#
|
|
650
|
-
#
|
|
651
|
-
|
|
652
|
-
#
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
649
|
+
handle=handle,
|
|
650
|
+
status=status.value,
|
|
651
|
+
# set metadata to server default ('{}')
|
|
652
|
+
# set owner to server default (null)
|
|
653
|
+
cluster_hash=cluster_hash,
|
|
654
|
+
# set storage_mounts_metadata to server default (null)
|
|
655
|
+
status_updated_at=status_updated_at,
|
|
656
|
+
is_managed=int(is_managed),
|
|
657
|
+
)
|
|
658
|
+
insert_or_update_stmt = insert_stmnt.on_conflict_do_update(
|
|
659
|
+
index_elements=[cluster_table.c.name],
|
|
660
|
+
set_={
|
|
661
|
+
**conditional_values,
|
|
662
|
+
cluster_table.c.handle: handle,
|
|
663
|
+
cluster_table.c.status: status.value,
|
|
664
|
+
# do not update metadata value
|
|
665
|
+
# do not update owner value
|
|
666
|
+
cluster_table.c.cluster_hash: cluster_hash,
|
|
667
|
+
# do not update storage_mounts_metadata
|
|
668
|
+
cluster_table.c.status_updated_at: status_updated_at,
|
|
669
|
+
# do not update user_hash
|
|
670
|
+
})
|
|
671
|
+
session.execute(insert_or_update_stmt)
|
|
657
672
|
|
|
658
673
|
# Modify cluster history table
|
|
659
674
|
launched_nodes = getattr(cluster_handle, 'launched_nodes', None)
|
sky/jobs/utils.py
CHANGED
|
@@ -29,6 +29,7 @@ from sky import sky_logging
|
|
|
29
29
|
from sky import skypilot_config
|
|
30
30
|
from sky.adaptors import common as adaptors_common
|
|
31
31
|
from sky.backends import backend_utils
|
|
32
|
+
from sky.backends import cloud_vm_ray_backend
|
|
32
33
|
from sky.jobs import constants as managed_job_constants
|
|
33
34
|
from sky.jobs import scheduler
|
|
34
35
|
from sky.jobs import state as managed_job_state
|
|
@@ -50,12 +51,16 @@ from sky.utils import subprocess_utils
|
|
|
50
51
|
from sky.utils import ux_utils
|
|
51
52
|
|
|
52
53
|
if typing.TYPE_CHECKING:
|
|
54
|
+
import grpc
|
|
53
55
|
import psutil
|
|
54
56
|
|
|
55
57
|
import sky
|
|
56
58
|
from sky import dag as dag_lib
|
|
59
|
+
from sky.schemas.generated import jobsv1_pb2
|
|
57
60
|
else:
|
|
58
61
|
psutil = adaptors_common.LazyImport('psutil')
|
|
62
|
+
grpc = adaptors_common.LazyImport('grpc')
|
|
63
|
+
jobsv1_pb2 = adaptors_common.LazyImport('sky.schemas.generated.jobsv1_pb2')
|
|
59
64
|
|
|
60
65
|
logger = sky_logging.init_logger(__name__)
|
|
61
66
|
|
|
@@ -286,19 +291,34 @@ async def get_job_status(
|
|
|
286
291
|
job_logger.info(f'Job status: {status}')
|
|
287
292
|
job_logger.info('=' * 34)
|
|
288
293
|
return status
|
|
289
|
-
except exceptions.CommandError
|
|
294
|
+
except (exceptions.CommandError, grpc.RpcError,
|
|
295
|
+
grpc.FutureTimeoutError) as e:
|
|
290
296
|
# Retry on k8s transient network errors. This is useful when using
|
|
291
297
|
# coreweave which may have transient network issue sometimes.
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
298
|
+
is_transient_error = False
|
|
299
|
+
detailed_reason = None
|
|
300
|
+
if isinstance(e, exceptions.CommandError):
|
|
301
|
+
detailed_reason = e.detailed_reason
|
|
302
|
+
if (detailed_reason is not None and
|
|
303
|
+
_JOB_K8S_TRANSIENT_NW_MSG in detailed_reason):
|
|
304
|
+
is_transient_error = True
|
|
305
|
+
elif isinstance(e, grpc.RpcError):
|
|
306
|
+
detailed_reason = e.details()
|
|
307
|
+
if e.code() in [
|
|
308
|
+
grpc.StatusCode.UNAVAILABLE,
|
|
309
|
+
grpc.StatusCode.DEADLINE_EXCEEDED
|
|
310
|
+
]:
|
|
311
|
+
is_transient_error = True
|
|
312
|
+
elif isinstance(e, grpc.FutureTimeoutError):
|
|
313
|
+
detailed_reason = 'Timeout'
|
|
314
|
+
if is_transient_error:
|
|
315
|
+
logger.info('Failed to connect to the cluster. Retrying '
|
|
316
|
+
f'({i + 1}/{_JOB_STATUS_FETCH_MAX_RETRIES})...')
|
|
317
|
+
logger.info('=' * 34)
|
|
297
318
|
await asyncio.sleep(1)
|
|
298
319
|
else:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
job_logger.info('=' * 34)
|
|
320
|
+
logger.info(f'Failed to get job status: {detailed_reason}')
|
|
321
|
+
logger.info('=' * 34)
|
|
302
322
|
return None
|
|
303
323
|
return None
|
|
304
324
|
|
|
@@ -547,9 +567,32 @@ def update_managed_jobs_statuses(job_id: Optional[int] = None):
|
|
|
547
567
|
def get_job_timestamp(backend: 'backends.CloudVmRayBackend', cluster_name: str,
|
|
548
568
|
job_id: Optional[int], get_end_time: bool) -> float:
|
|
549
569
|
"""Get the submitted/ended time of the job."""
|
|
550
|
-
code = job_lib.JobLibCodeGen.get_job_submitted_or_ended_timestamp_payload(
|
|
551
|
-
job_id=job_id, get_ended_time=get_end_time)
|
|
552
570
|
handle = global_user_state.get_handle_from_cluster_name(cluster_name)
|
|
571
|
+
assert handle is not None, (
|
|
572
|
+
f'handle for cluster {cluster_name!r} should not be None')
|
|
573
|
+
if handle.is_grpc_enabled_with_flag:
|
|
574
|
+
try:
|
|
575
|
+
if get_end_time:
|
|
576
|
+
end_ts_request = jobsv1_pb2.GetJobEndedTimestampRequest(
|
|
577
|
+
job_id=job_id)
|
|
578
|
+
end_ts_response = backend_utils.invoke_skylet_with_retries(
|
|
579
|
+
lambda: cloud_vm_ray_backend.SkyletClient(
|
|
580
|
+
handle.get_grpc_channel()).get_job_ended_timestamp(
|
|
581
|
+
end_ts_request))
|
|
582
|
+
return end_ts_response.timestamp
|
|
583
|
+
else:
|
|
584
|
+
submit_ts_request = jobsv1_pb2.GetJobSubmittedTimestampRequest(
|
|
585
|
+
job_id=job_id)
|
|
586
|
+
submit_ts_response = backend_utils.invoke_skylet_with_retries(
|
|
587
|
+
lambda: cloud_vm_ray_backend.SkyletClient(
|
|
588
|
+
handle.get_grpc_channel()).get_job_submitted_timestamp(
|
|
589
|
+
submit_ts_request))
|
|
590
|
+
return submit_ts_response.timestamp
|
|
591
|
+
except exceptions.SkyletMethodNotImplementedError:
|
|
592
|
+
pass
|
|
593
|
+
|
|
594
|
+
code = (job_lib.JobLibCodeGen.get_job_submitted_or_ended_timestamp_payload(
|
|
595
|
+
job_id=job_id, get_ended_time=get_end_time))
|
|
553
596
|
returncode, stdout, stderr = backend.run_on_head(handle,
|
|
554
597
|
code,
|
|
555
598
|
stream_logs=False,
|
|
@@ -573,8 +616,13 @@ def try_to_get_job_end_time(backend: 'backends.CloudVmRayBackend',
|
|
|
573
616
|
cluster_name,
|
|
574
617
|
job_id=job_id,
|
|
575
618
|
get_end_time=True)
|
|
576
|
-
except exceptions.CommandError
|
|
577
|
-
|
|
619
|
+
except (exceptions.CommandError, grpc.RpcError,
|
|
620
|
+
grpc.FutureTimeoutError) as e:
|
|
621
|
+
if isinstance(e, exceptions.CommandError) and e.returncode == 255 or \
|
|
622
|
+
(isinstance(e, grpc.RpcError) and e.code() in [
|
|
623
|
+
grpc.StatusCode.UNAVAILABLE,
|
|
624
|
+
grpc.StatusCode.DEADLINE_EXCEEDED,
|
|
625
|
+
]) or isinstance(e, grpc.FutureTimeoutError):
|
|
578
626
|
# Failed to connect - probably the instance was preempted since the
|
|
579
627
|
# job completed. We shouldn't crash here, so just log and use the
|
|
580
628
|
# current time.
|
sky/provision/__init__.py
CHANGED
|
@@ -26,6 +26,7 @@ from sky.provision import nebius
|
|
|
26
26
|
from sky.provision import oci
|
|
27
27
|
from sky.provision import runpod
|
|
28
28
|
from sky.provision import scp
|
|
29
|
+
from sky.provision import seeweb
|
|
29
30
|
from sky.provision import ssh
|
|
30
31
|
from sky.provision import vast
|
|
31
32
|
from sky.provision import vsphere
|
|
@@ -3550,9 +3550,20 @@ def process_skypilot_pods(
|
|
|
3550
3550
|
f'requesting GPUs: {pod.metadata.name}')
|
|
3551
3551
|
gpu_label = label_formatter.get_label_key()
|
|
3552
3552
|
# Get GPU name from pod node selector
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3553
|
+
node_selector_terms = (
|
|
3554
|
+
pod.spec.affinity.node_affinity.
|
|
3555
|
+
required_during_scheduling_ignored_during_execution.
|
|
3556
|
+
node_selector_terms)
|
|
3557
|
+
if node_selector_terms is not None:
|
|
3558
|
+
expressions = []
|
|
3559
|
+
for term in node_selector_terms:
|
|
3560
|
+
if term.match_expressions:
|
|
3561
|
+
expressions.extend(term.match_expressions)
|
|
3562
|
+
for expression in expressions:
|
|
3563
|
+
if expression.key == gpu_label and expression.operator == 'In':
|
|
3564
|
+
gpu_name = label_formatter.get_accelerator_from_label_value(
|
|
3565
|
+
expression.values[0])
|
|
3566
|
+
break
|
|
3556
3567
|
|
|
3557
3568
|
resources = resources_lib.Resources(
|
|
3558
3569
|
cloud=clouds.Kubernetes(),
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Seeweb provisioner for SkyPilot."""
|
|
2
|
+
|
|
3
|
+
from sky.provision.seeweb.config import bootstrap_instances
|
|
4
|
+
from sky.provision.seeweb.instance import cleanup_ports
|
|
5
|
+
from sky.provision.seeweb.instance import get_cluster_info
|
|
6
|
+
from sky.provision.seeweb.instance import open_ports
|
|
7
|
+
from sky.provision.seeweb.instance import query_instances
|
|
8
|
+
from sky.provision.seeweb.instance import run_instances
|
|
9
|
+
from sky.provision.seeweb.instance import stop_instances
|
|
10
|
+
from sky.provision.seeweb.instance import terminate_instances
|
|
11
|
+
from sky.provision.seeweb.instance import wait_instances
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Configuration for Seeweb provisioning."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def bootstrap_instances(*args, **_kwargs) -> Dict[str, Any]:
|
|
7
|
+
"""Bootstrap instances for Seeweb.
|
|
8
|
+
|
|
9
|
+
Seeweb doesn't require any special configuration bootstrapping,
|
|
10
|
+
so we just return the config as-is.
|
|
11
|
+
"""
|
|
12
|
+
config = args[2]
|
|
13
|
+
return config
|