ACI:专为AI应用设计的轻量级容器编排框架解析与实践

news2026/4/29 3:33:41
1. 项目概述ACI一个面向AI应用的开源容器化编排框架最近在开源社区里一个名为aipotheosis-labs/aci的项目引起了我的注意。乍一看这个标题可能会觉得有些抽象——“ACI”是什么是某种新的容器技术吗和 Docker、Kubernetes 有什么关系经过一番深入的研究和实际部署测试我发现这其实是一个定位非常精准、设计思路相当巧妙的开源项目。简单来说ACI 是一个专门为 AI 应用特别是大语言模型、AI Agent 等量身定制的轻量级容器化编排框架。它试图解决一个非常具体且日益凸显的痛点如何高效、便捷、低成本地部署和管理那些资源消耗巨大、依赖复杂、且对延迟和吞吐量有苛刻要求的 AI 服务。如果你和我一样经历过在 Kubernetes 上部署一个几十GB的模型需要手动配置 GPU 节点亲和性、处理复杂的存储卷挂载、调试各种 OOM内存溢出和 CUDA 版本不兼容问题你就会明白为什么需要 ACI 这样的工具。Kubernetes 很强大但它是“通用”的其设计哲学是“以不变应万变”。而 AI 应用尤其是推理服务有其独特的模式模型文件巨大、需要特定的硬件加速GPU/TPU、冷启动时间长、请求的突发性高、对批处理batching有特殊需求。用通用的“锤子”去敲这颗特殊的“钉子”虽然也能敲进去但过程往往费时费力且结果未必最优。ACI 的出现就是为了成为那把更趁手的“螺丝刀”。它的核心思想是“以应用为中心”将 AI 应用部署的常见模式、最佳实践和运维经验沉淀为框架本身的能力。开发者只需要关心自己的模型代码和业务逻辑而将资源调度、服务发现、自动扩缩容、监控日志等繁琐的运维工作交给 ACI 来处理。这听起来有点像 Serverless for AI但它更强调对底层基础设施的细粒度控制和标准化避免了某些 Serverless 平台的黑盒化和 vendor lock-in 风险。2. 核心设计理念与架构拆解2.1 为什么是“以应用为中心”传统的容器编排无论是 Docker Compose 还是 Kubernetes其核心抽象是“容器”和“Pod”。你需要告诉编排系统“请运行这个容器镜像给它这么多 CPU 和内存暴露这个端口。” 至于这个容器是跑数据库、Web 服务器还是 AI 模型编排系统并不关心。这种抽象层级对于 AI 应用来说太低了。ACI 则提升了一个抽象层级。它的核心抽象是“AI 应用”。当你定义一个 ACI 应用时你是在声明“我需要一个服务来运行某个 AI 模型例如 LLaMA 3 70B它需要 2 张 A100 80G GPU模型文件从某个 S3 桶加载服务需要支持 HTTP 和 gRPC 协议并且能够根据 QPS每秒查询率自动从 0 扩展到 5 个实例。” ACI 的调度器接收这个声明后会将其翻译成底层容器运行时如 Docker/containerd和资源管理器如 Kubernetes 或直接管理裸金属服务器能理解的具体指令。这种设计带来了几个显著优势声明式配置开发者用 YAML 或高级 DSL领域特定语言描述“想要什么”而不是“如何做到”。配置更简洁意图更清晰。内置最佳实践框架内置了针对 AI 应用的大量优化例如智能的模型缓存与加载支持将大模型预加载到 GPU 显存或高速 NVMe 磁盘减少冷启动时间。动态批处理Dynamic Batching自动将短时间内到达的多个推理请求合并成一个批次进行计算极大提升 GPU 利用率和吞吐量。自适应量化与图优化根据目标硬件自动应用模型量化如 INT8/FP16和计算图优化在不显著损失精度的情况下提升推理速度。降低认知负担开发者无需成为 Kubernetes 专家或运维专家也能部署生产级的 AI 服务。2.2 ACI 的核心组件与工作流ACI 的架构是典型的主从式Master-Worker。我们拆开来看每个核心组件的作用1. ACI Master控制平面这是整个系统的大脑通常以单个进程或高可用集群形式部署。它包含几个关键子模块API Server提供 RESTful 或 gRPC 接口接收用户提交的应用定义App Spec。Scheduler这是最核心的组件。它持续监控所有 Worker 节点的资源状态CPU、内存、GPU 类型和数量、显存等并根据应用定义的需求例如需要 A100 GPU结合调度策略如打散部署、亲和性等决定将应用实例调度到哪个 Worker 上。Controller Manager负责确保系统的实际状态与用户声明的期望状态一致。例如它监控应用的实际副本数如果某个实例挂了它会通知 Scheduler 重新调度一个新的。ETCD/分布式存储用于持久化存储应用定义、任务状态、节点信息等元数据保证控制平面的高可用性。2. ACI Worker数据平面Worker 是实际运行 AI 应用负载的节点。每个 Worker 节点上运行着一个aci-agent守护进程。它的职责包括向 Master 注册和上报资源启动时向 Master 汇报自己的硬件资源清单“我有 4 张 A100512G 内存”。接收并执行任务从 Master 接收创建、更新或销毁容器的指令。管理容器生命周期通过底层的容器运行时如 Docker拉取镜像、创建容器、配置网络和存储。资源隔离与监控确保容器使用的资源特别是 GPU被严格隔离并实时监控容器的资源使用情况GPU 利用率、显存占用、请求延迟等上报给 Master。3. 应用定义App Spec这是用户与 ACI 交互的主要方式。一个典型的 ACI 应用定义 YAML 文件可能长这样apiVersion: aci.ai/v1alpha1 kind: InferenceService metadata: name: llama3-70b-chat spec: # 模型定义 model: name: meta-llama/llama-3-70b-instruct source: huggingface # 支持 Hugging Face, ModelScope, S3, 本地路径等 quantization: awq # 指定量化方式可选 fp16, int8, awq, gptq等 # 计算资源需求 resources: gpu: type: nvidia-a100-80gb # 指定GPU型号 count: 2 # 需要2张卡进行张量并行 cpu: 16 memory: 120Gi # 可以指定更细粒度的需求如GPU显存、NVLink等 # 服务配置 service: type: LoadBalancer # 对外暴露服务的方式 port: 8080 protocol: http # 也支持grpc # 自动扩缩容配置 autoscaling: minReplicas: 0 # 支持缩容到零节省成本 maxReplicas: 5 metrics: - type: qps target: 100 # 当每个实例的QPS达到100时触发扩容 # 运行时配置 runtime: image: aci-runtime/llm-serving:latest # 基础服务镜像 env: - name: MAX_BATCH_SIZE value: 32 - name: MAX_SEQ_LEN value: 4096 # 存储卷用于缓存模型文件 volumes: - name: model-cache mountPath: /var/models size: 200Gi # 声明需要的高速缓存空间这个配置文件清晰地定义了一个完整的 AI 服务从模型来源、硬件需求到服务策略一目了然。ACI 的核心价值就在于它理解这些字段背后的含义并能将其高效、可靠地落实到基础设施上。3. 关键技术细节与实现解析3.1 面向 AI 的智能调度策略ACI 的调度器是其区别于通用编排器的灵魂。它不仅仅是简单地将容器分配到有资源的节点上而是实现了多种针对 AI 工作负载的优化策略。1. 基于硬件特征的调度对于 AI 推理不同的 GPU 型号性能差异巨大。一个为 A100 优化的模型在 V100 上可能效率很低。ACI 的调度器能识别 Worker 节点上 GPU 的具体型号如 A100-80GB-PCIE, A100-80GB-SXM, H100-NVL等甚至更细粒度的属性如是否启用 NVLink、GPU 互联拓扑结构等。当用户申请nvidia-a100-80gb资源时调度器会优先选择拥有该型号 GPU 的节点如果还指定了require-nvlink: true则会进一步筛选出 GPU 间通过 NVLink 高速互联的节点。这对于需要多卡并行模型并行/张量并行的大模型推理至关重要能最大化利用硬件带宽。2. 基于模型亲和性的调度Model Affinity这是 ACI 一个非常实用的特性。大模型动辄几十 GB从远程存储如 S3加载到 GPU 显存可能需要几分钟。如果某个节点上已经缓存了某个模型的权重文件在高速 SSD 或内存中那么将新的实例调度到该节点可以避免重复下载和加载实现“热启动”将启动时间从分钟级缩短到秒级。ACI 的调度器会跟踪每个节点上缓存的模型并在调度时优先考虑模型亲和性。3. 弹性伸缩与混部Burst to Zero Bin PackingAI 服务的流量往往具有突发性。为了节省成本ACI 支持将副本数缩容到 0当长时间没有请求时。当新请求到达时ACI 需要快速通常在几秒到十几秒内从 0 扩容出新的实例。这要求调度和启动流程极度优化。同时为了提升集群整体资源利用率ACI 的调度器会采用“装箱算法”Bin Packing尽可能将多个较小的 AI 应用例如需要单张 T4 GPU 的服务调度到同一个拥有多张 GPU 的节点上填满资源空隙而不是分散部署。3.2 高性能推理运行时集成ACI 本身不直接实现模型推理而是与业界成熟的高性能推理运行时深度集成作为容器的“引擎”。目前主要支持两大类1. 专用推理服务器NVIDIA Triton Inference Server这是目前生态最完善的推理服务器。ACI 可以原生集成 Triton自动为其生成模型仓库配置config.pbtxt管理模型文件的加载与版本并暴露 Triton 的 HTTP/gRPC 接口。Triton 支持的动态批处理、模型集成、多框架后端TensorRT, ONNX Runtime, PyTorch LibTorch等特性都能被 ACI 利用。vLLM / TGI (Text Generation Inference)对于大语言模型LLM的文本生成任务vLLM 和 Hugging Face 的 TGI 在吞吐量和延迟方面有显著优势。ACI 可以封装这些运行时为其配置并行参数张量并行、流水线并行、量化选项并管理其生命周期。2. 自定义运行时对于研究人员或需要使用特殊框架如 JAX, DeepSpeed的用户ACI 允许使用自定义的 Docker 镜像。用户只需要确保镜像内的应用能够监听指定的端口并实现 ACI 定义的健康检查接口即可。ACI 会负责拉起容器、注入环境变量、配置网络并监控其运行状态。实操心得运行时选择在实际项目中我的选择策略是追求极致吞吐量和低延迟的线上服务首选Triton TensorRT组合。TensorRT 对 NVIDIA GPU 的优化是顶级的尤其是对于固定结构的视觉模型。需要花时间做模型转换和精度调优。大语言模型LLMAPI 服务首选vLLM。它的 PagedAttention 技术对显存利用率和吞吐量的提升是革命性的尤其适合高并发场景。对于 Hugging Face 模型库兼容性最好的是TGI。快速原型验证和研究使用自定义 PyTorch 镜像。灵活性最高可以快速集成最新的论文代码但性能通常不是最优。3.3 存储与网络的特化设计存储模型数据的生命周期管理AI 应用的存储需求很特殊需要高速读取巨大的模型文件读多写少且模型版本需要管理。ACI 的存储设计围绕“模型”为中心分层存储支持将模型存储在不同的层级。远程仓库如 Hugging Face Hub、S3、NAS作为唯一可信源。节点级缓存每个 Worker 节点配备高速 NVMe SSD用于缓存从远程仓库拉取的模型文件。ACI 会管理缓存空间采用 LRU最近最少使用等策略进行淘汰。内存/显存预热对于关键服务可以配置“预热”策略在实例启动时就将模型权重加载到 GPU 显存中实现零加载延迟但这会长期占用显存。卷声明如上文 YAML 中的volumes字段用户可以声明一个持久化卷用于缓存模型。这个卷可以被同一个节点上不同版本的应用实例复用。网络低延迟与高吞吐通信服务发现与负载均衡ACI 会为每个InferenceService创建一个稳定的内部域名如llama3-70b-chat.default.svc.aci和一个负载均衡器可以是云厂商的 LB也可以是内部的 Nginx Ingress Controller 或 MetalLB。流量会在健康的实例间自动分发。GPU 直通与 RDMA在高端集群中ACI 支持配置 GPU 的 NVLink 和 NVSwitch以及 RDMA如 InfiniBand网络这对于多卡、多节点分布式训练或极大规模模型推理是必需的。ACI 的调度器在分配任务时会考虑网络的拓扑结构尽可能将需要高速通信的容器调度到网络距离更近的节点上。4. 从零开始部署一个 ACI 集群与实践理论说了这么多我们来动手实操一下。假设我们有一个小型的内部集群包含 3 台服务器其中一台作为 Master两台作为 Worker均配备 NVIDIA GPU。4.1 环境准备与安装Master 节点操作安装依赖确保系统是 Ubuntu 20.04/22.04 或 CentOS 7/8安装 Docker 和kubectlACI 的 CLI 工具aci-cli设计上借鉴了 kubectl 的使用习惯。下载 ACI 发行版从项目的 GitHub Release 页面下载最新版本的aci-master、aci-agent和aci-cli二进制文件。启动 ACI Master# 创建配置目录 sudo mkdir -p /etc/aci sudo mkdir -p /var/lib/aci # 创建Master配置文件 /etc/aci/master.yaml cat EOF | sudo tee /etc/aci/master.yaml apiVersion: v1 kind: MasterConfiguration clusterName: my-ai-cluster apiServer: bindAddress: 0.0.0.0 securePort: 6443 # 可以配置证书文件用于TLS scheduler: policy: binpack # 调度策略binpack装箱或 spread打散 etcd: dataDir: /var/lib/aci/etcd # 如果是生产环境建议配置外部etcd集群地址 EOF # 启动Master服务 sudo ./aci-master --config/etc/aci/master.yaml --v2 安装 CLI 工具sudo cp aci-cli /usr/local/bin/ sudo chmod x /usr/local/bin/aci-cli # 配置CLI访问Master的地址 aci-cli config set-cluster my-cluster --serverhttps://MASTER_IP:6443 aci-cli config set-context my-context --clustermy-cluster aci-cli config use-context my-contextWorker 节点操作安装 NVIDIA 驱动和容器运行时必须安装 NVIDIA 驱动以及支持 GPU 的容器运行时如nvidia-container-toolkit。确保nvidia-smi命令可以正确输出 GPU 信息。启动 ACI Agent# 创建Agent配置文件 /etc/aci/agent.yaml cat EOF | sudo tee /etc/aci/agent.yaml apiVersion: v1 kind: AgentConfiguration masterEndpoint: https://MASTER_IP:6443 nodeName: worker-01 # 每个节点名称需唯一 containerRuntime: docker gpuManagement: nvidia # 启用GPU管理 # 可以配置Pod网络CIDR存储路径等 EOF # 启动Agent服务 sudo ./aci-agent --config/etc/aci/agent.yaml --v2 在 Master 节点上使用aci-cli get nodes命令应该能看到worker-01节点注册上来并显示其 GPU 资源。4.2 部署第一个 AI 推理服务我们以部署一个轻量级的 BERT 文本分类模型为例使用 Triton 作为推理后端。准备模型仓库按照 Triton 的格式准备模型。假设我们有一个 ONNX 格式的 BERT 模型。models/ └── bert_classification ├── 1 │ └── model.onnx └── config.pbtxtconfig.pbtxt内容示例name: bert_classification platform: onnxruntime_onnx max_batch_size: 32 input [ { name: input_ids data_type: TYPE_INT64 dims: [ -1, 128 ] }, { name: attention_mask data_type: TYPE_INT64 dims: [ -1, 128 ] } ] output [ { name: logits data_type: TYPE_FP32 dims: [ -1, 2 ] } ]创建 ACI 应用定义文件bert-service.yamlapiVersion: aci.ai/v1alpha1 kind: InferenceService metadata: name: bert-classification spec: model: name: bert-base-uncased-sst2 source: local localPath: /path/to/your/models/ # 此路径会被挂载到容器内 resources: gpu: type: nvidia-t4 # 根据实际GPU型号修改 count: 1 cpu: 4 memory: 8Gi service: type: ClusterIP port: 8000 protocol: grpc # Triton 主要使用 gRPC runtime: image: nvcr.io/nvidia/tritonserver:23.10-py3 # Triton 官方镜像 command: [tritonserver] args: [--model-repository/models, --grpc-port8000] volumes: - name: model-store hostPath: /path/to/your/models # 宿主机模型路径 mountPath: /models # 容器内路径部署应用aci-cli apply -f bert-service.yaml查看状态aci-cli get inferenceservices aci-cli describe inferenceservice bert-classification # 查看对应的Pod容器实例状态 aci-cli get pods -l appbert-classification测试服务当 Pod 状态变为Running后就可以通过aci-cli获取服务的内网地址或者配置 Ingress 暴露到公网使用 Triton 的 gRPC 客户端进行推理测试。4.3 高级功能自定义指标驱动的自动扩缩容除了基于 QPS 的扩缩容ACI 还支持基于自定义指标例如 GPU 利用率。这对于那些计算密集但请求频率不高的批处理任务非常有用。我们需要部署一个Metrics Adapter来收集 GPU 指标例如使用 NVIDIA DCGM 或 Prometheus Node Exporter NVIDIA GPU Exporter并将指标暴露给 ACI 的监控组件。然后在应用定义中配置spec: service: autoscaling: minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: gpu_utilization # 自定义指标名称 target: averageUtilization: 70 # 当平均GPU利用率超过70%时扩容当 ACI 的 HorizontalPodAutoscaler (HPA) 控制器发现所有实例的平均 GPU 利用率持续高于 70%它就会逐步增加副本数直到利用率降到目标值以下或达到最大副本数。5. 常见问题、排查技巧与最佳实践在实际使用 ACI 的过程中难免会遇到各种问题。下面是我总结的一些常见坑点和解决思路。5.1 部署与启动问题问题1Pod 一直处于Pending状态。排查思路aci-cli describe pod pod-name查看事件Events。最常见的原因是“调度失败”。资源不足事件可能显示Insufficient nvidia.com/gpu。使用aci-cli describe node node-name查看节点的可分配资源确认 GPU 是否被其他应用占满。节点选择器/亲和性不匹配检查应用定义中是否设置了nodeSelector或affinity规则导致没有符合条件的节点。镜像拉取失败事件显示ErrImagePull或ImagePullBackOff。检查镜像名称和标签是否正确以及节点是否有权限拉取私有镜像仓库如需要配置imagePullSecrets。问题2Pod 处于CrashLoopBackOff状态。排查思路aci-cli logs pod-name查看容器日志这是最直接的错误信息来源。常见原因模型加载失败模型文件路径错误、格式不支持、权限不足。确保localPath或远程仓库地址正确且容器内进程有读取权限。运行时依赖缺失例如 Triton 镜像缺少某个后端或自定义镜像缺少 Python 包。需要在构建镜像时确保包含所有依赖。GPU 驱动/CUDA 版本不兼容容器内所需的 CUDA 版本与宿主机 NVIDIA 驱动版本不匹配。确保使用与宿主机驱动兼容的容器镜像。资源限制OOMKilled如果日志突然中断可能是内存或显存溢出。使用aci-cli describe pod查看容器的Last State。如果是OOMKilled需要增加spec.resources.memory或spec.resources.gpu.memory如果框架支持显存限制的请求值。5.2 性能与稳定性问题问题3推理延迟高吞吐量上不去。排查思路与优化检查 GPU 利用率在 Worker 节点上运行nvidia-smi观察 GPU-Util 和 Mem-Usage。如果利用率很低如 30%可能是瓶颈不在 GPU。启用动态批处理这是提升吞吐量的最有效手段。确保在 Triton 的config.pbtxt中设置了合适的max_batch_size并且客户端请求是异步的以便服务器能积累批次。检查输入输出瓶颈如果预处理文本分词、图像解码或后处理在 CPU 上进行且很耗时可能成为瓶颈。考虑使用 GPU 加速的预处理库如 NVIDIA DALI。增加 CPU 资源限制。使用更高效的序列化协议如 Protobuf 代替 JSON。模型优化量化将 FP32 模型量化为 FP16 或 INT8可以大幅减少显存占用和计算时间对精度影响通常可控。使用 TensorRT / ONNX Runtime这些推理引擎会对计算图进行深度优化和内核融合比原生 PyTorch 推理快很多。调整并发数通过压测工具如locust或wrk找到服务的最佳并发连接数。过高的并发可能导致大量请求排队反而增加延迟。问题4服务运行一段时间后崩溃日志显示 CUDA Error。排查思路显存泄漏这是深度学习应用最常见的问题。某些框架或自定义代码可能在推理过程中未正确释放显存。监控显存使用情况看是否随时间推移缓慢增长直至耗尽。解决方法检查代码确保没有在循环中不断创建新的 GPU 张量而未释放尝试定期重启服务实例通过 ACI 的滚动更新功能。GPU 硬件错误虽然罕见但可能发生。检查节点系统日志dmesg或journalctl是否有 GPU 相关的错误报告。可能需要隔离有问题的 GPU 或节点。5.3 运维与监控最佳实践日志集中化不要依赖aci-cli logs查看历史日志。在部署 ACI 集群时就应集成 EFKElasticsearch, Fluentd, Kibana或 Loki Grafana 栈将所有容器、节点和 ACI 自身组件的日志集中收集和索引便于故障排查和审计。监控指标可视化部署 Prometheus Grafana。基础设施监控使用 Node Exporter 收集节点指标CPU、内存、磁盘、网络。GPU 监控使用 NVIDIA DCGM Exporter 或 GPU Exporter 收集详细的 GPU 指标利用率、显存、温度、功耗。应用监控ACI 应暴露应用级别的指标如请求延迟P50, P90, P99、QPS、错误率。这些指标可以用于驱动自动扩缩容也是 SLA服务等级协议评估的关键。在 Grafana 中制作统一看板实时展示集群健康状态、资源利用率和服务性能。使用 GitOps 进行配置管理将所有的 ACI 应用定义 YAML 文件存储在 Git 仓库中。使用 Argo CD 或 Flux 这样的 GitOps 工具监听仓库变化并自动同步到 ACI 集群。这确保了部署的可重复性、版本控制和审计追踪。设置资源配额Resource Quota和限制范围Limit Range在多团队共享的 ACI 集群中必须通过ResourceQuota限制每个命名空间Namespace可以使用的总 GPU、CPU 和内存数量防止单个团队占用所有资源。LimitRange可以为每个容器设置默认的资源请求和限制避免开发者忘记配置而导致资源争夺。做好灾难恢复预案备份 ACI 元数据定期备份 ETCD 数据。模型版本化管理模型文件本身应存储在对象存储如 S3中并做好版本控制。ACI 的应用定义也应指定模型版本便于回滚。设计多区域部署对于关键业务考虑在多个可用区Availability Zone部署 ACI 集群并通过全局负载均衡器分发流量实现高可用。ACI 作为一个新兴项目其生态还在快速发展中。它抓住了 AI 基础设施领域的一个关键缺口提供了一种更专注、更高效的部署和管理范式。虽然它可能无法完全替代成熟的 Kubernetes 在通用工作负载管理上的地位但在 AI 和机器学习这个垂直领域它无疑提供了一个极具吸引力的选择。对于正在被 AI 应用部署的复杂性所困扰的团队花时间评估一下 ACI或许能带来意想不到的效率和性能提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…