资讯详情

资讯详情

OpenMed Docker 自托管部署:从构建镜像到生产环境完整实践

OpenMed Docker 自托管部署从构建镜像到生产环境完整实践【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmedOpenMed 是一个本地优先local-first的医疗 AI 隐私脱敏工具提供临床实体识别Clinical NER与 HIPAA PII 去标识化能力完全在设备端运行支持 21 种语言、2,200 医学模型数据永不离开你的网络。本文带你用 Docker 从零完成 OpenMed REST 服务的自托管部署构建镜像、Compose 一键启动、离线加固、健康检查一直讲到 Kubernetes 生产级运行是面向新手到运维的完整 Docker 部署指南。为什么选择 Docker 自托管 OpenMed 医疗数据对隐私极其敏感OpenMed 的设计哲学是患者数据不出内网。通过 Docker 自托管部署你可以100% 离线运行镜像与模型准备好后服务不再需要任何出站网络连接隐私合规默认禁用遥测telemetry、隐私网关与外部模型提供方安全加固官方提供 distroless 无 Shell 镜像、非 root 用户、只读根文件系统弹性扩缩内置/livez、/readyz探针端点和队列指标天然适配 KubernetesOpenMed 的 REST 服务基于 FastAPI提供/pii/deidentify、/pii/extract、/analyze、/ground等接口完整接口列表见 docs/rest-service.md。上图展示了 OpenMed 对合成出院文书Synthetic Discharge Packet的去标识化效果左侧原文中的姓名、MRN、地址、电话等 PII 字段在右侧全部被高亮标注并打码这正是 REST 服务/pii/deidentify接口的核心能力。镜像选择三个官方 Dockerfile OpenMed 在仓库中提供了两套生产镜像定义按需选择镜像文件基础镜像适用场景标准服务镜像deploy/docker/Dockerfilepython:3.11-slim按摘要锁定本地开发、需要 Shell 调试加固 distroless 镜像deploy/docker/Dockerfile.distrolessdistroless/python3-debian12:nonroot生产环境推荐两者的关键差异标准镜像保留 Debian Shell 和apt方便进容器排查问题加固镜像采用多阶段构建最终阶段没有 Shell 和包管理器以固定非 root UID65532运行模型缓存落在可写的/cache卷根文件系统专为--read-only设计 建议本地开发用标准镜像生产部署用 distroless 镜像。一键构建镜像 ️在仓库根目录执行构建。标准镜像只需一行docker build -f deploy/docker/Dockerfile -t openmed:local .构建加固版 distroless 镜像docker build -f deploy/docker/Dockerfile.distroless -t openmed:distroless .构建完成后查看镜像体积docker images openmed --format table {{.Repository}}:{{.Tag}}\t{{.Size}}镜像内部已预装 CPU 版 PyTorch 和[hf,service]依赖EXPOSE 8080暴露 REST 端口并用内置HEALTHCHECK每 30 秒调用一次健康端点。Compose 离线启动自托管最简路径 OpenMed 自带一个离线优先、单服务的 Compose 编排文件 deploy/openmed-compose.yaml是新手上手自托管部署的最快方式。它的默认行为就非常克制只绑定回环地址默认端口映射127.0.0.1:8080:8080不对公网暴露内部隔离网络容器只连接internal: true的 Docker 网络默认无出站路由离线开关全开OPENMED_OFFLINE1、HF_HUB_OFFLINE1、TRANSFORMERS_OFFLINE1模型文件缺失会直接报错而不是偷偷下载安全配置拉满read_only: true只读根文件系统、cap_drop: ALL丢弃全部能力、no-new-privileges、pids_limit: 512、128MB 有界 tmpfs启动分两步。先在联网机器上构建镜像然后把镜像和模型迁移到目标主机# 第 1 步有网环境构建镜像 docker compose -f deploy/openmed-compose.yaml build # 第 2 步离线环境启动不构建、不拉取 docker compose -f deploy/openmed-compose.yaml up -d --no-build验证服务状态docker compose -f deploy/openmed-compose.yaml ps curl --fail http://127.0.0.1:8080/readyz关于存储卷Compose 文件声明了两个命名卷卷挂载点权限用途openmed-cache/cache可写Hugging Face 缓存 OpenMed 数据openmed-models/models只读预置的模型工件如果需要预加载模型设置环境变量OPENMED_SERVICE_PRELOAD_MODELS例如某个模型路径服务启动时会自动加载。详细操作参考官方文档 docs/deploy/self-hosted-compose.md。服务跑起来后官方示例客户端macOS / iOS / Android / Web都可以指向这个本地 REST 端点发起去标识化请求如上图演示输入一段含姓名、社保号、地址的临床记录毫秒级返回带置信度的 PII 实体列表。健康检查与冒烟测试 OpenMed 刻意区分了两个探针端点这也是 Kubernetes 部署的基础/livez进程存活检查liveness/readyz就绪检查readiness只有配置的模型预加载完成后才返回成功优雅停机期间会自动切回未就绪curl http://127.0.0.1:8080/livez curl http://127.0.0.1:8080/readyz传统的/health端点仍然保留用于查看版本与 profile 元数据。如果想跑一次完整的镜像冒烟测试官方测试套件会构建 distroless 镜像、以只读 丢弃能力方式启动、验证两个探针、并发送一条合成的去标识化请求OPENMED_RUN_DISTROLESS_IMAGE_TEST1 \ .venv/bin/python -m pytest tests/integration/test_distroless_image.py -q完整说明见 docs/deploy/hardened-image.md。生产性能参考 ⚡把 OpenMed 部署在 Docker 里能跑出什么性能官方基准测试给出了答案64 条短 PII 文书、3 次热跑取中位数、排除模型加载时间要点批量处理是性能关键batch_size16相比单条处理CPU 批量提速约 3.3 倍MLX 批量提速约 2.2 倍MLX 后端适合 Apple Silicon 节点在 Apple Silicon 上 MLX 比 CPU-PyTorch 快 24–33 倍见 docs/brand/ 中的速度对比图服务层开启批量Helm 部署中可配置config.batching.enabledtrue配合maxSize、maxWaitMs等参数吸收突发流量生产加固与扩缩容 加固要点清单生产部署 distroless 镜像时官方推荐的运行参数Compose 文件已默认配置好--read-only/tmptmpfs根文件系统只读临时文件有界--cap-dropALLno-new-privileges最小权限缓存卷持久化模型下载在重启间复用日志轮转本地日志驱动3 个 10 MiB 文件上限⚠️安全提醒不要把患者数据、凭据放进镜像、缓存或模型卷如需把服务暴露到回环之外的接口请同时配置认证、TLS 和OPENMED_SERVICE_TRUSTED_HOSTS主机白名单保留127.0.0.1健康检查依赖它。KubernetesHelm 图表 HPA规模化部署时使用官方 Helm 图表 deploy/helm/openmed-service/helm upgrade --install openmed-service deploy/helm/openmed-service \ --namespace openmed \ --create-namespace \ --set image.tagv2.3.0图表默认创建运行 REST 服务的Deployment端口 8080、集群内Service、非敏感配置的ConfigMap、挂载模型缓存的PersistentVolumeClaim并自动接好 liveness/livez与 readiness/readyz探针。高负载场景可启用自动扩缩容开启OPENMED_SERVICE_METRICS_ENABLEDtrue后Prometheus 抓取/metrics的队列深度与在途请求数配合 deploy/k8s/hpa.yaml 的参考 HPA 清单队列深度目标 4、在途请求目标 8、CPU 65%实现按实际积压提前扩容。原理与阈值推导见 docs/deploy/autoscaling.md 和 docs/deploy/helm.md。多架构方面官方镜像同时发布linux/amd64与linux/arm64manifest list 会自动为节点选择原生架构详见 docs/deploy/multi-arch.md。常见问题 FAQ ❓Q容器起不来/readyz一直失败先docker compose ps看容器状态再检查模型卷是否已填充、OPENMED_SERVICE_PRELOAD_MODELS指向的路径是否存在。离线模式下缺失模型文件会快速失败而非挂起。Q需要数据库吗不需要。这个部署不含数据库、模型注册中心、遥测收集器服务就绪后无需任何出站连接。Q可以换端口或绑定地址吗可以。设置OPENMED_PORT换本地端口OPENMED_BIND_ADDRESS换绑定接口记得同步配置认证与 TLS。Q本地调试没有 Shell 怎么办distroless 镜像刻意移除了 Shell。调试请用标准镜像deploy/docker/Dockerfile验证通过后再用加固镜像上生产。总结 用 Docker 自托管 OpenMed 的完整路径非常清晰构建docker build选择标准或 distroless 镜像启动deploy/openmed-compose.yaml一键离线拉起回环绑定 内部网络隔离验证/livez、/readyz探针 冒烟测试合成请求加固只读根文件系统、非 root、最小能力、日志轮转扩展Helm 图表部署 KubernetesHPA 按队列深度智能扩容从单机 Compose 到 K8s 集群OpenMed 的 Docker 部署方案让医疗 PII 去标识化服务在完全私有的网络环境中既跑得安全又跑得够快。 延伸阅读docs/deploy/self-hosted-compose.md · docs/deploy/hardened-image.md · docs/deploy/helm.md · docs/rest-service.md【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →