Cortex 快速上手:在 AWS 上创建集群并部署可扩展的 ML API 完整指南

发布时间:2026/9/27 7:55:08
Cortex 快速上手:在 AWS 上创建集群并部署可扩展的 ML API 完整指南 后端云原生模型推理服务MLOps人工智能【免费下载链接】cortexProduction infrastructure for machine learning at scale项目地址https://gitcode.com/gh_mirrors/co/cortex点击查看免费下载导读本文基于 Cortex 开源仓库的 docs/start.md 入门指南系统讲解从零开始的完整上手路径先在你的 AWS 账户上用cortex cluster up拉起一个生产级 Kubernetes 集群再通过cortex deploy把容器化的机器学习服务以 Realtime、Async、Batch、Task 四种 API 形态发布出去。读完本文你将掌握 Cortex CLI 的安装与配置、cluster.yaml的关键参数、环境Environment管理机制以及四类 API 的定义、构建、部署与调用全流程并能够顺着文末的仓库路径深入阅读源码验证每个环节的实现细节。一、两条核心路径集群编排 API 部署docs/start.md把整个上手流程浓缩为两个阶段、两条命令# 阶段一在你的 AWS 账户上创建集群 cortex cluster up cluster.yaml # 阶段二部署可扩展的 API cortex deploy apis.yaml第一阶段的本质是Cortex 在 AWS 上以 CloudFormation/EKS 为底座创建一套包含 Operator、Autoscaler、Proxy、Async Gateway、Prometheus/Grafana 等组件的生产基础设施第二阶段的本质是Cortex 把你在 YAML 中声明的 API 规格转化为 Kubernetes 上的工作负载并接入负载均衡、弹性伸缩、监控与日志链路。整个 CLI 由 cli/main.go 入口启动命令树定义在 cli/cmd 目录下。二、第一步安装并配置 Cortex CLI2.1 使用安装脚本安装 CLIdocs/start.md推荐通过一行脚本完成安装脚本本身即仓库根目录的 get-cli.shbash -c $(curl -sS get-cli.sh 的托管地址/v0.42.1/get-cli.sh)从 get-cli.sh 的源码可以看出该脚本的实际行为以下细节均出自该文件平台支持仅支持 macOS 与 Linux其他操作系统会直接报错退出见case $OSTYPE分支下载方式优先使用curl其次使用wget两者都没有时提示安装其一默认安装位置/usr/local/bin/cortex可通过环境变量CORTEX_INSTALL_PATH覆盖脚本支持~/前缀展开权限处理当前用户是 root 时直接移动二进制否则请求sudo密码后移动交互式增强如果当前终端是交互式-t 1脚本会询问是否将source (cortex completion bash)或source (cortex completion zsh)写入 shell 配置文件用于启用命令补全与cx别名。因此更可控的安装方式是先在本地拿到脚本、检查后再执行也可以直接设置CORTEX_INSTALL_PATH指定安装目录。详细说明见 客户端安装文档。2.2 通过 pip 安装 CLI 与 Python 客户端除了独立二进制Cortex 还提供 Python 客户端源码位于 python/client/cortex可以一并安装# 安装最新版本 pip install cortex # 安装/升级到指定版本例如 0.42.1 pip install cortex0.42.1 # 升级到最新版本 pip install --upgrade cortex2.3 客户端配置目录CLI 与 Python 客户端默认在~/.cortex/目录下保存环境配置。若想改用其他目录在任何cortex命令执行前导出export CORTEX_CLI_CONFIG_DIR/path/to/your/cortex-config配置目录的读写逻辑可参考 cli/cmd/lib_cli_config.go 与 cli/types/cliconfig/cli_config.go。三、第二步创建集群3.1 前置条件创建集群前需要准备详见 集群创建文档本机安装并运行 Dockercortex cluster up在 cli/cmd/cluster.go 中会先调用docker.GetDockerClient()校验 Docker 可用性否则直接报错退出若计划使用 GPU 节点组需先在 AWS Marketplace 订阅 GPU 版 AMI创建具有AdministratorAccess的 IAM 用户并配置好本机的 AWS 凭证CLI 通过 pkg/lib/aws/credentials.go 解析凭证视所选实例类型可能需要向 AWS 申请提高 EC2 配额。3.2 拉起集群cortex cluster up cluster.yaml从 cli/cmd/cluster.go 的_clusterUpCmd实现看这条命令背后的关键流程包括校验 Docker 客户端解析cluster.yaml得到访问配置集群名、region并检查同名环境是否已存在若存在会提示是否覆盖也可用--configure-env指定新环境名通过 AWS 客户端检查集群状态clusterstate.GetClusterStacks确保目标集群尚不存在校验当前 AWS 身份是否具备管理员权限创建 S3 bucket用于配置与工件存储、CloudWatch 日志组、默认 IAM 策略以 Docker 容器方式运行管理镜像执行/root/install.sh即 manager/install.sh完成 EKS 集群与全部组件的部署等待 Operator 的 NLB 就绪后自动把环境Environment写入 CLI 配置并设为默认环境。cortex cluster up支持--configure-env 名称缩写-e与--yes跳过确认提示等参数。创建过程中如果实例供应失败CLI 会结合 EC2 AutoScaling Group 的活动历史给出排障提示并要求先cortex cluster down清理再重试。3.3 cluster.yaml核心配置解析docs/start.md指向的 集群配置文档 给出了完整的cluster.yaml示例以下配置项按用途分组说明# 集群基本信息 cluster_name: cortex # 集群名称会作为 AWS 资源命名的组成部分 region: us-east-1 # AWS 区域 availability_zones: # 默认为该区域随机 3 个可用区如 [us-east-1a, us-east-1b, us-east-1c] # 节点组Node Group配置 node_groups: - name: ng-cpu # 节点组名称 instance_type: m5.large # 实例类型 min_instances: 1 # 最小实例数 max_instances: 5 # 最大实例数 priority: 1 # 节点组优先级 [1-100]值越高优先级越高 instance_volume_size: 50 # 每实例磁盘容量GB instance_volume_type: gp3 # 卷类型 [gp2 | gp3 | io1 | st1 | sc1] # instance_volume_iops: 3000 # IOPS仅 io1/gp3 适用 # instance_volume_throughput: 125 # 吞吐仅 gp3 适用 spot: false # 是否使用 Spot 实例 - name: ng-gpu # GPU 节点组示例 instance_type: g4dn.xlarge min_instances: 1 max_instances: 5 instance_volume_size: 50 instance_volume_type: gp3 spot: false # ... # 网络与安全 subnet_visibility: public # 实例子网可见性 [public | private] nat_gateway: none # NAT 网关 [none | single | highly_available]使用 private 子网时必选 api_load_balancer_type: nlb # API 负载均衡类型 [nlb | elb] api_load_balancer_scheme: internet-facing # API 负载均衡方案 [internet-facing | internal] operator_load_balancer_scheme: internet-facing # Operator 负载均衡方案internal 时需要 VPC Peering 才能连接 api_load_balancer_cidr_white_list: [0.0.0.0/0] # API 访问 CIDR 白名单 operator_load_balancer_cidr_white_list: [0.0.0.0/0] # Operator 访问 CIDR 白名单 vpc_cidr: 192.168.0.0/16 # 集群 VPC 的主 CIDR 段 # 安全与权限 ssl_certificate_arn: # 自定义域名场景下所需的 SSL 证书 ARN iam_policy_arns: [arn:aws:iam::aws:policy/AmazonS3FullAccess] # 附加给 API 的 IAM 策略 # 其他 tags: # 附加到 AWS 资源的标签资源还会自动打上 cortex.dev/cluster-name 标签 prometheus_instance_type: t3.medium # Prometheus 实例类型超过 300 节点/300 Pod 时建议选更大内存实例几点补充说明若要复用现有 VPC可在配置中列出子网subnets但要求subnet_visibility与子网实际可见性一致且属于面向有经验用户的进阶特性集群使用到的全部 Docker 镜像都可在cluster.yaml中覆盖如image_manager、image_operator、image_autoscaler、image_proxy、image_async_gateway、image_dequeuer、image_istio_proxy、image_prometheus等默认为quay.io/cortexlabs/*:master系列自托管镜像的具体做法参见 docs/clusters/advanced/self-hosted-images.md上述配置项的读取与校验逻辑分布在 pkg/types/clusterconfig 目录如 cluster_config.go、availability_zones.go、network_validations.go。3.4 集群生命周期管理cluster命令族还包含其他子命令定义见 cli/cmd/cluster.gocortex cluster info [-c cluster.yaml]查看集群信息支持--output json|yaml、--print-config打印当前生效配置、--debug导出集群状态cortex cluster configure cluster.yaml更新集群配置增删节点组、调整实例规格等通过环境变量把变更清单传给管理容器执行cortex cluster down销毁集群默认还会清空 S3 bucket 内容、删除 EBS 卷与日志组可用--keep-aws-resources保留这些资源cortex cluster export把所有 API 的配置导出为 YAML 文件cortex cluster health以表格形式逐项检查 Operator、Prometheus、Autoscaler、Activator、Async Gateway、Grafana、负载均衡等组件的存活状态。四、环境Environment多集群管理的基础docs/start.md指向的 环境管理文档 说明了一个关键机制执行cortex cluster up时系统会自动创建一个与集群同名的环境并将其设为默认环境。常用环境命令cortex env list # 列出所有环境 cortex env default ENV # 切换默认环境 cortex env rename OLD NEW # 重命名环境 cortex env delete ENV # 删除环境 cortex env configure # 创建/更新一个环境交互式填写名称与 Operator 端点多集群场景下的典型用法每个集群一个环境部署时用--env指定目标cortex cluster up cluster1.yaml --configure-env cluster1 cortex cluster up cluster2.yaml --configure-env cluster2 cortex deploy --env cluster1 cortex delete my-api --env cluster1 cortex deploy --env cluster2 cortex delete my-api --env cluster2如果在cortex cluster up时省略了--configure-env也可以在集群创建完成后补上环境配置cortex cluster info cluster1.yaml --configure-env cluster1 cortex cluster info cluster2.yaml --configure-env cluster2当你在新机器上安装 CLI 并希望连接已有集群时先在旧机器上运行cortex env list记下目标环境的名称与 Operator 端点再在新机器上运行cortex env configure按提示填入即可。环境配置的持久化逻辑参见 cli/cmd/lib_cli_config.go。五、第三步构建并部署可扩展的 API5.1 deploy 命令的行为cortex deploy apis.yaml从 cli/cmd/deploy.go 的_deployCmd实现看不传配置文件时默认读取当前目录下的cortex.yaml不存在则报错传参数时校验文件存在性禁止从 home 目录或根目录直接部署防止误操作支持--env指定环境、--force覆盖进行中的 API 更新、--yes跳过提示、--outputjson/pretty等参数部署结果按 API 逐个返回成功/失败消息全部失败时以非零码退出cortex.yaml中可以同时声明多个 APIcortex deploy会一并创建或更新。apis.yaml或cortex.yaml中的每个条目声明一个 API核心字段包括name、kindAPI 类型与pod容器配置。API 的完整配置规范参见 docs/workloads/realtime/configuration.md其中pod支持port、max_concurrency、max_queue_length、容器列表image/command/env/compute、readiness_probe/liveness_probe、pre_stop等autoscaling支持min_replicas/max_replicas/target_in_flight/window/downscale_stabilization_period等还有node_groups、update_strategy、networking.endpoint等字段。5.2 四种 API 类型Cortex 提供四种工作负载类型分别覆盖不同的推理/计算模式kind适用场景示例文档RealtimeAPI低延迟在线推理请求实时响应docs/workloads/realtime/example.mdAsyncAPI异步处理请求进入队列通过请求 ID 查询结果docs/workloads/async/example.mdBatchAPI分布式批处理作业一次提交一批任务docs/workloads/batch/example.mdTaskAPI按需作业如模型训练运行完即退出docs/workloads/task/example.md5.3 以 RealtimeAPI 为例的完整部署链路以下是 docs/workloads/realtime/example.md 给出的端到端流程仓库 test/apis/realtime/hello-world 下有可直接对照的示例代码与配置① 定义 APImain.pyfrom fastapi import FastAPI from pydantic import BaseModel app FastAPI() class Data(BaseModel): msg: str app.post(/) def handle_post(data: Data): return data② 创建 DockerfileFROM python:3.8-slim RUN pip install --no-cache-dir fastapi uvicorn COPY main.py / CMD uvicorn --host 0.0.0.0 --port 8080 main:app③ 本地构建、运行与验证docker build . -t hello-world docker run -p 8080:8080 hello-world curl -X POST -H Content-Type: application/json -d {msg: hello world} localhost:8080④ 推送镜像到 ECR# 登录 ECR aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com # 创建仓库、打标签、推送 aws ecr create-repository --repository-name hello-world docker tag hello-world AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/hello-world docker push AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/hello-world⑤ 编写部署配置并发布# cortex.yaml - name: hello-world kind: RealtimeAPI pod: containers: - name: api image: AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/hello-worldcortex deploy cortex get --watch # 等待 API 就绪 cortex get hello-world # 获取 API 端点⑥ 通过负载均衡端点请求curl -X POST -H Content-Type: application/json -d {msg: hello world} http://api_endpoint/hello-world5.4 Async、Batch、Task 的差异要点AsyncAPI处理器代码与 Realtime 几乎一致handle_async但请求会先进入 SQS 队列相关实现见 pkg/enqueuer/enqueuer.go 与 pkg/dequeuer/dequeuer.go提交后你需要保存返回的REQUEST_ID随后用GET请求携带该 ID 查询结果curl -X POST -H Content-Type: application/json -d {msg: hello world} http://api_endpoint/hello-world curl http://api_endpoint/hello-world/REQUEST_IDBatchAPI处理器接收一个列表作为输入并提供on-job-complete钩子部署配置中需要用command覆盖容器启动命令保持服务常驻以等待批次调度。提交任务时通过请求体声明 worker 数量与任务切分方式curl -X POST -H Content-Type: application/json -d {workers: 2, item_list: {items: [1,2,3,4], batch_size: 2}} http://api_endpoint/hello-world cortex logs hello-world JOB_IDTaskAPI处理器是一次性脚本直接print输出部署配置中用command: [python, main.py]执行入口提交后通过cortex logs hello-world JOB_ID查看作业日志。仓库在 test/apis/task/iris-classifier-trainer 提供了训练型 Task 的完整样例。5.5 其他常用 CLI 操作cortex get [API_NAME]列出/查看 API 状态与端点支持--watch持续等待就绪cortex delete [API_NAME]删除已部署的 APIcortex logs API_NAME [JOB_ID]查看 API 或指定作业的日志日志后端实现见 pkg/operator/operator/logging.gocortex refresh刷新集群内运行中的 API重新拉取镜像等。六、从入门到深入推荐的后续阅读路径docs/start.md以链接形式给出了完整的进阶地图这里按依赖顺序整理客户端与安装docs/clients/install.md、docs/clients/cli.md、docs/clients/python.md集群配置与运维docs/clusters/management/create.md、docs/clusters/management/update.md、docs/clusters/management/environments.md、docs/clusters/management/delete.md、docs/clusters/management/auth.md网络与安全docs/clusters/networking/api-gateway.md、docs/clusters/networking/https.md、docs/clusters/networking/custom-domain.md、docs/clusters/networking/vpc-peering.md可观测性docs/clusters/observability/metrics.md、docs/clusters/observability/logging.md、docs/clusters/observability/alerting.md四种工作负载按需精读 realtime、async、batch、task 的主文档及各自目录下的 configuration/autoscaling/containers/statuses 子文档并结合 test/apis 下的真实样例如 realtime/hello-world、batch/sum、async/hello-world、task/iris-classifier-trainer动手实践。结语从cortex cluster up到cortex deployCortex 把在 AWS 上搭建 ML 基础设施和把模型容器发布为可伸缩 API两条路径压缩成了两个命令。本文以 docs/start.md 为骨架结合 get-cli.sh、cli/cmd/cluster.go、cli/cmd/deploy.go 等源码揭示了这两条命令背后的真实执行链路并完整保留了cluster.yaml的参数体系与四种 API 的部署细节。无论你是要部署在线推理、异步任务、分布式批处理还是按需训练作业都可以从这两条命令出发按上文的进阶路径逐步深入。赞分享后端云原生模型推理服务MLOps人工智能【免费下载链接】cortexProduction infrastructure for machine learning at scale项目地址https://gitcode.com/gh_mirrors/co/cortex点击查看免费下载相关推荐快速上手AWS EKS使用eksctl的完整集群部署指南快速上手AWS EKS使用eksctl的完整集群部署指南 想要在AWS上快速搭建Kubernetes集群吗Amazon EKSElastic Kubern云原生Hermes WebUI商业应用企业环境中的5大实战用例与高效部署方案Hermes WebUI商业应用企业环境中的5大实战用例与高效部署方案 在数字化转型加速的今天企业对智能助手的需求不再局限于简单的信息查询而是需要能够深度人工智能AI 应用AI Agent交互助手MCP 服务前端Karpenter Provider for AWS v1.13 快速上手指南从零创建 EKS 集群并部署 Karpenter 节点自动扩缩容Karpenter Provider for AWS v1.13 快速上手指南从零创建 EKS 集群并部署 Karpenter 节点自动扩缩容 Karpent上一篇uiv与Bootstrap 5兼容性处理平滑过渡的最佳实践下一篇完全掌握Penpot组件系统提升团队设计效率的7个核心技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询