监控数据拿不到?教你4种稳定导出Docker容器指标的硬核方案

ONNX模型生产部署全链路:封装、服务与监控实战 机器学习模型部署不是简单导出和API化,而是涉及模型序列化、服务化封装、高并发治理与全栈监控的系统工程。ONNX作为跨框架标准格式,解决了Python依赖锁定与安全风险问题;FastAPI+Docker多阶段构建实现轻量、可复现的服务镜像;而基于Prometheus+Grafana的输入漂移检测、预测熵监控与KS检验,则让模型健康状态可观测、可归因。本文聚焦真实业务场景下的MLOps落地细节,覆盖ONNX导出校验、推理确定性控制、内存预热、服务降级及A/B测试统计归因等关键实践,为从Notebook走向高可 阅读详情

第一章:监控数据拿不到?从根源剖析Docker指标采集盲区

在容器化部署日益普及的今天,Docker已成为服务运行的核心载体。然而,许多运维团队在搭建监控体系时,常遭遇“指标缺失”或“数据延迟”的问题。其根本原因往往并非监控工具本身缺陷,而是对Docker底层资源暴露机制理解不足。

容器隔离性带来的监控挑战

Docker基于cgroup和namespace实现资源隔离,但默认情况下,容器内的监控代理无法直接读取宿主机或其他容器的资源使用数据。例如,docker stats命令依赖守护进程暴露的实时指标,若未启用--metrics-addr选项,Prometheus等外部系统将无法拉取数据。 为开启指标暴露,需在启动Docker daemon时配置:
# 编辑 daemon.json 配置文件
{
  "metrics-addr": "0.0.0.0:9323",
  "experimental": true
}
重启服务后,可通过http://<host>:9323/metrics获取基础指标流。

常见采集盲区与规避策略

  • 容器内进程无法访问宿主机/sys或/proc路径,导致磁盘IO、网络统计失败
  • 未挂载cgroup文件系统,使监控代理无法解析内存与CPU限额
  • 网络模式为none或host时,IP映射混乱造成指标关联错误
推荐在运行容器时显式挂载关键路径:
docker run -d \
  --name app \
  --volume /sys:/sys:ro \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  your/image

核心指标采集对照表

指标类型数据来源采集前提
CPU 使用率cgroup/cpuacct.usage挂载cgroup文件系统
内存用量memory.usage_in_bytes启用memory子系统
网络流量/proc/net/dev共享宿主机网络命名空间或解析container_id

第二章:基于cgroups与proc文件系统的底层指标抓取

2.1 理解Docker容器资源限制的内核机制

Docker 容器的资源限制依赖于 Linux 内核的 cgroups(control groups)机制,它能够对进程组的 CPU、内存、IO 等资源进行精细化控制。
内存限制实现原理
当使用 --memory 参数启动容器时,Docker 会在 cgroups 的 memory 子系统中创建对应控制组,并写入内存上限值。
docker run -m 512m ubuntu bash
上述命令会将容器进程加入到 /sys/fs/cgroup/memory/docker/<id> 目录下,并设置 memory.limit_in_bytes 为 536870912(即 512MB),超出时触发 OOM killer。
CPU 资源控制方式
通过 --cpus 或 --cpu-shares 参数,Docker 调整 cgroups 中 cpu.cfs_period_us 与 cpu.cfs_quota_us 的配比,实现带宽分配。
参数对应 cgroup 文件作用
--cpus=1.5cpu.cfs_quota_us = 150000每 100ms 分配 150ms CPU 时间

2.2 通过/proc和/sys/fs/cgroup手动读取CPU与内存使用

在Linux系统中,`/proc` 和 `/sys/fs/cgroup` 是查看进程资源使用的核心虚拟文件系统。前者提供运行时系统与进程信息,后者则暴露控制组的资源限制与统计。
从/proc读取进程CPU与内存信息
每个进程在 `/proc/[pid]` 下都有详细状态文件。例如,`/proc/self/status` 可查看当前进程的内存摘要:
cat /proc/self/status | grep -E "(VmRSS|VmSize|Cpus_allowed)"
- `VmRSS`:物理内存使用量(单位KB); - `Cpus_allowed`:该进程可运行的CPU核心掩码。
通过cgroup获取容器化资源视图
在cgroup v2环境中,进程的内存使用可通过以下路径获取:
cat /sys/fs/cgroup/cpu.stat
cat /sys/fs/cgroup/memory.current
- `cpu.stat`:包含 usage_usec(CPU使用微秒)、user_usec、system_usec; - `memory.current`:当前内存消耗总量(字节),反映实际使用。 这些接口无需依赖外部工具,适合嵌入轻量监控脚本或调试容器资源边界问题。

2.3 编写轻量脚本实现容器级指标定时采集

在容器化环境中,实时掌握容器资源使用情况至关重要。通过编写轻量级采集脚本,可高效获取CPU、内存、网络等核心指标。
采集脚本设计思路
采用Shell结合docker stats命令,以非侵入方式获取运行时数据。通过定时任务实现周期性采集。
# 定时采集容器指标
#!/bin/bash
INTERVAL=30  # 采集间隔(秒)
docker stats --no-stream --format \
"{{.Container}},{{.CPUPerc}},{{.MemUsage}},{{.NetIO}}" >> /var/log/container_metrics.log
该脚本每30秒执行一次,--no-stream确保单次输出,--format定制字段降低冗余。日志按时间追加,便于后续分析。
部署与调度
利用cron实现自动化调度:
  1. 将脚本保存为collect.sh
  2. 添加定时任务:*/30 * * * * /bin/bash /path/to/collect.sh
  3. 确保日志目录具备写权限

2.4 处理多命名空间隔离带来的数据访问难题

在微服务架构中,多命名空间常用于实现环境或租户隔离,但随之而来的是跨命名空间的数据访问复杂性。
服务发现与权限配置
跨命名空间调用需显式配置服务账号和网络策略。例如,在 Kubernetes 中通过 ServiceAccount 绑定 RBAC 策略:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cross-ns-reader
  namespace: app-prod
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: allow-secrets-read
  namespace: config-shared
roleRef:
  kind: Role
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: cross-ns-reader
  namespace: app-prod
上述配置允许 `app-prod` 命名空间的服务账号读取 `config-shared` 中的敏感配置,实现安全的跨域访问。
数据同步机制
对于频繁访问的共享数据,可采用主动同步策略,结合事件驱动模型减少实时依赖。

2.5 将原始数据标准化为Prometheus可识别格式

在将监控数据接入Prometheus之前,必须将原始指标转换为Prometheus支持的文本格式。Prometheus通过HTTP拉取方式采集指标,要求响应内容符合特定的暴露格式。
数据格式规范
Prometheus识别的格式需满足以下条件:
  • 每行表示一个样本,格式为 metric_name{label=value} value timestamp(时间戳可选)
  • 注释以 # 开头,用于描述指标类型或帮助信息
  • 支持的指标类型包括 counter、gauge、histogram 和 summary
示例输出
# HELP http_requests_total Total number of HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="post",endpoint="/api/v1/users"} 15 1717000000
# HELP cpu_usage_percent Current CPU usage in percent
# TYPE cpu_usage_percent gauge
cpu_usage_percent 78.3
上述代码中,HELP 提供指标说明,TYPE 声明指标类型,后续行为实际采样值。标签(如 method 和 endpoint)用于多维标识,提升查询灵活性。

第三章:利用Docker原生命令与API构建稳定导出通道

3.1 docker stats与inspect命令的性能损耗分析

