ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 ZenML 在 AWS 上搭建生产级 Pipeline 栈:S3、SageMaker Pipelines 与 ECR 实战指南

使用 ZenML 在 AWS 上搭建生产级 Pipeline 栈:S3、SageMaker Pipelines 与 ECR 实战指南 使用 ZenML 在 AWS 上搭建生产级 Pipeline 栈S3、SageMaker Pipelines 与 ECR 实战指南【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml导读本文基于 ZenML 官方指南完整讲解如何在 AWS 上搭建一套最小化生产级 ZenML 栈——用 Amazon S3 作为 Artifact Store制品存储、Amazon SageMaker Pipelines 作为 Orchestrator编排器、Amazon ECR 作为 Container Registry容器镜像仓库并通过最小权限 IAM 角色与 ZenML Service Connector 完成安全认证。读完本文你将掌握从 IAM 权限设计、Service Connector 注册、三个栈组件注册到最终 Stack 组装与验证的完整流程并了解 Warm Pools、成本控制与资源清理等生产实践。为什么要在 AWS 上运行 ZenMLZenML 是一个从 Pipeline 到 Agent 的一体化 AI 平台其核心设计理念是基础设施无关你用 Python 定义 Pipeline 与 Step剩下的计算、存储与容器管理交给背后的 Stack 组件完成。当本地开发无法满足生产需求时共享制品、弹性计算、规模化运行把 ZenML 栈迁移到 AWS 是最自然的选择。通过本文搭建的 AWS 栈你将获得三个关键能力S3 Artifact Store集中存储并版本化 Pipeline 运行产生的数据制品支持跨机器、跨团队共享运行结果SageMaker Pipelines Orchestrator以声明式方式在 AWS 云端执行 Pipeline充分利用 SageMaker 生态的调度、重试与监控能力ECR Container Registry统一存放 Pipeline 步骤运行所需的 Docker 镜像。在 ZenML 源码中AWS 相关能力由 aws 集成模块 提供它声明了sagemaker2.237.3,3.0.0等依赖并注册了aws容器镜像仓库、aws镜像构建器、aws部署器以及sagemaker编排器/Step 操作器等 5 个 Stack 组件 flavor见 AWSIntegration.flavors。如果不想手动操作ZenML 还提供浏览器内 Stack 部署向导、Stack 注册向导以及 AWS Terraform 模块等快捷方式可在 infrastructure-deployment 文档 相关章节查阅。前置条件开始之前请确认满足以下要求一个具备 S3、SageMaker、ECR、ECS 相关权限的 AWS 账号已安装 ZenML参考 安装指南已安装并配置好 AWS CLI本地具备 AWS 凭证参考 AWS CLI 官方安装文档。第 1 步准备凭证与本地环境1.1 选择 AWS 区域在 AWS 控制台右上角选择一个部署区域记下区域名如us-east-1、eu-west-2后续所有命令与配置都需要使用它。1.2 创建 IAM 角色首先获取你的 AWS 账号 IDaws sts get-caller-identity --query Account --output text这里获取的是登录 AWS 控制台所用的根账号 ID如果你使用了更复杂的账号/IAM 角色体系此命令可能不适用需要自行确认根账号 ID。然后创建名为assume-role-policy.json的信任策略文件允许 ZenML 以该角色访问 AWS 资源{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: { AWS: arn:aws:iam::YOUR_ACCOUNT_ID:root, Service: sagemaker.amazonaws.com }, Action: sts:AssumeRole } ] }将YOUR_ACCOUNT_ID替换为实际账号 ID然后创建角色示例角色名为zenml-role可自行修改aws iam create-role --role-name zenml-role --assume-role-policy-document file://assume-role-policy.json务必记录命令输出尤其是Role ARN后续注册 Orchestrator 时需要用execution_role参数引用它。1.3 创建并挂载最小权限策略与直接使用宽泛的 AWS 托管策略不同这里遵循最小权限原则least privilege为 S3、ECR、SageMaker 分别创建自定义策略。S3 策略s3-policy.json——仅允许访问你的专属 Bucket{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ s3:ListBucket, s3:GetObject, s3:PutObject, s3:DeleteObject, s3:GetBucketVersioning, s3:ListBucketVersions, s3:DeleteObjectVersion ], Resource: [ arn:aws:s3:::your-bucket-name, arn:aws:s3:::your-bucket-name/* ] }, { Effect: Allow, Action: s3:ListAllMyBuckets, Resource: * } ] }ECR 策略ecr-policy.json——仅覆盖容器镜像推送/拉取等操作{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ ecr:BatchGetImage, ecr:BatchCheckLayerAvailability, ecr:GetDownloadUrlForLayer, ecr:GetAuthorizationToken, ecr:InitiateLayerUpload, ecr:UploadLayerPart, ecr:CompleteLayerUpload, ecr:PutImage, ecr:DescribeRepositories, ecr:ListRepositories, ecr:DescribeImages ], Resource: * } ] }SageMaker 策略sagemaker-policy.json——仅覆盖 Pipeline 与训练/处理作业相关操作并附带受限的iam:PassRole条件{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ sagemaker:CreatePipeline, sagemaker:StartPipelineExecution, sagemaker:StopPipelineExecution, sagemaker:DescribePipeline, sagemaker:DescribePipelineExecution, sagemaker:ListPipelineExecutions, sagemaker:ListPipelineExecutionSteps, sagemaker:UpdatePipeline, sagemaker:DeletePipeline, sagemaker:CreateProcessingJob, sagemaker:DescribeProcessingJob, sagemaker:StopProcessingJob, sagemaker:CreateTrainingJob, sagemaker:DescribeTrainingJob, sagemaker:StopTrainingJob ], Resource: * }, { Effect: Allow, Action: iam:PassRole, Resource: arn:aws:iam::YOUR_ACCOUNT_ID:role/zenml-role, Condition: { StringEquals: { iam:PassedToService: sagemaker.amazonaws.com } } } ] }替换YOUR_ACCOUNT_ID与your-bucket-name后创建并挂载策略# 创建自定义策略 aws iam create-policy --policy-name ZenML-S3-Policy --policy-document file://s3-policy.json aws iam create-policy --policy-name ZenML-ECR-Policy --policy-document file://ecr-policy.json aws iam create-policy --policy-name ZenML-SageMaker-Policy --policy-document file://sagemaker-policy.json # 将策略挂载到角色 aws iam attach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-S3-Policy aws iam attach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-ECR-Policy aws iam attach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-SageMaker-Policy1.4 安装 ZenML AWS 与 S3 集成zenml integration install aws s3 -y从源码角度看aws 集成模块 的依赖包括sagemaker、kubernetes、aws-profile-manager与pytz其中kubernetes在卸载集成时会被保留REQUIREMENTS_IGNORED_ON_UNINSTALL [kubernetes]因为 EKS 相关能力可能被其他组件共用。第 2 步在 ZenML 中创建 Service ConnectorService Connector 是 ZenML 统一管理云凭证的机制它让 ZenML 与各个 Stack 组件可以用同一个 IAM 角色安全地认证 AWS。AWS 集成激活时会自动注册对应的 Service Connector 类型见 AWSIntegration.activate。使用 CLI 注册 AWS Service Connectorzenml service-connector register aws_connector \ --type aws \ --auth-method iam-role \ --role_arnROLE_ARN \ --regionYOUR_REGION \ --aws_access_key_idYOUR_ACCESS_KEY_ID \ --aws_secret_access_keyYOUR_SECRET_ACCESS_KEY将ROLE_ARN替换为前面创建的 IAM 角色 ARNYOUR_REGION替换为所选区域并填入你的 AWS Access Key ID 与 Secret Access Key。从源码可以确认AWS Service Connector 支持多种认证方法见 AWSAuthenticationMethods认证方法说明implicit利用环境变量、AWS CLI 本地配置或 AWS 资源上附加的 IAM 角色隐式认证最快捷但可复现性差secret-key显式长生命周期 Access Key / Secret Keysts-token显式 STS 临时凭证Access Key Secret Key Session Tokeniam-role动态 AssumeRole 生成临时 STS 令牌本文采用session-tokenSTS Session Tokenfederation-tokenFederation Token其中iam-role方式通过调用 STSAssumeRoleAPI 生成默认有效期 1 小时的临时令牌最短 15 分钟最长可配置到 12 小时并将令牌权限收敛到目标资源所需的最小集合是安全性与便利性均衡的推荐选择。第 3 步创建 Stack 组件3.1 Artifact StoreS3Artifact Store 用于存储和版本化 Pipeline 中流转的数据。如果还没有 S3 Bucket先创建Bucket 名称需全局唯一aws s3api create-bucket --bucket your-bucket-name然后注册 S3 Artifact Store 并关联到刚才的 Service Connectorzenml artifact-store register cloud_artifact_store -f s3 --paths3://bucket-name --connector aws_connector关于 S3 Artifact Store 的深入说明可参考 S3 组件指南。该文档补充了几个值得注意的细节--path是唯一必填参数格式必须为s3://bucket-name推荐通过 Service Connector 认证而不是隐式认证否则部署在远端的 ZenML Server、Orchestrator、Step Operator 等组件将无法访问本地 AWS CLI 凭证导致认证失败高级参数client_kwargs、config_kwargs、s3_additional_kwargs会以 JSON 字符串形式透传给底层s3fs/ botocore可用于对接 MinIO、Ceph RGW 等 S3 兼容存储例如zenml artifact-store register minio_store -f s3 \ --paths3://minio_bucket \ --client_kwargs{endpoint_url: http://minio.cluster.local:9000, region_name: us-east-1}从源码看S3ArtifactStoreConfig 继承自BaseArtifactStoreConfig与AuthenticationConfigMixin除path外的所有属性都会传递给s3fs.S3FileSystem初始化。3.2 OrchestratorSageMaker PipelinesOrchestrator 是 Pipeline 的计算后端。SageMaker orchestrator 依赖SageMaker Domain——它是区域内所有 SageMaker 用户与资源的中央管理单元提供 SSO 登录、隔离的用户工作区含 JupyterLab、计算资源与持久化存储。SageMaker Pipelines 是 Domain 生态的一部分允许以声明式方式定义、执行和管理端到端 ML 工作流因此 ZenML 的 SageMaker orchestrator 需要先创建 Domain 才能运行 Pipeline。按 AWS 官方文档创建 SageMaker Domain如已有可跳过然后注册 orchestrator这里需要用到之前记录的 IAM 角色 ARN 作为执行角色zenml orchestrator register sagemaker-orchestrator --flavorsagemaker --regionYOUR_REGION --execution_roleROLE_ARN注意SageMaker orchestrator 运行时不通过 Service Connector 直接认证而是依赖 AWS CLI 配置或环境变量中的 AWS 凭证。从源码可以更深入地理解这个组件的配置面。在 SagemakerOrchestratorConfig 中除了必填的execution_role还支持以下常用配置scheduler_role供 EventBridge 服务扮演以启动 SageMaker Pipeline 的 IAM 角色 ARN调度 Pipeline 时必填aws_access_key_id/aws_secret_access_key显式凭证敏感字段未提供时使用默认 AWS 配置aws_profile指定 AWS 配置文件中 profile 名称aws_auth_role_arn认证时先假设的中间 IAM 角色 ARNregion处理作业运行的区域缺省时取 AWS 默认配置bucket存放作业产物的 S3 Bucket 名称缺省时自动创建sagemaker-{region}-{aws-account-id}格式的默认 Bucket。此外SagemakerOrchestratorSettings 提供了丰富的逐 Step 运行时设置设置项默认值说明synchronousTrue是否阻塞客户端等待全部 Step 完成False时异步返回适合长时间生产 Pipelineinstance_typeml.m5.xlarge训练/ml.t3.medium处理Step 运行的 EC2 实例类型volume_size_in_gb30Step 执行存储的 EBS 卷大小1–16384 GBmax_runtime_in_seconds8640024 小时作业最长运行时间防止失控并控制成本上限 432000 秒/5 天tags/pipeline_tags{}应用到 Processor/Estimator 或 Pipeline 上的标签keep_alive_period_in_seconds3005 分钟Warm Pools 保活时间仅对 TrainingStep 生效use_training_stepNone自动判断是否使用 TrainingStep 类型当output_data_s3_uri为 dict 或output_data_s3_mode ! EndOfJob时不允许使用processor_args/estimator_args{}逐 Step 覆盖默认 Processor / Estimator 参数environment{}传给容器的环境变量input_data_s3_modeFile数据进入容器的方式File/Pipeinput_data_s3_uri/output_data_s3_uri无输入/输出数据的 S3 URI支持字符串或字典output_data_s3_modeEndOfJob数据上传 S3 的方式EndOfJob/Continuous值得一提的是use_training_step、output_data_s3_uri与output_data_s3_mode之间存在校验约束当启用 TrainingStep 时不允许使用 dict 形式的输出 URI也不允许输出模式不是EndOfJob见 SagemakerOrchestratorSettings.validate_model。3.3 Container RegistryECRContainer Registry 用于存放 Pipeline 的 Docker 镜像。先创建 ECR 仓库如已有可跳过aws ecr create-repository --repository-name zenml --region YOUR_REGION然后注册 ECR Container Registry 栈组件zenml container-registry register ecr-registry --flavoraws --uriACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com --connector aws-connector注意 URI 格式为ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com。从源码看AWSContainerRegistryConfig 有一个关键校验URI不能包含/一个合法示例是715803424592.dkr.ecr.us-east-1.amazonaws.com同时该 flavor 要求关联类型为aws的 Service Connector见其service_connector_requirements。该集成还在aws集成包内提供了awsimage builder flavoraws_image_builder_flavor.py便于在云端构建镜像。第 4 步组装并激活 Stack现在把三个组件组合成 Stack 并设为当前激活栈。CLI 方式export STACK_NAMEaws_stack zenml stack register ${STACK_NAME} -o ${ORCHESTRATOR_NAME} \ -a ${ARTIFACT_STORE_NAME} -c ${CONTAINER_REGISTRY_NAME} --set将${ORCHESTRATOR_NAME}、${ARTIFACT_STORE_NAME}、${CONTAINER_REGISTRY_NAME}替换为前面注册的组件名如sagemaker-orchestrator、cloud_artifact_store、ecr-registry。--set会把该 Stack 设为当前激活栈。如需加入其他栈组件如 Step Operator、Model Deployer也可以按需追加参数。Dashboard 方式在 ZenML Dashboard 的 Stack 创建表单中将三个组件组合起来同样可以自由添加其他组件。第 5 步验证——在 AWS 栈上运行第一个 Pipeline定义一个最简单的 ZenML Pipelinefrom zenml import pipeline, step step def hello_world() - str: return Hello from SageMaker! pipeline def aws_sagemaker_pipeline(): hello_world() if __name__ __main__: aws_sagemaker_pipeline()将代码保存为run.py并执行python run.py运行时Pipeline 将使用 S3 存储制品、SageMaker Pipelines 执行编排、ECR 存放镜像。运行成功后你可以在 ZenML Dashboard 中查看 Pipeline 运行记录与制品也可以在 AWS 控制台检查 SageMaker Pipeline 执行情况、S3 Bucket 中的制品对象与 ECR 中的镜像。生产实践与最佳实践坚持 IAM 最小权限原则本文提供的三份自定义策略就是最小权限的范例S3 仅限定你的专属 Bucket、SageMaker 仅限 Pipeline 与训练/处理作业操作、ECR 仅限容器操作并带上了正确的iam:PassRole条件。建议定期用 AWS CloudTrail 审计实际使用到的权限及时移除多余授权。使用 AWS 资源标签为所有 Pipeline 相关资源打上统一标签便于成本分摊与清理。例如给 S3 Bucket 打标签aws s3api put-bucket-tagging --bucket your-bucket-name --tagging TagSet[{KeyProject,ValueZenML},{KeyEnvironment,ValueProduction}]标签同样可以直接配置到 SageMaker 组件上SagemakerOrchestratorSettings的tags与pipeline_tags字段会把标签应用到对应的 Processor/Estimator 与 Pipeline 上与 AWS 原生标签体系打通。落实成本管理使用 AWS Cost Explorer 与 AWS Budgets 监控支出。先创建预算配置文件budget-config.json{ BudgetLimit: { Amount: 100, Unit: USD }, BudgetName: ZenML Monthly Budget, BudgetType: COST, CostFilters: { TagKeyValue: [ user:Project$ZenML ] }, CostTypes: { IncludeTax: true, IncludeSubscription: true, UseBlended: false }, TimeUnit: MONTHLY }再创建预算并按需创建成本分类标签aws budgets create-budget --account-id your-account-id --budget file://budget-config.json aws ce create-cost-category-definition --name ZenML-Projects --rules-version 1 --rules file://rules.json为 SageMaker Pipelines 启用 Warm PoolsWarm Pools 能让计算实例在作业结束后保持温热状态显著缩短 Step 启动时间特别适合迭代式开发或高频运行的 Pipeline。使用SagemakerOrchestratorSettings开启from zenml.integrations.aws.orchestrators.sagemaker import SagemakerOrchestratorSettings sagemaker_orchestrator_settings SagemakerOrchestratorSettings( keep_alive_period_in_seconds 300, # 5 分钟默认值 )如上源码表所示keep_alive_period_in_seconds默认即 300 秒每次作业完成后实例保持 5 分钟期间发起的后续作业可直接复用从而跳过冷启动。建立可靠的备份策略为关键数据与配置定期备份。S3 上可开启版本控制Bucket 版本控制并考虑启用跨区域复制CRR以实现灾难恢复。注意S3 Artifact Store 的最小权限策略中已包含s3:GetBucketVersioning、s3:ListBucketVersions、s3:DeleteObjectVersion等版本相关权限为版本化备份做好了权限准备。清理资源警告以下命令具有破坏性请确认不再需要相关资源后再执行避免产生不必要的费用。按顺序清理务必在创建资源的同一区域执行# 删除 S3 Bucket aws s3 rm s3://your-bucket-name --recursive aws s3api delete-bucket --bucket your-bucket-name # 删除 SageMaker Domain aws sagemaker delete-domain --domain-id DOMAIN_ID # 删除 ECR 仓库 aws ecr delete-repository --repository-name zenml-repository --force # 从 IAM 角色分离自定义策略 aws iam detach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-S3-Policy aws iam detach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-ECR-Policy aws iam detach-role-policy --role-name zenml-role --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-SageMaker-Policy # 删除自定义策略 aws iam delete-policy --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-S3-Policy aws iam delete-policy --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-ECR-Policy aws iam delete-policy --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/ZenML-SageMaker-Policy # 删除 IAM 角色 aws iam delete-role --role-name zenml-role总结本文完整走通了最小权限 IAM 角色 → ZenML Service Connector → 三个栈组件 → Stack 组装 → 运行验证的 AWS 生产栈搭建闭环。这个栈带来的核心收益包括可扩展性借助 AWS 的弹性能力承载大规模 ML 负载可复现性版本化制品与容器化环境确保 Pipeline 结果可复现协作性集中式 Stack 与共享资源让团队成员高效协作灵活性可按需定制与扩展栈组件。进一步探索的方向阅读 生产指南 学习生产级 Pipeline 的部署与管理最佳实践查阅 组件指南 了解 ZenML 与 MLOps 生态中其他工具的集成方式通过 AWS 集成模块 与 SageMaker orchestrator 实现 深入理解底层实现进一步定制自己的 AWS 栈。【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表