ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PyCaret 4.0 自托管 ML 平台快速上手:Docker Compose 部署、控制平面架构与端到端训练部署实战

2026/9/24 15:30:19 拓冰建站 浏览量
PyCaret 4.0 自托管 ML 平台快速上手:Docker Compose 部署、控制平面架构与端到端训练部署实战 【免费下载链接】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 是一个开源的、可自托管的低代码 AutoML 平台将 sklearn 原生引擎、FastAPI 控制平面与 React Web UI 打包进一个仓库实现引擎 控制平面 UI 一体化。本文以仓库根目录 README.md 为主线结合 compose.yml、.env.example、services/api/pycaret_server/config.py 等源码与设计文档完整讲解五分钟本地部署、环境配置、Golden Path 实战Train → Register → Deploy → Predict以及平台架构演进方向帮助你快速把这个平台跑起来并理解它的内部构造。项目定位一个箱子装下的完整 ML 平台PyCaret 4.0 与 3.x 的定位截然不同。3.x 只是一个 AutoML 库PyPI 上的pycaret 3.4.0已冻结、不再提交新代码而 4.0 是一次从零开始的架构重构README 中明确标注为work in progress交付物是完整的自托管 ML 平台包含三大组件Engine基于 sklearn 1.7 的 AutoML 库PyPI 包名仍为pycaret位于 packages/engine提供分类、回归、聚类、异常检测、时间序列五大任务类型。Control planeFastAPI 后端提供工作区Workspaces、项目、实验、运行Runs、模型注册Model Registry、部署、审批、监控、漂移检测、血缘Lineage、Webhooks、调度、LLM 辅助 copilot 等能力代码位于 services/api。Web UIReact Vite 构建、暗色模式优先的界面位于 apps/web。所有配置通过点选完成不需要手写 YAML。部署形态刻意保持紧凑docker compose up只启动两个容器——一个 nginx 托管的 React 静态资源一个同时承载调度器APScheduler、进程内计算ThreadPoolExecutor与 SQLite 数据库的 FastAPI 进程即单二进制自托管模式README 中提到与 Plausible / Vaultwarden / n8n 同思路。整个平台默认跑在http://localhost:3020。五分钟本地安装前提条件只需要 DockerDocker Desktop 4.27或Docker Engine 25.0 且带 Compose v2.24。无需本地 Python、Node 或数据库。启动命令git clone https://github.com/pycaret/pycaret.git cd pycaret docker compose up --build首次构建约 5 分钟Python 依赖 npm install Vite build之后再次启动小于 30 秒。当日志中出现pycaret-api | INFO: Application startup complete.和pycaret-web | … starting nginx后打开http://localhost:3020首次访问会出现 Setup 界面引导你创建第一个管理员账号与工作区创建完成即进入平台。启动后运行了什么服务地址说明pycaret-webhttp://localhost:3020React UInginx 托管的构建产物将/api与/ws反向代理到后端pycaret-apihttp://localhost:8020FastAPI SQLAlchemy APSchedulerV1 阶段 worker 在进程内运行pycaret-data卷具名卷SQLite 数据库 上传的 CSV 训练完成的.pkl文件 Fernet 密钥这些端口、服务名与健康检查都定义在仓库根目录的 compose.yml 中api 容器监听 8020web 容器对外暴露${PYCARET_WEB_PORT:-3020}:8080pycaret-data卷挂载到 api 容器的/data目录。api 容器带有 healthcheck轮询/healthzweb 容器通过depends_on: api: condition: service_healthy等待后端就绪后再启动避免首启时 UI 先于迁移完成而报 404。常用运维命令docker compose logs -f api # 追踪后端日志 docker compose logs -f web # 追踪 UI 日志 docker compose restart api # 仅重启后端 docker compose down # 停止全部数据卷保留数据与密钥安全 docker compose down -v # 彻底清空连数据卷一起删数据库与密钥全部丢失down与down -v的区别是平台持久化设计的关键前者保留pycaret-data卷SQLite 库、CSV、pkl、Fernet 密钥都在里面后者则全部抹掉下次up相当于全新安装。常见故障排查症状原因处理Cannot connect to the Docker daemonDocker Desktop / Docker Engine 未运行启动 Docker Desktop等待鲸鱼图标变绿后重试bind: address already in useon:3020或:8020端口被其他进程占用覆盖端口PYCARET_WEB_PORT3030 PYCARET_API_PORT8030 docker compose up构建在pip install处卡住超 10 分钟首次构建网络慢或 Docker Desktop 内存不足Docker Desktop → Settings → Resources → 内存调至 ≥6 GB 后重试构建时报no space left on device旧 Docker 镜像占满磁盘docker system prune -a后重试api 日志出现/bin/sh^M: bad interpreterWindows 检出导致 CRLF 换行正常情况下.gitattributes会强制 LF若出现用git clone --config core.autocrlffalse重新克隆UI 能打开但所有/api调用返回 404api 容器还在做首启引导Alembic 迁移等待约 30 秒健康检查通过用docker compose logs -f api观察忘记管理员密码数据库已加密无法找回docker compose down -v清库后重新引导配置体系从 .env 到源码快速开始所有可覆盖配置都通过仓库根目录的.env文件注入该文件被 gitignore模板见 .env.examplecp .env.example .env # 编辑 .env把 PYCARET_JWT_SECRET 换成真实随机值等 docker compose up核心配置项详解环境变量作用默认值 / 说明PYCARET_SECRETS_KEY用于加密 LLM API Key、数据源密码等静态敏感信息的 Fernet 密钥首次启动自动生成并持久化到数据卷只有需要多实例共享同一密钥多副本、蓝绿部署时才需显式设置。手动生成方式python -c from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())PYCARET_JWT_SECRET签名访问令牌与刷新令牌的 JWT 密钥任何生产部署都必须改为强随机值丢失或泄露等同于丢失所有用户密码config.py 中默认值为dev-only-jwt-secret-do-not-use-in-prod且该弱默认值会出现在日志中以防误上生产PYCARET_DATABASE_URL关系数据库连接串默认sqlite:////data/pycaret.db生产切换 Postgrespostgresqlpsycopg://user:passwordhost:5432/pycaretPYCARET_STORAGE_BACKEND产物对象存储后端local默认落到artifact_dir下s3/minio需配合PYCARET_STORAGE_BUCKET、PYCARET_STORAGE_REGION、PYCARET_STORAGE_ACCESS_KEY、PYCARET_STORAGE_SECRET_KEYMinIO 场景还需PYCARET_STORAGE_ENDPOINT_URLPYCARET_CORS_ORIGINS允许跨域的前端来源JSON 数组字符串默认覆盖 docker compose 的 UI 端口[http://localhost:3020,http://127.0.0.1:3020]PYCARET_ENVIRONMENT运行环境dev/staging/prod默认devPYCARET_DEBUG调试开关默认falsePYCARET_SMTP_*邮件邀请、告警SMTP 配置留空则禁用邮件其余功能不受影响SES、Mailgun 等可通过其 SMTP 网关接入源码视角三层配置链配置链条在仓库中有完整实现证据Compose 层compose.yml 中 api 服务通过${VAR:-default}语法注入PYCARET_DATABASE_URL、PYCARET_ARTIFACT_DIR、PYCARET_CORS_ORIGINS、PYCARET_JWT_SECRET、PYCARET_ENVIRONMENT、PYCARET_DEBUG并刻意不设置PYCARET_SECRETS_KEY——注释明确说明这是为了让入口脚本接管密钥生命周期。入口脚本层infra/docker/docker-entrypoint.sh 处理密钥的持久化若环境变量未提供密钥则首次启动时用 Pythoncryptography生成 Fernet 密钥写入/data/.secrets/fernet.key权限 0600之后每次重启复用。脚本注释记录了这个设计的历史教训——session 55 曾因每次重启轮换临时密钥导致数据库中所有已加密密钥静默失效。脚本最后用exec $替换自身进程确保docker stop信号直达 uvicorn。应用配置层services/api/pycaret_server/config.py 基于 pydantic-settings 定义Settings类env_prefixPYCARET_、env_file.env通过lru_cache提供进程级单例get_settings()。除 README 提到的核心变量外还包含runs_backendinprocess默认 /redis对应 Phase 1 的 worker 化、worker_queues、notebook_backendlocal/docker、enable_deployments、enable_websocket等功能开关。黄金路径Golden Path10 分钟走通 Train → Register → Deploy → PredictREADME 给出了完整的端到端实操路径Setup—— 创建第一个管理员账号与你的工作区。配置 LLM可选—— 侧边栏 →Settings → LLM粘贴 Anthropic 或 OpenAI 的 API Key可解锁 AI 数据集顾问与实验设计 copilot。上传或选择数据集—— 侧边栏 →Build → Datasets→ 点击Browse samples一键获取仓库自带的 CSVjuice、bank、iris 等见 datasets 目录。创建项目—— 侧边栏 →Build → Projects→ New project。运行实验—— 进入项目 → New experiment → 选择数据集、任务类型classification / regression / clustering / anomaly / time series、目标列。运行自动开始训练约 12 个算法。提升胜者—— 在 Run 详情页的排行榜上对比 12 个 trial选择其一 →Promote它以 v1 版本进入Model registry。部署—— Model registry → 点击模型 → 在版本行Deploy→ 给出端点 slug如juice-prod。预测—— 部署详情页使用Test a prediction面板或直接调用curl POST http://localhost:8020/api/v1/deployments/juice-prod/predict携带一行 JSON 特征数据即可获得预测结果。这条路径在架构层面有清晰落点部署与推理链路见 docs/revamp/ARCHITECTURE.md 中的说明——Run 成功并产出 pipeline pickle 后POST /runs/{id}/promote生成工作区级的 Pipeline 记录POST /pipelines/{id}/deployments生成带 slug 与 auth_mode 的 Deployment 记录进程内DeploymentRegistryLRU p50/p95 滚动窗口负责加载模型并响应POST /deployments/{slug}/predict。部署的鉴权模式包括workspaceJWT以及后续版本的api-key、public限流。本地开发不走 docker compose若想带热重载开发代码docker compose 反而显得笨重可以绕过容器直接运行# 前置Python 3.13 Node 22 uv 0.11 npm 10 # 安装全部依赖引擎 控制平面 UI uv sync --all-packages --all-extras cd apps/web npm install cd .. # 两个终端分别运行 uv run --package pycaret-server pycaret-server serve --reload # 后端 :8020 cd apps/web npm run dev # 前端 :3020apps/web/vite.config.ts把/api、/ws、/healthz代理到后端 8020 端口注意配置里ws: true是为了转发/api/v1/runs/:id/events/ws的 WebSocket 升级否则 EventStream 会显示 closed · 0 events因此浏览器体验与 docker 部署一致。仓库采用 uv workspace 管理 Python 包引擎packages/engine、服务端services/api、SDKpackages/sdk-python、共享 schemapackages/shared-schemas目录结构规则是packages/是可发布库、services/是常驻服务、apps/是面向用户的 UI、infra/是部署运维详见 docs/revamp/ARCHITECTURE.md。安全哪些能提交哪些绝不能仓库内置了scripts/check-secrets.sh扫描器防止密钥被意外提交。可手动随时运行bash scripts/check-secrets.sh更推荐安装为 git pre-push 钩子cp scripts/check-secrets.sh .git/hooks/pre-push chmod x .git/hooks/pre-push脚本的设计是fail closed宁可误报也不放过以 pre-push 钩子身份运行时只扫描本次推送的 diff手动/CI 运行时扫描全部被 git 追踪的文件。它识别的敏感模式包括 Anthropic / OpenAI / Stripe / Slack / GitHub / AWS / Google API Key 形态、Fernet 密文块ENC:v1:...以及 PEM 私钥块详见 scripts/check-secrets.sh 中的PATTERNS数组。绕过方式有两种整行放行行尾追加# pragma: allow-secret与整文件放行路径写入 scripts/.secrets-allowlist。以下内容按设计永远不会被提交*.db/*.sqliteSQLite 文件可能含加密的敏感数据块.env本地配置*.pem/*.key/credentials.json/aws-credentials*/data/若你绑定挂载过 docker-compose 数据卷完整清单见 .gitignore。架构诚实地讲今天与明天今天两个容器docker compose up实际运行的部署非常紧凑api 容器单个 FastAPI / uvicorn 进程同时承载进程内调度器APScheduler、进程内计算ThreadPoolExecutor、推理运行时以及指向数据卷中 SQLite 文件的 SQLAlchemy 会话。web 容器nginx 托管 React 构建产物并把/api反向代理到 api 容器。nginx 配置infra/docker/nginx.ui.conf的细节值得注意/assets/静态资源缓存 1 年immutable普通/api/代理proxy_read_timeout 300s而/api/v1/runs/单独配置了 3600s 的读写超时与 WebSocket upgrade 头——因为长时 AutoML 运行需要长连接。SPA 路由通过try_files $uri $uri/ /index.html回退。明天七后端槽位架构的核心规则见 docs/revamp/PLATFORM_ARCHITECTURE.md平台接触的每一个外部依赖都必须藏在Protocol之后且至少有两个实现一个用于本地开发一个或多个用于云端。外部依赖指任何非对内存中数据做纯 Python 计算的东西对象存储、关系数据库、任务队列、认证、密钥、通知、计算、缓存等。这条规则保证同一份代码既能靠docker compose up跑在笔记本上也能经 Terraform 跑在 AWS 上选择后端只是配置业务代码永远看不到条件分支。平台规划的七个后端槽位及当前状态槽位关注点本地实现云实现当前状态storage文件 / pickle / 产物LocalFsObjectStoreS3ObjectStore、MinioObjectStore✅ 两者均已实现database关系状态sqlite:///postgresqlpsycopg://任意提供商✅ 均已实现SQLAlchemy 抽象secrets静态加密密钥FernetInDbSecretsManagerBackend、VaultBackend、ParameterStoreBackend⚠ 目前仅 FernetProtocol 未抽取auth校验用户 签发令牌LocalBcryptJwtCognitoBackend、OidcBackend、SamlBackend⚠ 目前仅本地Protocol 未抽取queue跨进程调度作业APSchedulerInProcessSqsBackend、CelerySqsBackend、RedisRqBackend⚠ 目前仅进程内Protocol 未抽取compute在别处跑训练任务ThreadPoolExecutor进程内FargateTaskRunner、BatchJobRunner、K8sJobRunner⚠ 目前仅进程内Protocol 未抽取notifier发送 webhook / 邮件 / Slack 消息WebhookNotifier始终可用SesNotifier、SlackNotifier、SmtpNotifier⚠ 目前仅 webhooksProtocol 部分抽取✅ 已实现、已测试、可通过配置选择⚠ 只有单一实现或尚未抽象出 Protocol。目标形态是单一的Backends容器dataclass启动时由from_config(settings)组装并依赖注入到各 handler测试时注入内存假实现handler 代码永远看不到boto3。演进路线Phase 0 · 本地单进程当前已发布SQLite、文件系统、进程内 worker、DB 内 Fernetdocker compose up即用。Phase 1 · 可插拔后端抽取缺失的 5 个 Protocol本地实现仍为默认默认配置下零行为变化。Phase 2 · AWS 包补齐 S3已完成、SecretsManager、SqsBackend、FargateRunner、SesNotifier交付 infra/terraform/aws。Phase 3 · worker/runtime 拆分把services/api、services/worker、services/deployment-runtime拆成独立进程/容器API 变为无状态 HTTPworker 从队列拉取任务部署运行时独立提供推理解锁水平扩展。Phase 4 · 认证包Cognito OIDC SAMLSSO 成为配置选项。Phase 5 · 多云GCPCloud SQL / GCS / Cloud Run / Pub/Sub与 AzureAzure SQL / Blob / Container Apps / Service Bus。平台也明确列出了不做什么不做 SaaS 版控制平面自托管、客户自带 AWS 账号、Terraform 是边界、不做拖拽式流水线构建器PyCaret 是配置驱动UI 是配置向导而非图编辑器、不做通用编排器无 DAGRun 是原子的Schedule 只是重跑、不做特征存储、不做流式推理Phase 3 再考虑。许可证与延伸阅读PyCaret 4.0 采用双许可证引擎packages/engineMIT任何用途含商用免费。控制平面services/api、apps/web、infraBUSL-1.14 年后变更为 Apache-2.0。组织自托管生产使用在 LICENSE 的 Additional Use Grant 下是允许的被限制的场景是把 PyCaret 本身作为托管 SaaS 出售。引擎 MIT 条款见 LICENSE.engine.txt。继续深入阅读的入口docs/revamp/VISION.md —— 一页产品愿景docs/revamp/PLATFORM_ARCHITECTURE.md —— 可插拔后端架构与缺口矩阵docs/revamp/ARCHITECTURE.md —— 当前代码地图monorepo 布局、路由表、Run 执行链路、数据模型docs/revamp/CONTROL_PLANE_SPEC.md —— 完整功能规格24 节docs/revamp/ROADMAP.md 与 docs/revamp/STATUS.md —— 演进路线与当前进度AGENTS.md —— Agent 协作模式下的完整开发简报需要注意的是4.0 仍是进行中的架构重构版本本文描述的均为当前仓库main分支4.0 线的实际形态若需要稳定生产版本PyPI 上的pycaret 3.4.03.x 线已冻结可用。赞分享【免费下载链接】pycaretOpen-source, low-code AutoML platform for Python. PyCaret 4.0: sklearn-native engine React control plane.项目地址https://gitcode.com/gh_mirrors/py/pycaret点击查看免费下载相关推荐InsForge 自托管部署指南在 AWS EC2 上用 Docker Compose 搭建完整的后端平台InsForge 自托管部署指南在 AWS EC2 上用 Docker Compose 搭建完整的后端平台 本文是一份面向开发者的实战指南讲解如何把 Ins后端前端AI 应用渐进式压缩是如何炼成的icer_compression位平面编码与优先级排序原理解析渐进式压缩是如何炼成的icer_compression位平面编码与优先级排序原理解析 想用几十KB的字节数传输一张512×512的深空照片还要在信号丢失时InsForge 部署指南在 Dokploy 上以 Docker Compose 自架完整後端平台InsForge 部署指南在 Dokploy 上以 Docker Compose 自架完整後端平台 本指南逐步說明如何在 Dokploy 上自架 InsFor后端前端AI 应用上一篇如何高效使用Windows优化神器WinUtil一键提升系统性能的全面指南下一篇串流延迟优化指南普通用户的家庭网络串流设置全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考