实时监控的代价:docker stats 的开销机制
docker stats 提供容器实时资源使用情况,但其高频轮询会带来可观测性开销。每次调用均触发守护进程收集 CPU、内存、网络和磁盘 I/O 数据,对系统调用频繁。
# 实时查看所有容器资源占用
docker stats --no-stream
该命令在 --no-stream 模式下仅输出一次,降低持续采样压力,适用于性能敏感场景。
元数据查询的性能影响:inspect 命令剖析
docker inspect 返回容器完整配置与状态,JSON 输出详尽但解析成本高,尤其在批量调用时显著增加 CPU 与内存负载。
  • 单次调用延迟通常在 10~50ms 之间
  • 高频调用可能导致事件循环阻塞
  • 建议缓存结果以减少重复请求
命令平均延迟 (ms)适用频率
docker stats20–100低频或按需
docker inspect10–50中低频

3.2 调用Docker Remote API实现异步指标拉取

通过启用Docker Remote API,可实现对容器运行时指标的异步采集。首先确保Docker Daemon监听在安全的TCP端口,并启用TLS认证以保障通信安全。
API访问配置
启动Docker时需配置远程访问:
dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tlsverify --tlscert=server-cert.pem --tlskey=server-key.pem
该命令使Docker守护进程同时监听Unix域套接字与加密TCP端口,支持远程安全调用。
异步指标采集流程
使用HTTP客户端定期请求/containers/json和/stats接口获取容器状态与实时资源使用数据。采用Go语言实现非阻塞采集示例:
resp, err := http.Get("http://localhost:2376/containers/json?all=1")
if err != nil { /* 处理连接异常 */ }
defer resp.Body.Close()
// 解析返回的JSON列表,提取容器ID用于后续指标拉取
该方式解耦监控系统与容器平台,提升采集稳定性。

3.3 构建高可用的指标中转服务避免单点故障

在分布式监控体系中,指标中转服务承担着数据汇聚与转发的关键职责。为避免单点故障,需构建具备高可用性的中转层。
集群化部署与负载均衡
通过多实例部署并前置负载均衡器(如 Nginx 或 HAProxy),实现流量分发与故障隔离。当某节点宕机时,流量自动转移至健康实例。
健康检查与自动剔除
使用心跳机制定期探测节点状态。以下为基于 Go 的健康检查示例:

func healthCheck(addr string) bool {
    resp, err := http.Get("http://" + addr + "/health")
    if err != nil {
        return false
    }
    defer resp.Body.Close()
    return resp.StatusCode == http.StatusOK
}
该函数向目标地址发起 HTTP 健康检查请求,仅当返回 200 状态码时判定节点存活,用于动态更新负载均衡列表。
数据可靠性保障
  • 启用消息队列缓冲(如 Kafka)防止数据丢失
  • 配置中转节点本地磁盘暂存未发送指标
  • 实现 ACK 确认机制确保数据送达

第四章:集成主流监控工具链实现企业级指标导出

4.1 配置cAdvisor+Prometheus完成全量容器监控

为了实现对容器资源使用情况的全面监控,采用cAdvisor采集底层指标,结合Prometheus进行集中存储与查询是一种高效方案。
部署cAdvisor收集容器指标
cAdvisor自动发现并监控所有运行中的容器,暴露CPU、内存、网络和磁盘I/O等核心指标。通过以下Docker运行命令部署:

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  gcr.io/cadvisor/cadvisor:v0.47.0
该配置将主机关键目录挂载至容器内,使cAdvisor能访问系统与Docker运行时数据,并通过8080端口对外提供/metrics接口。
Prometheus抓取配置
在Prometheus的prometheus.yml中添加job:

- job_name: 'cadvisor'
  scrape_interval: 15s
  static_configs:
    - targets: ['<host-ip>:8080']
Prometheus将周期性拉取cAdvisor暴露的指标,实现对全量容器的持续监控与趋势分析。

4.2 使用Telegraf采集并推送指标至InfluxDB

配置Telegraf数据输入源
Telegraf支持多种输入插件,例如CPU、内存、磁盘等系统指标。以下配置启用CPU和内存采集:

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  fielddrop = ["time_*"]

[[inputs.mem]]
该配置中,percpu表示按核心采集,totalcpu启用总体使用率,fielddrop排除特定字段以减少存储开销。
设置InfluxDB输出目标
指定指标写入的InfluxDB实例:

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "telegraf"
  timeout = "5s"
