
【免费下载链接】pycaretOpen-source, low-code AutoML platform for Python. PyCaret 4.0: sklearn-native engine React control plane.项目地址https://gitcode.com/gh_mirrors/py/pycaret点击查看免费下载PyCaret 4.0 的 sklearn 原生引擎之上构建了完整的控制平面FastAPI 后端 React UI 独立 Worker本文以仓库根目录下的 OPERATIONS.md 为骨架结合 INSTALL.md、docker-compose.prod.yml、values.yaml 与 config.py 等源码系统讲解如何把一套真实部署跑起来、看得住、能回滚、能扩容。读完你将掌握双存储一致性备份、Alembic 迁移的升级/回滚 runbook、健康检查与指标接口的用法、按队列分离的 GPU/CPU 弹性伸缩以及生产环境的关键安全加固点。一、先认清平台的两块状态备份的前提PyCaret 平台的持久化数据由两半组成OPERATIONS.md 在备份章节开门见山DBPostgres / 开发环境 SQLite用户、工作区、实验、Run、Trial、部署记录、审批流等全部元数据对象存储MinIO / S3Run 输出物run.ipynb、fitted_pipeline.pkl、leaderboard.json、events.jsonl、preview.html等DB 行里只存stored_path这类 URI 引用。只备份其一必然产生元数据指向缺失工件或工件无人引用的孤儿状态所以PG dump 与对象存储 mirror 必须成对做。从 config.py 可以看到存储的完整能力矩阵PYCARET_STORAGE_BACKEND支持local工件落在PYCARET_ARTIFACT_DIRDB 存file://URI、s3/minioS3 兼容 API而PYCARET_RUNS_BACKEND决定任务是进程内执行还是走 Redis 队列见 config.py。1.1 PostgresCompose 与 Kubernetes 两条 dump 路径# Docker Compose 栈 docker exec pycaret-postgres pg_dump -U pycaret pycaret \ | gzip pycaret-$(Get-Date -Format yyyyMMdd-HHmmss).sql.gz # Kubernetes kubectl -n pycaret exec sts/pycaret-pycaret-postgres -- pg_dump -U pycaret pycaret \ | gzip pycaret-$(Get-Date -Format yyyyMMdd-HHmmss).sql.gz恢复即对全新 DB 执行pg_restore。注意 Compose 中 Postgres 的用户/库默认值POSTGRES_USERpycaret、POSTGRES_DBpycaret可通过PYCARET_PG_USER/PYCARET_PG_DB覆盖见 docker-compose.prod.yml。强烈建议每季度做一次恢复演练只备份不验证的备份等于没有备份。1.2 对象存储mc mirror 与 aws s3 syncmc alias set source http://minio:9000 $env:S3_ACCESS_KEY $env:S3_SECRET_KEY mc mirror source/pycaret-artifacts ./backup/artifacts对真实 S3 使用aws s3 sync等价操作。pycaret-artifacts是 Compose 栈minio-bootstrap一次性服务创建的默认 bucket见 docker-compose.prod.ymlHelm 部署则由 values.yaml 的minio.bucket指定。调度建议交给 cron 或 KubernetesCronJob至少保留最近 14 份日备份 6 份月备份。1.3 顺序很关键先 dump DB再 mirror 对象存储正确顺序是DB dump 在前、对象存储 mirror 在后dump 时 DB 行可能引用了尚未同步的工件第二天重跑 sync 即可补齐。反过来先 mirror 再 dump会让 dump 指向未被捕获的工件产生不可修复的引用悬空。这是两条命令之间最容易踩的坑。二、升级 runbook六步走与安全回滚OPERATIONS.md 给出的升级流程是六步每一步都有对应源码佐证读 release notes——每个 PyCaret 版本都会在docs/revamp/PHASE-*-NOTES.md中标注迁移与破坏性变更先快照 DB 对象存储——复用上一节的备份流程动手前必须有退路拉取新镜像——Compose 下docker pullHelm 下--set global.imageTag…镜像标签入口在 values.yaml先应用迁移再拉起 APIdocker exec pycaret-api pycaret-server migrateK8s 下用kubectl exec进入 api pod。Alembic 前向兼容对仍在运行的旧版 API 应用纯增量迁移是安全的但涉及破坏性 schema 翻转典型如 Phase 0 的 trials/runs pivot时必须先把 API 停掉滚动 API——先 drain worker让在途 Run 跑完再滚动 worker冒烟测试——在任一 pod 内执行pycaret-server doctor。pycaret-server migrate的实现见 cli.py它默认使用PYCARET_DATABASE_URL支持--revision指定目标版本默认head--reset-dev会删除 SQLite 开发库文件并拒绝作用于非 SQLite URL防止误操作。迁移脚本本身存放在 services/api/pycaret_server/migrations/versions每个版本都带有downgrade。坏版本回滚先把镜像回滚到上一个 tag再执行pycaret-server migrate --revision previous撤销 schema 变更downgrade保证可逆。补充一个值得知道的细节serve --reload模式下cli.py 会显式排除.venv、node_modules、artifacts、*.db等路径——因为 reload 触发重启会轮换进程内临时生成的PYCARET_SECRETS_KEY把 DB 里已加密的 Secret 全部打不开这是开发期最容易忽视的坑。三、可观测性健康检查、结构化日志与指标接口3.1 三个健康检查入口入口类型语义GET /healthzliveness进程存活即返回200GET /readyzreadiness规划中DB Redis 存储全部可达才返回200pycaret-server doctorCLI 变体脚本与 K8sinitContainers首选/healthz在 app.py 中直接返回{ok: True}并被审计中间件白名单排除见 audit.py。doctor的源码在 cli.py逐一探测 DBSELECT 1、Redis仅runs_backendredis时否则输出SKIP、工件目录可写性写入并删除.doctor-probe探针文件任一失败返回退出码 1——这正是它能充当 K8sinitContainer就绪门卫的原因。3.2 日志API 与 worker 向 stderr 输出结构化日志默认级别INFO设置PYCARET_DEBUGtrue可临时提升到DEBUG调试完记得关掉避免日志爆炸。对接 Loki / CloudWatch / Datadog 直接利用容器运行时的 logging driver 即可。Helm 的api.env默认即为PYCARET_DEBUG: false见 values.yaml。3.3 指标当前是 admin 端点未来是 Prometheus端点内容GET /admin/queues各队列深度 最近 1 小时吞吐GET /admin/workers当前持有 Job 锁的 workerGET /deployments/{id}/metrics?metricp95_latency_ms按部署维度的时序指标GET /admin/queues与GET /admin/workers实现在 queue_admin.py前者按Job.queue × Job.status分组统计queued/running/succeeded/failed/cancelled并附加近一小时succeeded数作为吞吐信号后者没有独立的 workers 表直接从Job.locked_by反推当前正在跑任务的 worker 列表空闲 worker 会自然消失——这意味着它更像运行中任务视图而非完整心跳真正的worker_heartbeats表留待后续版本。部署指标在 monitoring.py 与 deployments.pyread_metrics默认取最近 1 小时、按ts_bucket升序返回{metric, ts, value, count, extra}点列预测时_record_predict_metrics维护 p50/p95 延迟滑动窗口并写回Deployment.p95_latency_ms。未来版本会通过 Prometheus/metrics一次性暴露全部指标当前阶段可用自定义 exporter 抓取上述 admin 端点或直接使用平台内置告警规则 Slack/email 目的地。邮件目的地依赖 config.py 的 SMTP 配置smtp_host未设置时邮件告警会返回明确的 SMTP not configured 错误而非静默丢弃。四、弹性伸缩何时扩、扩什么、怎么扩OPERATIONS.md 的缩放决策表是日常运维的速查手册资源扩容触发条件操作API 副本p95 延迟 200mshelm upgrade … --set api.replicaCountNWorkerdefault 队列queued任务堆积提高worker.replicaCountWorkergpu 队列调参任务耗时过长专用 Helm release worker.queuesgpuPostgresCPU 70% 持续托管库升实例规格先垂直后副本Redis高 pub/sub 量 队列深度罕见——单实例可扛 10k events/sMinIO / S3存储 PVC 分配的 80%扩 PVCS3 自身可水平扩展Helm 默认值见 values.yamlAPI 默认replicaCount: 2250m CPU / 512Mi 请求worker 默认 2 副本500m CPU / 1Gi 请求且queues: default,cpu-heavyPostgres PVC 默认 20Gi、MinIO 默认 50Gi。Compose 栈的 worker 启动命令是pycaret-server worker --queues default见 docker-compose.prod.yml。4.1 队列分离Phase 14按任务类别拆 worker默认队列规划为四类default——兜底队列compare / create / search 类任务cpu-heavy——长时调参避免饿死 default 池实验上设置setup_params.queuecpu-heavygpu——调度到声明了nvidia.com/gpu的节点worker 部署同时设置setup_params.queuegpu与nvidia.com/gpu1资源限制inference——轻量、延迟敏感、纯 predict 任务副本数压低、CPU request 拉高让延迟可预测。队列机制的配置根基在 config.pyPYCARET_WORKER_QUEUES默认default逗号分隔决定 worker 监听哪些队列。Helm 的 GPU worker 池安装方式在 INSTALL.md 有完整示例helm install pycaret-gpu ./infra/helm/pycaret -n pycaret \ --set api.replicaCount0 \ --set web.replicaCount0 \ --set postgres.enabledfalse \ --set redis.enabledfalse \ --set minio.enabledfalse \ --set worker.replicaCount2 \ --set worker.queuesgpu \ --set worker.resources.limits.nvidia\.com/gpu1提交带setup_params.queuegpu的 Run 后GPU worker 会接单而 default 队列 worker 保持空闲实现异构节点的精细调度。五、安全加固密钥、加密与审批OPERATIONS.md 的安全条目与源码一一对应JWT secret——要求 48 字节随机数每年轮换轮换期间临时把 refresh-token TTL 提到1d避免存量会话集体失效。对应配置为 config.py 的jwt_secret开发默认值故意设弱并会在日志中体现、access_token_ttl_minutes60、refresh_token_ttl_days30。Secrets-keyFernet——加密 LLM API 密钥 Phase 4 secrets Phase 5 PAT 的静态存储。轮换时启动过程会对每条 Secret 行重加密每 10 万条 secrets 需预留几分钟停机时间。生成方式python -c from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())。若未设置PYCARET_SECRETS_KEY进程会生成临时密钥并打警告日志——加密值在重启后不可解密见 config.py。JupyterLab tokens——按会话生成、绝不复用token 只在 iframe URL 中短暂出现平台不会以明文落库会话行之外。审批流Phase 12——把promote_to_production接到审批流上保护重要部署默认工作流为空单签自审批避免阻塞独立开发者。审批的实现骨架在 governance.pyPOST /workspaces/{ws}/approvals打开请求POST /approvals/{id}/approve累加签名直到len(approvals) required_approvals才置为approved最终POST /approvals/{id}/execute执行被门控的动作。K8s 部署的密钥注入方式在 INSTALL.mdpycaret-jwt、pycaret-encryption、pycaret-postgres、pycaret-minio四个 Secret 由 Helm 分别挂载到对应组件的jwtSecretRef/encryptionKeyRef/passwordSecretRef见 values.yaml。六、排障速查表OPERATIONS.md 给出的症状—原因—修复映射配合源码可以定位到具体配置项症状可能原因修复pycaret-server doctor报 DB FAILPYCARET_DATABASE_URL写错或 DB 挂检查.env/ values.yaml 中的 URLWorker 吞吐恒为 0队列列表不匹配确认--queues与 dispatcher 写在 Job 上的队列一致Redis 模式下 WebSocket 扇出静默失败API 连不上 Redis在 api pod 内检查PYCARET_REDIS_URLPromote 端点返回 409Trial 已有 Pipeline先 un-promote或用 registry v2 versions 端点Notebook 会话 iframe 空白notebook_backendlocal切到docker并重启 APIdocker ps查派生容器Stats 过程报 no numeric values列是字符串如1,234在 Connection 查询或 DataSource transform 里预先清洗其中notebook_backend与notebook_image、notebook_idle_timeout_seconds默认 1800 秒等参数定义在 config.py。定位问题时建议先用pycaret-server doctor二分它一次输出 DB / Redis / storage 三项状态能快速缩小排查范围。七、关联阅读INSTALL.md——首次部署单进程开发、Docker Compose 全栈、Kubernetes Helm 三条路径任选docs/revamp/PHASES.md——平台演进路线图Phase 0–14本指南中的队列分离、审批流均对应具体 Phasedocker-compose.prod.yml——Compose 生产形态全栈定义values.yaml——Helm 全部可调参数与资源默认值config.py——PYCARET_*环境变量完整清单与默认值cli.py——pycaret-server全部子命令init / serve / migrate / worker / doctor实现。赞分享【免费下载链接】pycaretOpen-source, low-code AutoML platform for Python. PyCaret 4.0: sklearn-native engine React control plane.项目地址https://gitcode.com/gh_mirrors/py/pycaret点击查看免费下载相关推荐Orchard 集群日常运维指南备份、升级与 OpenTelemetry 可观测性配置Orchard 集群日常运维指南备份、升级与 OpenTelemetry 可观测性配置 Orchard 是一个用于编排多台支持 Tart 的 macOS 主机开发工具DevOpsreactjs-vite-tailwindcss-boilerplate2024年最完整的React开发脚手架搭建指南reactjs vite tailwindcss boilerplate2024年最完整的React开发脚手架搭建指南 reactjs vite tailwi终极SkyWalking与Prometheus集成指南构建企业级可观测性平台的完整步骤终极SkyWalking与Prometheus集成指南构建企业级可观测性平台的完整步骤 SkyWalking作为一款强大的APMApplication Pe可观测性后端微服务云原生上一篇Jukebox分布式训练使用Horovod加速多节点模型训练下一篇brickout-gamePygame 打砖块游戏的完整实现解析Ball/Paddle/BrickWall 架构与碰撞检测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考