尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SkyPilot API Server 多云部署实战:在 GKE 上以 Okta 认证统一管理 GCP 与 Nebius GPU 资源

SkyPilot API Server 多云部署实战:在 GKE 上以 Okta 认证统一管理 GCP 与 Nebius GPU 资源 SkyPilot API Server 多云部署实战在 GKE 上以 Okta 认证统一管理 GCP 与 Nebius GPU 资源【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilotSkyPilot 是一个面向 AI 团队的算力编排平台其 API Server 支持以 Helm Chart 形式部署在 Kubernetes 上将分散的云算力统一为一个入口。本文以仓库中的官方示例文档example-deploy-gke-nebius-okta.rst为主体完整演示如何把一个 SkyPilot API Server 部署到 GKE 集群、用 Okta 的 OIDC 做登录认证同时挂接 GCP 虚拟机与 Nebius Managed Kubernetes 两套 GPU 基础设施读完后你将掌握多云凭证注入、kubeconfig 合并转换、Helm 部署参数、CLI 登录与 GPU 监控的完整落地路径。方案概述一套 API Server四种基础设施本指南支持以下基础设施的任意组合也可全部启用GCP 虚拟机GCENebius 虚拟机GKE Kubernetes 集群承载 API Server 与 Ingress 控制器Nebius Managed Kubernetes 集群外部 GPU 算力池架构上SkyPilot API Server 所在的 GKE 集群既承担控制面职责运行 API Server、oauth2-proxy、ingress-nginx又通过 kubeconfig 与 GCP 凭证访问外部 Nebius Kubernetes 集群和 GCP 云资源。这也是官方 API Server 部署总指南 中可选配置云账号一节的实战化延伸——更多云端选项AWS、Lambda Cloud、RunPod、SSH Node Pools、Slurm 等均可参照该文档补齐。登录后用户通过统一的 Okta 认证即可在 Dashboard 上看到所有已配置的云端与 Kubernetes 基础设施并在 Nebius 的 GPU 集群上直接提交训练任务。前置条件开始前需要准备Okta已将 SkyPilot API Server 配置为 OIDC 应用在 Okta 控制台创建应用后获得 Client ID 与 Client Secret并记录 Okta 组织域名作为 Issuer URL。GCP 凭证一个拥有 GKE 集群访问权限、并能创建虚拟机的 GCP 服务账号 JSON 密钥对应 GCP 云权限文档 中的服务账号要求。Nebius 凭证Nebius 服务账号 JSON 密钥。Nebius Managed Kubernetes 集群一个已存在的集群。NVIDIA GPU 运行时组件集群上必须安装 Nvidia GPU Operator 与 Nvidia Device PluginNebius Console → Applications → Nvidia {GPU Operator, Device Plugin} → Deploy。Device Plugin 既是 GPU 调度所必需也决定了后续 GPU 标注与监控流程的自动化程度。第一步收集云凭证与环境变量以下变量将贯穿整个指南替换为你的实际值后逐行执行# 部署 API Server 的命名空间与 Helm release 名称可为任意字符串 NAMESPACEskypilot RELEASE_NAMEskypilot # Okta 变量 - 取自 Okta Console - Applications - SkyPilot App - Client ID 和 Client Secret OKTA_CLIENT_IDokta_client_id OKTA_CLIENT_SECRETokta_client_secret OKTA_ISSUER_URLokta_issuer_url # 例如 https://myorg.okta.com # GCP 变量 GCP_PROJECT_IDyour_gcp_project_id # 例如 my-project GCP_SERVICE_ACCOUNT_JSONyour_gcp_service_account_json_path # 例如 $PWD/gcp-service-account.json # GKE 变量。这是承载 API Server 的集群。 GKE_CLUSTER_NAMEgke_cluster_name # 例如 mycluster GKE_ZONEgke_zone # 例如 us-central1 # Nebius 变量。这是外部带 GPU 的 k8s 集群。 NEBIUS_CLUSTER_IDnebius_cluster_id # 以 mk8scluster- 开头与集群名不同可在 Nebius 控制台找到 NEBIUS_TENANT_ID$(nebius iam tenant list --format json | jq -r .items[0].metadata.id) # 也可在 Nebius 控制台获取例如 abc-123-... NEBIUS_SERVICE_ACCOUNT_JSONyour_nebius_service_account_json_path # 例如 $PWD/nebius-credentials.json # 指南中使用的临时变量无需修改 TMP_KUBECONFIG/tmp/sky_kubeconfig注意NEBIUS_CLUSTER_ID以mk8scluster-前缀开头与展示名称不同NEBIUS_TENANT_ID可通过 Nebius CLI 的nebius iam tenant list命令动态获取也可以直接在控制台复制。准备 GCP 凭证将 GCP 服务账号 JSON 密钥放入 Kubernetes Secret。这里用一个独立的临时 kubeconfig$TMP_KUBECONFIG来操作 GKE避免污染本地默认配置rm -f $TMP_KUBECONFIG # 若文件已存在则删除 # 获取 GKE 凭证 KUBECONFIG$TMP_KUBECONFIG gcloud container clusters get-credentials $GKE_CLUSTER_NAME --zone $GKE_ZONE GKE_CONTEXT$(kubectl config current-context --kubeconfig $TMP_KUBECONFIG) kubectl create namespace $NAMESPACE --kubeconfig $TMP_KUBECONFIG kubectl create secret generic gcp-credentials --kubeconfig $TMP_KUBECONFIG --context $GKE_CONTEXT \ --namespace $NAMESPACE \ --from-filegcp-cred.json$GCP_SERVICE_ACCOUNT_JSON准备 Nebius 凭证Nebius 凭证同样以 Secret 形式注入供 Nebius CLI 在 API Server 容器内完成认证kubectl create secret generic nebius-credentials \ --namespace $NAMESPACE \ --from-filecredentials.json$NEBIUS_SERVICE_ACCOUNT_JSON准备 Kubernetes 凭证合并 Nebius 与 GKE这是本方案的关键一步——把 Nebius Managed Kubernetes 与 GKE 两个集群的凭证合并进同一个 kubeconfig再以 Secret 形式交给 API Server从而让 SkyPilot 能同时在两个集群上调度任务# 获取 Nebius 集群凭证--external 获取外部访问凭证 nebius mk8s cluster get-credentials --id $NEBIUS_CLUSTER_ID --external --kubeconfig $TMP_KUBECONFIG NEBIUS_CONTEXT$(kubectl config current-context --kubeconfig $TMP_KUBECONFIG) # 为 Nebius 集群的 GPU 节点打上 GPU 类型标签帮助 SkyPilot 识别 GPU。 # 若已安装 Nvidia Device Plugin此步骤会自动跳过。 KUBECONFIG$TMP_KUBECONFIG python -m sky.utils.kubernetes.gpu_labeler --context $NEBIUS_CONTEXT # 获取 GKE 凭证 KUBECONFIG$TMP_KUBECONFIG gcloud container clusters get-credentials $GKE_CLUSTER_NAME --zone $GKE_ZONE # 验证两个 context 都在 kubeconfig 中 kubectl config get-contexts --kubeconfig $TMP_KUBECONFIG # 剥离 kubeconfig 中的 exec 路径避免 kubeconfig 中硬编码路径 python -m sky.utils.kubernetes.exec_kubeconfig_converter --input $TMP_KUBECONFIG --output kubeconfig.converted # 用转换后的 kubeconfig 创建 Secret kubectl create secret generic kube-credentials --kubeconfig $TMP_KUBECONFIG --context $GKE_CONTEXT \ --namespace $NAMESPACE \ --from-fileconfigkubeconfig.converted # 创建 SkyPilot 配置允许同时使用 GKE 与 Nebius 两个 context cat EOF config.yaml kubernetes: allowed_contexts: - $NEBIUS_CONTEXT - $GKE_CONTEXT EOF CONFIG_PATH$PWD/config.yaml关于上面两个python -m工具的实现细节可从仓库源码印证sky/utils/kubernetes/gpu_labeler.py 是 GPU 节点标注器它先清理旧的标注资源保证幂等再检查kubernetes_utils.get_unlabeled_accelerator_nodes()找出未标注节点若发现未标注 GPU 节点会以 Jinja2 模板渲染 RBAC 清单并为每个节点创建名为sky-gpu-labeler-node_hash的 Kubernetes Job通过解析nvidia-smi输出为节点打上skypilot.co/accelerator: gpu_name标签。若集群中存在nvidiaRuntimeClass 则优先使用它。从源码注释可知该工具目前仅支持 NVIDIA GPUAMD GPU 需要手动标注。sky/utils/kubernetes/exec_kubeconfig_converter.py 则负责剥离 kubeconfig 中 exec 认证命令的路径信息只保留可执行文件名消除不同环境间认证插件路径不一致的问题对 Nebius kubeconfig 还会把--profile参数改为sky以匹配 SkyPilot 的预期配置。其核心逻辑复用自sky/provision/kubernetes/utils.py的format_kubeconfig_exec_auth。allowed_contexts的作用在于让 SkyPilot 在sky check/ 任务调度时把两个 Kubernetes 集群都视为可用算力来源。更多关于allowed_contexts的说明可参考 API Server 管理部署文档 与 配置参考。第二步用 Helm 部署 API Server添加官方 Helm 仓库并执行安装helm repo add skypilot https://helm.skypilot.co helm repo update helm upgrade --install skypilot skypilot/skypilot-nightly --devel \ --namespace $NAMESPACE \ --create-namespace \ --set-file apiService.config$CONFIG_PATH \ --set ingress.oauth2-proxy.enabledtrue \ --set ingress.oauth2-proxy.oidc-issuer-url$OKTA_ISSUER_URL \ --set ingress.oauth2-proxy.client-id$OKTA_CLIENT_ID \ --set ingress.oauth2-proxy.client-secret$OKTA_CLIENT_SECRET \ --set kubernetesCredentials.useApiServerClusterfalse \ --set kubernetesCredentials.useKubeconfigtrue \ --set kubernetesCredentials.kubeconfigSecretNamekube-credentials \ --set gcpCredentials.enabledtrue \ --set gcpCredentials.projectId$GCP_PROJECT_ID \ --set nebiusCredentials.enabledtrue \ --set nebiusCredentials.tenantId$NEBIUS_TENANT_ID重新配置提示如需修改任何参数直接以helm upgrade --install ... --reuse-values配合仅变更的参数运行即可。--reuse-values会保留既有值、只更新变更项避免误覆盖。参数逐项说明下表对应官方文档中的参数解释并结合 charts/skypilot/values.yaml 给出其在 Helm Chart 中的真实语义参数说明--namespace $NAMESPACESkyPilot 安装的 Kubernetes 命名空间--create-namespace若命名空间不存在则自动创建--set-file apiService.config$CONFIG_PATHSkyPilot 配置文件路径定义允许使用的 Kubernetes context对应 values 中的apiService.config会挂载为容器内~/.sky/config.yaml--set ingress.oauth2-proxy.enabledtrue启用 OAuth2 Proxy 进行认证values 中ingress.oauth2-proxy.enabled默认false--set ingress.oauth2-proxy.oidc-issuer-url$OKTA_ISSUER_URLOkta OIDC Issuer 的 URLingress.oauth2-proxy.oidc-issuer-url启用时必填--set ingress.oauth2-proxy.client-id$OKTA_CLIENT_IDOkta 客户端 IDingress.oauth2-proxy.client-id--set ingress.oauth2-proxy.client-secret$OKTA_CLIENT_SECRETOkta 客户端密钥ingress.oauth2-proxy.client-secret--set kubernetesCredentials.useApiServerClusterfalse禁用使用集群内认证kubernetesCredentials.useApiServerCluster默认true。本方案改用 kubeconfig 认证因此必须设为false--set kubernetesCredentials.useKubeconfigtrue使用 kubeconfig 访问集群kubernetesCredentials.useKubeconfig默认false--set kubernetesCredentials.kubeconfigSecretNamekube-credentials存放 kubeconfig 的 Secret 名称kubernetesCredentials.kubeconfigSecretName默认kube-credentials--set gcpCredentials.enabledtrue启用 GCP 凭证gcpCredentials.enabled默认false--set gcpCredentials.projectId$GCP_PROJECT_IDGCP 项目 IDgcpCredentials.projectId--set gcpCredentials.serviceAccountJson$GCP_SERVICE_ACCOUNT_JSONGCP 服务账号 JSON 凭证对应 Secret 中的gcp-cred.json文件--set nebiusCredentials.enabledtrue启用 Nebius 凭证nebiusCredentials.enabled默认false--set nebiusCredentials.tenantId$NEBIUS_TENANT_IDNebius 租户 IDnebiusCredentials.tenantId从 values.yaml 还可以看到若干与本次部署密切相关的默认行为Ingress 控制器ingress-nginx.enabled默认为trueChart 会随 API Server 一起部署 ingress-nginxservice 类型为 LoadBalancer并针对 AWS NLB / GKE L4-RBS / Azure TCP 探针预置了注解见 charts/skypilot/values.yaml。GKE 上对应cloud.google.com/l4-rbs: enabled。oauth2-proxy默认镜像为quay.io/oauth2-proxy/oauth2-proxy:v7.9.0会话存储默认采用 Redissession-store-type: redis未指定redis-url时会自动部署 Redis 实例。RBACrbac.create默认trueChart 会为 API Server 创建 ServiceAccount 与命名空间/集群级 RBAC 规则pods、services、secrets、deployments、nodes 等以支撑任务 Pod 的生命周期管理见 charts/skypilot/values.yaml。持久化存储storage.enabled默认trueChart 会创建 PVC默认 10GiRWO持久化管理任务日志、文件挂载、API Server 状态与配置。从源码注释看API Server 使用 SQLite 存状态Pod 重建后由 Kubernetes 自动拉起新实例状态依靠 PVC 保留。部署后验证检查 API Server Pod 是否健康kubectl get pods --namespace $NAMESPACE --kubeconfig $TMP_KUBECONFIG --context $GKE_CONTEXT第三步获取 Endpoint 并配置 DNSHOST$(kubectl get svc ${RELEASE_NAME}-ingress-nginx-controller --namespace $NAMESPACE --kubeconfig $TMP_KUBECONFIG --context $GKE_CONTEXT -o jsonpath{.status.loadBalancer.ingress[0].ip}) ENDPOINThttp://$HOST echo $ENDPOINT若返回的地址为空稍等片刻再试——GCP Load Balancer 通常需要 1~2 分钟才会分配外部 IP。随后需要配置 DNS 指向该 IP。这一步是 Okta 认证能够完成的必要条件Okta 会校验你在 Okta 应用中配置的redirect_uri因此要么让域名解析到该 IP要么把 Okta 应用里的redirect_uri直接改为 API Server 的 IP 地址。浏览器打开 Endpoint应能看到 SkyPilot Dashboard 登录页登录成功后Dashboard 会展示所有已配置的云与 Kubernetes 基础设施。若登录页报 503请回到上一步用kubectl get pods确认 API Server Pod 是否健康。第四步配置 CLI 并提交第一个任务在客户端机器上安装 SkyPilot CLI 并登录pip install -U skypilot-nightly登录 API Server-e指定 endpointsky api login -e $ENDPOINT # 例如 http://34.42.25.204 或 http://sky.yourorg.com浏览器会自动打开并跳转到 Okta 登录页使用 Okta 账号登录后会得到一个 token复制并粘贴回 CLI。命令行输出示意$ sky api login -e http://sky.yourorg.com Authentication is needed. Please visit this URL setup up the token: http://sky.yourorg.com/token Opening browser... Paste the token:登录成功后运行sky check验证云端配置$ sky check ... Enabled infra GCP [compute, storage] Kubernetes [compute] Allowed contexts: ├── nebius-cluster └── gke-cluster Nebius [compute]看到 Nebius、GKE context 与 GCP 均显示启用即代表多云就绪。可以立即体验的常用命令sky dashboard在浏览器打开 Dashboardsky launch -c test --gpus H100:1 -- nvidia-smi在 Nebius 集群上启动一个使用 1 张 H100 的任务sky gpus list查看可用 GPU 型号sky status查看 SkyPilot 状态与可用基础设施进阶一在 Nebius Kubernetes 集群上启用 InfiniBandNebius 集群节点支持 InfiniBand 网络SkyPilot 任务可通过pod_config与运行环境变量启用。完整示例可参考 examples/nebius_infiniband 目录含 nccl.yaml、infiniband.yaml 等 NCCL 测试配置。在任务 YAML 中做两处配置为容器添加IPC_LOCKcapabilityNCCL/UCX 访问 InfiniBand 所需config: kubernetes: pod_config: spec: containers: - securityContext: capabilities: add: - IPC_LOCK配置 InfiniBand 相关环境变量run: | export NCCL_IB_HCAmlx5 export UCX_NET_DEVICESmlx5_0:1,mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1,mlx5_5:1,mlx5_6:1,mlx5_7:1 ... your own run script ...如果希望所有任务自动获得 InfiniBand 配置可把上述config段放进 SkyPilot 全局配置~/.sky/config.yaml或项目配置.sky.yaml中无需在每个任务里重复书写。进阶二使用 Nebius 共享文件系统作为共享存储Nebius 共享文件系统可为多节点训练提供高吞吐的数据存储数据集、检查点等。在 Nebius 控制台创建节点组时选择Create Node Group→Attach shared filesystem挂载共享文件系统务必启用Auto mount自动挂载。记录Mount tag例如filesystem-d0。Nebius 会自动把共享文件系统挂载到节点组的每台主机上。SkyPilot 任务中通过hostPath卷将其映射进 Podresources: infra: k8s/nebius-mk8s-nebius-gpu-dev run: | echo Hello, world! /mnt/nfs/hello.txt ls -la /mnt/nfs config: kubernetes: pod_config: spec: containers: - volumeMounts: - mountPath: /mnt/nfs name: nebius-sharedfs volumes: - name: nebius-sharedfs hostPath: path: /mnt/mount_tag # 例如 /mnt/filesystem-d0 type: Directory同样地把上述config段写入~/.sky/config.yaml全局或.sky.yaml项目后所有任务都会自动挂载共享文件系统。进阶三在共享文件系统之上创建 Volumes直接向节点组挂载共享文件系统会把整个文件系统暴露给所有集群若需要缓存隔离例如为 PyPI 包、Hugging Face 模型建持久缓存或集群间数据隔离SkyPilot 支持基于 Kubernetes PVC 在共享文件系统之上创建托管卷详见 Volumes on Kubernetes 章节Volumes 目前支持 Kubernetes 集群与 RunPod。编写卷定义文件# volume.yaml name: new-pvc type: k8s-pvc infra: k8s/nebius-mk8s-nebius-gpu-dev size: 10Gi config: namespace: default # 可选 storage_class_name: csi-mounted-fs-path-sc access_mode: ReadWriteMany用sky volumes apply创建卷$ sky volumes apply volume.yaml Proceed to create volume new-pvc? [Y/n]: Y Creating PVC: new-pvc-73ec42f2-5c6c4e在任务 YAML 中挂载该卷# task.yaml volumes: /mnt/data: new-pvc # 卷 new-pvc 将被挂载到 /mnt/data run: | echo Hello, World! /mnt/data/hello.txt其余卷管理命令sky volumes ls、sky volumes delete等的完整用法与 PVC 语义可参考 docs/source/reference/volumes.rst。进阶四为 Nebius Kubernetes 集群配置 GPU 监控若使用 Nebius Kubernetes 集群可以为 SkyPilot Dashboard 接入实时 GPU 指标。整体链路是DCGM-Exporter随 Nvidia Device Plugin 自动部署→ Prometheus 抓取 → SkyPilot API Server 的/gpu-metrics聚合 → Dashboard 展示。完整监控细节可参考 api-server-gpu-metrics-setup.rst。1. 安装 Prometheus创建prometheus-values.yaml可直接使用仓库自带的模板 examples/metrics/prometheus-values.yamlserver: persistentVolume: enabled: true size: 50Gi retention: 1000d retentionSize: 43GB # scrape_timeout 必须长于 SkyPilot API Server 的 # _PER_CONTEXT_TIMEOUT_SECONDS20s见 sky/server/metrics.py # 否则该 Prometheus 抓取大型集群的 /gpu-metrics 时会超时 # 并把 api-server 目标标记为 down。 global: scrape_timeout: 30s kube-state-metrics: enabled: true metricLabelsAllowlist: - pods[skypilot-cluster,skypilot-cluster-name] prometheus-node-exporter: enabled: false prometheus-pushgateway: enabled: false alertmanager: enabled: false用skypilot-prometheus作为 release 名安装helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm upgrade --install skypilot-prometheus prometheus-community/prometheus \ --namespace skypilot \ --create-namespace \ -f prometheus-values.yaml验证服务已创建kubectl get svc skypilot-prometheus-server -n skypilot2. 安装并启用带 GPU 指标监控的 Nvidia Device Plugin在 Nebius 控制台的 Kubernetes 集群详情页中Applications→ 搜索Nvidia Device Plugin→Deploy→务必勾选Enable GPU metrics monitoring→Deploy application。等待安装完成状态徽章变为Deployed也可通过 Pod 状态确认安装结果kubectl get pods -n nvidia-device-pluginDCGM exporter 会被自动安装。若 API Server 所在的 GKE 集群此前未安装过 Nvidia Device Plugin也可参照 api-server-gpu-metrics-setup.rst 中的步骤手动部署 DCGM-Exporter/Node Exporter 并校验 Prometheus 抓取注解prometheus.io/scrape、prometheus.io/port、prometheus.io/path。3. 多集群场景下补充 allowed_contexts如果接入多个 Kubernetes 集群需要在 SkyPilot 配置的allowed_contexts中列出各 context 名称。例如同时使用托管集群与两个外部集群kubernetes: allowed_contexts: # 托管 Kubernetes 集群若通过 kubernetesCredentials.useApiServerClusterfalse 禁用了托管集群则不可设置此项 - in-cluster # kubeconfig 中配置的其他 Kubernetes context 名称 - context1 - context2最后参照 api-server-gpu-metrics-setup.rst 中的设置 DCGM 指标抓取一节升级 API Serverhelm upgrade --install skypilot skypilot/skypilot-nightly --devel \ --namespace skypilot \ --create-namespace \ --reuse-values \ --set apiService.metrics.enabledtrue \ --set prometheus.enabledtrue \ --set grafana.enabledtrue三个参数的作用apiService.metrics.enabled开启 API Server 的/metrics与/gpu-metrics端点prometheus.enabled让 Chart 部署一个预配置好抓取规则的 Prometheus默认 scrape 配置见 charts/skypilot/values.yaml其中/gpu-metrics每 60s 抓取一次、超时 45sgrafana.enabled部署内置 Dashboard 并嵌入 SkyPilot Dashboard。完成后即可在 Dashboard 中看到 GPU 利用率、显存、功耗、温度等实时指标。常见问题排查登录页 503API Server Pod 未就绪。执行kubectl get pods --namespace $NAMESPACE --kubeconfig $TMP_KUBECONFIG --context $GKE_CONTEXT检查状态必要时查看容器日志定位启动失败原因如凭证 Secret 缺失、allowed_contexts配置错误。sky check未列出 Nebius/GKE确认合并后的 kubeconfig 中两个 context 均存在且config.yaml的allowed_contexts与实际 context 名一致确认kubernetesCredentials.useKubeconfigtrue且 Secret 名称拼写正确。GPU 节点未被识别确认 Nvidia Device Plugin / GPU Operator 已安装或重新运行python -m sky.utils.kubernetes.gpu_labeler --context $NEBIUS_CONTEXT检查skypilot.co/accelerator标签。GKE LoadBalancer IP 长时间为空等待 1~2 分钟若集群不支持 LoadBalancer可参照 api-server-admin-deploy.rst 改用 NodePort 方案。总结本文基于官方示例文档完整走通了GKE 承载控制面 Okta OIDC 认证 GCP/Nebius 双算力池的 SkyPilot API Server 部署链路从凭证收集、GKE/Nebius 双 context kubeconfig 合并到 Helm 部署参数逐一解析、CLI 登录与首个 GPU 任务提交再到 InfiniBand、共享文件系统、托管 Volumes 与 GPU 监控四项生产级增强。这一部署形态适合需要把多云 GPU 资源收敛到统一入口、并面向团队开放使用的场景。若要进一步扩展如接入 AWS、RunPod、Slurm 等更多算力源或配置外部数据库实现高可用建议继续阅读 API Server 管理部署文档 与 Helm Values 规范。【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表