其中urls为InfluxDB API地址,database为目标数据库,建议提前在InfluxDB中创建。
采集与传输流程

系统指标 → Telegraf输入插件 → 内部处理(可选过滤/聚合) → InfluxDB输出插件 → InfluxDB存储

4.3 基于OpenTelemetry实现统一观测数据导出

在现代分布式系统中,观测数据的统一采集与导出是保障可观察性的核心环节。OpenTelemetry 提供了一套标准化的 API 和 SDK,支持将追踪(Tracing)、指标(Metrics)和日志(Logging)数据以统一格式导出。
数据导出配置示例
import (
    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
    "go.opentelemetry.io/otel/sdk/trace"
)

func setupTraceExporter() (trace.SpanProcessor, error) {
    exporter, err := otlptracehttp.New(
        context.Background(),
        otlptracehttp.WithEndpoint("collector.example.com:4318"),
        otlptracehttp.WithInsecure(),
    )
    if err != nil {
        return nil, err
    }
    return trace.NewBatchSpanProcessor(exporter), nil
}
上述代码配置了通过 HTTP 协议将追踪数据导出至远端 Collector,WithEndpoint 指定接收地址,WithInsecure 表示不使用 TLS 加密,适用于内部网络环境。
导出协议与后端兼容性
协议传输方式典型后端
OTLP/gRPCgRPCJaeger, Tempo
OTLP/HTTPJSON over HTTPZipkin, Prometheus

4.4 对接Grafana实现实时可视化与告警联动

数据源配置与同步机制
通过Prometheus作为中间采集器,将系统监控数据推送至Grafana。在Grafana中添加Prometheus数据源,填写对应URL及认证信息即可完成对接。
{
  "datasources": [
    {
      "name": "Prometheus",
      "type": "prometheus",
      "url": "http://localhost:9090",
      "access": "proxy",
      "isDefault": true
    }
  ]
}
上述配置定义了Grafana连接Prometheus的核心参数,其中access: proxy表示由Grafana代理请求,提升安全性。
告警规则联动
利用Grafana内置告警引擎,可基于图表指标设置阈值触发条件,并通过Webhook通知Alertmanager或企业微信。
  • 创建Dashboard并选择目标面板
  • 进入“Alert”选项卡配置评估条件
  • 设置通知渠道(如邮件、钉钉机器人)

第五章:四种方案对比与生产环境选型建议

方案核心特性对比
方案部署复杂度性能开销安全性适用场景
Nginx反向代理低低中静态资源分发
TLS直连中中高API网关
mTLS双向认证高高极高金融系统
服务网格(Istio)极高高高微服务架构
真实案例分析
某电商平台在双十一大促前评估接入层方案,最终选择Nginx + TLS组合。通过动态上游配置实现灰度发布:
upstream backend {
    server 10.0.1.10:8080 weight=5;
    server 10.0.1.11:8080 weight=1; # 灰度节点
}

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/tls.crt;
    ssl_certificate_key /etc/ssl/tls.key;
    location /api/ {
        proxy_pass http://backend;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}
生产环境选型关键因素
  • 团队对服务网格的运维能力直接影响Istio落地效果
  • 证书管理成本需纳入TLS方案评估,建议集成Cert Manager
  • 高并发场景下,mTLS加密延迟可能影响P99指标超过50ms
  • 必须通过压测验证Nginx负载均衡策略在实际流量下的表现
渐进式演进路径
初始阶段:Nginx反向代理 → 加密需求出现:引入TLS终止 → 微服务拆分:部署Istio边车 → 安全合规升级:启用mTLS白名单
ONNX模型生产部署:封装、服务与监控全链路实践 机器学习模型部署不是简单启动API,而是构建可维护、可观测、可弹性的生产级服务。其核心在于将训练好的模型转化为标准化、跨平台的推理制品(如ONNX),再通过轻量框架(如FastAPI)封装为高并发、强校验的HTTP服务,并配套基础设施、服务性能与模型健康度三层监控体系。ONNX作为开放模型交换格式,解决了Python生态绑定与安全风险问题;而实时数据漂移检测、滚动AUC评估、输入输出契约校验等机制,则保障了模型在真实业务中持续有效。本文聚焦从PyTorch导出、Docker容器化、Kubernetes编排到 阅读详情

相关推荐

ONNX模型生产部署:封装、服务与监控铁三角实战

机器学习模型上线并非开发终点,而是MLOps生命周期的真正起点。从Notebook到生产环境,核心挑战在于模型的可移植性、服务稳定性与可观测性。ONNX作为跨框架模型交换标准,解决了Python生态绑定与安全风险问题;FastAPI+Docker封装实现环境隔离与轻量交付;而基于Prometheus+Grafana的三层监控(基础设施、服务、模型层)则保障了数据漂移、输入异常与预测退化等隐性故障的及时发现。本文聚焦真实业务场景下的ONNX导出验证、API防护设计与模型健康度看板构建,为ML工程师提供可落地的

weixin_30430169的博客 398

生产级机器学习模型部署:ONNX封装、FastAPI服务与K8s监控实战

机器学习模型部署不是简单运行predict(),而是构建可运维、可观测、可降级的工业级服务。其核心在于模型序列化(如ONNX跨框架兼容)、服务化封装(FastAPI+Docker多阶段构建)、并发与资源治理(Gunicorn线程/Worker调优),以及全链路监控(数据漂移检测、SLO黄金指标、业务效果归因)。ONNX作为开放模型交换标准,解决了Python生态绑定与安全风险问题;而生产服务必须通过输入校验、异常隔离、熔断降级等机制保障稳定性。本文聚焦真实场景下的MLOps落地细节,覆盖从模型导出验证、AP

weixin_30357231的博客 512

ONNX模型生产部署:从封装、服务到监控的MLOps实战

机器学习模型上线并非终点,而是MLOps工程挑战的起点。理解模型服务化本质,需把握封装(隔离环境与定义输入输出契约)、服务(高并发、强校验、混沌韧性)和监控(基础设施、逻辑、模型三层立体观测)三大核心原理。其技术价值在于保障模型在真实流量、脏数据、依赖故障等复杂场景下的稳定性、可观测性与可维护性,广泛应用于金融风控、推荐系统、实时预测等关键业务。本文聚焦ONNX格式模型的标准化导出、FastAPI+Docker+Kubernetes生产级封装与部署,并深度融合Prometheus指标体系,覆盖从Notebo

weixin_34406086的博客 408

从零搭建稳定可控的Web测试环境:Docker Compose实战与自动化测试集成

在软件开发和测试领域,环境一致性是保障软件质量、提升交付效率的基石。其核心原理在于通过技术手段消除开发、测试与生产环境之间的差异,避免因环境配置、依赖版本不同导致的“在我机器上好好的”问题。这一实践的技术价值在于,它能显著减少因环境问题引发的缺陷,加速问题定位与修复,并为自动化测试提供稳定可靠的执行平台。在应用场景上,无论是进行功能测试、集成测试,还是执行性能压测和安全扫描,一个隔离、可控且可复现的测试环境都至关重要。本文聚焦于如何利用Docker Compose容器化技术,系统性地构建一个专属的Web测试

weixin_34037173的博客 506

Win11 + Docker + OpenClaw:构建本地化CI/CD工作流的实战方案

容器化部署是现代软件交付的核心范式,其本质是通过镜像封装、运行时隔离与标准化接口,实现环境一致性与可复现性。Docker 作为最主流的容器引擎,依托 Linux 内核特性(如 cgroups、namespaces)提供轻量级虚拟化能力;而 Windows 11 凭借 WSL2 架构深度整合 Linux 内核,使 Docker 在 Windows 上不再依赖模拟层,真正具备生产级稳定性与性能。这一技术组合显著降低了 DevOps 工程师在 Windows 主机上构建可观测、可编排、可调试的自动化工作流门槛。O

weixin_30458043的博客 421

ONNX模型封装与生产级API服务部署实战指南

机器学习模型部署不是简单运行predict(),而是构建可监控、可伸缩、可降级的工业级服务。其核心在于模型序列化标准(如ONNX)与服务化框架(如FastAPI)的协同设计,通过跨平台兼容性保障推理一致性,借助Docker+Kubernetes实现环境隔离与弹性伸缩,并依托Prometheus+Grafana建立覆盖基础设施、服务性能与模型业务指标的三维监控体系。关键技术价值体现在降低运维复杂度、提升线上稳定性、支持灰度发布与A/B测试,广泛应用于金融风控、电商推荐、智能客服等需高可用模型服务的场景。本文聚

weixin_34186128的博客 564

【实践笔记】Telegraf如何采集docker容器性能指标

这里写自定义目录标题问题背景解决过程 问题背景 目标:实现对 docker 容器的性能监控 背景:已部署 GTI(Grafana+Telegraf+Influxdb) 问题:如何让 telegraf 能够采集到 docker 容器的性能指标? 解决过程 已知 telegraf 自带多种插件可用于对多种类型对象的指标采集,查看 /etc/telegraf/telegraf.conf 配置文件能发现配置项 [[inputs.docker]],去掉该项注释并合理进行配置即可。较完整的配置项内容如下: [[inpu

vincentxiaob的博客 2420

ONNX模型生产部署全链路:封装、服务化与监控实战

机器学习模型上线并非终点,而是MLOps工程实践的真正起点。理解模型服务化本质,需从模型序列化原理出发——ONNX作为跨框架、跨语言的开放标准,通过opset版本控制、dynamic_axes动态维度声明和严格校验机制,保障推理一致性;其技术价值在于解耦训练与推理环境,支撑CPU/GPU/边缘多端部署。典型应用场景涵盖电商CTR预测、金融风控API及实时推荐系统,要求服务具备强输入校验、并发控制与熔断降级能力,并依托Prometheus+Grafana构建覆盖基础设施、服务层与模型层(数据漂移、概念漂移、性

weixin_30947043的博客 381

机器学习模型生产部署实战:封装-服务-监控铁三角

机器学习模型部署不是简单导出和API化,而是涉及模型可移植性、服务稳定性与全链路可观测性的系统工程。其核心原理在于通过标准化格式(如ONNX)实现跨环境兼容,依托FastAPI+Docker+Kubernetes构建弹性服务架构,并建立覆盖数据漂移、预测漂移与业务指标的三层监控体系。这一技术路径显著提升模型在真实流量、脏数据和依赖故障下的鲁棒性,广泛应用于推荐系统、实时风控、智能搜索等高可用AI场景。本文聚焦MLOps落地中最关键的封装策略、服务熔断设计与生产级监控实践,直击ONNX导出陷阱、推理延迟突增、

weixin_33801856的博客 578

君正T31x metartc集成测试

metartc为国内杨大侠部分开源的一款用于嵌入式领域webrtc库,它与谷歌官方webrtc相比,编译到君正平台的可执行文件仅有5M即可实现webrtc的通信。1. 目前实现的是基于开源版v5.0-b0版本做的简单修改,官方的好几个版本都多少缺点东西,我这里给整理了一下。目前是局域网连接的webrtc,后续尝试走stun和turn试一下NAT穿越的效果。

fsmpeg的博客 3158

【医学图像分割网络】之Res U-Net网络PyTorch复现

【医学图像分割网络】之Res U-Net网络PyTorch复现 1.内容 U-Net网络算是医学图像分割领域的开山之作,我接触深度学习到现在大概将近大半年时间,看到了很多基于U-Net网络的变体,后续也会继续和大家一起分享学习。这次分享ResNet+U-Net的一个改进版,ResNet本身就是一个十分优秀的backbone,目前应用仍然十分广泛,我们融合进ResNet后,我们就可以使得U-Net进行迁移学习了。 1.将Resnet作为encoder替换U-Net原始结构 2.U-Net提出时间较早,当时还没

qq_39071739的博客 1万+

Ubuntu 18.04下用Metricbeat采集基础设施指标实战指南

基础设施指标(infrastructure metrics)是现代运维可观测性的数据基石,其本质是操作系统内核(如/proc、/sys、cgroup)暴露的底层运行时状态。Metricbeat作为轻量级采集器,通过模块化设计与内存映射等机制,实现低开销、高精度的数据抓取,技术价值在于保障指标‘数据纯度’——即原始性、时效性与结构一致性。它特别适用于混合init体系、老旧内核(如Ubuntu 18.04的systemd 237 + SysV兼容层)及ELK栈集成场景,广泛应用于Java微服务、MySQL、Do

weixin_30384217的博客 430

逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制

本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。

weixin_29323049的博客 707

Gitea仓库目录必须独立挂载:Docker生产部署存储避坑指南

Git服务的仓库存储本质上是高密度小文件集合,其I/O特征与系统盘元数据操作存在天然冲突;Gitea作为自托管Git平台,依赖POSIX语义(如硬链接、原子重命名)实现仓库一致性,而Docker默认将数据卷绑定在/var/lib/docker下,极易引发inode耗尽、IOPS争抢与备份失效;采用独立挂载点(separate volume)通过Linux mount机制实现物理存储隔离,既保障git用户UID权限穿透,又支持xfs文件系统调优(如-i size=512)和在线扩容;该方案广泛适用于云服务器、

502

手把手教你用Ubuntu Base 20.04打造轻量级ARM开发板根文件系统(附常见问题解决)

本文详细介绍了如何基于Ubuntu Base 20.04 LTS构建轻量级ARM开发板根文件系统,涵盖环境准备、镜像制作、跨架构配置、软件包定制及常见问题解决。通过实战指南,开发者可快速掌握ARM架构下的根文件系统构建技巧,优化系统性能并解决部署中的典型问题。

gin88的博客 211

串口调试神器诞生记:我是如何用Cursor+AI自动生成C#上位机的(含VSCode插件清单)

本文详细介绍了如何利用Cursor和AI技术快速开发C#上位机程序,实现高效的串口通讯调试。从开发环境搭建到代码自动生成,再到性能优化和功能增强,全面展示了AI辅助开发在串口调试中的实际应用和显著效率提升。

weixin_28340315的博客 300

Anything LLM 的 Docker 部署实战:从环境配置到生产级优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959878的博客 354

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7318

ONNX模型生产部署实战:封装、服务与监控铁三角

机器学习模型部署不是简单导出为文件,而是构建可维护、可观测、可伸缩的工业级服务。其核心在于将训练好的模型转化为跨平台、安全、确定性的推理制品(如ONNX),再通过轻量API框架(如FastAPI)封装为高并发HTTP服务,并配套覆盖延迟、错误、流量与饱和度的ML专属监控体系。这一过程涉及模型序列化、动态轴定义、输入Schema契约、容器化构建、K8s滚动更新、特征漂移检测等关键技术环节。本文聚焦真实产线中高频踩坑点——如ONNX导出失败、服务冷启动慢、推理随机性、Segfault崩溃及数据漂移误判,提供经2

weixin_30546189的博客 402

RTX6000 PRO BLACKWELL 最优 CUDA 版本选择指南(适配 vLLM/SGLang 大模型推理)

本文针对NVIDIA Blackwell架构RTX6000PRO显卡部署vLLM/SGLang大模型推理引擎时的CUDA版本选择问题,提出专业建议。分析表明,CUDA12.9(需搭配552.06+驱动)是最优选择,因其完全支持BW架构特性,且与vLLM/SGLang最新版本深度适配。文章提供详细的Linux环境部署教程,包括驱动升级、CUDA12.9安装及vLLM/SGLang配置步骤,并指出CUDA13.0目前适配不完善,不推荐新手使用。最后给出常见问题解决方案,强调版本匹配对推理性能和稳定性的重要性。

2501_93651177的博客 681

C#里使用NModbus来创建一个TCP从站服务

摘要:本文介绍了一个用C#实现的Modbus TCP从站服务器,基于.NET Framework 4.6.1开发。代码使用NModbus库创建TcpListener和ModbusSlaveNetwork,支持设置IP地址、端口号和从站ID。服务器实现了数据存储初始化功能(包括线圈和保持寄存器),并提供了启动/停止操作的UI界面和日志记录功能。该解决方案适用于需要调试Modbus TCP协议的场景,特别适合无法升级到更高版本.NET Framework的环境。

大坡3D软件开发 478

生产级机器学习模型服务:封装-服务-监控铁三角实战

机器学习模型部署不是简单导出和API化,而是涉及环境隔离、接口契约、弹性容错与全栈可观测性的系统工程。核心在于将模型从开发态转化为可交付、可运维、可演进的生产制品——ONNX跨框架封装解决兼容性与安全风险,FastAPI+Docker多阶段构建实现轻量可靠服务,而基于Prometheus的三维监控(基础设施/服务/模型层)则让数据漂移、预测分布偏移等隐性风险可量化、可告警。这些实践直击MLOps落地中最易被忽视却最致命的环节:输入校验缺失、并发失控、fallback契约不一致、指标采集失真。本文以真实线上故

weixin_30721077的博客 434

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ONNX模型生产部署实战:封装、服务化与监控全链路指南

机器学习模型上线并非终点,而是MLOps工程挑战的起点。理解模型服务化本质,需从模型序列化原理出发——ONNX作为跨框架标准,解决了Python依赖锁定、安全性和多端部署等核心问题;其导出时的dynamic_axes声明、opset版本控制与数值一致性校验,直接决定服务稳定性。技术价值在于将实验模型转化为可运维、可观测、可降级的工业级API,支撑高并发、低延迟、强容错的线上推理场景。典型应用涵盖金融风控实时评分、电商推荐API、IoT边缘推理等对可靠性要求严苛的业务系统。本文聚焦ONNX在FastAPI+D

anjueci1221的博客 653

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MLOps生产部署实战:模型封装、API服务与全链路监控

机器学习模型从开发到生产并非简单部署,而是涉及模型封装、服务化接口设计与多维监控的系统工程。其核心原理在于通过标准化格式(如ONNX)实现环境隔离与跨平台兼容,借助FastAPI+Pydantic定义严格输入输出契约,并以Prometheus+Grafana构建覆盖数据层、模型层和服务层的可观测体系。该技术路径显著提升模型鲁棒性与运维效率,广泛应用于金融风控、用户增长、智能推荐等高可用业务场景。本文聚焦真实产线中模型‘活下来’的关键实践,涵盖Docker多阶段构建、超时熔断、降级开关、KS漂移检测及K8s灰

weixin_30694389的博客 335

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

生产级机器学习模型部署:封装-服务-监控铁三角实战

机器学习模型部署不是简单导出pkl或启动API,而是涵盖模型封装、高可用服务构建与全链路监控的系统工程。其核心原理在于通过标准化格式(如ONNX)实现环境隔离与跨平台兼容,借助FastAPI+Docker+Kubernetes构建弹性服务,并基于RED原则(延迟、流量、错误)建立可观测性体系。技术价值在于保障模型在真实业务中稳定、可维护、可降级、可追溯;典型应用场景包括推荐系统、风控引擎、智能客服等需7×24小时在线推理的工业级AI服务。本文聚焦ONNX模型封装、异步推理优化与Prometheus/Graf

weixin_33842304的博客 498
上一篇: 揭秘Docker健康检查配置文件:如何让容器应用真正“活”起来
下一篇: 如何在生产环境安全开启Cilium访问日志?5步实现合规审计输出
simcode
博客等级 码龄14年 154粉丝 2026原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值